nanoparticlesims/growth_Melting_Silver_ICO_2451/runSims.sh

211 lines
6.1 KiB
Bash
Executable File

#!/bin/bash
# ==============================================================================
# Configuration
# ==============================================================================
LODIS_EXE="/home/tmlkyza/Documents/Universita/Master/nanopants/lcm/LoDiS/LODIS_all"
POT_FILE="/home/tmlkyza/Documents/Universita/Master/nanopants/lcm/POT_FILE/Ag_Ag.pot"
END_NUM=$2
SCRIPT_DIR=$(pwd)
CONFIG_FILE=$SCRIPT_DIR"/in_g.in"
CONFIG_MELT_FILE=$SCRIPT_DIR"/in_melt.in"
SEED_FILE=$SCRIPT_DIR"/"$1
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Usage: $0 [SEED_FILE] [END_NUM]"
exit 1
fi
# ==============================================================================
# Helper Functions
# ==============================================================================
checkStart(){
# Extract starting atom count from filename
FileNum=$(echo "$1" | grep -o -E '[0-9]+' | tail -1)
# Update master config with quotes for Fortran strings
sed -i "s|natom *= *.*|natom = ${FileNum}|" "$CONFIG_FILE"
sed -i "s|filepos *= *.*|filepos = '$SEED_FILE'|" "$CONFIG_FILE"
sed -i "s|filepot *= *.*|filepot = '$POT_FILE'|" "$CONFIG_FILE"
START_NUM=$FileNum
}
getLastTemp(){
ENERGYOUT=$1
COLUMN=$2
temp=$(tail -n 1 "$ENERGYOUT" | awk -v col="$COLUMN" '{print int($col) ".d0"}')
echo $temp
}
runGrowth(){
local STAGE_DIR="$SCRIPT_DIR/growthSims"
mkdir -p "$STAGE_DIR"
cp "$SEED_FILE" "$STAGE_DIR/seed.xyz"
cp "$POT_FILE" "$STAGE_DIR/pot.pot"
cd "$STAGE_DIR" || exit
ITERATIONS=$(($END_NUM - $START_NUM))
for (( i=1; i<=$ITERATIONS; i++ )); do
CURRENT_NATOMS=$(($START_NUM + i))
mkdir -p "run_$CURRENT_NATOMS"
cd "run_$CURRENT_NATOMS" || exit
cp "$CONFIG_FILE" "growth.in"
sed -i "s|filepos *= *.*|filepos = '../seed.xyz'|" "growth.in"
sed -i "s|filepot *= *.*|filepot = '../pot.pot'|" "growth.in"
sed -i "s|ndepmax *= *.*|ndepmax = $i|" "growth.in"
"$LODIS_EXE" < "growth.in" > "growth.log" &
cd ..
done
echo "Waiting for all Growth processes to finish..."
wait
cd "$SCRIPT_DIR"
}
runMelting(){
local INPUT_DIR=$1
local STAGE_DIR="$SCRIPT_DIR/meltingSims"
mkdir -p "$STAGE_DIR"
cp "$POT_FILE" "$STAGE_DIR/pot.pot"
cd "$STAGE_DIR" || exit
for dir in "$INPUT_DIR"/run_*; do
[ -e "$dir" ] || continue
natoms=$(echo "$dir" | grep -o -E '[0-9]+' | tail -1)
mkdir -p "run_$natoms"
cd "run_$natoms" || exit
# Extract last frame from the PROVIDED input directory
tail -n $(($natoms + 2)) "$dir/movie.xyz" > "toMelt_$natoms.xyz"
cp "$CONFIG_MELT_FILE" "melt.in"
initTemp=$(getLastTemp "$INPUT_DIR/run_$natoms/energy.out" "8")
sed -i "s|tinit *= *.*|tinit = $initTemp|" "melt.in"
sed -i "s|natom *= *.*|natom = $natoms|" "melt.in"
sed -i "s|filepos *= *.*|filepos = 'toMelt_$natoms.xyz'|" "melt.in"
sed -i "s|filepot *= *.*|filepot = '../pot.pot'|" "melt.in"
"$LODIS_EXE" < "melt.in" > "melt.log" &
cd ..
done
echo "Waiting for all Melting processes to finish..."
wait
cd "$SCRIPT_DIR"
}
runFreezing(){
local INPUT_DIR=$1
local STAGE_DIR="$SCRIPT_DIR/freezeSims"
mkdir -p "$STAGE_DIR"
cp "$POT_FILE" "$STAGE_DIR/pot.pot"
cd "$STAGE_DIR" || exit
for dir in "$INPUT_DIR"/run_*; do
[ -e "$dir" ] || continue
natoms=$(echo "$dir" | grep -o -E '[0-9]+' | tail -1)
mkdir -p "run_$natoms"
cd "run_$natoms" || exit
tail -n $(($natoms + 2)) "$dir/movie.xyz" > "toFreeze_$natoms.xyz"
cp "$CONFIG_FILE" "freeze.in"
initTemp=$(getLastTemp "$INPUT_DIR/run_$natoms/energy.out" "7")
sed -i "s|tinit *= *.*|tinit = $initTemp|" "freeze.in"
sed -i "s|natom *= *.*|natom = $natoms|" "freeze.in"
sed -i "s|type_process *= *.*|type_process = 'freezing'|" "freeze.in"
sed -i "s|filepos *= *.*|filepos = 'toFreeze_$natoms.xyz'|" "freeze.in"
sed -i "s|filepot *= *.*|filepot = '../pot.pot'|" "freeze.in"
"$LODIS_EXE" < "freeze.in" > "freeze.log" &
cd ..
done
echo "Waiting for all Freezing processes to finish..."
wait
cd "$SCRIPT_DIR"
}
runQuenching(){
local INPUT_DIR=$1
local STAGE_DIR="$SCRIPT_DIR/quenchSims"
mkdir -p "$STAGE_DIR"
cp "$POT_FILE" "$STAGE_DIR/pot.pot"
cd "$STAGE_DIR" || exit
for dir in "$INPUT_DIR"/run_*; do
[ -e "$dir" ] || continue
natoms=$(echo "$dir" | grep -o -E '[0-9]+' | tail -1)
mkdir -p "run_$natoms"
cd "run_$natoms" || exit
tail -n $(($natoms + 2)) "$dir/movie.xyz" > "toQuench_$natoms.xyz"
cp "$CONFIG_FILE" "quench.in"
initTemp=$(getLastTemp "$INPUT_DIR/run_$natoms/energy.out" "7")
sed -i "s|tinit *= *.*|tinit = $initTemp|" "quench.in"
sed -i "s|natom *= *.*|natom = $natoms|" "quench.in"
sed -i "s|type_process *= *.*|type_process = 'quenching'|" "quench.in"
sed -i "s|filepos *= *.*|filepos = 'toQuench_$natoms.xyz'|" "quench.in"
sed -i "s|filepot *= *.*|filepot = '../pot.pot'|" "quench.in"
"$LODIS_EXE" < "quench.in" > "quench.log" &
cd ..
done
echo "Waiting for all Quenching processes to finish..."
wait
cd "$SCRIPT_DIR"
}
# ==============================================================================
# Logic Flow (Chain the stages here)
# ==============================================================================
# 1. Initialize variables
checkStart "$1"
# 2. Start with Growth
runGrowth
# Resulting folder: $SCRIPT_DIR/growthSims
# 3. Perform Melting (using Growth results)
runMelting "$SCRIPT_DIR/growthSims"
# Resulting folder: $SCRIPT_DIR/meltingSims
# 4. Perform Freezing (using Growth results)
runFreezing "$SCRIPT_DIR/meltingSims"
# Resulting folder: $SCRIPT_DIR/freezeSims
# 5. Perform Quenching (using Freezing results)
runQuenching "$SCRIPT_DIR/freezeSims"
# Resulting folder: $SCRIPT_DIR/quenchSims
echo "All simulations completed successfully."