Skip to content

Run SU2 Validation Test Cases #5

Run SU2 Validation Test Cases

Run SU2 Validation Test Cases #5

name: Run SU2 Validation Test Cases
on:
workflow_dispatch:
inputs:
branch_name:
description: "SU2 Branch To Check Out (e.g. master, develop)"
required: true
type: string
category:
description: "Validation Test Case Category"
required: true
type: choice
options:
- Basic
- All
case_code:
description: "Validation Test Case Code (e.g. 2DML)"
required: true
type: choice
options:
- 2DML
- All
turbulence_model:
description: "Turbulence Model"
required: true
type: choice
options:
- SA
- SST
- All
configuration:
description: "Specific Configuration (e.g. Configuration1) or All"
required: true
type: string
author_name:
description: "Author's Name (e.g. Harsh)"
required: true
type: string
env:
SANITIZED_AUTHOR: "Automated_Update"
SANITIZED_CONFIGURATION: ""
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Validate Inputs
run: |
if [ "${{ github.event.inputs.category }}" == "All" ] && [ "${{ github.event.inputs.case_code }}" != "All" ]; then
echo "::error::Invalid Combination: 'All' category cannot be paired with a specific case code (${{ github.event.inputs.case_code }})"
exit 1
fi
- name: Sanitize Author's Name
run: |
SANITIZED=$(echo "${{ github.event.inputs.author_name }}" |
tr -d '\n' | # Remove newlines
tr ' ' '_' | # Convert spaces
tr -s '_' | # Collapse multiple ____
sed 's/^_\+//; s/_\+$//' | # Trim leading/trailing _
tr -dc '[:alnum:]_' | # Strict character set
head -c 50)
# Fallback Conditions
if [[ -z "$SANITIZED" || "$SANITIZED" =~ ^[0-9_]+$ ]]; then
SANITIZED="Automated_Update"
fi
echo "SANITIZED_AUTHOR=${SANITIZED}" >> $GITHUB_ENV
- name: Validate And Sanitize Configuration Input
run: |
CONFIGURATION="${{ github.event.inputs.configuration }}"
CONFIG=$(echo "$CONFIGURATION" | xargs | head -c 20)
# Validate and standardize format
if [[ "$CONFIG" =~ ^[Cc]onfiguration[0-9]{1,4}$ ]]; then
NUMBER=$(echo "$CONFIG" | grep -oE '[1-9][0-9]*')
SANITIZED="Configuration$NUMBER"
elif [[ "${CONFIG,,}" == "all" ]]; then
SANITIZED="All"
else
echo "::error::Invalid configuration. Must be 'All' or 'ConfigurationX' (where X is a number)"
exit 1
fi
SANITIZED_CONFIG=$(echo "$SANITIZED" | tr -dc '[:alnum:]')
echo "SANITIZED_CONFIGURATION=$SANITIZED_CONFIG" >> $GITHUB_ENV
- name: Checkout Main Repo
uses: actions/checkout@v4
with:
path: main-repo
#- name: Download All Mesh And Restart Files From Google Drive
# run: |
# pip install gdown
# gdown --folder https://drive.google.com/drive/folders/1z6kSNo4Y62idDN3zTWsugMJhOEdpLt2r?usp=sharing -O turbmodels --fuzzy
- name: Download Required Mesh And Restart Files
run: |
pip install gdown jq
mkdir -p turbmodels/Mesh_Files turbmodels/Restart_Files
CATEGORY="${{ github.event.inputs.category }}"
CASE_CODE="${{ github.event.inputs.case_code }}"
TURB_MODEL="${{ github.event.inputs.turbulence_model }}"
CONFIG="${{ env.SANITIZED_CONFIGURATION }}"
# Function to download files for a specific case
download_case_files() {
local cat_name=$1
local case_name=$2
local model=$3
local config=$4
echo "Downloading files for $cat_name/$case_name/$model/$config"
# Create directories
mkdir -p "turbmodels/Mesh_Files/$cat_name/$case_name"
mkdir -p "turbmodels/Restart_Files/$cat_name/$case_name/$model/$config"
# Download mesh files
mesh_files=$(jq -r ".\"$cat_name\".\"$case_name\".mesh_files | to_entries[] | \"\(.key) \(.value)\"" main-repo/file_mapping.json)
while IFS=' ' read -r resolution file_id; do
if [ "$file_id" != "REPLACE_WITH_ACTUAL_FILE_ID" ] && [ -n "$file_id" ]; then
echo "Downloading mesh file for resolution: $resolution"
mkdir -p "turbmodels/Mesh_Files/$cat_name/$case_name/$resolution"
gdown "$file_id" -O "turbmodels/Mesh_Files/$cat_name/$case_name/$resolution/mesh.su2"
fi
done <<< "$mesh_files"
# Download restart files
restart_files=$(jq -r ".\"$cat_name\".\"$case_name\".\"$model\".\"$config\".restart_files | to_entries[] | \"\(.key) \(.value)\"" main-repo/file_mapping.json)
while IFS=' ' read -r resolution file_id; do
if [ "$file_id" != "REPLACE_WITH_ACTUAL_FILE_ID" ] && [ -n "$file_id" ]; then
echo "Downloading restart file for resolution: $resolution"
mkdir -p "turbmodels/Restart_Files/$cat_name/$case_name/$model/$config/$resolution"
gdown "$file_id" -O "turbmodels/Restart_Files/$cat_name/$case_name/$model/$config/$resolution/restart.dat"
fi
done <<< "$restart_files"
}
# Download based on user selection
if [ "$CATEGORY" = "All" ] && [ "$CASE_CODE" = "All" ]; then
# Download all files
BASE_PATH_MAIN="main-repo/ValidationCases"
for category_dir in "$BASE_PATH_MAIN"/*/; do
if [ -d "$category_dir" ] && [[ "$(basename "$category_dir")" != .* ]]; then
cat_name=$(basename "$category_dir")
BASE_PATH="main-repo/ValidationCases/$cat_name"
for case_dir in "$BASE_PATH"/*/; do
if [ -d "$case_dir" ] && [[ "$(basename "$case_dir")" != .* ]]; then
case_name=$(basename "$case_dir")
if [ "$TURB_MODEL" = "All" ]; then
for model in "SA" "SST"; do
if [ "$CONFIG" = "All" ]; then
BASE_PATH_CONFIG="main-repo/ValidationCases/$cat_name/$case_name/$model"
for config_dir in "$BASE_PATH_CONFIG"/Configuration*; do
if [ -d "$config_dir" ]; then
config=$(basename "$config_dir")
download_case_files "$cat_name" "$case_name" "$model" "$config"
fi
done
else
download_case_files "$cat_name" "$case_name" "$model" "$CONFIG"
fi
done
else
if [ "$CONFIG" = "All" ]; then
BASE_PATH_CONFIG="main-repo/ValidationCases/$cat_name/$case_name/$TURB_MODEL"
for config_dir in "$BASE_PATH_CONFIG"/Configuration*; do
if [ -d "$config_dir" ]; then
config=$(basename "$config_dir")
download_case_files "$cat_name" "$case_name" "$TURB_MODEL" "$config"
fi
done
else
download_case_files "$cat_name" "$case_name" "$TURB_MODEL" "$CONFIG"
fi
fi
fi
done
fi
done
else
# Download specific files
if [ "$CASE_CODE" = "All" ]; then
BASE_PATH="main-repo/ValidationCases/$CATEGORY"
for case_dir in "$BASE_PATH"/*/; do
if [ -d "$case_dir" ] && [[ "$(basename "$case_dir")" != .* ]]; then
case_name=$(basename "$case_dir")
if [ "$TURB_MODEL" = "All" ]; then
for model in "SA" "SST"; do
if [ "$CONFIG" = "All" ]; then
BASE_PATH_CONFIG="main-repo/ValidationCases/$CATEGORY/$case_name/$model"
for config_dir in "$BASE_PATH_CONFIG"/Configuration*; do
if [ -d "$config_dir" ]; then
config=$(basename "$config_dir")
download_case_files "$CATEGORY" "$case_name" "$model" "$config"
fi
done
else
download_case_files "$CATEGORY" "$case_name" "$model" "$CONFIG"
fi
done
else
if [ "$CONFIG" = "All" ]; then
BASE_PATH_CONFIG="main-repo/ValidationCases/$CATEGORY/$case_name/$TURB_MODEL"
for config_dir in "$BASE_PATH_CONFIG"/Configuration*; do
if [ -d "$config_dir" ]; then
config=$(basename "$config_dir")
download_case_files "$CATEGORY" "$case_name" "$TURB_MODEL" "$config"
fi
done
else
download_case_files "$CATEGORY" "$case_name" "$TURB_MODEL" "$CONFIG"
fi
fi
fi
done
else
if [ "$TURB_MODEL" = "All" ]; then
for model in "SA" "SST"; do
if [ "$CONFIG" = "All" ]; then
BASE_PATH_CONFIG="main-repo/ValidationCases/$CATEGORY/$CASE_CODE/$model"
for config_dir in "$BASE_PATH_CONFIG"/Configuration*; do
if [ -d "$config_dir" ]; then
config=$(basename "$config_dir")
download_case_files "$CATEGORY" "$CASE_CODE" "$model" "$config"
fi
done
else
download_case_files "$CATEGORY" "$CASE_CODE" "$model" "$CONFIG"
fi
done
else
if [ "$CONFIG" = "All" ]; then
BASE_PATH_CONFIG="main-repo/ValidationCases/$CATEGORY/$CASE_CODE/$TURB_MODEL"
for config_dir in "$BASE_PATH_CONFIG"/Configuration*; do
if [ -d "$config_dir" ]; then
config=$(basename "$config_dir")
download_case_files "$CATEGORY" "$CASE_CODE" "$TURB_MODEL" "$config"
fi
done
else
download_case_files "$CATEGORY" "$CASE_CODE" "$TURB_MODEL" "$CONFIG"
fi
fi
fi
fi
- name: Set Up Python 3.11
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install System Dependencies
run: |
sudo apt update
sudo apt install -y \
build-essential cmake ninja-build libopenmpi-dev openmpi-bin swig \
libboost-all-dev libmetis-dev libparmetis-dev libhdf5-dev zlib1g-dev \
python3-dev python3-pip git wget libgl1
- name: Install Python Dependencies
run: |
python -m pip install --upgrade pip
pip install numpy matplotlib pyvista pandas
- name: Install SU2
run: |
git clone https://github.com/su2code/SU2.git
cd SU2
# Check if branch exists
if ! git show-ref --quiet refs/remotes/origin/${{ github.event.inputs.branch_name }}; then
echo "::error::Branch ${{ github.event.inputs.branch_name }} not found in SU2 repository"
exit 1
fi
if [ "${{ github.event.inputs.branch_name }}" = "master" ]; then
git reset --hard origin/master
else
git checkout -b ${{ github.event.inputs.branch_name }} origin/${{ github.event.inputs.branch_name }}
fi
python meson.py build -Dwith-mpi=disabled -Denable-pywrapper=true --prefix=/usr/local
ninja -C build
sudo ninja -C build install
sudo ldconfig
echo "PATH=/usr/local/bin:$PATH" >> $GITHUB_ENV
- name: Process All Test Cases
if: ${{ github.event.inputs.category == 'All' && github.event.inputs.case_code == 'All' }}
run: |
CATEGORY="${{ github.event.inputs.category }}"
CASE_CODE="${{ github.event.inputs.case_code }}"
TURB_MODEL="${{ github.event.inputs.turbulence_model }}"
CONFIG="${{ env.SANITIZED_CONFIGURATION }}"
AUTHOR="${{ env.SANITIZED_AUTHOR }}"
# Create results directory
mkdir -p results
BASE_PATH_MAIN="main-repo/ValidationCases"
ARTIFACT_NAME="ValidationCases_${AUTHOR}"
mkdir -p "results/$ARTIFACT_NAME"
for category_dir in "$BASE_PATH_MAIN"/*/; do
if [ -d "$category_dir" ] && [[ "$(basename "$category_dir")" != .* ]]; then
category_name=$(basename "$category_dir")
echo "Processing category: $category_name"
mkdir -p "results/$ARTIFACT_NAME/$category_name"
BASE_PATH="main-repo/ValidationCases/$category_name"
for case_dir in "$BASE_PATH"/*/; do
if [ -d "$case_dir" ] && [[ "$(basename "$case_dir")" != .* ]]; then
case_name=$(basename "$case_dir")
echo "Processing folder: $case_name"
mkdir -p "results/$ARTIFACT_NAME/$category_name/$case_name"
if [ "$TURB_MODEL" = "All" ]; then
BASE_PATH_CASE="main-repo/ValidationCases/$category_name/$case_name"
for turb_dir in "$BASE_PATH_CASE"/*/; do
if [ -d "$turb_dir" ] && [[ "$(basename "$turb_dir")" != .* ]]; then
turb_name=$(basename "$turb_dir")
echo "Processing folder: $turb_name"
mkdir -p "results/$ARTIFACT_NAME/$category_name/$case_name/$turb_name"
BASE_PATH_TURB="main-repo/ValidationCases/$category_name/$case_name/$turb_name"
MESH_BASE_PATH="turbmodels/Mesh_Files/$category_name/$case_name"
RESTART_BASE_PATH="turbmodels/Restart_Files/$category_name/$case_name/$turb_name"
if [ "$CONFIG" = "All" ]; then
# Process all configurations
for config_dir in "$BASE_PATH_TURB"/Configuration*; do
if [ -d "$config_dir" ]; then
CONFIG_NAME=$(basename "$config_dir")
echo "Processing $CONFIG_NAME"
# Create config-specific result directory
mkdir -p "results/$ARTIFACT_NAME/$category_name/$case_name/$turb_name/$CONFIG_NAME"
# Process this configuration
python3 main-repo/ValidationCases/Automation.py \
--category "$category_name" \
--case-code "$case_name" \
--turbulence-model "$turb_name" \
--configuration "$CONFIG_NAME" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH_TURB" \
--output-path "results/$ARTIFACT_NAME/$category_name/$case_name/$turb_name/$CONFIG_NAME"
fi
done
else
# Process specific configuration
mkdir -p "results/$ARTIFACT_NAME/$category_name/$case_name/$turb_name/$CONFIG"
echo "Processing $CONFIG"
python3 main-repo/ValidationCases/Automation.py \
--category "$category_name" \
--case-code "$case_name" \
--turbulence-model "$turb_name" \
--configuration "$CONFIG" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH_TURB" \
--output-path "results/$ARTIFACT_NAME/$category_name/$case_name/$turb_name/$CONFIG"
fi
fi
done
else
BASE_PATH_CASE="main-repo/ValidationCases/$category_name/$case_name/$TURB_MODEL"
MESH_BASE_PATH="turbmodels/Mesh_Files/$category_name/$case_name"
RESTART_BASE_PATH="turbmodels/Restart_Files/$category_name/$case_name/$TURB_MODEL"
if [ "$CONFIG" = "All" ]; then
# Process all configurations
mkdir -p "results/$ARTIFACT_NAME/$category_name/$case_name/$TURB_MODEL"
for config_dir in "$BASE_PATH_CASE"/Configuration*; do
if [ -d "$config_dir" ]; then
CONFIG_NAME=$(basename "$config_dir")
echo "Processing $CONFIG_NAME"
# Create config-specific result directory
mkdir -p "results/$ARTIFACT_NAME/$category_name/$case_name/$TURB_MODEL/$CONFIG_NAME"
# Process this configuration
python3 main-repo/ValidationCases/Automation.py \
--category "$category_name" \
--case-code "$case_name" \
--turbulence-model "$TURB_MODEL" \
--configuration "$CONFIG_NAME" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH_CASE" \
--output-path "results/$ARTIFACT_NAME/$category_name/$case_name/$TURB_MODEL/$CONFIG_NAME"
fi
done
else
# Process specific configuration
mkdir -p "results/$ARTIFACT_NAME/$category_name/$case_name/$TURB_MODEL/$CONFIG"
echo "Processing $CONFIG"
python3 main-repo/ValidationCases/Automation.py \
--category "$category_name" \
--case-code "$case_name" \
--turbulence-model "$TURB_MODEL" \
--configuration "$CONFIG" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH_CASE" \
--output-path "results/$ARTIFACT_NAME/$category_name/$case_name/$TURB_MODEL/$CONFIG"
fi
fi
fi
done
fi
done
- name: Process Specific Category
if: ${{ github.event.inputs.category != 'All' && github.event.inputs.case_code == 'All' }}
run: |
CATEGORY="${{ github.event.inputs.category }}"
CASE_CODE="${{ github.event.inputs.case_code }}"
TURB_MODEL="${{ github.event.inputs.turbulence_model }}"
CONFIG="${{ env.SANITIZED_CONFIGURATION }}"
AUTHOR="${{ env.SANITIZED_AUTHOR }}"
# Create results directory
mkdir -p results
BASE_PATH="main-repo/ValidationCases/$CATEGORY"
ARTIFACT_NAME="ValidationCases_${AUTHOR}"
mkdir -p "results/$ARTIFACT_NAME"
for case_dir in "$BASE_PATH"/*/; do
if [ -d "$case_dir" ] && [[ "$(basename "$case_dir")" != .* ]]; then
case_name=$(basename "$case_dir")
echo "Processing folder: $case_name"
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$case_name"
if [ "$TURB_MODEL" = "All" ]; then
BASE_PATH_CASE="main-repo/ValidationCases/$CATEGORY/$case_name"
for turb_dir in "$BASE_PATH_CASE"/*/; do
if [ -d "$turb_dir" ] && [[ "$(basename "$turb_dir")" != .* ]]; then
turb_name=$(basename "$turb_dir")
echo "Processing folder: $turb_name"
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$case_name/$turb_name"
BASE_PATH_TURB="main-repo/ValidationCases/$CATEGORY/$case_name/$turb_name"
MESH_BASE_PATH="turbmodels/Mesh_Files/$CATEGORY/$case_name"
RESTART_BASE_PATH="turbmodels/Restart_Files/$CATEGORY/$case_name/$turb_name"
if [ "$CONFIG" = "All" ]; then
# Process all configurations
for config_dir in "$BASE_PATH_TURB"/Configuration*; do
if [ -d "$config_dir" ]; then
CONFIG_NAME=$(basename "$config_dir")
echo "Processing $CONFIG_NAME"
# Create config-specific result directory
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$case_name/$turb_name/$CONFIG_NAME"
# Process this configuration
python3 main-repo/ValidationCases/Automation.py \
--category "$CATEGORY" \
--case-code "$case_name" \
--turbulence-model "$turb_name" \
--configuration "$CONFIG_NAME" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH_TURB" \
--output-path "results/$ARTIFACT_NAME/$CATEGORY/$case_name/$turb_name/$CONFIG_NAME"
fi
done
else
# Process specific configuration
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$case_name/$turb_name/$CONFIG"
echo "Processing $CONFIG"
python3 main-repo/ValidationCases/Automation.py \
--category "$CATEGORY" \
--case-code "$case_name" \
--turbulence-model "$turb_name" \
--configuration "$CONFIG" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH_TURB" \
--output-path "results/$ARTIFACT_NAME/$CATEGORY/$case_name/$turb_name/$CONFIG"
fi
fi
done
else
BASE_PATH_CASE="main-repo/ValidationCases/$CATEGORY/$case_name/$TURB_MODEL"
MESH_BASE_PATH="turbmodels/Mesh_Files/$CATEGORY/$case_name"
RESTART_BASE_PATH="turbmodels/Restart_Files/$CATEGORY/$case_name/$TURB_MODEL"
if [ "$CONFIG" = "All" ]; then
# Process all configurations
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$case_name/$TURB_MODEL"
for config_dir in "$BASE_PATH_CASE"/Configuration*; do
if [ -d "$config_dir" ]; then
CONFIG_NAME=$(basename "$config_dir")
echo "Processing $CONFIG_NAME"
# Create config-specific result directory
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$case_name/$TURB_MODEL/$CONFIG_NAME"
# Process this configuration
python3 main-repo/ValidationCases/Automation.py \
--category "$CATEGORY" \
--case-code "$case_name" \
--turbulence-model "$TURB_MODEL" \
--configuration "$CONFIG_NAME" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH_CASE" \
--output-path "results/$ARTIFACT_NAME/$CATEGORY/$case_name/$TURB_MODEL/$CONFIG_NAME"
fi
done
else
# Process specific configuration
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$case_name/$TURB_MODEL/$CONFIG"
echo "Processing $CONFIG"
python3 main-repo/ValidationCases/Automation.py \
--category "$CATEGORY" \
--case-code "$case_name" \
--turbulence-model "$TURB_MODEL" \
--configuration "$CONFIG" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH_CASE" \
--output-path "results/$ARTIFACT_NAME/$CATEGORY/$case_name/$TURB_MODEL/$CONFIG"
fi
fi
fi
done
- name: Process Specific Test Case
if: ${{ github.event.inputs.category != 'All' && github.event.inputs.case_code != 'All' }}
run: |
CATEGORY="${{ github.event.inputs.category }}"
CASE_CODE="${{ github.event.inputs.case_code }}"
TURB_MODEL="${{ github.event.inputs.turbulence_model }}"
CONFIG="${{ env.SANITIZED_CONFIGURATION }}"
AUTHOR="${{ env.SANITIZED_AUTHOR }}"
# Create results directory
mkdir -p results
ARTIFACT_NAME="ValidationCases_${AUTHOR}"
mkdir -p "results/$ARTIFACT_NAME"
if [ "$TURB_MODEL" = "All" ]; then
BASE_PATH="main-repo/ValidationCases/$CATEGORY/$CASE_CODE"
for turb_dir in "$BASE_PATH"/*/; do
if [ -d "$turb_dir" ] && [[ "$(basename "$turb_dir")" != .* ]]; then
turb_name=$(basename "$turb_dir")
echo "Processing folder: $turb_name"
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$CASE_CODE/$turb_name"
BASE_PATH_TURB="main-repo/ValidationCases/$CATEGORY/$CASE_CODE/$turb_name"
MESH_BASE_PATH="turbmodels/Mesh_Files/$CATEGORY/$CASE_CODE"
RESTART_BASE_PATH="turbmodels/Restart_Files/$CATEGORY/$CASE_CODE/$turb_name"
if [ "$CONFIG" = "All" ]; then
# Process all configurations
for config_dir in "$BASE_PATH_TURB"/Configuration*; do
if [ -d "$config_dir" ]; then
CONFIG_NAME=$(basename "$config_dir")
echo "Processing $CONFIG_NAME"
# Create config-specific result directory
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$CASE_CODE/$turb_name/$CONFIG_NAME"
# Process this configuration
python3 main-repo/ValidationCases/Automation.py \
--category "$CATEGORY" \
--case-code "$CASE_CODE" \
--turbulence-model "$turb_name" \
--configuration "$CONFIG_NAME" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH_TURB" \
--output-path "results/$ARTIFACT_NAME/$CATEGORY/$CASE_CODE/$turb_name/$CONFIG_NAME"
fi
done
else
# Process specific configuration
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$CASE_CODE/$turb_name/$CONFIG"
echo "Processing $CONFIG"
python3 main-repo/ValidationCases/Automation.py \
--category "$CATEGORY" \
--case-code "$CASE_CODE" \
--turbulence-model "$turb_name" \
--configuration "$CONFIG" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH_TURB" \
--output-path "results/$ARTIFACT_NAME/$CATEGORY/$CASE_CODE/$turb_name/$CONFIG"
fi
fi
done
else
BASE_PATH="main-repo/ValidationCases/$CATEGORY/$CASE_CODE/$TURB_MODEL"
MESH_BASE_PATH="turbmodels/Mesh_Files/$CATEGORY/$CASE_CODE"
RESTART_BASE_PATH="turbmodels/Restart_Files/$CATEGORY/$CASE_CODE/$TURB_MODEL"
if [ "$CONFIG" = "All" ]; then
# Process all configurations
for config_dir in "$BASE_PATH"/Configuration*; do
if [ -d "$config_dir" ]; then
CONFIG_NAME=$(basename "$config_dir")
echo "Processing $CONFIG_NAME"
# Create config-specific result directory
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$CASE_CODE/$TURB_MODEL/$CONFIG_NAME"
# Process this configuration
python3 main-repo/ValidationCases/Automation.py \
--category "$CATEGORY" \
--case-code "$CASE_CODE" \
--turbulence-model "$TURB_MODEL" \
--configuration "$CONFIG_NAME" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH" \
--output-path "results/$ARTIFACT_NAME/$CATEGORY/$CASE_CODE/$TURB_MODEL/$CONFIG_NAME"
fi
done
else
mkdir -p "results/$ARTIFACT_NAME/$CATEGORY/$CASE_CODE/$TURB_MODEL/$CONFIG"
echo "Processing $CONFIG"
python3 main-repo/ValidationCases/Automation.py \
--category "$CATEGORY" \
--case-code "$CASE_CODE" \
--turbulence-model "$TURB_MODEL" \
--configuration "$CONFIG" \
--mesh-path "$MESH_BASE_PATH" \
--restart-path "$RESTART_BASE_PATH" \
--main-path "$BASE_PATH" \
--output-path "results/$ARTIFACT_NAME/$CATEGORY/$CASE_CODE/$TURB_MODEL/$CONFIG"
fi
fi
- name: Upload Results as Artifacts
uses: actions/upload-artifact@v4
with:
name: "ValidationCases_${{ env.SANITIZED_AUTHOR }}"
path: results/
retention-days: 7
- name: Deploy to Results Website
if: success()
run: |
# Clone and checkout existing branch if it exists, or create new
BRANCH_NAME="ValidationCases_${{ github.event.inputs.branch_name }}_${{ env.SANITIZED_AUTHOR }}"
git clone --branch "$BRANCH_NAME" --single-branch https://${{ secrets.VANDV_ACTIONS }}@github.com/su2code/su2code.github.io.git website || \
git clone https://${{ secrets.VANDV_ACTIONS }}@github.com/su2code/su2code.github.io.git website
cd website
git config user.name "GitHub Actions"
git config user.email "[email protected]"
# If branch doesn't exist, create it
if ! git rev-parse --verify "$BRANCH_NAME" >/dev/null 2>&1; then
git checkout -b "$BRANCH_NAME"
else
git checkout "$BRANCH_NAME"
git pull origin "$BRANCH_NAME" --rebase
fi
find ../results -name "plots" -type d | while read plot_dir; do
config_name=$(basename $(dirname "${plot_dir%/}"))
turb_name=$(basename $(dirname $(dirname "${plot_dir%/}")))
case_name=$(basename $(dirname $(dirname $(dirname "${plot_dir%/}"))))
target_dir="vandv_files/${case_name}/${case_name}_${turb_name}_${config_name}"
# Remove existing directory if present
if [ -d "$target_dir" ]; then
echo "Overwriting existing results at $target_dir"
rm -rf "$target_dir"
fi
mkdir -p "$(dirname "$target_dir")"
cp -r "$plot_dir" "$target_dir"
done
# Commit and push if there are changes
if [ -n "$(git status --porcelain)" ]; then
git add .
git commit -m "Update validation results"
git push --force origin "$BRANCH_NAME"
else
echo "No changes to commit"
fi
- name: Cleanup
if: always()
run: |
BASE_PATH="main-repo/ValidationCases"
find "$BASE_PATH" \
-type d \
-path "*/Configuration*" \
! -path "*/.*" \
-exec sh -c '
for config_dir do
find "$config_dir" \
\( -name "*.csv" -o -name "*.vtu" -o -name "*.dat" -o -name "*.su2" -o -name "Config.cfg" \) \
-delete 2>/dev/null
done
' sh {} +
echo "Cleanup completed - All mesh folders restored to original state"
- name: Summary
run: |
echo "SU2 Validation Workflow Completed Successfully!"
echo "Author: ${{ env.SANITIZED_AUTHOR }}"