#!/bin/bash

# Define programs
rsysd=perl $HOME/bin/Perl/rsys/rsysdaemon.pl

nCPU=16
nCPUForMKL=1
nCPUForMKLDOS=16
MKL_NUM_THREADS=1
#MKL_NUM_THREADS=$nCPU
MPIParams="--Param:NPAR=4 --Param:LPLANE=.TRUE."
#MPIParams="--Param:NPAR=$nCPU --Param:LPLANE=.TRUE."
#MPIParams=

#VASP="$HOME/vasp/vasp"
#VASP="$HOME/vasp5/vasp5"
#VASP="/opt/intel/impi/3.0/bin64/mpirun -np $nCPU $HOME/vasp4p/vasp"
#VASP="/opt/intel/impi/3.0/bin64/mpirun -np $nCPU $HOME/vasp5p/vasp5p"
##VASP="bsub -n $nCPU $LSF_BINDIR/openmpi_wrapper -np $nCPU vasp"
#VASP="mpirun -np $nCPU /usr/local/VASP-5.3.2/bin/vasp"
#VASP="mpirun -np $nCPU /usr/local/VASP-5.3.3-29Jan2013/bin/vasp"
#VASP="mpirun -machinefile hosts -np $nCPU /usr/local/VASP-5.3.3-29Jan2013/bin/vasp"
VASP="mpirun -machinefile hosts -np $nCPU /usr/local/VASP-5.3.5/bin/vasp"
#VASP="mpirun -machinefile hosts -np $nCPU vasp"

#VASPDOS=$VASP
#VASPDOS="mpirun -machinefile hosts -np 1 /usr/local/VASP-5.3.3-29Jan2013/bin/vasp"
#VASPDOS="mpirun -machinefile hosts -np 1 /usr/local/VASP-5.3.5/bin/vasp"
VASPDOS="mpirun -machinefile hosts -np 1 vasp"
#VASPDOS="/usr/local/VASP-5.3.2/bin/vasp"
#VASPDOS="/usr/local/VASP-5.3.3-29Jan2013/bin/vasp"
#VASPDOS="mpirun -np $nCPU /usr/local/VASP-5.3.3-29Jan2013/bin/vasp"

TEE=$HOME/bin/ktee
#MXDFileConv=$HOME/bin/MXDFileConv.exe
#	$MXDFileConv --Action=VASPConvCONTCAR --DBDir=${HOME}/bin/rietan --CalcRDF=0 --CoordinationNumber=4 $ARG1
#	$MXDFileConv --Action=VASPMakeXSF     --DBDir=${HOME}/bin/rietan --CalcRDF=0 --CoordinationNumber=4 $ARGDIR/OUTCAR
MakeCIFCMD=$HOME/bin/MakeCIFFile.sh
MakeXSFCMD=$HOME/bin/MakeXSFFile.sh
VASPDir=$TkPerlDir/VASP
export "CMD=/usr/bin/perl $VASPDir/VASP.pl"

# Define directories
WorkDir= 
ARGDIR=`pwd`
ARG1=$ARGDIR/INCAR
Action=$1
Arg1=$2
Arg2=$3
Arg3=$4
Arg4=$5

$rsysd

#====================================
# Common definitions
#====================================
Title=`pwd`
Title=${Title##*/}
EMail=tkamiya@msl.titech.ac.jp
SMTPServer=lucid.msl.titech.ac.jp
Domain=lucid.msl.titech.ac.jp
MailerName=SendMail.pl/DoVASP.sh
From=$EMail

#====================================
# Tasks
#====================================
#Choose '', MakeFilesFromCIF|MD|VCMD|VCRelaxRough|VCRelax|SCF|DOC|Band|ElectronDensity
StopAfter=
MakeFilesFromCIF=0
BackUpOriginal=1
DoMD=0
DoVCRelaxRough=1
DoVCRelax=1
ChangeNBANDS=0
ChangeNELECT=0
DoSCF=1
CalculateDOS=0
CalculateBand=0
CalculateElectronDensity=0
MakeSummary=1
DeleteExtraFiles=1
DeleteLargeFiles=1
DoSendMail=1

#====================================
# SCF continuation switches
#====================================
MDFromScratch=1
VCRelaxRoughFromScratch=0
VCRelaxFromScratch=0
SCFFromScratch=1
DOSFromScratch=0

#====================================
# MakeCIF parameters
#====================================
CIFFile=auto
UseConventionalCell=Yes
DefaultFunction=scf
UseRecommendedPOTCAR=0
#Functional=PAW|PAW_PBE|PAW_LDA52|PAW_PBE52|GGA|US
Functional=PAW_PBE
#HybridFunctional=|HF|HSE06|PBE0
HybridFunctional=
NKRED=2
ISMEARHybridFunctional=1
SIGMAHybridFunctionl=0.2
SpinPolarized=No
MakeCIFParams=
CMDMakeCIF="$CMD --Action=MakeINCAR --UseConventionalCell=$UseConventionalCell \
		 --UseRecommendedPOTCAR=$UseRecommendedPOTCAR \
		 --Function=$DefaultFunction --Functional=$Functional \
		 $MPIParams $MakeCIFParams \
		 --HybridFunctional=$HybridFunctional --NKRED=$NKRED \
		 --ISMEARHybridFunctional=$ISMEARHybridFunctional \
		 --SIGMAHybridFunctionl=$SIGMAHybridFunctionl \
		 --SpinPolarized=$SpinPolarized $CIFFile ./"
#echo run [$CMDMakeCIF]
#$CMDMakeCIF

#====================================
# Common parameters
#====================================
PStress=0.0

#====================================
# Modification parameters
#====================================
RemoveAtom=
NBANDS=
NELECT=
CMDRemoveAtom="$CMD --Action=RemoveAtom --iRemoveAtom=$RemoveAtom ."
CMDChangeNBANDS="$CMD --Action=ModifyFiles --Function=scf --NBANDS=$NBANDS $ARG1"
CMDChangeNELECT="$CMD --Action=ModifyFiles --Function=scf --NELECT=$NELECT $ARG1"

#====================================
# MD parameters
#====================================
#MD|VCMD
MDMode=VCMD
InitializeVelocity=0
PrecisionMD=Norm
GammaOnlyMD=1
aKProductMD=1.5
#aKProductMD=fix:1/1,1/1,1/1
ALGO=53
ISMEARMD=1
SIGMAMD=0.1
KeepSymmetryMD=0
NSWMD=100
POTIM=5.0
SMASS=-1
NBLOCK=50
TEBEG=1000
TEEND=1000
EDIFFMD=3.0e-4
EDIFFGMD=5.0e-3
LELF=.FALSE.
CMDMD="$CMD --Action=ModifyFiles --Function=$MDMode \
		--InitializeVelocity=$InitializeVelocity \
		--HybridFunctional=$HybridFunctional --NKRED=$NKRED \
		 $MPIParams $MakeCIFParams \
		--Param:SMASS=-1 --Param:NBLOCK=$NBLOCK \ 
		--ISMEARHybridFunctional=$ISMEARHybridFunctional \
		--SIGMAHybridFunctionl=$SIGMAHybridFunctionl \
		--Precision=$PrecisionMD --Param:EDIFF=$EDIFFMD --Param:EDIFFG=$EDIFFGMD \
		--SpinPolarized=$SpinPolarized --PStress=$PStress \
		--Param:ISMEAR=$ISMEARMD --Param:SIGMA=$SIGMAMD \
		--Param:ALGO=$ALGO --Param:LELF=$LELF\
		--Param:NSW=$NSWMD --Param:POTIM=$POTIM --Param:TEBEG=$TEBEG --Param:TEEND=$TEEND \
		--GammaOnly=$GammaOnlyMD --aKProduct=$aKProductMD \
		--KeepSymmetry=$KeepSymmetryMD --FromScratch=$MDFromScratch $ARG1"

#====================================
# VCRelaxRough parameters
#====================================
#RelaxModeRough=vc-relax|relax
RelaxModeRough=relax
NSW=300
KeepSymmetryRough=1
#aKProductRough=fix:8/2,8/2,6/3
aKProductRough=1.5
ALGO=53
GammaOnlyVCRelaxRough=0
ISMEARVCRelaxRough=-1
SIGMAVCRelaxRough=0.1
EDIFFRough=3.0e-4
EDIFFGRough=5.0e-3
LELF=.FALSE.
CMDVCRelaxRough="$CMD --Action=ModifyFiles --Function=$RelaxModeRough \
		--HybridFunctional=$HybridFunctional --NKRED=$NKRED \
		 $MPIParams \
		--ISMEARHybridFunctional=$ISMEARHybridFunctional \
		--SIGMAHybridFunctionl=$SIGMAHybridFunctionl \
		--Precision=Norm --Param:EDIFF=$EDIFFRough --Param:EDIFFG=$EDIFFGRough \
		--SpinPolarized=$SpinPolarized --PStress=$PStress \
		--Param:ISMEAR=$ISMEARVCRelaxRough --Param:SIGMA=$SIGMAVCRelaxRough \
		--Param:ALGO=$ALGO --Param:LELF=$LELF\
		--Param:NSW=$NSW \
		--GammaOnly=$GammaOnlyVCRelaxRough --aKProduct=$aKProductRough \
		--KeepSymmetry=$KeepSymmetryRough --FromScratch=$VCRelaxRoughFromScratch $ARG1"

#====================================
# VCRelax parameters
#====================================
#RelaxMode=vc-relax|relax
RelaxMode=relax
PrecisionVCRelax=High
KeepSymmetry=1
#aKProductVCRelax=fix:8/2,8/2,6/3
aKProductVCRelax=2.0
ALGO=53
GammaOnlyVCRelax=0
ISMEARVCRelax=-1
SIGMAVCRelax=0.1
EDIFF=1.0e-4
EDIFFG=0.3e-3
LELF=.FALSE.
CommonParameters="--HybridFunctional=$HybridFunctional --NKRED=$NKRED \
		 $MPIParams \
		--ISMEARHybridFunctional=$ISMEARHybridFunctional \
		--SIGMAHybridFunctionl=$SIGMAHybridFunctionl \
		--SpinPolarized=$SpinPolarized --PStress=$PStress"

CMDVCRelax="$CMD --Action=ModifyFiles --Function=$RelaxMode $CommonParameters \
		--Precision=$PrecisionVCRelax --Param:EDIFF=$EDIFF --Param:EDIFFG=$EDIFFG \
		--Param:ISMEAR=$ISMEARVCRelax --Param:SIGMA=$SIGMAVCRelax \
		--Param:ALGO=$ALGO --Param:LELF=$LELF\
		--Param:NSW=$NSW \
		--GammaOnly=$GammaOnlyVCRelax --aKProduct=$aKProductVCRelax \
		--KeepSymmetry=$KeepSymmetry --FromScratch=$VCRelaxFromScratch $ARG1"

#====================================
# SCF parameters
#====================================
Precision=High
#aKProduct=fix:8/2,8/2,6/3
aKProduct=2.0
ALGO=53
GammaOnly=0
ISMEAR=-1
SIGMA=0.1
CalOpticsSCF=0
CSHIFTSCF=0.1
CalVibrationSCF=0
#IBRIONSCF=8
LRPASCF=.TRUE.
LELF=.FALSE.
CMDSCF="$CMD --Action=ModifyFiles --Function=scf $CommonParameters \
		--Precision=$Precision --Param:EDIFF=$EDIFF --Param:EDIFFG=$EDIFFG \
		--Param:ISMEAR=$ISMEAR --Param:SIGMA=$SIGMA \
		--Param:ALGO=$ALGO --Param:LELF=$LELF\
		--GammaOnly=$GammaOnly --aKProduct=$aKProduct \
		--CalOptics=$CalOpticsSCF --CSHIFT=$CSHIFTSCF \
		--CalVibration=$CalVibrationSCF --IBRION=$IBRIONSCF --LRPA=$LRPASCF \
		--FromScratch=$SCFFromScratch $ARG1"
#echo run [$CMDSCF]
#$CMDSCF

#====================================
# DOS parameters
#====================================
DOSNPAR=1
DOSISMEAR=-1
DOSSIGMA=0.3
nMesh=5000
MinEnergy=-35.0
MaxEnergy=15.0
DOSWidth=0.01
aKProductDOS=1.0
#aKProductDOS=fix:5/1,5/1,2/1
GammaOnly=1
ALGO=53
CalOpticsDOS=1
CSHIFTDOS=0.01
CalVibrationDOS=0
#IBRIONDOS=8
LRPADOS=.FALSE.
LELF=.FALSE.
CMDDOS="$CMD --Action=ModifyFiles --Function=dos --Param:NPAR=$DOSNPAR --Param:LREAL=.FALSE. $CommonParameters \
		--Precision=$Precision --Param:EDIFF=$EDIFF --Param:EDIFFG=$EDIFFG \
		--Param:ISMEAR=$DOSISMEAR --Param:SIGMA=$DOSSIGMA \
		--GammaOnly=$GammaOnly --aKProduct=$aKProductDOS \
		--Param:ALGO=$ALGO --Param:LELF=$LELF\
		--DOSMeasreudFromEF=1 --MinEnergy=$MinEnergy --MaxEnergy=$MaxEnergy --nMesh=$nMesh \
		--CalOptics=$CalOpticsDOS --CSHIFT=$CSHIFTDOS \
		--CalVibration=$CalVibrationDOS --IBRION=$IBRIONDOS --LRPA=$LRPADOS \
		--FromScratch=$DOSFromScratch $ARG1"

#====================================
# Band parameters
#====================================
# Set BandKPoints1=File to use *.klist file
BANDISMEAR=1
BANDSIGMA=0.1
BandKPoints1=XG
BandKPoints2=GY
BandKPoints3=GZ
nKPoint=15
ALGO=53
LELF=.FALSE.
CMDBandX="$CMD --Action=ModifyFiles --Function=band $CommonParameters \
		--Precision=$Precision --Param:EDIFF=$EDIFF --Param:EDIFFG=$EDIFFG \
		--Param:ISMEAR=$BANDISMEAR --Param:SIGMA=$BANDSIGMA \
		--Param:ALGO=$ALGO --Param:LELF=$LELF\
		--GammaOnly=0 --nKPoint=$nKPoint --KPoints=$BandKPoints1 $ARG1"
CMDBandY="$CMD --Action=ModifyFiles --Function=band $CommonParameters \
		--Precision=$Precision --Param:EDIFF=$EDIFF --Param:EDIFFG=$EDIFFG \
		--Param:ISMEAR=$BANDISMEAR --Param:SIGMA=$BANDSIGMA \
		--Param:ALGO=$ALGO --Param:LELF=$LELF\
		--GammaOnly=0 --nKPoint=$nKPoint --KPoints=$BandKPoints2 $ARG1"
CMDBandZ="$CMD --Action=ModifyFiles --Function=band $CommonParameters \
		--Precision=$Precision --Param:EDIFF=$EDIFF --Param:EDIFFG=$EDIFFG \
		--Param:ISMEAR=$BANDISMEAR --Param:SIGMA=$BANDSIGMA \
		--Param:ALGO=$ALGO --Param:LELF=$LELF\
		--GammaOnly=0 --nKPoint=$nKPoint --KPoints=$BandKPoints3 $ARG1"

#====================================
# eDensity parameters
#====================================
MinEnergyeDensity=-3.0
MaxEnergyeDensity=3.0
AllSeparated=1
ALGO=53
LELF=.FALSE.
CMDeDensity="$CMD --Action=ModifyFiles --Function=eDensity $CommonParameters \
		  --Precision=$Precision --Param:EDIFF=$EDIFF --Param:EDIFFG=$EDIFFG \
		  --Param:ISMEAR=$ISMEAR --Param:SIGMA=$SIGMA \
		--Param:ALGO=$ALGO --Param:LELF=$LELF\
		  --AllSeparated=$AllSeparated \
		  --MinEnergy=$MinEnergyeDensity --MaxEnergy=$MaxEnergyeDensity $ARG1"

#====================================
# Set command line parameters
#====================================
echo ' '
echo '================================================================'
echo '  Change parameters from command line arguments'
echo '================================================================'
while [ $# -gt 0 ]
do
  ARG=$1
  Val=${ARG#*=}
  Key=${ARG%%=*}
  shift
  echo Change parameter $Key to $Val
  eval `echo $Key=$Val`
done

#====================================
# Show help
#====================================
if [ "$Action" = "help" ]; then
	echo DoVASP.sh [init|help]
	echo
	exit
fi

#====================================
# Make CIF
#====================================
if [ "$Action" = "init" ]; then
	echo ' '
	echo '================================================================'
	echo "  Make Input Files from CIF [$CIFFile]"
	echo '================================================================'
	if [ "$CIFFile" = "auto" -o -f $CIFFile ]; then
		echo
	else
		echo Error: [$CIFFile] does not exist.
		exit
	fi
	echo run [$CMDMakeCIF]
	$CMDMakeCIF

	exit;
fi

if [ "$Action" = "super" ]; then
	echo ' '
	echo '================================================================'
	echo "  Make Supercell from CIF [$CIFFile]"
	echo '================================================================'
	cmd="$VASPDir/MakeStructureModel.pl --Action=shift --Shift=0,0,0 --OutputFile=supercell${Arg2}x${Arg3}x${Arg4}.cif $Arg1:$Arg2,$Arg3,$Arg4"
	echo run [$cmd]
	if [ "$Arg4" = "" ]; then
		echo usage: DoVASP.sh super CIF_FileName nx ny nz
		exit
	fi

	$cmd

	exit;
fi

if [ "$MakeFilesFromCIF" = "1" -a "$CMDMakeCIF" != "" ]; then
	echo ' '
	echo '================================================================'
	echo "  Make Input Files from CIF [$CIFFile]"
	echo '================================================================'
	if [ "$CIFFile" = "auto" -o -f $CIFFile ]; then
		echo
	else
		echo Error: [$CIFFile] does not exist.
		exit
	fi
	echo run [$CMDMakeCIF]
	$CMDMakeCIF
fi

if [ "$StopAfter" = "MakeFilesFromCIF" ]; then
	exit;
fi

#====================================
# Send EMail
#====================================
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="`hostname`: $Title started"
fi

#====================================
# Remove atom
#====================================
if [ -n "$RemoveAtom" -a "$CMDRemoveAtom" != "" ]; then
	echo ' '
	echo '================================================================'
	echo "  Remove the Atom [$RemoveAtom]: [$CMDRemoveAtom]"
	echo '================================================================'
	cp POSCAR POSCAR.stoichiometry.$RemoveAtom > /dev/null
	$CMDRemoveAtom
fi

#====================================
# Backup to Original directory
#====================================
if [ "$BackUpOriginal" = "1" ]; then
	echo ' '
	echo '================================================================'
	echo "  Backup original files to ./Original"
	echo '================================================================'
	mkdir Original
	cp {Do*.sh,hosts,INCAR,KPOINTS,POSCAR,POTCAR,*.klist,*.cif,*.CIF,*.sh,*.pl,POSCAR.stoc*} Original > /dev/null
fi

#====================================
# MD
#====================================
if [ "$DoMD" = "1" -a  "$CMDMD" != "" ]; then
	echo ' '
	echo '================================================================'
	echo "  MD run: [$CMDMD]"
	echo '================================================================'
	$CMDMD

	rm *.txt > /dev/null
	$VASP | $TEE `hostname`.out.txt

#	$MXDFileConv --Action=VASPConvCONTCAR --DBDir=$(HOME)/bin/rietan --CalcRDF=0 --CoordinationNumber=4 $ARG1
#	$MXDFileConv --Action=VASPMakeXSF     --DBDir=$(HOME)/bin/rietan --CalcRDF=0 --CoordinationNumber=4 $ARGDIR/OUTCAR
	$MakeCIFCMD .
	$MakeXSFCMD .

#	$CMD --Action=MakeCIF . initial.cif
	cp POSCAR POSCAR.prev > /dev/null
	cp POSCAR POSCAR.initial > /dev/null
	cp CONTCAR POSCAR > /dev/null
#	$CMD --Action=MakeCIF . final.cif

	BackupDir=MD
	mkdir $BackupDir
	cp {INCAR,KPOINTS,POTCAR,POSCAR,POSCAR.initial,OUTCAR,IBZKPT,EIGENVAL,DOSCAR,CONTCAR} $BackupDir > /dev/null
	cp {*.txt,*.cif,*.xsf,DOS*.csv,*.xml,*.html} $BackupDir > /dev/null

#	perl $VASPDir/MakeSummaryHTML.pl
#	RETCODE=$?
#	if [ $RETCODE -ne  0 -a $RETCODE -ne  3 ]; then
#		echo ' '
#		echo "Error: MD terminated incorrectly with return code [$RETCODE]."
#		exit
#	fi
	cp *.html $BackupDir > /dev/null
	rm *.cif *.xsf *.html > /dev/null
fi

if [ "$StopAfter" = "MD" ]; then
	exit;
fi

#====================================
# VCRelax Rough
#====================================
if [ "$DoVCRelaxRough" = "1"  -a "$CMDVCRelaxRough" != "" ]; then
	echo ' '
	echo '================================================================'
	echo "  VCRelaxRough run: [$CMDVCRelaxRough]"
	echo '================================================================'
	$CMDVCRelaxRough

	rm *.txt > /dev/null
	$VASP | $TEE `hostname`.out.txt

#	$MXDFileConv --Action=VASPConvCONTCAR --DBDir=$(HOME)/bin/rietan --CalcRDF=0 --CoordinationNumber=4 $ARG1
#	$MXDFileConv --Action=VASPMakeXSF     --DBDir=$(HOME)/bin/rietan --CalcRDF=0 --CoordinationNumber=4 $ARGDIR/OUTCAR
	$MakeCIFCMD .
	$MakeXSFCMD .

#	$CMD --Action=MakeCIF . initial.cif
	cp POSCAR POSCAR.prev > /dev/null
	cp POSCAR POSCAR.initial > /dev/null
	cp CONTCAR POSCAR > /dev/null
#	$CMD --Action=MakeCIF . final.cif

	BackupDir=VCRelax1
	mkdir $BackupDir
	cp {INCAR,KPOINTS,POTCAR,POSCAR,POSCAR.initial,OUTCAR,IBZKPT,EIGENVAL,DOSCAR,CONTCAR} $BackupDir > /dev/null
	cp {*.txt,*.cif,*.xsf,DOS*.csv,*.xml,*.html} $BackupDir > /dev/null

	perl $VASPDir/MakeSummaryHTML.pl
	RETCODE=$?
	if [ $RETCODE -ne  0 -a $RETCODE -ne  3 ]; then
		echo ' '
		echo "Error: VCRelaxRough terminated incorrectly with return code [$RETCODE]."
#		exit
	fi
	cp *.html $BackupDir > /dev/null
	rm *.cif *.xsf *.html > /dev/null
fi

if [ "$StopAfter" = "VCRelaxRough" ]; then
	exit;
fi

#====================================
# VCRelax
#====================================
if [ "$DoVCRelax" = "1" ]; then
	echo ' '
	echo '================================================================'
	echo "  VRRelax run: [$CMDVCRelax]"
	echo '================================================================'
	$CMDVCRelax

	rm *.txt *.csv > /dev/null
	$VASP | $TEE `hostname`.out.txt
#	$MXDFileConv --Action=VASPConvCONTCAR --DBDir=$(HOME)/bin/rietan --CalcRDF=0 --CoordinationNumber=4 $ARG1
#	$MXDFileConv --Action=VASPMakeXSF     --DBDir=$(HOME)/bin/rietan --CalcRDF=0 --CoordinationNumber=4 $ARGDIR/OUTCAR
	$MakeCIFCMD .
	$MakeXSFCMD .

#	$CMD --Action=MakeCIF . initial.cif
	cp POSCAR POSCAR.prev > /dev/null
	cp POSCAR POSCAR.initial > /dev/null
	cp CONTCAR POSCAR > /dev/null
#	$CMD --Action=MakeCIF . final.cif

	$CMD --Action=MakeDOSCSV --Width=$DOSWidth --IgnoreZero=0 DOSCAR DOS-up.csv DOS-dn.csv

	BackupDir=VCRelax
	mkdir $BackupDir
	cp {INCAR,KPOINTS,POTCAR,POSCAR,POSCAR.initial,OUTCAR,IBZKPT,EIGENVAL,DOSCAR,CONTCAR} $BackupDir > /dev/null
	cp {*.txt,*.cif,*.xsf,DOS*.csv,*.xml,*.html} $BackupDir > /dev/null

	perl $VASPDir/MakeSummaryHTML.pl
	RETCODE=$?
	if [ $RETCODE -ne  0 ]; then
		echo ' '
		echo "Error: VCRelax terminated incorrectly with return code [$RETCODE]."
		exit
	fi
	cp *.html $BackupDir > /dev/null
	rm *.cif *.xsf *.html > /dev/null
fi

if [ "$StopAfter" = "VCRelax" ]; then
	exit;
fi

#====================================
# Change NBANDS
#====================================
if [ "$ChangeNBANDS" = "1" -a "$NBANDS" != "" -a "$CMDChangeNBANDS" != "" ]; then
	echo ' '
	echo '================================================================'
	echo "  Change NBANDS run for NBANDS=[$NBANDS]: [$CMDChangeNBANDS]"
	echo '================================================================'
	$CMDChangeNBANDS
fi

#====================================
# Change NELECT
#====================================
if [ "$ChangeNELECT" = "1" -a "$NELECT" != "" -a "$CMDChangeNELECT" != "" ]; then
	echo ' '
	echo '================================================================'
	echo "  Change NELECT run for NBANDS=[$NELECT]: [$CMDChangeNELECT]"
	echo '================================================================'
	$CMDChangeNELECT
fi

#====================================
# SCF
#====================================
if [ "$DoSCF" = "1" ]; then
	echo ' '
	echo '================================================================'
	echo "  SCF run: [$CMDSCF]"
	echo '================================================================'
	$CMDSCF
	rm *.txt *.csv *.xsf > /dev/null

	$VASP | $TEE `hostname`.out.txt
	$CMD --Action=MakeDOSCSV --Width=$DOSWidth --IgnoreZero=0 DOSCAR DOS-up.csv DOS-dn.csv

	if [ "$CalVibrationSCF" == "1" -o "$CalOpticsSCF" == "1" ]; then
		perl $VASPDir/SummarizeProperties.pl OUTCAR Optics.csv Vibration.txt Vibration.xsf
	fi

	BackupDir=SCF
	mkdir $BackupDir
	cp {INCAR,KPOINTS,POTCAR,POSCAR,OUTCAR,IBZKPT,EIGENVAL,DOSCAR,WAVECAR,CHG,CHGCAR} $BackupDir > /dev/null
	cp {*.txt,Optics.csv,DOS*.csv,*.xsf,*.xml,*.html} $BackupDir > /dev/null

	perl $VASPDir/MakeSummaryHTML.pl
	RETCODE=$?
	if [ $RETCODE -ne  0 ]; then
		echo ' '
		echo "Error: SCF terminated incorrectly with return code [$RETCODE]."
		exit
	fi
	cp *.html $BackupDir > /dev/null
	rm Optics.csv Vibration.txt DOS*.csv *.xsf *.html > /dev/null
fi

if [ "$StopAfter" = "SCF" ]; then
	exit;
fi

#====================================
# DOS
#====================================
if [ "$CalculateDOS" = "1" -a "$CMDDOS" != "" ]; then
	echo ' '
	echo '================================================================'
	echo "  DOS run: [$CMDDOS]"
	echo '================================================================'
	$CMDDOS
	rm *.txt *.csv *.xsf > /dev/null
	MKL_NUM_THREADS=$nCPUForMKLDOS
	$VASPDOS | $TEE `hostname`.out.txt
	MKL_NUM_THREADS=$nCPUForMKL
	$CMD --Action=MakeDOSCSV --Width=$DOSWidth --IgnoreZero=0 DOSCAR DOS-up.csv DOS-dn.csv

	if [ "$CalVibrationDOS" == "1" -o "$CalOpticsDOS" == "1" ]; then
		perl $VASPDir/SummarizeProperties.pl OUTCAR Optics.csv Vibration.txt Vibration.xsf
	fi

	BackupDir=DOS
	mkdir $BackupDir
	cp {INCAR,KPOINTS,POTCAR,POSCAR,OUTCAR,IBZKPT,EIGENVAL,DOSCAR}  $BackupDir > /dev/null
	cp {*.txt,Optics.csv,DOS*.csv,*.xsf,*.xml,*.html}  $BackupDir > /dev/null

	perl $VASPDir/MakeSummaryHTML.pl
	RETCODE=$?
	if [ $RETCODE -ne  0 ]; then
		echo ' '
		echo "Error: DOS terminated incorrectly with return code [$RETCODE]."
		exit
	fi
	cp *.html $BackupDir > /dev/null
	rm Optics.csv Vibration.txt DOS*.csv *.xsf *.html > /dev/null
fi

if [ "$StopAfter" = "DOS" ]; then
	exit;
fi

#====================================
# Band
#====================================
if [ "$CalculateBand" = "1" ]; then
	if [ "$BandKPoints1" != "" -a "CMDBandX" != "" ]; then
		echo ' '
		echo '================================================================'
		echo "  Band1 run for Band=[$Band1]: [$CMDBandX]"
		echo '================================================================'
		$CMDBandX
		rm *.txt *.csv > /dev/null
		$VASP | $TEE `hostname`.out.txt
		BackupDir=BandX
		mkdir $BackupDir
		cp {INCAR,KPOINTS,POTCAR,POSCAR,OUTCAR,IBZKPT,EIGENVAL,DOSCAR,*.txt} $BackupDir > /dev/null
		cp {*.xml,*.html}  $BackupDir > /dev/null

		perl $VASPDir/MakeSummaryHTML.pl
		RETCODE=$?
		if [ $RETCODE -ne  0 ]; then
			echo ' '
			echo "Error: Band1 terminated incorrectly with return code [$RETCODE]."
			exit
		fi
		cp *.html $BackupDir > /dev/null
	fi

	if [ "$StopAfter" = "BandX" ]; then
		exit;
	fi

	if [ "$BandKPoints1" != "File" -a "$BandKPoints2" != "" -a "CMDBandY" != "" ]; then
		echo ' '
		echo '================================================================'
		echo "  Band1 run for Band=[$Band2]: [$CMDBandY]"
		echo '================================================================'
		$CMDBandY
		rm *.txt *.csv > /dev/null
		$VASP | $TEE `hostname`.out.txt
		BackupDir=BandY
		mkdir $BackupDir
		cp {INCAR,KPOINTS,POTCAR,POSCAR,OUTCAR,IBZKPT,EIGENVAL,DOSCAR,*.txt} $BackupDir > /dev/null
		cp {*.xml,*.html}  $BackupDir > /dev/null

		perl $VASPDir/MakeSummaryHTML.pl
		RETCODE=$?
		if [ $RETCODE -ne  0 ]; then
			echo ' '
			echo "Error: Band2 terminated incorrectly with return code [$RETCODE]."
			exit
		fi
		cp *.html $BackupDir > /dev/null
	fi

	if [ "$StopAfter" = "BandY" ]; then
		exit;
	fi

	if [ "$BandKPoints1" != "File" -a "$BandKPoints3" != "" -a "CMDBandZ" != "" ]; then
		echo ' '
		echo '================================================================'
		echo "  Band1 run for Band=[$Band3]: [$CMDBandZ]"
		echo '================================================================'
		$CMDBandZ
		rm *.txt *.csv > /dev/null
		$VASP | $TEE `hostname`.out.txt
		BackupDir=BandZ
		mkdir $BackupDir
		cp {INCAR,KPOINTS,POTCAR,POSCAR,OUTCAR,IBZKPT,EIGENVAL,DOSCAR,*.txt} $BackupDir > /dev/null
		cp {*.xml,*.html}  $BackupDir > /dev/null

		perl $VASPDir/MakeSummaryHTML.pl
		RETCODE=$?
		if [ $RETCODE -ne  0 ]; then
			echo ' '
			echo "Error: DOS terminated incorrectly with return code [$RETCODE]."
			exit
		fi
		cp *.html $BackupDir > /dev/null

		echo ' '
		echo '================================================================'
		echo "  Merge Bands to BandTotal/EIGENVAL"
		echo '================================================================'
		rm EIGENVAL > /dev/null
		$CMD --Action=AddEIGENVAL --InverseOrder=No  BandX/EIGENVAL EIGENVAL
		$CMD --Action=AddEIGENVAL --InverseOrder=No  BandY/EIGENVAL EIGENVAL
		$CMD --Action=AddEIGENVAL --InverseOrder=Yes BandY/EIGENVAL EIGENVAL
		$CMD --Action=AddEIGENVAL --InverseOrder=No  BandZ/EIGENVAL EIGENVAL
		$CMD --Action=RepairEIGENVAL EIGENVAL
		BackupDir=BandTotal
		mkdir $BackupDir
		cp BandX/{INCAR,KPOINTS,POSCAR,POTCAR} $BackupDir > /dev/null
		cp {SCF/OUTCAR,EIGENVAL} $BackupDir > /dev/null
	fi

	if [ "$StopAfter" = "BandZ" ]; then
		exit;
	fi
fi

if [ "$StopAfter" = "Band" ]; then
	exit;
fi

#====================================
# Electron density
#====================================
if [ "$CalculateElectronDensity" = "1" -a "$CMDeDensity" != "" ]; then
	echo ' '
	echo '================================================================'
	echo "  eDensity run: [$CMDeDensity]"
	echo '================================================================'
	$CMDeDensity
	rm *.txt *.csv > /dev/null
	$VASP | $TEE `hostname`.out.txt
	$CMD --Action=ChangeDensityFileNames --EnergyRange=3.0 --RemoveExtention=0 $ARGDIR

	BackupDir=eDensity
	mkdir $BackupDir
	cp {INCAR,KPOINTS,POTCAR,POSCAR,OUTCAR,IBZKPT,EIGENVAL,DOSCAR,*.txt} $BackupDir > /dev/null
	cp {*.xml,*.html}  $BackupDir > /dev/null
	mv PARCH*   $BackupDir
	mv *.vasp   $BackupDir
	mv LOCPOT   $BackupDir/LOCPOT.vasp
	mv ELFCAR   $BackupDir/ELFCAR.vasp

	perl $VASPDir/MakeSummaryHTML.pl
	RETCODE=$?
	if [ $RETCODE -ne  0 ]; then
		echo ' '
		echo "Error: eDensity terminated incorrectly with return code [$RETCODE]."
		exit
	fi
	cp *.html $BackupDir > /dev/null

fi

if [ "$StopAfter" = "ElectronDensity" ]; then
	exit;
fi

#====================================
# Clean up files
#====================================
if [ "$DeleteExtraFiles" = "1" ]; then
	echo ' '
	echo '================================================================'
	echo "  Clean up files"
	echo '================================================================'
	rm {*.prev,*.vc-*,*.relax,*.scf,*.dos,*.band,*.init*,*.remove*,*.stoichi*} > /dev/null
	rm {EIGENVAL,ELFCAR,LOCPOT} > /dev/null
	rm {CONTCAR,DOSCAR,OUTCAR} > /dev/null
	rm {OSZICAR,PCDAT,XDATCAR,PROCAR,WAVE*,CHG*} > /dev/null
	rm {DOS-*.csv,*.out} > /dev/null
	rm {*.txt,IBZ*} > /dev/null
	rm Band*/DOS* > /dev/null
#	rm SCF/DOS* > /dev/null
	rm VCRelax/DOS* > /dev/null
	rm VCRelax1/DOS* > /dev/null
fi
if [ "$DeleteLargeFiles" = "1" ]; then
	echo ' '
	echo '================================================================'
	echo "  Delete large fils (WAVCAR,CHG,CHGCAR)"
	echo '================================================================'
	rm SCF/{WAVE*,CHG*} > /dev/null
fi

#====================================
# Make Summary
#====================================
if [ "$MakeSummary" = "1" ]; then
	echo ' '
	echo '================================================================'
	echo "  Make summary to Summarize.txt and Summarize-SpinPolarized.txt"
	echo '================================================================'
	perl $VASPDir/Summarize2.pl ./ > Summarize.txt
	perl $VASPDir/Summarize.pl  ./ > Summarize-SpinPolarized.txt
	perl $VASPDir/MakeSummaryHTML.pl
fi

#====================================
# Send EMail
#====================================
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="`hostname`: $Title completed"
fi
