#!/bin/bash
set -euo pipefail
usage() {
cat <<'EOF'
Usage: runSimulation.sh [--case simulationCases/SOME_CASE.c] [--input file.params]
Options:
--case Path to case source file (.c), optional.
--input Path to params file, optional.
--help Show this help.
Notes:
- Defaults:
--case -> simulationCases/dropImpact.c
--input -> default-VE.params
- If --input is not provided, defaults are used for:
dropImpact -> default-VE.params
dropImpact-EVP -> default-EVP.params
dropImpact-EVP-HB -> default-EVP-HB.params
- Default params are expected at repository root.
EOF
}
SCRIPT_DIR=\$(cd "\$(dirname "\${BASH_SOURCE[0]}")" && pwd)
REPO_ROOT="\$SCRIPT_DIR"
resolve_file() {
local candidate="\$1"
if [ -f "\$candidate" ]; then
echo "\$candidate"
elif [ -f "\${REPO_ROOT}/\${candidate}" ]; then
echo "\${REPO_ROOT}/\${candidate}"
else
echo ""
fi
}
default_params_for_case() {
case "\$1" in
dropImpact)
echo "default-VE.params"
;;
dropImpact-EVP)
echo "default-EVP.params"
;;
dropImpact-EVP-HB)
echo "default-EVP-HB.params"
;;
*)
echo ""
;;
esac
}
CASE_ARG="simulationCases/dropImpact.c"
INPUT_ARG=""
while [ "\$#" -gt 0 ]; do
case "\$1" in
--case)
if [ "\$#" -lt 2 ]; then
echo "Missing value for --case"
usage
exit 1
fi
CASE_ARG="\$2"
shift 2
;;
--input)
if [ "\$#" -lt 2 ]; then
echo "Missing value for --input"
usage
exit 1
fi
INPUT_ARG="\$2"
shift 2
;;
--help|-h)
usage
exit 0
;;
*)
echo "Unknown option: \$1"
usage
exit 1
;;
esac
done
CASE_FILE=\$(resolve_file "\$CASE_ARG")
if [ -z "\$CASE_FILE" ]; then
echo "Case source not found: \${CASE_ARG}"
exit 1
fi
CASE_DIR=\$(cd "\$(dirname "\$CASE_FILE")" && pwd)
CASE_FILE_NAME=\$(basename "\$CASE_FILE")
CASE_NAME="\${CASE_FILE_NAME%.c}"
RUN_DIR="\${CASE_DIR}/\${CASE_NAME}"
PARAM_SOURCE=""
if [ -n "\$INPUT_ARG" ]; then
PARAM_SOURCE=\$(resolve_file "\$INPUT_ARG")
if [ -z "\$PARAM_SOURCE" ]; then
echo "Parameter file not found: \${INPUT_ARG}"
exit 1
fi
else
PARAM_DEFAULT=\$(default_params_for_case "\$CASE_NAME")
if [ -z "\$PARAM_DEFAULT" ]; then
PARAM_DEFAULT="default-VE.params"
fi
PARAM_SOURCE="\${REPO_ROOT}/\${PARAM_DEFAULT}"
if [ ! -f "\$PARAM_SOURCE" ]; then
echo "Default parameter file not found: \${PARAM_SOURCE}"
exit 1
fi
fi
mkdir -p "\$RUN_DIR"
cp "\$CASE_FILE" "\$RUN_DIR/"
PARAM_BASENAME=""
if [ -n "\$PARAM_SOURCE" ]; then
PARAM_BASENAME=\$(basename "\$PARAM_SOURCE")
cp "\$PARAM_SOURCE" "\$RUN_DIR/\$PARAM_BASENAME"
fi
cd "\$RUN_DIR"
qcc -I"\${REPO_ROOT}/src-local" -I"\${REPO_ROOT}/../src-local" -O2 -Wall \
-disable-dimensions "\$CASE_FILE_NAME" -o "\$CASE_NAME" -lm
if [ -n "\$PARAM_BASENAME" ]; then
./"\$CASE_NAME" "\$PARAM_BASENAME"
else
./"\$CASE_NAME"
fi