#!/bin/bash # # ================================================================ # OpenMC + Python Runner (Apptainer-based) # ================================================================ # Description: # This script runs either: # (1) OpenMC directly inside an Apptainer container, or # (2) a Python script using the same container environment. # # Usage: # ./run_openmc.sh → Run OpenMC in the container # ./run_openmc.sh script.py args → Run Python script with args # ./run_openmc.sh -h | --help → Show help # # Behavior: # - The current working directory is mounted into /workspace inside the container. # - The OpenMC library directory is mounted into /libs. # - The output log is saved in the same directory as the run: # * openmc_run.log for OpenMC runs # * .log for Python runs # # Example: # ./run_openmc.sh # Run OpenMC normally # ./run_openmc.sh input.py # API can be called inside the script # # ================================================================ # === Config === # ================================================================ # NOTE: Update SIF and LIB_DIR paths as needed !!!!!!!!!!!!!!!!!!! # ================================================================ SIF="/afs/psi.ch/project/stars/workspace/RND/SB-RND-ACT-004-25/SC41/openmc/openmc_apptainer/openmc.sif" LIB_DIR="/afs/psi.ch/project/stars/workspace/RND/SB-RND-ACT-004-25/SC41/openmc/lib_mine" HOST_DIR="$(pwd)" CONTAINER_DIR="/workspace" # === Help === show_help() { cat << EOF Usage: $(basename "$0") [script.py [args...]] Run OpenMC or a Python script inside an Apptainer container. Options: -h, --help Show this help message and exit Modes: • No arguments → Runs OpenMC inside the container • script.py [args...] → Runs the given Python script using py Examples: $(basename "$0") # Run OpenMC normally $(basename "$0") run_case.py # Run Python script Environment: Container: ${SIF} Host dir : ${HOST_DIR} Lib dir : ${LIB_DIR} EOF } # === Handle Help Flag === if [[ "$1" == "-h" || "$1" == "--help" ]]; then show_help exit 0 fi # === Mode === if [ -z "$1" ]; then MODE="openmc" else MODE="python" PYTHON_SCRIPT="$1" shift fi # === Log File === if [ "$MODE" = "openmc" ]; then LOG_FILE="${HOST_DIR}/openmc_run.log" else if [ ! -f "${HOST_DIR}/${PYTHON_SCRIPT}" ]; then echo "Error: Python script '${PYTHON_SCRIPT}' not found in ${HOST_DIR}." exit 1 fi LOG_FILE="${HOST_DIR}/${PYTHON_SCRIPT%.*}.log" fi echo "---------------------------------------------------------------" echo " Running in container: ${SIF}" echo " Host directory : ${HOST_DIR}" echo " Container directory : ${CONTAINER_DIR}" echo " Library mount : ${LIB_DIR} -> /libs" echo " Log file : ${LOG_FILE}" echo "---------------------------------------------------------------" # === Exec=== if [ "$MODE" = "openmc" ]; then echo ">>> Starting OpenMC run..." apptainer exec \ --bind "${HOST_DIR}:${CONTAINER_DIR}" \ --bind "${LIB_DIR}:/libs" \ --pwd "${CONTAINER_DIR}" "${SIF}" \ openmc | tee "${LOG_FILE}" else echo ">>> Running Python script: ${PYTHON_SCRIPT}" apptainer exec \ --bind "${HOST_DIR}:${CONTAINER_DIR}" \ --bind "${LIB_DIR}:/libs" \ --pwd "${CONTAINER_DIR}" "${SIF}" \ python3.11 "${CONTAINER_DIR}/${PYTHON_SCRIPT}" "$@" | tee "${LOG_FILE}" fi