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 :)
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)
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
cd ~/tmp tar xvf Dalton2011_release_v0.tgz cd Dalton2011_release/DALTON ./configure
and answer all the questions:
------------------------------------------------------------------ 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)
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;
And you should be good to go.
So far I haven't run all the tests, but
./TEST -dalton /opt/dalton/bin/dalton short
##################################################################### 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:
and0: 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
whereasAtomic 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
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