@echo off
echo.

::===================================
::  Directory/file configuration
::===================================
set MPIRUNPath=C:\Program Files\MPICH2\bin\mpiexec.exe 
set nCore=16

set ProgramsDir=d:\Programs
if not exist "%ProgramsDir%" (
	set ProgramsDir=c:\Programs
)
set tee=%ProgramsDir%\bin\ktee.exe -f
set PerlDir=%ProgramsDir%\Perl

set ElasticDir=%PerlDir%\ElasticConstant
set TemplateSource=%ElasticDir%\Template
set script=%ElasticDir%\CalElasticConstant.pl

set QEPerlDir=%ProgramsDir%\Perl\QE
set QERoot=C:\Program Files\Quantum ESPRESSO 64-bit 5.2.1-mpich2\bin
set CMD="%QERoot%\pw.exe"
set MPICMD="%MPIRUNPath%" "%QERoot%\pw.exe" -n %nCore%

set BatchFileDir=%~dp0
set RootDir=%BatchFileDir%
set TemplateDir=%RootDir%Template

::===========================
::  Calculation condition
::===========================
set SampleName=%1
if "%SampleName%" == "" (
	set SampleName=Si
)
if "%SampleName%" == "" (
	echo Error: SampleName should be specified.
	goto USAGE
)
::Remove extension
set SampleName=%SampleName:.cif=%

::Mode: gulp, vasp, pwscf
set Mode=%2
if "%Mode%" == "" (
	set Mode=pwscf
)

set BatchTemplate=.\run-template.bat
set RunScript=%TemplateDir%\DoPWSCF.bat

set OriginalCIF=original.cif
set OriginalFileHeader=%OriginalCIF:.cif=%

:: Define eArrayF, eArrayR (strain), cifArrayF, cifArrayR (CIF), and dirArrayF, dirArrayR (WorkDir)
:: e.g. set eArrayR[0]=-0.1
::      set cifArrayR[0]=e1111_-0.1.cif
::      set dirArrayR[0]=e1111_-0.1
@echo on
set nr=3
set eArrayR[0]=-0.005
set cifArrayR[0]=e1122_-1_-1_-0.005_-0.005.cif
set dirArrayR[0]=e1122_-1_-1_-0.005_-0.005
set eArrayR[1]=-0.005
set cifArrayR[1]=e1122_-1_0_-0.005_0.cif
set dirArrayR[1]=e1122_-1_0_-0.005_0
set eArrayR[2]=-0.005
set cifArrayR[2]=e1122_-1_1_-0.005_0.005.cif
set dirArrayR[2]=e1122_-1_1_-0.005_0.005
set nz=3
set nf=3
set eArrayZ[0]=0
set cifArrayZ[0]=original.cif
set dirArrayZ[0]=original
set eArrayZ[1]=0
set cifArrayZ[1]=e1122_0_-1_0_-0.005.cif
set dirArrayZ[1]=e1122_0_-1_0_-0.005
set eArrayZ[2]=0
set cifArrayZ[2]=e1122_0_1_0_0.005.cif
set dirArrayZ[2]=e1122_0_1_0_0.005
set eArrayF[0]=0.005
set cifArrayF[0]=e1122_1_-1_0.005_-0.005.cif
set dirArrayF[0]=e1122_1_-1_0.005_-0.005
set eArrayF[1]=0.005
set cifArrayF[1]=e1122_1_0_0.005_0.cif
set dirArrayF[1]=e1122_1_0_0.005_0
set eArrayF[2]=0.005
set cifArrayF[2]=e1122_1_1_0.005_0.005.cif
set dirArrayF[2]=e1122_1_1_0.005_0.005
@echo off


:: Create base input files
::if exist "%OriginalCIF%" (
:::	echo File [%OriginalCIF%] exists.
::	echo Skip.
::) else (
::	echo call %RunScript% 0.0 %OriginalCIF% %OriginalFileHeader init
::	call %RunScript% 0.0 %OriginalCIF% %OriginalFileHeader init
::)

:: Run for the base structure
echo call :RUN 0.0 %OriginalCIF% %OriginalFileHeader%
call :RUN 0.0 %OriginalCIF% %OriginalFileHeader%

echo.
:: Run for the reverse direction from the base structure
echo Forward FileList: [%eArrayR[0]%][%eArrayR[1]%][%eArrayR[2]%][%eArrayR[3]%][%eArrayR[4]%]
setlocal ENABLEDELAYEDEXPANSION
for /l %%n in (0,1,%nR%) do (
	echo call :RUN !eArrayR[%%n]! !cifArrayR[%%n]! !dirArrayR[%%n]!
	call :RUN !eArrayR[%%n]! !cifArrayR[%%n]! !dirArrayR[%%n]!
)
endlocal

echo.
:: Run for the zero e1 from the base structure
echo Zero FileList: [%eArrayZ[0]%][%eArrayZ[1]%][%eArrayZ[2]%][%eArrayZ[3]%][%eArrayZ[4]%]
setlocal ENABLEDELAYEDEXPANSION
for /l %%n in (0,1,%nZ%) do (
	echo call :RUN !eArrayZ[%%n]! !cifArrayZ[%%n]! !dirArrayZ[%%n]!
	call :RUN !eArrayZ[%%n]! !cifArrayZ[%%n]! !dirArrayZ[%%n]!
)

echo.
:: Run for the forward direction from the base structure
echo Forward FileList: [%eArrayF[0]%][%eArrayF[1]%][%eArrayF[2]%][%eArrayF[3]%][%eArrayF[4]%]
setlocal ENABLEDELAYEDEXPANSION
for /l %%n in (0,1,%nF%) do (
	echo call :RUN !eArrayF[%%n]! !cifArrayF[%%n]! !dirArrayF[%%n]!
	call :RUN !eArrayF[%%n]! !cifArrayF[%%n]! !dirArrayF[%%n]!
)
endlocal

goto END


::===================================
:: Subroutines
::===================================

:END
::call GoGULP.bat %SampleName% merge MD-NVT* MD-NPT*
echo .
exit /b


::===================================
:: Run calculation engine in the directory given by %1
::===================================
:RUN
set e=%1
set cif=%2
set WorkDir=%3
if not exist "%cif%" (
	echo File [%cif%] does not exist.
	echo Skip.
) else if exist "%WorkDir%" (
	echo Directory [%WorkDir%] exists.
	echo Skip.
) else (
	echo Make [%WorkDir%]
	mkdir %WorkDir%
	echo copy [%cif%\] to [%WorkDir%]
	copy %cif% %WorkDir%

	echo chdir to [%WorkDir%]
	cd %WorkDir%
	echo Working in:
	cd
	echo ...

	echo call %RunScript% %cif% init...
	call %RunScript% %cif% init
	echo call %RunScript% %cif% exec...
	call %RunScript% %cif% exec
	echo call %RunScript% %cif% post...
	call %RunScript% %cif% post
)

echo .
echo cd to RootDir [%RootDir%]
cd %RootDir%
exit /b

