Foam-Extend

Description

According to the page of Foam-Extend, the foam-extend project is a fork of the open-source OpenFOAM library for Computational Fluid Dynamics (CFD). It is an open project integrating contributions from users and developers, including bug fixes, performance improvements, and extensions such as dynamic mesh support, conjugate heat transfer coupling, and GPU support.

Available Versions

  • foam-extend/4.0 (default)

  • foam-extend/4.1

Serial Job Submission

submit_foam-extend_serial.sh
#!/bin/bash
#SBATCH -J foam_serial
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=8G

export INPUT="cavity.zip"
export OUTPUT="cavity_results.zip"

module load foam-extend
job-nanny ./run_serial.sh
run_serial.sh
#!/bin/bash

# Decompress input file
unzip cavity.zip

# Run case
blockMesh
icoFoam

# Compress results
zip -r cavity_results.zip [0-9]* constant system

Parallel Job Submission

submit_foam-extend_mpi.sh
#!/bin/bash
#SBATCH -J foam_mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 48:00:00
#SBATCH --mem-per-cpu=2G

export INPUT="motorBike.zip"
export OUTPUT="motorBike_results.zip"

module load foam-extend
job-nanny ./run_parallel.sh
run_parallel.sh
#!/bin/bash

# Decompress
unzip motorBike.zip

# Decompose domain
decomposePar

# Run in parallel
mpirun -np $SLURM_NTASKS simpleFoam -parallel

# Reconstruct results
reconstructPar

# Compress results
zip -r motorBike_results.zip [0-9]* constant system

Exemplo de Caso: Cavidade

preparar_cavidade.sh
#!/bin/bash
#SBATCH -J prepare_cavity
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 00:30:00
#SBATCH --mem=2G

export INPUT=""
export OUTPUT="cavity.zip"

module load foam-extend

# Copy tutorial case
cp -r $FOAM_TUTORIALS/icoFoam/cavity cavity
cd cavity

# Generate mesh
blockMesh

# Compress for later use
zip -r ../cavity.zip 0 constant system

cd ..

GPU Job Submission

submit_foam-extend_gpu.sh
#!/bin/bash
#SBATCH -J foam_gpu
#SBATCH -p gpu
#SBATCH --gres=gpu:1
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=16G

export INPUT="gpu_case.zip"
export OUTPUT="gpu_results.zip"

module load foam-extend
job-nanny ./run_gpu.sh
run_gpu.sh
#!/bin/bash

unzip gpu_case.zip

# Version with GPU support
simpleFoam -gpu

zip -r gpu_results.zip [0-9]* constant system

Job Array for Multiple Cases

submit_foam-extend_array.sh
#!/bin/bash
#SBATCH -J foam_array
#SBATCH --array=1-5
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 48:00:00
#SBATCH --mem-per-cpu=2G

CASES=(
    "cavity"
    "motorBike"
    "damBreak"
    "pitzDaily"
    "airFoil"
)

CASE=${CASES[$SLURM_ARRAY_TASK_ID-1]}
export INPUT="${CASE}.zip"
export OUTPUT="${CASE}_results.zip"

module load foam-extend

unzip ${CASE}.zip
cd ${CASE}

decomposePar
mpirun -np $SLURM_NTASKS simpleFoam -parallel
reconstructPar

zip -r ../${CASE}_results.zip [0-9]* constant system

cd ..

Results Analysis

submit_foam-extend_post.sh
#!/bin/bash
#SBATCH -J foam_post
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 02:00:00
#SBATCH --mem=4G

export INPUT="results.zip"
export OUTPUT="postprocessing/"

module load foam-extend
job-nanny ./postprocess.sh
postprocess.sh
#!/bin/bash

unzip results.zip

# Extract forças
forces

# Calculate coeficientes
wallShearStress

# Extract cortes
sample

zip -r postprocessing.zip postProcessing/

References

See also