#usr/bin/bash

# host info
nCPUs_host=$(grep physical.id /proc/cpuinfo | sort -u | wc -l)
nCores_host=$(grep -c '^processor' /proc/cpuinfo)
nLogicalProcessors_host=$(grep processor /proc/cpuinfo | wc -l)
CPUModel_host=$(grep "model name" /proc/cpuinfo | uniq | sed -e 's/^.*:\s*//g')

# 引数がある場合は nCPU に代入、なければデフォルト値 $nCores_host を設定
nCores=${1:-$nCores_host}

###################################
# Configuration
###################################
root_dir=`pwd`
template_dir=$root_dir/template
input_template_dir=$template_dir/test_inputs
run_sh_template_path="$template_dir"/run_test_template.sh

shebang="#!/usr/bin/bash"
ownership=tkamiya.csrv


###################################
# Working parameters
###################################
hostname=$(hostname)
#date=$(date "+%Y%m%d-%H%M%S")
date=$(date "+%Y%m%d")
work_dir="$root_dir/${hostname}_np${nCores}_$date"
vasp_path=$(which vasp_std)
vasp_dir=$(dirname "$vasp_path")

md_path="$work_dir/condition.md"
makefiles="$vasp_dir"/makefile*
run_sh_path="$work_dir"/run.sh
vasp_command="mpirun -np $nCores $vasp_path 2>&1 | tee vasp.log"

escaped_work_dir=$(echo "$work_dir" | sed -e 's/[\/&|]/\\&/g')
escaped_vasp_command=$(echo "$vasp_command" | sed -e 's/[\/&|]/\\&/g')


###################################
# Running initialization
###################################
echo
echo root_dir          : $root_dir
echo template_dir      : $template_dir
echo input_template_dir: $input_template_dir
echo 
echo hostname: $hostname
echo account: $(whoami)
echo date: $date
echo 
echo CPU model: $CPUModel_host
echo nCores: $nCores
echo work_dir: $work_dir
echo vasp_path: "$vasp_path"
echo vasp_dir: "vasp_dir"
echo run_sh_path: "$run_sh_path"


echo
echo Executing [mkdir "$work_dir"]...
mkdir "$work_dir"

echo
echo Executing [cp -r "$input_template_dir"/* "$work_dir"/]...
cp -r "$input_template_dir"/* "$work_dir"/

echo
echo copy makefiles [$makefiles]
cp $makefiles "$work_dir"

echo
echo remove [$md_path]
rm "$md_path" 2> /dev/null

echo "  adding configration info"
echo "# Configuration" >> "$md_path"
echo "hostname: $hostname" >> "$md_path"
echo "account: $(whoami)" >> "$md_path"
echo "date: $(date)" >> "$md_path"
echo "work_dir: $work_dir" >> "$md_path"
echo "vasp_path: $vasp_path" >> "$md_path"
echo "vasp_dir: $vasp_dir" >> "$md_path"

echo "  adding machine info"
echo "" >> "$md_path"
echo "# Machine information" >> "$md_path"
echo "CPU model: $CPUModel_host" >> "$md_path"
echo "nCPUs: $nCPUs_host" >> "$md_path"
echo "nCores: $nCores_host" >> "$md_path"
echo "nLogicalProcessors: $nLogicalProcessors_host" >> "$md_path"

echo "  adding variables"
echo "" >> "$md_path"
echo "# Environment" >> "$md_path"
env >> "$md_path"

echo
echo Creating [$run_sh_path]...
echo Execute sed [-e "s/{{vasp_command}}/${vasp_command}/g"]
sed -e "s/{{vasp_command}}/${escaped_vasp_command}/g" \
    -e "s/{{work_dir}}/${escaped_work_dir}/g" \
    "$run_sh_template_path" > "$run_sh_path"

chmod +x "$run_sh_path"
echo 
echo "Run test script [$run_sh_path] has been created."


###################################
# Termination process
###################################
# root ユーザーなら chown を実行
if [ "$(whoami)" == "root" ]; then
    echo
    echo "Change ownership/permission from root to $ownership:770"
    chown $ownership "$work_dir"
    chown -R $ownership "$work_dir"/*
    chmod 770 "$work_dir"
    chmod -R 770 "$work_dir"/*
fi

echo
