FLACS-CFD

Dari ALELEON by EFISON

FLACS-CFD adalah software industri CFD buatan Gexcon (in-house software) untuk pemodelan ledakan dan keamanan desain konstruksi pabrik khususnya dari sisi simulasi persebaran api, asap, dan gas beracun ketika terjadi kecelakaan.

LICENSED SOFTWARE!
Software ini berjalan di ALELEON Supercomputer melalui FLACS License Manager dengan izin lisensi dan dikelola oleh PT. Gexcon Indonesia.

Versi yang Tersedia

Versi Nama Modul Dukungan Hardware
CPU GPU OMP Threading MPI Multi-Node
21.3 flacs-cfd V X V X

Menjalankan FLACS-CFD

User dapat menjalankan FLACS-CFD melalui pilihan (untuk tutorial lengkap klik judul):

EFIRO Job Composer

Dengan pilihan template yang tersedia:

Nama Template Penjelasan
FLACS-CFD 21.3 Menjalankan FLACS-CFD 21.3 standar
FLACS-CFD 21.3 Array Menjalankan FLACS-CFD 21.3 dalam skema SLURM array

SLURM sbatch via Terminal

Berikut adalah contoh Submit Script menjalankan FLACS-CFD standar (diambil dari template EFIRO Job Composer). Untuk nama modul software lihat tabel pada subbab Versi yang Tersedia.

Contoh Submit Script FLACS-CFD
#!/bin/bash

# ----------------------------------------------------------------------
# Template FLACS-CFD 21.3 
# Catatan:
# 1. User dapat mengisi parameter dengan mengganti bagian yang ditandai 
#    4 garing (////). Contoh: #SBATCH --mem=//// -> #SBATCH --mem=64GB
# 2. Panduan mengisi template:
#    https://wiki.efisonlt.com/wiki/SLURM_Script_ALELEON_Supercomputer
# ----------------------------------------------------------------------

#------------- SBATCH Partisi epyc / Compute Node CPU  -----------------
# Alokasi node, core thread CPU, RAM
#SBATCH --nodes=1     		
#SBATCH --ntasks=////				
#SBATCH --mem=////GB 				

# Time, nama output, dan error dapat diganti sesuai keinginan user 				
#SBATCH --time=24:00:00								
#SBATCH --output=result-%j.txt		
#SBATCH --error=error-%j.txt 		

# Notifikasi ke e-mail user tentang status jalannya job
#SBATCH --mail-user=//// 			
#SBATCH --mail-type=begin
#SBATCH --mail-type=end

# ------------------------ RUN SCRIPT ----------------------------------
# Load FLACS CFD software
module load flacs-cfd

# Run command
fgc - ////
run_flacscfd_omp ////

Berikut adalah contoh Submit Script menjalankan FLACS-CFD dalam skema array (diambil dari template EFIRO Job Composer):

Contoh Submit Script FLACS-CFD Array
#!/bin/bash

# ----------------------------------------------------------------------
# Template FLACS-CFD 21.3 Array
# Catatan:
# 1. User dapat mengisi parameter dengan mengganti bagian yang ditandai 
#    4 garing (////). Contoh: #SBATCH --mem=//// -> #SBATCH --mem=64GB
# 2. Panduan mengisi template:
#    https://wiki.efisonlt.com/wiki/SLURM_Script_ALELEON_Supercomputer
# ----------------------------------------------------------------------

#------------- SBATCH Partisi epyc / Compute Node CPU  -----------------
# Alokasi node, core thread CPU, RAM
#SBATCH --nodes=1     		
#SBATCH --ntasks=////				
#SBATCH --mem=////GB 

# Jumlah job array, contoh: 1-128
#SBATCH --array=////				

# Time, nama output, dan error dapat diganti sesuai keinginan user 				
#SBATCH --time=24:00:00								
#SBATCH --output=result-%j.txt		
#SBATCH --error=error-%j.txt 		

# Notifikasi ke e-mail user tentang status jalannya job
#SBATCH --mail-user=//// 			
#SBATCH --mail-type=begin
#SBATCH --mail-type=end 

# ------------------------ RUN SCRIPT ---------------------------------- 
# FLACS CS INPUT FILES WITH WILDCARD. Example: cs??????.dat3
INPUT_FILE='cs////.dat3'

# Abbreviate some SLURM variables for brevity/readability
TASK_MIN=${SLURM_ARRAY_TASK_MIN}
TASK_MAX=${SLURM_ARRAY_TASK_MAX}
TASK_ID=${SLURM_ARRAY_TASK_ID}
TASK_COUNT=${SLURM_ARRAY_TASK_COUNT}

# Form a list of relevant files, and check the number of array elements
# matches the number of cases with 6-digit identifiers.
CS_FILES=(`ls -1 ${INPUT_FILE}`)

if test "${#CS_FILES[@]}" -ne "${TASK_COUNT}";
then
  printf "Number of files is:       %s\n" "${#CS_FILES[@]}"
  printf "Number of array tasks is: %s\n" "${TASK_COUNT}"
  printf "Do not match!\n"
fi

# All tasks loop through the entire list to find their specific case.

for (( jid = $((${TASK_MIN})); jid <= $((${TASK_MAX})); jid++ ));
do
  if test "${TASK_ID}" -eq "${jid}";
  then
      # File list index with offset zero
      file_id=$((${jid} - ${TASK_MIN}))
      # Form the substring file_id (recall syntax is :offset:length)
      my_file=${CS_FILES[${file_id}]}
      my_file_id=${my_file:2:6}
  fi
done

printf "Task %d has file %s id %s\n" "${TASK_ID}" "${my_file}" "${my_file_id}"

# Load FLACS module
module load flacs-cfd

# Running fgc and FLACS CFD
fgc - ${my_file_id}
run_flacscfd_omp ${my_file_id}