#
#Download NAMD and extract it, place script in the NAMD directory and run it.
#Go end get some Coffee ;-) or do other important word!

#
#Download FFTW to NAMD dir
wget http://www.ks.uiuc.edu/Research/namd/libraries/fftw-linux-x86_64.tar.gz
#unpack
tar -xzf fftw-linux-x86_64.tar.gz
#rename
mv linux-x86_64 fftw

#Download TCL to NAMD dir
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl-linux-x86_64.tar.gz
#unpack
tar -xzf tcl-linux-x86_64.tar.gz
#rename
mv linux-x86_64 tcl

#Download charm-6.1.2
wget http://charm.cs.uiuc.edu/distrib/charm-6.1.2_src.tar.gz
#unpack
tar -xzf charm-6.1.2_src.tar.gz
cd charm-6.1.2

#Set some environmental vars:
module load intel/compiler/64/11.0/083

#FLAGS="-O3 -xO"
FLAGS=""
export CFLAGS=${FLAGS}
export CXXFLAGS=${FLAGS}
export FFLAGS=${FLAGS}
export FCLAGS=${FLAGS}

#CHARM_FLAGS="-O3 -xO -DCMK_OPTIMIZE" #My choice
CHARM_FLAGS="-O2 -DCMK_OPTIMIZE" #Charm Default


############################
## Without MVAPICH support
############################
#single-threaded
./build charm++ net-linux-x86_64 icc -j8 ${CHARM_FLAGS}
#multicore(single node only)
./build charm++ multicore-linux64 icc -j8 ${CHARM_FLAGS}
#SMP
./build charm++ net-linux-x86_64 icc smp -j8 ${CHARM_FLAGS}
#POSIX Shared Memory
./build charm++ net-linux-x86_64 icc pxshm -j8 ${CHARM_FLAGS}

#######################################
## With buildin OpenFabrics/IB support
#######################################
#single-threaded
./build charm++ net-linux-x86_64 icc ibverbs -j8 ${CHARM_FLAGS}
#multicore(single node only) same as above
#./build charm++ net-linux-x86_64 icc ibverbs -j8 ${CHARM_FLAGS}
#SMP
./build charm++ net-linux-x86_64 icc smp ibverbs -j8 ${CHARM_FLAGS}
#POSIX
./build charm++ net-linux-x86_64 icc pxshm ibverbs -j8 ${CHARM_FLAGS}

#########################################
#Compile CHARM with MVAPICH1 support:
##########################################
module load mvapich/intel/64/1.1
#single-threaded
./build charm++ mpi-linux-x86_64 mpicxx -j8 ${CHARM_FLAGS}
mv mpi-linux-x86_64-mpicxx mpi-linux-x86_64-mpicxx1
#multicore(single node only) (Same as sindle-threaded)
#./build charm++ mpi-linux-x86_64 mpicxx -j8 ${CHARM_FLAGS}
#SMP
./build charm++ mpi-linux-x86_64 smp mpicxx -j8 ${CHARM_FLAGS}
mv mpi-linux-x86_64-smp-mpicxx mpi-linux-x86_64-smp-mpicxx1
#POSIX Shared Memory (Error> option: pxshm is not supported in this version!)
#./build charm++ mpi-linux-x86_64 pxshm mpicxx -j8 ${CHARM_FLAGS}
module rm mvapich/intel/64/1.1


######################################
#Compile CHARM with MVAPICH2 support:
######################################
module load mvapich2/intel/64/1.2
#single-threaded
./build charm++ mpi-linux-x86_64 mpicxx -j8 ${CHARM_FLAGS}
mv mpi-linux-x86_64-mpicxx mpi-linux-x86_64-mpicxx1.2
#multicore(single node only) (Same as sindle-threaded)
#./build charm++ mpi-linux-x86_64 mpicxx -j8 ${CHARM_FLAGS}
#SMP
./build charm++ mpi-linux-x86_64 smp mpicxx -j8 ${CHARM_FLAGS}
mv mpi-linux-x86_64-smp-mpicxx mpi-linux-x86_64-smp-mpicxx1.2
#POSIX Shared Memory (Error> option: pxshm is not supported in this version!)
#./build charm++ mpi-linux-x86_64 pxshm mpicxx -j8 ${CHARM_FLAGS}
module rm mvapich2/intel/64/1.2

cd ..

################
#Compile NAMD2
################
#Remove -static-libcxa cause icc complains it is not supported.
#sed -e 's/-static-libcxa//g' -i arch/Linux-x86_64-icc.arch
#Add some custom CFLAGS
#sed -e 's/-O2/-O3 -xO/g' -i arch/Linux-x86_64-icc.arch

#Without MPIsupport
for i in net-linux-x86_64-icc net-linux-x86_64-pxshm-icc net-linux-x86_64-smp-icc multicore-linux64-icc net-linux-x86_64-ibverbs ; do
	./config Linux-x86_64-icc.${i} --arch-suffix ${i} --charm-arch ${i} --charm-base charm-6.1.2
	cd Linux-x86_64-icc.${i}
	make -j8
	cd ..
done

#With native OpenFabrics/IB support
for i in net-linux-x86_64-ibverbs-icc net-linux-x86_64-ibverbs-smp-icc ; do
	./config Linux-x86_64-icc.${i} --arch-suffix ${i} --charm-arch ${i} --charm-base charm-6.1.2
	cd Linux-x86_64-icc.${i}
	make -j8
	cd ..
done

#With MVAPICH1 support
module load mvapich/intel/64/1.1
for i in mpi-linux-x86_64-mpicxx1 mpi-linux-x86_64-smp-mpicxx1.1 ; do
	./config Linux-x86_64-icc.${i} --arch-suffix ${i} --charm-arch ${i} --charm-base charm-6.1.2
	cd Linux-x86_64-icc.${i}
	make -j8
	cd ..
done
module rm mvapich/intel/64/1.1

#With MVAPICH2 support
module load mvapich2/intel/64/1.2
for i in mpi-linux-x86_64-mpicxx2 mpi-linux-x86_64-smp-mpicxx1.2 ; do
	./config Linux-x86_64-icc.${i} --arch-suffix ${i} --charm-arch ${i} --charm-base charm-6.1.2
	cd Linux-x86_64-icc.${i}
	make -j8
	cd ..
done
module rm mvapich2/intel/64/1.2
