ansys-simulation について
ansys-simulation は、Python、Journal ファイル、PyAnsys を使った ANSYS Fluent の CFD シミュレーション自動化ガイドです。シミュレーション技術者やスクリプトを作成する開発者向けに、設定からバッチ計算、後処理までを扱います。
主な機能
- 01PyFluent セッションとシミュレーションの制御
- 02Journal ファイルによるバッチスクリプト
- 03ジオメトリ読み込みとメッシュ作成の手順
- 04乱流、境界条件、ソルバーの設定
- 05結果抽出と後処理
- 06ライセンス、収束、トラブルシューティングの案内
活用シーン
- 01Fluent のバッチシミュレーション自動化
- 02入口速度を変えたパラメトリックスタディ
- 03メッシュ、物理モデル、境界条件の設定
- 04シミュレーション結果の抽出と確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ soljourner/ claude-engineering-skills --skill ansys-simulationインストール後、Claude Code で/ansys-simulationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
api-reference.mdexamples/batch_simulation.pypump_cfd_setup.pyturbulence_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')
ベストプラクティス
- ライセンス管理:長時間のバッチ実行の前に、必ずライセンスが利用可能か確認してください
- メッシュ品質:解析前にメッシュ品質(スキュー度、アスペクト比)を確認してください
- 収束の監視:適切な収束基準を設定し、残差を監視してください
- ファイル管理:パラメトリックスタディでは、わかりやすい命名規則を使用してください
- エラー処理:自動化スクリプトに堅牢なエラーチェックを実装してください
- ドキュメント:ジャーナルファイルと Python スクリプトに詳細なコメントを記述してください
- バージョン管理:ジャーナルファイルとスクリプトをバージョン管理で追跡してください
- テスト:本番実行の前に、小規模なケースで自動化ワークフローをテストしてください
- リソース管理:大規模なシミュレーションでは、メモリとディスクの使用量を監視してください
- 再現性:再現可能な結果を得るため、すべての設定を記録してください
トラブルシューティング
よくある問題
- ライセンスのチェックアウト失敗:ライセンスサーバーへの接続と利用状況を確認してください
- メッシュの問題:メッシュ品質指標を確認し、問題のある領域を細分化してください
- 収束の問題:緩和係数を調整し、境界条件の整合性を確認してください
- メモリエラー:メッシュサイズを小さくするか、並列処理でノード数を増やしてください
- ファイル入出力エラー:ファイルパスとアクセス権限を確認してください
デバッグのヒント
- まず対話形式で実行し、ワークフローを検証してください
- TUI コマンドの構文を確認するには、トランスクリプトファイルを確認してください
- デバッグには、ジャーナルファイルで
-printフラグを使用してください - 収束の挙動を確認するため、残差プロットを監視してください
- ログファイルの警告メッセージとエラーメッセージを確認してください
追加リソース
- ANSYS ドキュメント:ANSYS 製品内のヘルプシステム
- PyAnsys ドキュメント:https://docs.pyansys.com
- ANSYS Learning Hub:オンラインのトレーニングとチュートリアル
- ANSYS コミュニティ:ユーザーフォーラムとナレッジベース
- Fluent User's Guide:包括的な理論と使用方法のマニュアル
- Fluent TUI Reference:TUI コマンドの完全な一覧