#!/bin/bash

SCRIPTDir=`pwd`/script
VASPDir=$TkPerlDir/VASP
CMD="/usr/bin/perl $VASPDir/VASP.pl"
AddMDHistoryCMD="/usr/bin/perl $SCRIPTDir/AddMDHistory.pl"
VASPCommand=./DoVASP.sh

OriginalDir=`pwd`
TemplateDir=`pwd`/Template
HistoryFile=History.csv

post=

nMaxIter=20
a=12.8
c=6.7

#===========================
# Calculate all
#===========================
PrevDir=

OriginalDir=`pwd`

rm POSCAR.next POSCAR
rm TotalEnergy.csv

echo "	sed -e "s/{c}/$c/g" -e "s/{a}/$a/g" $TemplateDir/POSCAR > POSCAR"
sed -e "s/{c}/$c/g" \
    -e "s/{a}/$a/g" \
    $TemplateDir/POSCAR > $OriginalDir/POSCAR

#perl Relax.pl --Action=init --Parameters=$a,$a,$c $OriginalDir/POSCAR.init $OriginalDir/POSCAR
perl Relax.pl --Action=minimize --Parameters=$a,$a,$c $OriginalDir/POSCAR.init $OriginalDir/POSCAR
ReturnCode=$?
echo ''
#echo return code=$ReturnCode
if [ "$ReturnCode" == "2" ]; then
	echo return code $ReturnCode: Next c will be given by one data. Continue
elif [ "$ReturnCode" == "3" ]; then
	echo return code $ReturnCode: Next c will be given by extrapolating two data. Continue
elif [ "$ReturnCode" == "4" ]; then
	echo return code $ReturnCode: No valid E is given. Initialize and continue.
elif [ "$ReturnCode" == "1" ]; then
	echo return code $ReturnCode: Not converged. Continue
elif [ "$ReturnCode" == "0" ]; then
	echo return code $ReturnCode: Converged
	exit
else
	echo Invalid return code $ReturnCode. Exit
	exit
fi

for i in $(seq 1 $nMaxIter)
do
	WorkDir=$i
	echo Working in $WorkDir...

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

	if [ -d $WorkDir ]; then
		echo [$WorkDir] exists.
		echo Skip.
		continue
	fi

	mkdir $WorkDir
	cp $TemplateDir/{*.sh,hosts,INCAR,KPOINTS,POTCAR} $WorkDir
	cp $OriginalDir/POSCAR $WorkDir
#echo ==
#read INPUT
	chmod +x $WorkDir/DoVASP.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
	
	chdir $OriginalDir
	perl Relax.pl --Action=minimize --Parameters=$a,$a,$c $WorkDir/POSCAR $WorkDir/POSCAR.next
	ReturnCode=$?
	echo ''
#	echo return code=$ReturnCode
	if [ "$ReturnCode" == "2" ]; then
		echo return code $ReturnCode: Next c will be given by one data. Continue
	elif [ "$ReturnCode" == "3" ]; then
		echo return code $ReturnCode: Next c will be given by extrapolating two data. Continue
	elif [ "$ReturnCode" == "4" ]; then
		echo return code $ReturnCode: No valid E is given. Terminate.
		exit
	elif [ "$ReturnCode" == "1" ]; then
		echo return code $ReturnCode: Not converged. Continue
	elif [ "$ReturnCode" == "0" ]; then
		echo return code $ReturnCode: Converged
		exit
	else
		echo Invalid return code $ReturnCode. Exit
		exit
	fi
	
	echo ''
	echo rm POSCAR POSCAR.new
	rm POSCAR POSCAR.new
	echo cp $WorkDir/POSCAR.next $OriginalDir/POSCAR
	cp $WorkDir/POSCAR.next $OriginalDir/POSCAR
done


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

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

#perl Relax.pl --Action=inf
perl Relax.pl --Action=summarize --Parameters=$a,$a,$c