mcpField
A
ansys-simulation

ansys-simulation

github.com/soljournerその他9572 回インストール51 週間前に更新
リポジトリ

ansys-simulation について

ansys-simulation は、Python、Journal ファイル、PyAnsys を使った ANSYS Fluent の CFD シミュレーション自動化ガイドです。シミュレーション技術者やスクリプトを作成する開発者向けに、設定からバッチ計算、後処理までを扱います。

主な機能

  1. 01PyFluent セッションとシミュレーションの制御
  2. 02Journal ファイルによるバッチスクリプト
  3. 03ジオメトリ読み込みとメッシュ作成の手順
  4. 04乱流、境界条件、ソルバーの設定
  5. 05結果抽出と後処理
  6. 06ライセンス、収束、トラブルシューティングの案内

活用シーン

  1. 01Fluent のバッチシミュレーション自動化
  2. 02入口速度を変えたパラメトリックスタディ
  3. 03メッシュ、物理モデル、境界条件の設定
  4. 04シミュレーション結果の抽出と確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/soljourner/claude-engineering-skills --skill ansys-simulation

インストール後、Claude Code で/ansys-simulationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

api-reference.md
examples/
batch_simulation.py
pump_cfd_setup.py
turbulence_model_config.py

詳細

ANSYS シミュレーション統合

Python スクリプト、ジャーナルファイル、PyAnsys エコシステムを使用して、ANSYS Fluent の CFD(計算流体力学)シミュレーションを自動化するための包括的なガイドです。

概要

ANSYS Fluent は、複雑な形状における流体の流れ、熱伝達、および関連する現象をシミュレーションするために使用される、業界をリードする商用 CFD ソルバーです。このスキルでは、次の自動化手法を取り上げます。

  • ANSYS Workbench:CAD 統合、メッシュ生成、ワークフロー管理のための統合プラットフォーム
  • ANSYS Fluent:幅広い物理モデルを備えた高度な CFD ソルバー
  • PyAnsys:プログラムによる制御を可能にする Python API エコシステム
  • ジャーナルファイル:バッチ処理用のテキストベースのスクリプト

ANSYS Workbench と Fluent のアーキテクチャ

ANSYS Workbench
  • プロジェクトベースのワークフロー環境
  • 複数の ANSYS ツール(Fluent、CFX、Mechanical など)を統合
  • パラメトリックスタディと設計最適化をサポート
  • ジオメトリおよびメッシュ生成ツール(DesignModeler、SpaceClaim、Meshing)を提供
ANSYS Fluent
  • 有限体積法ベースの CFD ソルバー
  • 幅広い乱流モデル(k-epsilon、k-omega SST、LES、DES)
  • 混相流機能
  • 熱伝達および燃焼のモデリング
  • C によるユーザー定義関数(UDF)
  • スクリプト用のテキストユーザーインターフェース(TUI)

ライセンス要件

商用ライセンス

ANSYS 製品を使用するには、ANSYS License Manager で管理される商用ライセンスが必要です。

  • Fluent のライセンスタイプ:

    • 並列計算用の HPC ライセンス
    • ソルバーライセンス(インクリメント単位)
    • 前処理/後処理用の PrepPost ライセンス
  • ライセンスサーバーの設定:

    # Set license server environment variable
    export [email protected]
    
    # Or in Windows
    set [email protected]
    
  • ライセンスのチェックアウト:Fluent の起動時にライセンスがチェックアウトされ、終了時に返却されます

  • HPC ライセンス:並列実行には追加のライセンスが必要です(通常、コア数/4)

アカデミックライセンス
  • 制限付きの学生/教育用ライセンスを利用できます
  • 通常、メッシュサイズとソルバー機能に制限があります
  • 別途ライセンスファイルが必要です
重要事項
  • バッチ実行の前に、必ずライセンスの利用可能状況を確認してください
  • 自動化されたワークフローでは、ライセンスの使用状況を考慮してください
  • HPC ライセンス用に、-t フラグでプロセッサ数を指定してください

PyAnsys - Python API の概要

PyAnsys は ANSYS 製品向けの Python らしいインターフェースを提供し、次のことが可能になります。

  • リモートまたはローカルのセッション管理
  • シミュレーション設定のプログラムによる制御
  • データの抽出と後処理
  • Python データサイエンススタックとの統合
インストール
# Install PyFluent (for Fluent automation)
pip install ansys-fluent-core

# Install other PyAnsys packages as needed
pip install ansys-mapdl-core      # For Mechanical
pip install ansys-dpf-core        # For post-processing
pip install ansys-geometry        # For geometry operations
PyFluent の基本的な使い方
from ansys.fluent.core import launch_fluent

# Launch Fluent session
session = launch_fluent(precision='double', processor_count=4, mode='solver')

# Access TUI commands
session.tui.file.read_case('case_file.cas')

# Execute commands
session.tui.solve.iterate(100)

# Clean exit
session.exit()
PyAnsys の主なコンポーネント
  • ansys-fluent-core:Fluent 自動化の主要パッケージ
  • ansys-fluent-visualization:後処理と可視化
  • ansys-geometry:CAD 操作とジオメトリの編集
  • ansys-meshing:メッシュ生成の自動化ワークフロー

ジャーナルファイルのスクリプト作成

ジャーナルファイルは、Fluent が順番に実行する TUI コマンドを含むテキストベースのスクリプトです。

ジャーナルファイルの形式
; Comments start with semicolon
; Commands follow TUI menu structure

/file/read-case case_file.cas

/solve/initialize/initialize-flow
/solve/iterate 1000

/file/write-data result.dat

/exit yes
ジャーナルファイルの実行
# Run Fluent in batch mode with journal file
fluent 3ddp -g -i journal.jou > fluent.log

# Flags:
# 3ddp: 3D double precision
# -g: Run without GUI
# -i: Input journal file
# -t4: Use 4 processors
ジャーナルファイルのベストプラクティス
  • ファイル入出力には絶対パスを使用する
  • 可能な限りエラーチェックを含める
  • 保守しやすいようにコメントを追加する
  • バッチ実行の前に、対話的にテストする
  • デバッグ用に出力をログファイルへリダイレクトする

一般的なワークフロー

1. ジオメトリのインポート

PyFluent を使用する場合:

from ansys.fluent.core import launch_fluent

solver = launch_fluent(precision='double', processor_count=4)

# Import geometry
solver.tui.file.import_.cad_geometry(
    'geometry.scdoc',
    'yes'  # Confirm import
)

ジャーナルファイルを使用する場合:

/file/import/cad-geometry geometry.step yes
2. メッシュの設定

メッシュ生成の方針:

  • CAD からの表面メッシュ抽出
  • 体積メッシュ生成(四面体、六面体、多面体)
  • 壁面流れに対する境界層の細分化
  • メッシュ品質の確認

PyFluent によるメッシュ生成:

from ansys.fluent.core import launch_fluent

meshing = launch_fluent(precision='double', processor_count=4, mode='meshing')

# Import geometry
meshing.workflow.InitializeWorkflow(WorkflowType='Watertight Geometry')

# Set meshing parameters
meshing.meshing.GlobalSettings.set_state({
    'MaxSize': 0.1,
    'MinSize': 0.001,
    'GrowthRate': 1.2
})

# Generate mesh
meshing.meshing.GenerateMesh()

# Switch to solver
solver = meshing.switch_to_solver()

ジャーナルファイルによるメッシュ生成:

/mesh/scale 0.001 0.001 0.001
/mesh/check
/mesh/repair-improve/repair
3. 物理モデルの設定

乱流モデル:

  • k-epsilon:汎用的で、壁面関数を使用
  • k-omega SST:逆圧力勾配や境界層により適しています
  • LES/DES:非定常で高忠実度のラージ・エディ・シミュレーション

材料特性:

  • 流体特性(密度、粘度、熱伝導率)
  • 共役熱伝達用の固体特性

PyFluent による物理モデルの設定:

# Enable energy equation
solver.tui.define.models.energy('yes')

# Set turbulence model (k-omega SST)
solver.tui.define.models.viscous.kw_sst('yes')

# Define material properties
solver.tui.define.materials.change_create(
    'water-liquid',
    'water',
    'yes',
    'constant',
    998.2,  # Density
    'yes',
    'constant',
    0.001003  # Viscosity
)

# Assign material to cell zone
solver.tui.define.boundary_conditions.fluid(
    'fluid-zone',
    'yes',
    'water',
    'no',
    'no',
    'no',
    'no',
    0,
    'no',
    0,
    'no',
    0,
    'no',
    'no'
)

ジャーナルファイルによる物理モデルの設定:

/define/models/energy yes no no no no
/define/models/viscous kw-sst yes
/define/materials/change-create air air yes constant 1.225 yes constant 1.7894e-05
4. 境界条件

一般的な境界条件の種類:

  • 速度流入
  • 圧力流出
  • 壁(静止、移動、回転)
  • 対称
  • 周期

PyFluent の境界条件設定:

# Velocity inlet
solver.tui.define.boundary_conditions.velocity_inlet(
    'inlet',
    'yes',
    'no',
    'yes',
    'yes',
    'no',
    10,  # Velocity magnitude (m/s)
    'no',
    0,
    'no',
    0,
    'no',
    300,  # Temperature
    'no'
)

# Pressure outlet
solver.tui.define.boundary_conditions.pressure_outlet(
    'outlet',
    'yes',
    'no',
    0,  # Gauge pressure
    'no',
    300,
    'no',
    'yes'
)

# Wall with no-slip
solver.tui.define.boundary_conditions.wall(
    'wall',
    'yes',
    'no',
    'no',
    0,
    'no',
    0,
    'no',
    'yes',
    'no',
    0
)
5. ソルバー設定

解法:

  • 圧力・速度連成(SIMPLE、SIMPLEC、PISO、Coupled)
  • 離散化スキーム(一次風上、二次風上、QUICK)
  • 勾配の評価(最小二乗法、Green-Gauss)

PyFluent のソルバー設定:

# Set pressure-velocity coupling
solver.tui.solve.set.p_v_coupling(24)  # 24 = Coupled

# Set discretization schemes
solver.tui.solve.set.discretization_scheme.pressure(12)  # Second order
solver.tui.solve.set.discretization_scheme.mom(1)  # Second order upwind
solver.tui.solve.set.discretization_scheme.k(1)
solver.tui.solve.set.discretization_scheme.omega(1)

# Set under-relaxation factors
solver.tui.solve.set.under_relaxation.pressure(0.3)
solver.tui.solve.set.under_relaxation.mom(0.7)

# Initialize flow field
solver.tui.solve.initialize.initialize_flow()

# Run iterations
solver.tui.solve.iterate(1000)

収束基準:

# Set residual convergence criteria
solver.tui.solve.monitors.residual.convergence_criteria(
    '1e-6',  # continuity
    '1e-6',  # x-velocity
    '1e-6',  # y-velocity
    '1e-6',  # z-velocity
    '1e-6',  # energy
    '1e-6',  # k
    '1e-6'   # omega
)
6. 後処理

データ抽出:

# Create surface for reporting
solver.tui.surface.iso_surface(
    'pressure',
    'iso-surface-1',
    'fluid-zone',
    '()',
    101325
)

# Export data
solver.tui.file.export.ascii(
    'surface-data.csv',
    'iso-surface-1',
    '()',
    'yes',
    'pressure',
    'velocity-magnitude',
    '()'
)

# Calculate force on wall
solver.tui.report.forces.wall_forces(
    'yes',
    'wall-zone',
    '()',
    'yes',
    'no',
    'yes'
)

可視化:

# Generate contour plot (requires GUI mode or visualization package)
solver.tui.display.set.contours.filled_contours('yes')
solver.tui.display.contour(
    'pressure',
    'pressure',
    0,
    0,
    'surface-1',
    '()'
)

# Save image
solver.tui.display.save_picture('pressure_contour.png')

バッチモードでの実行

Linux/Unix でのバッチ実行
#!/bin/bash
# batch_fluent.sh

# Set license server
export [email protected]

# Set number of processors
NPROCS=8

# Run Fluent in batch mode
fluent 3ddp -g -t${NPROCS} -i simulation.jou > fluent_${NPROCS}cores.log 2>&1

# Check exit status
if [ $? -eq 0 ]; then
    echo "Simulation completed successfully"
else
    echo "Simulation failed - check log file"
    exit 1
fi
Windows でのバッチ実行
@echo off
REM batch_fluent.bat

set [email protected]
set NPROCS=8

"C:\Program Files\ANSYS Inc\v241\fluent\ntbin\win64\fluent.exe" 3ddp -g -t%NPROCS% -i simulation.jou > fluent.log 2>&1

if %ERRORLEVEL% EQU 0 (
    echo Simulation completed successfully
) else (
    echo Simulation failed - check log file
    exit /b 1
)
Python ベースのバッチ実行
import subprocess
import os
from pathlib import Path

def run_fluent_batch(journal_file, num_procs=4, log_file='fluent.log'):
    """
    Run Fluent in batch mode with journal file.

    Args:
        journal_file: Path to journal file
        num_procs: Number of processors
        log_file: Output log file name

    Returns:
        bool: True if successful, False otherwise
    """
    # Set license server
    os.environ['ANSYSLMD_LICENSE_FILE'] = '[email protected]'

    # Build command
    cmd = [
        'fluent',
        '3ddp',           # 3D double precision
        '-g',             # No GUI
        f'-t{num_procs}', # Number of processors
        '-i', journal_file
    ]

    # Run simulation
    with open(log_file, 'w') as log:
        result = subprocess.run(
            cmd,
            stdout=log,
            stderr=subprocess.STDOUT,
            text=True
        )

    return result.returncode == 0

# Example usage
if __name__ == '__main__':
    success = run_fluent_batch(
        journal_file='simulation.jou',
        num_procs=8,
        log_file='fluent_run.log'
    )

    if success:
        print("Simulation completed successfully")
    else:
        print("Simulation failed - check log file")
パラメトリックスタディ
import numpy as np
from ansys.fluent.core import launch_fluent

def parametric_study(velocities, case_file):
    """
    Run parametric study varying inlet velocity.

    Args:
        velocities: List of inlet velocities to test
        case_file: Base case file
    """
    results = {}

    for velocity in velocities:
        print(f"Running simulation with velocity = {velocity} m/s")

        # Launch Fluent
        solver = launch_fluent(precision='double', processor_count=4)

        # Read base case
        solver.tui.file.read_case(case_file)

        # Modify inlet velocity
        solver.tui.define.boundary_conditions.velocity_inlet(
            'inlet',
            'yes', 'no', 'yes', 'yes', 'no',
            velocity,
            'no', 0, 'no', 0, 'no', 300, 'no'
        )

        # Initialize and solve
        solver.tui.solve.initialize.initialize_flow()
        solver.tui.solve.iterate(500)

        # Extract results
        # (Add result extraction here)

        # Save case and data
        output_file = f'result_v{velocity}.cas.h5'
        solver.tui.file.write_case_data(output_file)

        solver.exit()

        results[velocity] = output_file

    return results

# Run parametric study
velocities = np.linspace(5, 25, 5)  # 5 to 25 m/s
results = parametric_study(velocities, 'base_case.cas.h5')

ベストプラクティス

  1. ライセンス管理:長時間のバッチ実行の前に、必ずライセンスが利用可能か確認してください
  2. メッシュ品質:解析前にメッシュ品質(スキュー度、アスペクト比)を確認してください
  3. 収束の監視:適切な収束基準を設定し、残差を監視してください
  4. ファイル管理:パラメトリックスタディでは、わかりやすい命名規則を使用してください
  5. エラー処理:自動化スクリプトに堅牢なエラーチェックを実装してください
  6. ドキュメント:ジャーナルファイルと Python スクリプトに詳細なコメントを記述してください
  7. バージョン管理:ジャーナルファイルとスクリプトをバージョン管理で追跡してください
  8. テスト:本番実行の前に、小規模なケースで自動化ワークフローをテストしてください
  9. リソース管理:大規模なシミュレーションでは、メモリとディスクの使用量を監視してください
  10. 再現性:再現可能な結果を得るため、すべての設定を記録してください

トラブルシューティング

よくある問題
  • ライセンスのチェックアウト失敗:ライセンスサーバーへの接続と利用状況を確認してください
  • メッシュの問題:メッシュ品質指標を確認し、問題のある領域を細分化してください
  • 収束の問題:緩和係数を調整し、境界条件の整合性を確認してください
  • メモリエラー:メッシュサイズを小さくするか、並列処理でノード数を増やしてください
  • ファイル入出力エラー:ファイルパスとアクセス権限を確認してください
デバッグのヒント
  • まず対話形式で実行し、ワークフローを検証してください
  • TUI コマンドの構文を確認するには、トランスクリプトファイルを確認してください
  • デバッグには、ジャーナルファイルで -print フラグを使用してください
  • 収束の挙動を確認するため、残差プロットを監視してください
  • ログファイルの警告メッセージとエラーメッセージを確認してください

追加リソース

  • ANSYS ドキュメント:ANSYS 製品内のヘルプシステム
  • PyAnsys ドキュメント:https://docs.pyansys.com
  • ANSYS Learning Hub:オンラインのトレーニングとチュートリアル
  • ANSYS コミュニティ:ユーザーフォーラムとナレッジベース
  • Fluent User's Guide:包括的な理論と使用方法のマニュアル
  • Fluent TUI Reference:TUI コマンドの完全な一覧

コメント