Compiling SIESTA 3.2 on ARCHER
Instructions for compiling the SIESTA code on ARCHER (Cray XC30, Intel Xeon)
Module setup
Swap to the Intel compiler
module swap PrgEnv-cray PrgEnv-intel
Load the NetCDF and FFTW 3 modules:
module add cray-netcdf module add fftw
Configure the build
Set the compiler commands
export FC=ftn export MPIFC=ftn export FC_SERIAL=ifort
Configure the package:
cd siesta-3.2/Obj sh ../Src/obj_setup.sh
Create an arch.make file in Obj with the following content:
# This file is part of the SIESTA package. # # Copyright (c) Fundacion General Universidad Autonoma de Madrid: # E.Artacho, J.Gale, A.Garcia, J.Junquera, P.Ordejon, D.Sanchez-Portal # and J.M.Soler, 1996- . # # Use of this software constitutes agreement with the full conditions # given in the SIESTA license, as signed by all legitimate users. # SIESTA_ARCH=archer-phase1-cray-xc30-intel-mpi # # For ARCHER Cray XC30 using the Intel Complier. # On ARCHER this is compiled with the Intel compiler modules loaded and # the NetCDF module loaded too. # FC=ftn FPP=fpp FC_ASIS=$(FC) # FFLAGS=-O3 -I$(MKLROOT)/include/intel64/lp64 -I$(MKLROOT)/include FFLAGS_DEBUG= -g -O0 RANLIB=echo COMP_LIBS= # NETCDF_LIBS= NETCDF_INTERFACE= FPPFLAGS_CDF= # KINDS=4 8 MPI_INTERFACE=libmpi_f90.a MPI_LIBS= MPI_INCLUDE=-I. INCFLAGS=-I../Src/MPI/ FPPFLAGS_MPI=-DMPI -DFC_HAVE_FLUSH -DFC_HAVE_ABORT -DCDF # LIBS= $(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a $(MKLROOT)/lib/intel64/libmkl_blacs_intelmpi_lp64.a -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel 64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_sequential.a -Wl,--end-group SYS=nag DEFS= $(DEFS_CDF) $(DEFS_MPI) FPPFLAGS= $(FPPFLAGS_CDF) $(FPPFLAGS_MPI) # # # Important # Compile atom.f and electrostatic.f without optimization. # Make sure that the dependency is explicit, so that these # lines work with VPATH # atom.o: atom.f $(FC) -c $(FFLAGS_DEBUG) $< # electrostatic.o: electrostatic.f $(FC) -c $(FFLAGS_DEBUG) $< # .F.o: $(FPP) $(FPPFLAGS) $< $*.f ; mv $*.f aux_$*.f $(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) -o $*.o aux_$*.f rm -f aux_$*.f .f.o: $(FC) -c $(FFLAGS) $(INCFLAGS) $< .F90.o: $(FPP) $(FPPFLAGS) $< $*.f ; mv $*.f aux_$*.f90 $(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) -o $*.o aux_$*.f90 rm -f aux_$*.f90 .f90.o: $(FC) -c $(FFLAGS) $(INCFLAGS) $< #
Build the package
Then build the package:
make