Foam-Extend

Descrição

De acordo com a página do Foam-Extend, o projeto foam-extend é um fork da biblioteca open-source OpenFOAM para Dinâmica de Fluidos Computacional (CFD). É um projeto aberto que integra contribuições de usuários e desenvolvedores, incluindo correções de bugs, melhorias de performance e extensões como suporte a malhas dinâmicas, acoplamento conjugado de transferência de calor e suporte a GPU.

Versões Disponíveis

  • foam-extend/4.0 (default)

  • foam-extend/4.1

Submissão de Jobs Seriais

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

# Descompactar arquivo de entrada
unzip cavity.zip

# Executar caso
blockMesh
icoFoam

# Compactar resultados
zip -r cavity_results.zip [0-9]* constant system

Submissão de Jobs Paralelos

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

# Descompactar
unzip motorBike.zip

# Decompor domínio
decomposePar

# Executar em paralelo
mpirun -np $SLURM_NTASKS simpleFoam -parallel

# Reconstruir resultados
reconstructPar

# Compactar resultados
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

# Copiar caso tutorial
cp -r $FOAM_TUTORIALS/icoFoam/cavity cavity
cd cavity

# Gerar malha
blockMesh

# Compactar para uso posterior
zip -r ../cavity.zip 0 constant system

cd ..

Submissão de Jobs com GPU

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

# Versão com suporte a GPU
simpleFoam -gpu

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

Job Array para Múltiplos Casos

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 ..

Análise de Resultados

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

# Extrair forças
forces

# Calcular coeficientes
wallShearStress

# Extrair cortes
sample

zip -r postprocessing.zip postProcessing/

Referências

Ver também