UPDATE: To deal with basis sets and 'GPOPEN' errors, see bottom of this post
UPDATE2: Because of the basis set issue the code doesn't run in parallel!
UPDATE 3: All issues are solved by -O0 or -O1. The code now works in parallel and you can define basis sets the usual way. Performance-wise? No idea. So you can compile with -O3 or -O2 but the code doesn't read basis sets the intended way, or you use -O1 or -O0 and it works.
THIS WORKS NOW :)
Original post:
I've been wanting to use dalton for a long time, but it's been difficult to compile dalton 2.0, and I didn't realise until a few days ago that there's a newer version.
See
here for a description of how to compile on ROCKS 5.4.3 (i.e. Centos 5.6) which uses gfortran v 4.1. The main difference between compiling on CentOS 5.6 and Debian Wheezy is in how you edit the Makefile.config. More specifically, compile works a whole lot better with -fno-whole-file and -march=native..
Other than that the steps are the same.
In terms of running, there's an issue with the discoverability of the basis sets which I don't really understand. There's a solution to that at the end of the file.
Before you get started you may want to compile ATLAS as shown here:
http://verahill.blogspot.com.au/2012/05/compile-atlas-blas-on-debian-testing.html
Alternatively, you should get the ACML libraries.
NOTE: The compile went without a hitch on my AMD II X3, AMD Phenom II X6 and Intel i5-2400.
My AMF FX 8150 is a trickier story though: it failed to compile with acml libs (gfortran64_fma4_int64) for -O3 and -O2, but compiled with -O1 and -O0. The -O1 binary segfaults though. Never tried the -O0 binary.
WARNING: If you run dalton in parallel it will -- for some reason --
delete your scratch folder when the run is over. The scratch directory is defined in the /opt/dalton/bin/dalton script (TMPDIR)
License:
First go to http://daltonprogram.org/licence/ and fill out the license agreement. Once that's done you'll get an automated email with a license form, which you should print, sign, scan and email to the email address you're given. Once your form has been processed you'll be sent another email with a user name and password. I received my user name and password the next business day.
Go online and download the source file, Dalton2011_release_v0.tgz, and put it in ~/tmp.
Sort out where you want your program to end up
sudo mkdir /share/apps/dalton
sudo chown $USER /share/apps/dalton
mkdir /share/apps/dalton/bin /share/apps/dalton/basis /share/apps/dalton/lsdalton
Next,
cd ~/tmp
tar xvf Dalton2011_release_v0.tgz
cd Dalton2011_release/DALTON
./configure
and answer all the questions:
./configure
------------------------------------------------------------------
Configuring the DALTON Makefile.config and "dalton" run script
------------------------------------------------------------------
INFO: Operating system from 'uname -s' : Linux
INFO: Processor type from 'uname -m' : x86_64
No architecture specified, attempting auto-configuration:
This appears to be a -linux architecture. Is this correct? [Y/n]
--> Installing DALTON on a -linux computer
Note that 64-bit integers are desirable for Cholesky and very large
scale CI, otherwise the most important effect is that some files will be bigger.
If you choose 64-bit integers, be careful that any system library
routines (incl. MPI) also use 64-bit integers!
Do you want 64-bit integers? [y/N] Do you want to install the program in a parallel MPI version? [Y/n]
-->WARNING: Makefiles for MPI architecture are difficult to guess
Please compare the generated Makefile.config with local documentation.
Checking for Fortran compiler ...
from this list: mpif90 mpiifort ifort pgf95 pgf90 gfortran g95
Compiler /usr/bin/mpif90 found, use this compiler? [Y/n]
-->Compiler mpif90 found and accepted.
Is backend compiler gfortran ? [Y/n]
Checking for C compiler ...
from this list: mpicc mpiicc icc ecc pgcc gcc
Compiler /usr/bin/mpicc found, use this compiler? [Y/n]
-->Compiler mpicc found and accepted.
Testing existence of libraries in this order:
libacml.a libmkl.so libmkl_p3.a libatlas.a libblas.a
Directory search list for libraries:
/opt/ATLAS/lib /home/me/tmp/ATLAS/build/lib /lib /usr/local/lib /usr/lib /usr/local/lib/ATLAS /lib64 /usr/lib64 /usr/local/lib64
Do you want to replace this with your own directory search list? [y/N] Found /opt/ATLAS/lib/libatlas.a, use it? [Y/n]
-->The following mathematical library(ies) will be used:
-L/opt/ATLAS/lib -llapack -llapack -lf77blas -latlas
DALTON uses almost 100 Megabytes of static
allocations, in addition to the dynamic allocation.
DALTON has the possibility to reserve an amount of static memory
for storing two-electron integrals in direct and parallel calculations
Storing some or all of the 2-el. integrals in memory will speed up
direct and parallel calculations (and in particular the latter).
NOTE: This will increase the static memory allocation used by DALTON
Would you like to activate the possibility of storing 2-el.int. in memory? [y/N] How many MB to use for storing 2-el. integrals?
-->Program will be installed with 300 MB (39000000 words) used for storing 2-el. integrals
Maximum amount of work memory for dynamic allocations can be changed
at run time with the environment variable WRKMEM (in REAL*8 words = megabytes/8)
or by using the -M option to the run script: "dalton -M mb ..." (in megabytes).
We recommend at least 200 MB work memory,
larger for correlated calculations, but it should for maximum
efficiency NOT exceed available physical memory per CPU in parallel calculations.
How many MB to use as default for work memory (hit return for default of 1000 MB)?
-->Program will be installed with a default work memory of 3900 MB (511000000 words)
-->Current directory is /home/me/tmp/Dalton2011_release/DALTON
Use default ../bin as installation directory for DALTON binaries and scripts? [Y/n] Please enter another installation directory:
-->DALTON executable and script will be placed in /opt/dalton/bin directory
-->Default basis set directory will be /home/me/tmp/Dalton2011_release/DALTON/../basis/
Use this directory as default basis set directory? [Y/n]
Please choose another default basis set directory (must end with /)
-->Default basis set directory will be /opt/dalton/basis/
-->Job specific directories under $SCRATCH/$USER
-->will be used for temporary files when running DALTON
Use SCRATCH=/work as default root scratch space in "dalton" run script? [Y/n] Please enter default root scratch directory:
-->Creating Makefile.config ...
gfortran version 471 prc=x86_64
INFO: Compiling with 32-bit integers.
INFO: Make sure pre-compiled BLAS, MPI etc. libraries are also with 32-bit integers!!!
Proper 64-bit file access detected.
-->Creating the DALTON run-script in /opt/dalton/bin
The configuration of DALTON has finished succesfully.
Check compiler flags etc. in Makefile.config and run "make" to get executable.
which generates Makefile.config. Edit it and
- change the -march to native.
- add -fno-whole-file to avoid internal compiler errors
- change optimisation level to -O1 (O0 is ok, O2 and O3 give GPOPEN problems)
Like this:
ARCH = linux
#
#
CPPFLAGS = -DVAR_GFORTRAN -DSYS_LINUX -DVAR_MFDS -D'INSTALL_WRKMEM=131000000' -D'INSTALL_MMWORK=65000000' -D_FILE_OFFSET_BITS=64 -DVAR_MPI -DGFORTRAN=471 -DIMPLICIT_NONE
F90 = mpif90
CC = mpicc
LOADER = mpif90
RM = rm -f
FFLAGS = -march=native -O1 -ffast-math -funroll-loops -ftree-vectorize -fbacktrace -fno-whole-file
SAFEFFLAGS = -march=native -O1 -ffast-math -funroll-loops -ftree-vectorize -fbacktrace -fno-whole-file
CFLAGS = -march=native -O1 -ffast-math -funroll-loops -ftree-vectorize -std=c99 -DRESTRICT=restrict -DFUNDERSCORE=1
INCLUDES = -I../include
MODULES = -J../modules
LIBS = -L/opt/ATLAS/lib -llapack -llapack -lf77blas -latlas
INSTALLDIR = /opt/dalton/bin
PDPACK_EXTRAS = linpack.o eispack.o gp_zlapack.o gp_dlapack.o
GP_EXTRAS =
AR = ar
ARFLAGS = rvs
# flags for ftnchek on Dalton /hjaaj
CHEKFLAGS = -nopure -nopretty -nocommon -nousage -noarray -notruncation -quiet -noargumants -arguments=number -usage=var-unitialized
# -usage=var-unitialized:arg-const-modified:arg-alias
# -usage=var-unitialized:var-set-unused:arg-unused:arg-const-modified:arg-alias
#
default : dalton linuxparallel.x
SAFE_FFLAGS_for_ifort = $(FFLAGS)
#
# Parallel initialization
#
MPI_INCLUDE_DIR =
MPI_LIB_PATH = -L/usr/lib
MPI_LIB = -lmpi
#
#
# Suffix rules
# hjaaj Oct 04: .g is a "cheat" suffix, for debugging.
# 'make x.g' will create x.o from x.F or x.c with -g debug flag set.
#
.SUFFIXES : .F .F90 .c .o .i .g .s
.F.o:
$(F90) $(INCLUDES) $(MODULES) $(CPPFLAGS) $(FFLAGS) -c $*.F
.F.i:
$(F90) $(INCLUDES) $(MODULES) $(CPPFLAGS) -E $*.F > $*.i
.F.g:
$(F90) $(INCLUDES) $(MODULES) $(CPPFLAGS) $(SAFEFFLAGS) -g -c $*.F
.F.s:
$(F90) $(INCLUDES) $(MODULES) $(CPPFLAGS) $(FFLAGS) -S -g -c $*.F
.F90.o:
$(F90) $(INCLUDES) $(MODULES) $(CPPFLAGS) $(FFLAGS) -c $*.F90
.F90.i:
$(F90) $(INCLUDES) $(MODULES) $(CPPFLAGS) -E $*.F90 > $*.i
make
make install
Now just copy the basis sets and ecp data to the proper location:
cd ../
cp basis/* -R /opt/dalton/basis
and edit your ~/.bashrc;
export PATH=$PATH:/opt/dalton/bin
And you should be good to go.
So far I haven't run all the tests, but
./TEST -dalton /opt/dalton/bin/dalton short
gave
#####################################################################
Summary
#####################################################################
ALL TESTS ENDED PROPERLY!
date and time : Wed Nov 7 11:57:02 EST 2012
GPOPEN errors and how to get around them.
To make the story short:
if you use -O3 or -O2 for some reason Dalton can't find the basis sets if you declare them the normal way (-O0 and -O1 take care of the problem). However, using ATOMBASIS it works.
Here's an example. Typically you'd specify the basis set for a whole molecule in your .mol file:
BASIS
STO-3G
DFT PROPERTIES TEST
This doesn't work with O3
AtomTypes=2 Angstrom
8. 1
O -0.141254 0.0998816 0.00000
1. 2
H 0.589315 0.718039 0.00000
H -0.922641 0.652406 0.00000
but that leads to errors on the debian (but not centos) builds:
0: Directories for basis set searches:
/jobs/dalton:/opt/dalton/basis
MPI node no.: 0
Reason: ERROR (GPOPEN) UPON OPENING A FILE
Node 0: --- SEVERE ERROR, PROGRAM WILL BE ABORTED ---
ERROR (GPOPEN) UPON OPENING A FILE
and
Atomic type no. 1
--------------------
Nuclear charge: 8.00000
Number of symmetry independent centers: 1
Number of basis sets to read; 2
Basis set file used for this atomic type with Z = 8 :
"/opt/dalton/basis/ "
--> ERROR (GPOPEN) UPON TRYING TO OPEN FILE ON UNIT 11
--> with filename /opt/dalton/basis/
--> IOSTAT ERROR CODE RETURNED 21
QTRACE dump of internal trace stack
========================
level module
========================
7 GPOPEN
6 BASLIB
5 READ_MOL
4 READIN
3 HERMIT
2 DALTON
1 DALTON main
whereas
ATOMBASIS
DFT PROPERTIES TEST
This works with O3
AtomTypes=2 Angstrom
8. 1 basis=STO-3G
O -0.141254 0.0998816 0.00000
1. 2 basis=STO-3G
H 0.589315 0.718039 0.00000
H -0.922641 0.652406 0.00000
works and gives
0: Directories for basis set searches:
/opt/dalton/basis:/opt/dalton/basis
NOTE: 1 informational messages have been issued.
Check output, result, and error files for "INFO".
and a normal exit:
CPU time statistics for ABACUS
------------------------------
LINRES 00:00:02 77 %
TOTAL 00:00:03 100 %
>>>> Total CPU time used in ABACUS: 3.21 seconds
>>>> Total wall time used in ABACUS: 3.22 seconds
.-------------------------------------------.
| End of Static Property Section (ABACUS) - |
`-------------------------------------------'
>>>> Total CPU time used in DALTON: 6.04 seconds
>>>> Total wall time used in DALTON: 6.06 seconds
Date and time (Linux) : Tue Nov 6 14:54:24 2012
Host name : beryllium