#!/bin/bash

export ROOT_DIR=$HOME/NAMD_BUILD
export LIBRARY_PATH=$LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export C_INCLUDE_PATH=$C_INCLUDE_PATH
export C_COMP=icc
export F_COMP=ifort
export CXX_COMP=icpc
export MPIC_COMP=mpiicc
export MPICXX_COMP=mpiicpc
export MPIF_COMP=mpiifort
export MPIF77_COMP=mpiifort

export LIBRARY_PATH=$ROOT_DIR/common_dependencies/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=$ROOT_DIR/common_dependencies/lib:$LD_LIBRARY_PATH
export PATH=$ROOT_DIR/common_dependencies/bin:$PATH
export C_INCLUDE_PATH=$ROOT_DIR/common_dependencies/include:$C_INCLUDE_PATH

if [ ! -d $ROOT_DIR ]; then
	mkdir -p $ROOT_DIR/common_dependencies
	mkdir -p $ROOT_DIR/logs
fi

cd $ROOT_DIR


if [ ! -f tcl8.5.18-src.tar.gz ]; then
	wget http://downloads.sourceforge.net/project/tcl/Tcl/8.5.18/tcl8.5.18-src.tar.gz?r=&ts=1437718859&use_mirror=liquidtelecom 
fi
if [ ! -f tk8.5.18-src.tar.gz ]; then
	wget http://downloads.sourceforge.net/project/tcl/Tcl/8.5.18/tk8.5.18-src.tar.gz?r=&ts=1437718913&use_mirror=liquidtelecom
fi
if [ ! -f fftw-3.3.4.tar.gz ]; then
	wget http://www.fftw.org/fftw-3.3.4.tar.gz
fi
if [ ! -f NAMD_2.10_Source.tar.gz ]; then
	wget http://www.ks.uiuc.edu/Research/namd/2.10/download/578621/NAMD_2.10_Source.tar.gz
fi
if [ ! -f apoa1.tar.gz ]; then
	wget http://www.ks.uiuc.edu/Research/namd/utilities/apoa1.tar.gz
fi

tar -xzvf tcl8.5.18-src.tar.gz
tar -xzvf tk8.5.18-src.tar.gz
tar -xzvf fftw-3.3.4.tar.gz
tar -xzvf NAMD_2.10_Source.tar.gz


echo "#################| TCL 8.5  |##########################"
if [ ! -f $ROOT_DIR/common_dependencies/lib/libtcl8.5.so ]; then

	cd $ROOT_DIR/tcl8.5.18/unix
	CC=$MPIC_COMP CFLAGS="-fPIC" ./configure --prefix="$ROOT_DIR/common_dependencies" --enable-threads --enable-64bit |tee $ROOT_DIR/logs/tcl_8.5_config.log 
	make| tee $ROOT_DIR/logs/tcl_8.5_make.log 
	make install
fi


echo "#################| TK 8.5  |#########################"
if [ ! -f $ROOT_DIR/common_dependencies/lib/libtk8.5.so ]; then

	cd $ROOT_DIR/tk8.5.18/unix
	CC=$MPIC_COMP CFLAGS="-fPIC" LDFLAGS="-L$ROOT_DIR/common_dependencies/lib" ./configure --prefix="$ROOT_DIR/common_dependencies" --enable-threads --enable-64bit|tee $ROOT_DIR/logs/tk_8.5_config.log
	make|tee $ROOT_DIR/logs/tk_8.5_make.log
	make install
fi
echo "#################| FFTW3 installation |####################"
if [ ! -f $ROOT_DIR/common_dependencies/lib/libfftw3f.a ]; then
	cd $ROOT_DIR/fftw-3.3.4
	sed  -i '13042s/mpicc/mpiicc/' configure
	CC=$MPIC_COMP CXX=$MPICXX_COMP F77=$MPIF77_COMP CFLAGS="-fPIC" FFLAGS="-fPIC" LDFLAGS="-L$ROOT_DIR/common_dependencies/lib" LIBS="-lifcore -lifport" ./configure --prefix=$ROOT_DIR/common_dependencies --enable-openmp --enable-mpi --enable-single|tee $ROOT_DIR/logs/fftw3.3.4_config.log
	make |tee $ROOT_DIR/logs/fftw3.3.4_make.log
	make install
fi
#read namd

echo "################| Charm 6.6 installation |##################"

export MY_CHARM_ARCH=mpi-linux-x86_64

if [ ! -f $ROOT_DIR/NAMD_2.10_Source/charm-6.6.1/$MY_CHARM_ARCH-ifort-mpicxx/bin/charmrun ]; then
	cd $ROOT_DIR/NAMD_2.10_Source
	tar -xvf charm-6.6.1.tar
	cd charm-6.6.1/

	sed -i "s/mpicxx/mpiicpc/g" $ROOT_DIR/NAMD_2.10_Source/charm-6.6.1/smart-build.pl
	export CHARM_CONFIG_FILES=$ROOT_DIR/NAMD_2.10_Source/charm-6.6.1/src/arch/$MY_CHARM_ARCH


	sed -i "/^g++/a mpiicc\) CMK_AMD64=\"-O3 -fPIC\" ;;" $CHARM_CONFIG_FILES/conv-mach.sh
	sed -i "/^CMK_NATIVE_[CC|LD]/ s/gcc/$C_COMP/g" $CHARM_CONFIG_FILES/conv-mach.sh
	sed -i "/^CMK_NATIVE_[CXX|LDXX]/ s/g++/$CXX_COMP/g" $CHARM_CONFIG_FILES/conv-mach.sh
	sed -i "/^CMK_CF90/ s/f95/$F_COMP/g" $CHARM_CONFIG_FILES/conv-mach.sh
	sed -i "s/conv-mach-gfortran.sh/conv-mach-ifort.sh/g" $CHARM_CONFIG_FILES/conv-mach.sh


	sed -i "/^CMK_CF77/a CMK_CF77=\"$MPIF_COMP -auto -fPIC \"" $CHARM_CONFIG_FILES/cc-mpicxx.sh
	sed -i "/^CMK_CF90/a CMK_CF90=\"$MPIF_COMP -auto -fPIC \"" $CHARM_CONFIG_FILES/cc-mpicxx.sh
	sed -i "s/^MPICXX_DEF/MPICXX_DEF=$MPICXX_COMP/g" $CHARM_CONFIG_FILES/cc-mpicxx.sh
	sed -i "s/^MPICC_DEF/MPICC_DEF=$MPIC_COMP/g" $CHARM_CONFIG_FILES/cc-mpicxx.sh


#why mpicxx needed hete?
	MPICXX=$MPICXX_COMP CXX=$CXX_COMP ./build charm++  $MY_CHARM_ARCH mpicxx $F_COMP --with-production --no-shared -O3 -DCMK_OPTIMIZE=1 | tee $ROOT_DIR/logs/charmm6.6_build.log

	cd $MY_CHARM_ARCH-ifort-mpicxx/tests/charm++/megatest
	make pgm|tee $ROOT_DIR/logs/charmm6.6_testmake.log
	mpirun -n 4 ./pgm
	if [ $(echo $?) == "0" ]; then
		echo "CHARM++ installed properly"
	else
		echo "CHARM++:some error occured "
		read namd_err
	fi
fi

echo "#############| NAMD |###############"

export MY_NAMD_ARCH=Linux-x86_64-icc

if [ ! -f $ROOT_DIR/NAMD_2.10_Source/$MY_NAMD_ARCH/namd2 ]; then

	cd $ROOT_DIR/NAMD_2.10_Source
	sed -i  "/^CHARMBASE/c CHARMBASE=$ROOT_DIR/NAMD_2.10_Source/charm-6.6.1" Make.charm
	sed -i  "/^CHARMARCH/c CHARMARCH=mpi-linux-x86_64-ifort-mpicxx" arch/$MY_NAMD_ARCH.arch
	sed -i  "/^FLOATOPTS/c FLOATOPTS=-ip -fno-rtti -no-vec" arch/$MY_NAMD_ARCH.arch
	sed -i  "/^CXXOPTS/c CXXOPTS=-static-intel -O2 \$\(FLOATOPTS\)" arch/$MY_NAMD_ARCH.arch
	sed -i  "/^COPTS/c COPTS=-static-intel -O2 \$\(FLOATOPTS\)" arch/$MY_NAMD_ARCH.arch

	sed -i  "/^FFTDIR/c FFTDIR=$ROOT_DIR/common_dependencies" arch/Linux-x86.fftw3
	sed -i  "/^FFTINCL/c FFTINCL=-I\$\(FFTDIR\)/include" arch/Linux-x86.fftw3
	sed -i  "/^FFTLIB/c FFTLIB=-L\$\(FFTDIR\)/lib -lfftw3" arch/Linux-x86.fftw3
	sed -i  "/^FFTFLAGS/c FFTFLAGS=-DNAMD_FFTW" arch/Linux-x86.fftw3


	sed -i  "/^TCLDIR/c TCLDIR=$ROOT_DIR/common_dependencies" arch/Linux-x86.tcl
	sed -i  "/^TCLLIB/c TCLLIB=-L\$\(TCLDIR\)/lib64 -ltcl8.5 -ldl/c " arch/Linux-x86.tcl
	sed -i  "/^TCLFLAGS/c  TCLFLAGS=-DNAMD_TCL" arch/Linux-x86.tcl

# mpi-linux-x86_64-ifort-mpicxx ??
	./config $MY_NAMD_ARCH --charm-base ./charm-6.6.1 --charm-arch $MY_CHARM_ARCH-ifort-mpicxx  --with-fftw3 --fftw-prefix $ROOT_DIR/common_dependencies  --cxx $MPICXX_COMP --cc $MPIC_COMP --with-tcl  --tcl-prefix $ROOT_DIR/common_dependencies
	cd $MY_NAMD_ARCH
	make VERBOSE=1 | tee $ROOT_DIR/NAMD_make.log
fi
	cd $ROOT_DIR/NAMD_2.10_Source/$MY_NAMD_ARCH/
	cp $ROOT_DIR/apoa1.tar.gz .
	tar -xzvf apoa1.tar.gz
	
	time mpirun -np 1 ./namd2 +ppn 23 +idlepoll ./apoa1/apoa1.namd | tee $ROOT_DIR/namd_with1_procs_23ppn.log
	time mpirun -np 1 ./namd2 ./apoa1/apoa1.namd | tee $ROOT_DIR/namd_with1_procs.log

	time mpirun -np 2 ./namd2 ./apoa1/apoa1.namd | tee $ROOT_DIR/namd_with2_procs.log
	time mpirun -np 4 ./namd2 ./apoa1/apoa1.namd | tee $ROOT_DIR/namd_with4_procs.log
	time mpirun -np 8 ./namd2 ./apoa1/apoa1.namd | tee $ROOT_DIR/namd_with8_procs.log
	time mpirun -np 16 ./namd2 ./apoa1/apoa1.namd | tee $ROOT_DIR/namd_with16_procs.log
	time mpirun -np 23 ./namd2 ./apoa1/apoa1.namd | tee $ROOT_DIR/namd_with23_procs.log
	time mpirun -np 32 ./namd2 ./apoa1/apoa1.namd | tee $ROOT_DIR/namd_with32_procs.log
	time mpirun -np 64 ./namd2 ./apoa1/apoa1.namd | tee $ROOT_DIR/namd_with64_procs.log
# GCC VERSION:
# ./build charm++ net-linux-x86_64
# net-linux-x86_64/
#./build charm++ mpi-linux-x86_64   $MPIC_COMP tcp
# mpi-linux-x86_64


