Coverage for yaptide/batch/fluka_string_templates.py: 100%
3 statements
« prev ^ index » next coverage.py v7.6.10, created at 2025-03-31 19:18 +0000
« prev ^ index » next coverage.py v7.6.10, created at 2025-03-31 19:18 +0000
1SUBMIT_FLUKA: str = """#!/bin/bash
2OUT=`mktemp`
3module load fluka
5ROOT_DIR={root_dir}
6cd $ROOT_DIR
7mkdir -p $ROOT_DIR/workspaces/task_{{0001..{n_tasks}}}
8mkdir -p $ROOT_DIR/input
10INPUT_DIR=$ROOT_DIR/input
11ARRAY_SCRIPT=$ROOT_DIR/array_script.sh
12COLLECT_SCRIPT=$ROOT_DIR/collect_script.sh
14unzip -d $INPUT_DIR $ROOT_DIR/input.zip
15rm $ROOT_DIR/input.zip
17FLUKA_CMD="sbatch --array=1-{n_tasks} {array_options} --parsable $ARRAY_SCRIPT > $OUT"
18eval $FLUKA_CMD
19JOB_ID=`cat $OUT | cut -d ";" -f 1`
20echo "Job id: $JOB_ID"
22if [ -n "$JOB_ID" ] ; then
23 COLLECT_CMD="sbatch --dependency=afterany:$JOB_ID {collect_options} --parsable $COLLECT_SCRIPT > $OUT"
24 eval $COLLECT_CMD
25 COLLECT_ID=`cat $OUT | cut -d ";" -f 1`
26 echo "Collect id: $COLLECT_ID"
27fi
28"""
30COLLECT_FLUKA_BASH: str = """#!/bin/bash
31{collect_header}
32ROOT_DIR={root_dir}
34INPUT_WILDCARD="$ROOT_DIR/workspaces/task_*/*_fort.*"
35OUTPUT_DIRECTORY=$ROOT_DIR/output
37mkdir -p $OUTPUT_DIRECTORY
39cd $OUTPUT_DIRECTORY
41python3 $ROOT_DIR/simulation_data_sender.py --sim_id={sim_id} --update_key={update_key} \\
42 --backend_url={backend_url} --simulation_state=MERGING_RUNNING
44module load pymchelper
45convertmc json --many "$INPUT_WILDCARD"
47CLEAR_FORTS={remove_output_from_workspace}
49if $CLEAR_FORTS; then
50 rm $INPUT_WILDCARD
51fi
53python3 $ROOT_DIR/simulation_data_sender.py --output_dir=$OUTPUT_DIRECTORY \\
54 --sim_id={sim_id} --update_key={update_key} --backend_url={backend_url}
56python3 $ROOT_DIR/simulation_data_sender.py --sim_id={sim_id} --update_key={update_key} \\
57 --backend_url={backend_url} --simulation_state=COMPLETED
58"""
60ARRAY_FLUKA_BASH: str = """#!/bin/bash
61{array_header}
62ROOT_DIR={root_dir}
63WORK_DIR=$ROOT_DIR/workspaces/task_`printf %04d $SLURM_ARRAY_TASK_ID`
65# seed of RNG
66RNG_SEED=$SLURM_ARRAY_TASK_ID
68# main FLUKA input files
69INPUT_DIR=$ROOT_DIR/input
71# go to working directory
72cd $WORK_DIR
74# copy .inp file from input folder to working directory
75cp $INPUT_DIR/*.inp .
77# assign .inp file to a variable
78INPUT_FILE=$(ls *.inp)
80module load pymchelper
81python3 -c "from pymchelper.executor.runner import Runner;Runner._Runner__update_fluka_input_file('\\''${{INPUT_FILE}}'\\'',${{RNG_SEED}}.0)" # noqa: E501
82sig_handler()
83{{
84 echo "BATCH interrupted"
85 wait # wait for all children, this is important!
86}}
88# FILE_TO_WATCH=$WORK_DIR/fluka_`printf %04d $SLURM_ARRAY_TASK_ID`.log
89# python3 $ROOT_DIR/watcher.py \
90# --filepath=$FILE_TO_WATCH\
91# --sim_id={sim_id}\
92# --task_id=$SLURM_ARRAY_TASK_ID\
93# --update_key={update_key}\
94# --backend_url={backend_url}\
95# --verbose 1>watcher_$SLURM_ARRAY_TASK_ID.stdout 2>watcher_$SLURM_ARRAY_TASK_ID.stderr &
97trap 'sig_handler' SIGUSR1
99# execute simulation
100srun rfluka -N0 -M1 $WORK_DIR/*.inp &
102wait
103"""