#!/bin/bash

nCPU=16

SCRIPTDir=$TkPerlDir/VASP/script
VASPDir=$TkPerlDir/VASP
VASPCMD="/usr/bin/perl $VASPDir/VASP.pl"
ConvergenceCMD="/usr/bin/perl $VASPDir/Convergence.pl"

BaseDir=`pwd`
TemplateDir=`pwd`
VASPCommand=./DoVASP.sh
#VASPCommand=./Convergence.sh
#VASPCommand=./ConvergedDFT.sh

# Set SkipIfDirectoryExists=1 if you do not want to repeat finished tasks
SkipIfDirectoryExists=0

CIFList=*.cif

#============================
# Global parameters
#============================
nCPU=16

CIFFile=auto
SpinPolarized=No
UseConventionalCell=No
UseRecommendedPOTCAR=0
Functional=PAW_PBE54
#Functional=PAW_LDA54

ALGO=All
Precision=High
EDIFF=1.0e-4
EDIFFG=1.0e-3
Options="--Param:LREAL=Auto"

GammaOnly=0
ISMEAR=-5
SIGMA=0.001

PStress=0.0
BandKPoints1=File
BandKPoints2=GY
BandKPoints3=GZ

DoSendMail=0
MakeFilesFromCIF=1
BackUpOriginal=0
DoMD=0
DoVCRelaxRough=0
DoVCRelax=0
ChangeNBANDS=0
ChangeNELECT=0
DoDFTSCF=1
if [ "$HybridFunctional" = "" ]; then
	DoDFTSCF=0
fi
DoSCF=1
CalculateDOS=0
CalculateBand=0
CalculateElectronDensity=0
CalculatePhonon=0
DoPhonopy=0
CalculateIR=0
CalculateRaman=0
MakeSummary=1
DeleteExtraFiles=1
DeleteLargeFiles=1

ENCUTEPS=0.010
kPointEPS=0.010
NBANDSEPS=0.010

CheckaK=1
nkx2=1
nky2=1
nkz2=1
CheckENCUT=1
CheckNBANDS=1

#============================
# Functions
#============================
function ModifyScript
{
	local Template=$1
	local OutFile=$2
	local Options=$3
	local nkx=$4
	local nky=$5
	local nkz=$6
	local ENCUT=$7
	local NBANDS=$8

	sed \
	    -e "s/^nCPU=.*$/nCPU=$nCPU/g" \
	    -e "s/^CIFFile=.*$/CIFFile=$CIFFile/g" \
	    -e "s/^SpinPolarized=.*$/SpinPolarized=$SpinPolarized/g" \
	    -e "s/^UseConventionalCell=.*$/UseConventionalCell=$UseConventionalCell/g" \
	    -e "s/^UseRecommendedPOTCAR=.*$/UseRecommendedPOTCAR=$UseRecommendedPOTCAR/g" \
	    -e "s/^Functional=.*$/Functional=$Functional/g" \
	    -e "s/^HybridFunctional=.*$/HybridFunctional=/g" \
	    -e "s/^ALGOCommon=.*$/ALGOCommon=$ALGO/g" \
	    -e "s/^PrecisionCommon=.*$/PrecisionCommon=$Precision/g" \
	    -e "s/^EDIFF=.*$/EDIFF=$EDIFF/g" \
	    -e "s/^EDIFFG=.*$/EDIFFG=$EDIFFG/g" \
	    -e "s/^GammaOnlyCommon=.*$/GammaOnlyCommon=$GammaOnly/g" \
	    -e "s/^aKProductCommon=.*$/aKProductCommon=fix:$nkx,$nky,$nkz/g" \
	    -e "s/^ISMEARCommon=.*$/ISMEARCommon=$ISMEAR/g" \
	    -e "s/^SIGMACommon=.*$/SIGMACommon=$SIGMA/g" \
	    -e "s/^PStress=.*$/PStress=$PStress/g" \
	    -e "s/^BandKPoints1Common=.*$/BandKPoints1Common=$BandKPoints1/g" \
	    -e "s/^BandKPoints1=.*$/BandKPoints1=$BandKPoints1/g" \
	    -e "s/^BandKPoints2=.*$/BandKPoints2=$BandKPoints2/g" \
	    -e "s/^BandKPoints3=.*$/BandKPoints3=$BandKPoints3/g" \
	    -e "s/^DoSendMail=.*$/DoSendMail=$DoSendMail/g" \
	    -e "s/^MakeFilesFromCIF=.*$/MakeFilesFromCIF=$MakeFilesFromCIF/g" \
	    -e "s/^BackUpOriginal=.*$/BackUpOriginal=$BackUpOriginal/g" \
	    -e "s/^DoMD=.*$/DoMD=$DoMD/g" \
	    -e "s/^DoVCRelaxRough=.*$/DoVCRelaxRough=$DoVCRelaxRough/g" \
	    -e "s/^DoVCRelax=.*$/DoVCRelax=$DoVCRelax/g" \
	    -e "s/^ChangeNBANDS=.*$/ChangeNBANDS=$ChangeNBANDS/g" \
	    -e "s/^ChangeNELECT=.*$/ChangeNELECT=$ChangeNELECT/g" \
	    -e "s/^DoDFTSCF=.*$/DoDFTSCF=$DoDFTSCF/g" \
	    -e "s/^DoSCF=.*$/DoSCF=$DoSCF/g" \
	    -e "s/^CalculateDOS=.*$/CalculateDOS=$CalculateDOS/g" \
	    -e "s/^CalculateBand=.*$/CalculateBand=$CalculateBand/g" \
	    -e "s/^CalculateElectronDensity=.*$/CalculateElectronDensity=$CalculateElectronDensity/g" \
	    -e "s/^CalculatePhonon=.*$/CalculatePhonon=$CalculatePhonon/g" \
	    -e "s/^DoPhonopy=.*$/DoPhonopy=$DoPhonopy/g" \
	    -e "s/^CalculateIR=.*$/CalculateIR=$CalculateIR/g" \
	    -e "s/^CalculateRaman=.*$/CalculateRaman=$CalculateRaman/g" \
	    -e "s/^DeleteExtraFiles=.*$/DeleteExtraFiles=$DeleteExtraFiles/g" \
	    -e "s/^DeleteLargeFiles=.*$/DeleteLargeFiles=$DeleteLargeFiles/g" \
	    -e "s/^AdditionalParameters=.*$/AdditionalParameters=\"$Options\"/g" \
	    -e "s/^ENCUTEPS=.*$/ENCUTEPS=$ENCUTEPS/g" \
	    -e "s/^kPointEPS=.*$/kPointEPS=$kPointEPS/g" \
	    -e "s/^NBANDSEPS=.*$/NBANDSEPS=$NBANDSEPS/g" \
	    -e "s/^CheckaK=.*$/CheckaK=$CheckaK/g" \
	    -e "s/^nkx2=.*$/nkx2=$nkx2/g" \
	    -e "s/^nky2=.*$/nky2=$nky2/g" \
	    -e "s/^nkz2=.*$/nkz2=$nkz2/g" \
	    -e "s/^CheckENCUT=.*$/CheckENCUT=$CheckENCUT/g" \
	    -e "s/^CheckNBANDS=.*$/CheckNBANDS=$CheckNBANDS/g" \
	    	$Template > $OutFile
}

function SendMail
{
	local EMail=$1
	local SMTPServer=$2
	local MailerName=$3
	local Domain=$4
	local From=$5
	local Title=$6
	local Subject=$7

	if [ "$DoSendMail" = "1" -a "$EMail" != "" ]; then
		echo ' '
		echo '================================================================'
		echo "  Send notification e-mail to [$EMail]"
		echo '================================================================'
		perl $TkPerlDir/Mail/SendMail.pl --SMTPServer=$SMTPServer \
						 --MailerName=$MailerName --Domain=$Domain \
						 --WorkDir=`pwd` --HostName="$HostName" \
						 --To=$EMail --From=$From \
						 --Title=$Title --Subject="$Subject"
	fi
}

function PrintError()
{
	local Message1=$1
	local Message2=$2
	local DoExit=$3
	
	echo " "
	echo "Error: $Message1"
	echo $Message2

	if [ "$DoExit" = "1" ]; then
	  echo Stop.
	  exit
	fi
	
	return $DoExit
}

#===========================
# Perform ConvergedDFT.sh
#===========================
OriginalDir=`pwd`

PrevCIF=
for CIF in $CIFList
do
	echo "for $CIF"
	WorkDir=${CIF%%.*}
	echo Working in $WorkDir...

	if [ -f STOP.`hostname` ]; then
		exit -1
	fi

	if [ "$SkipIfDirectoryExists" = "1" -a -d $WorkDir ]; then
		echo [$WorkDir] exists.
		echo Skip.
		continue
	fi

	mkdir $WorkDir
	cp $OriginalDir/{$CIF,*.sh,hosts,*.klist,*.KPOINTS} $WorkDir

	ModifyScript "$OriginalDir/$VASPCommand" "$WorkDir/$VASPCommand" \
			"$Options" "" "" ""

	chmod +x $WorkDir/*.sh

	cd $WorkDir
	echo === Working in \"`pwd`\"
	echo === Files in \"$wd\"
	ls

	echo ''
	echo === Execute [$VASPCommand]
	$VASPCommand

	echo ''
	echo === Exit to \"$OriginalDir\"
	cd $OriginalDir

	echo ''
	echo ''

	PrevDir=$WorkDir
done

#===========================
# Post processors
#===========================
#$SCRIPTDir/MergePositionsInCIFs.pl --Positions=$iSite 0000.last/SCF MergedCIF.cif
#$SCRIPTDir/MakeSummaryCSV2.pl --Positions=$iSite --AtomType=$AtomType
$SCRIPTDir/MakeSummaryCSV.pl TotalEnergy.csv .

#rm $HistoryFile
#for Template in $TemplateList
#do
#	$AddMDHistoryCMD $HistoryFile $Template
#done
