2024-03-08 17:04:58 +01:00

108 lines
2.9 KiB
Python

import copy
import json
from dataclasses import dataclass
configurations = [
(1, 1, 1),
(1, 1, 2),
(1, 2, 2),
(2, 2, 2),
(2, 2, 4),
(2, 4, 4),
(4, 4, 4),
(4, 4, 8),
(4, 8, 8),
(8, 8, 8)
]
with open("templates/spheroid_weak.json") as template_file:
template = json.load(template_file)
SIZE_X = 400
SIZE_Y = 400
SIZE_Z = 400
for bx, by, bz in configurations:
nastja_config = copy.deepcopy(template)
nastja_config["Geometry"]["blockcount"] = [bx, by, bz]
nastja_config["Geometry"]["blocksize"] = [SIZE_X, SIZE_Y, SIZE_Z]
# Fill the whole domain with ECM
cells_filling = [
{
"shape": "cube",
"box": [
[0, 0, 0],
[bx * SIZE_X, by * SIZE_Y, bz * SIZE_Z]
],
"value": 0,
"celltype": 0
}
]
# Place a bunch of cells in each block to keep each rank busy
for z in range(bz):
for y in range(by):
for x in range(bx):
sx = x * SIZE_X
sy = y * SIZE_Y
sz = z * SIZE_Z
cells_filling.append({
"shape": "sphere",
"pattern": "voronoi",
"count": 5500,
"radius": 75,
"center": [sx + 200, sy + 200, sz + 200],
"box": [
[sx + 110, sy + 110, sz + 110],
[sx + 290, sy + 290, sz + 290]
],
"celltype": 9
})
nastja_config["Filling"]["cells"] = cells_filling
ntasks = bx * by * bz
if ntasks < 4:
nodes = 1
gpus_per_node = ntasks
else:
assert ntasks % 4 == 0
nodes = ntasks // 4
gpus_per_node = 4
label = f"weak400-t{ntasks:04}n{nodes:03}g{gpus_per_node}x{bx}y{by}z{bz}"
with open(f"configs/measurements/weak/spheroid_{label}.json", "w") as config_file:
json.dump(nastja_config, config_file, indent=2)
batch_config = f"""#!/usr/bin/env bash
#SBATCH --job-name={label}
#SBATCH --account=hkf6
#SBATCH --partition=booster
#SBATCH --nodes={nodes}
#SBATCH --ntasks={ntasks}
# Counted per node
#SBATCH --gres=gpu:{gpus_per_node}
#SBATCH --time=00:15:00
#SBATCH --output=logs/{label}-%A_%a.log
#SBATCH --error=logs/{label}-%A_%a.log
#SBATCH --array=1-5
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
OUTPUT_DIR="/p/scratch/cellsinsilico/paul/nastja-out/{label}-${{SLURM_ARRAY_TASK_ID}}"
echo "outdir is ${{OUTPUT_DIR}}"
mkdir -p "${{OUTPUT_DIR}}"
source "${{SOURCE_DIR}}/activate-nastja-modules"
srun --unbuffered "${{SOURCE_DIR}}/nastja/build-cuda/nastja" \\
-c "${{SOURCE_DIR}}/ma/experiments/configs/measurements/weak/spheroid_{label}.json" \\
-o "${{OUTPUT_DIR}}"
"""
with open(f"batch/measurements/weak/{label}", "w", encoding="utf8") as batch_config_file:
batch_config_file.write(batch_config)