comsol-multiphysics について
COMSOL Multiphysicsユーザー向けのシミュレーションガイドで、ポンプ振動と流体構造連成を中心に扱います。Java APIやMATLAB LiveLinkによる自動化、熱流体連成のワークフローも紹介します。
主な機能
- 01流体構造連成の設定
- 02ポンプ部品の振動解析ワークフロー
- 03Java APIによるモデル自動化
- 04MATLAB LiveLinkによる制御と後処理
- 05ソルバーとモジュールの選択ガイド
活用シーン
- 01流体荷重によるポンプケーシングの振動解析
- 02インペラと流体の双方向連成のモデル化
- 03パラメトリック解析のバッチ実行
- 04ポンプの熱流体・熱構造効果の評価
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ soljourner/ claude-engineering-skills --skill comsol-multiphysicsインストール後、Claude Code で/comsol-multiphysicsを入力して読み込まれたか確認します。
同梱ファイルapi-reference.mdpump-fsi-workflow.md
詳細
COMSOL Multiphysics の統合
COMSOL Multiphysics を使用して、流体構造連成(FSI)シミュレーションを設定・自動化するための包括的なガイドです。ポンプ振動解析と関連するマルチフィジックスアプリケーションに重点を置いています。
概要
COMSOL Multiphysics は、複雑なマルチフィジックス問題をモデル化して解くための、業界をリードする商用シミュレーションプラットフォームです。以下の機能を提供します。
- 統合環境:複数の物理領域を扱う単一のプラットフォーム
- 柔軟な連成:異なる物理現象を連成する組み込みツール
- 方程式ベースのモデリング:基礎となる PDE に直接アクセス
- Java API:プログラムによる制御と自動化
- MATLAB LiveLink:前処理・後処理のための MATLAB との統合
- Application Builder:カスタムシミュレーションアプリの作成
COMSOL は、以下を含む物理連成問題に優れています。
- 流体構造連成(FSI)
- 熱構造連成
- 熱効果を伴う電磁気
- 音響構造連成
- 輸送現象を伴う電気化学
COMSOL のアーキテクチャ
モデル構造
- コンポーネント:独立したジオメトリと物理現象
- スタディ:1 つ以上のステップで構成される解法シーケンス
- 物理インターフェース:特定の現象向けに事前設定された PDE システム
- マルチフィジックス連成:物理現象間の自動または手動の連成
- ソルバー設定:自動またはカスタマイズされたソルバーシーケンス
ソルバー技術
- COMSOL ソルバー:直接ソルバーと反復ソルバー
- 完全連成アプローチ:すべての方程式を同時に解く方法
- 分離ソルバー:大規模モデル向けの物理ベースの分離
- 時間ステップ法:過渡解析向けの陰解法
- メッシュ適応:解に基づく自動的な細分化
ライセンス要件
商用ライセンス
COMSOL Multiphysics を本番環境で使用するには、すべての場合に商用ライセンスが必要です。
-
基本パッケージ:
- COMSOL Multiphysics ライセンス(すべてのユーザーに必要)
- 基本的な PDE インターフェースと計算ツールを含む
- ライセンスは FlexNet License Server を介して管理
-
モジュールライセンス:
- 個別モジュールを別途購入
- フローティングライセンス(使用中にチェックアウト)
- バッチモードではライセンスのチェックアウトが必要
- 並列計算向けの HPC アドオン
-
ライセンスサーバーの設定:
# Set license server environment variable (Linux/Mac) export [email protected] # Or in Windows set [email protected] -
ライセンスの種類:
- フローティングネットワークライセンス:複数のユーザーで共有
- ノードロックライセンス:特定のマシンに紐付け
- HPC ライセンス:並列計算向けにコアを追加
- バッチライセンス:バッチ/自動シミュレーション向け
アカデミックライセンス
- Classroom Kit:教育用途に限定
- 研究用ライセンス:学術機関向けに提供
- 商用アプリケーションには制限あり
- 機能またはモデルサイズに制限がある場合あり
ライセンスに関する重要な注意事項
- ライセンスの確認:バッチ実行の前に、必ずライセンスの利用可能状況を確認してください
- ライセンスの解放:ライセンスを解放するため、COMSOL を適切に終了してください
- バッチ処理:専用のバッチ/HPC ライセンスが必要です
- モジュールの依存関係:一部のモジュールは他のモジュールを必要とします(例:FSI には CFD と構造解析が必要)
- API アクセス:基本ライセンスに加えて、関連モジュールが必要です
ポンプアプリケーション向けの主要モジュール
CFD Module
単相流および混相流に対応する包括的な数値流体力学機能です。
機能:
-
乱流モデル:
- RANS:k-epsilon、k-omega、SST
- 高精度シミュレーション向けの LES と DES
- 壁関数と低レイノルズ数定式化
-
流れの種類:
- 非圧縮性および圧縮性
- 層流および乱流
- 定常および過渡
- 回転機械(凍結ローター、スライディングメッシュ)
-
混相流:
- オイラー・オイラー型混相流
- フェーズフィールド法
- レベルセット追跡
- 気泡流モデル
ポンプ固有の機能:
- インペラー向けの回転座標系
- 混合面インターフェース
- キャビテーションモデリング
- 圧力脈動解析
構造力学モジュール
線形および非線形の挙動を含む、包括的な構造解析です。
機能:
-
解析の種類:
- 静的構造解析
- 固有振動数解析(モード解析)
- 周波数応答解析
- 過渡動解析
- 予応力解析
-
材料モデル:
- 線形弾性
- 超弾性(ゴム、ポリマー)
- 塑性(高応力下の金属)
- 複合材料
- 接触と摩擦
-
動解析:
- 固有振動数を求めるモード解析
- 調和応答
- 時間依存荷重
- 減衰モデル(レイリー減衰、モード減衰)
ポンプ固有の機能:
- 回転機械の応力解析
- ボルトの予荷重と組み立て応力
- 疲労解析
- インペラーとケーシングの接触
流体構造連成(FSI)
CFD と構造力学を連成させ、双方向の相互作用を解析します。
連成アプローチ:
-
一方向 FSI:
- 流体荷重を構造物に適用
- 構造物は流体に影響しません
- 計算が高速
- 剛体に近い構造物に適しています
-
双方向 FSI:
- 流体と構造を完全に連成
- 変形メッシュ法を使用
- 大きな変形を考慮
- 柔軟な構造物に必要です
-
弱連成:
- 順次解法(分離解法)
- 流体 → 構造 → 流体の反復
- 連成が弱い問題に適しています
-
強連成:
- 完全陰解法による同時解法
- 強く連成した問題で収束性が向上
- 計算コストが高い
FSI 機能:
- メッシュの自動変形(ALE 法)
- 大変形に対応する再メッシュ
- 流体荷重を自動計算
- 圧力と粘性力を転送
- 複数の固体のサポート
ポンプの FSI 応用例:
- 流体力によるインペラーブレードの振動
- ケーシングの振動と音響放射
- 圧力によるシールのたわみ
- 軸のたわみと危険速度
- キャビテーションによる振動
その他の関連モジュール
音響モジュール:
- 圧力脈動解析
- ポンプケーシングからの騒音放射
- 固体伝搬音
- 音響・構造・流体の連成問題
熱伝達モジュール:
- ポンプの熱荷重
- 熱・構造連成解析
- 共役熱伝達(流体・固体)
- 熱膨張の影響
最適化モジュール:
- 設計最適化
- トポロジー最適化
- 形状最適化
- パラメータスイープ
自動化のための Java API
COMSOL は、プログラムによるモデル構築と自動化のための包括的な Java API を提供しています。
API の構成
主要コンポーネント:
- Model オブジェクト:最上位のコンテナー
- Component:ジオメトリと物理
- Physics インターフェース:物理を追加して設定
- Study:解法の手順を定義
- Results:後処理と可視化
Java API の基本的なワークフロー
import com.comsol.model.*;
import com.comsol.model.util.*;
public class PumpFSI {
public static Model run() {
// Create model
Model model = ModelUtil.create("PumpFSI");
// Create component
model.component().create("comp1", true);
// Create geometry
model.component("comp1").geom().create("geom1", 3);
// Import CAD geometry
model.component("comp1").geom("geom1").create("imp1", "Import");
model.component("comp1").geom("geom1").feature("imp1")
.set("filename", "/path/to/pump_geometry.step");
model.component("comp1").geom("geom1").run();
// Add fluid physics (CFD)
model.component("comp1").physics().create("spf", "LaminarFlow", "geom1");
model.component("comp1").physics("spf").selection()
.named("geom1_fluid_domain");
// Add structural physics
model.component("comp1").physics().create("solid", "SolidMechanics", "geom1");
model.component("comp1").physics("solid").selection()
.named("geom1_solid_domain");
// Add FSI coupling
model.component("comp1").multiphysics().create("fsi1", "FluidStructureInteraction", 3);
model.component("comp1").multiphysics("fsi1")
.selection().named("geom1_fsi_boundary");
// Create mesh
model.component("comp1").mesh().create("mesh1");
model.component("comp1").mesh("mesh1").automatic(true);
model.component("comp1").mesh("mesh1").run();
// Create study
model.study().create("std1");
model.study("std1").create("time", "Transient");
model.study("std1").feature("time").set("tlist", "range(0,0.01,1)");
// Solve
model.sol().create("sol1");
model.sol("sol1").study("std1");
model.sol("sol1").feature().create("st1", "StudyStep");
model.sol("sol1").feature().create("v1", "Variables");
model.sol("sol1").feature().create("t1", "Time");
model.sol("sol1").attach("std1");
model.sol("sol1").runAll();
// Save model
model.save("/path/to/pump_fsi_model.mph");
return model;
}
public static void main(String[] args) {
run();
}
}
Java API スクリプトの実行
# Compile Java file
comsol compile PumpFSI.java
# Run with COMSOL
comsol batch -inputfile PumpFSI.class -outputfile results.mph
# Or run directly
java -cp /path/to/comsol/plugins/*:. PumpFSI
API の利点
- 再現性:スクリプトにより、モデルを一貫して構築できます
- パラメトリックスタディ:パラメーターを簡単に変更できます
- バッチ処理:複数のケースを自動的に実行できます
- 統合:他のツールやデータベースと連携できます
- バージョン管理:ソース管理でモデルの変更を追跡できます
MATLAB LiveLink
COMSOL は MATLAB とシームレスに連携し、スクリプト作成とデータ処理を強化します。
LiveLink の機能
MATLAB からのモデル制御:
- COMSOL モデルの構築と変更
- MATLAB スクリプトからシミュレーションを実行
- 結果を MATLAB ワークスペースに抽出
- MATLAB のデータ解析ツールを使用
インストール:
- LiveLink for MATLAB の個別ライセンスが必要です
- MATLAB のパスを COMSOL のインストール先に設定
- COMSOL サーバーを起動するか、直接接続を使用
MATLAB LiveLink の基本的な使い方
% Initialize COMSOL with MATLAB
import com.comsol.model.*
import com.comsol.model.util.*
% Start COMSOL server (if not already running)
mphstart
% Create or load model
model = mphload('pump_model.mph');
% Modify parameters
model.param.set('inlet_velocity', '5[m/s]');
model.param.set('outlet_pressure', '101325[Pa]');
% Run study
model.study('std1').run();
% Extract results
pressure = mpheval(model, 'p', 'dataset', 'dset1');
velocity = mpheval(model, 'u', 'dataset', 'dset1');
% Process in MATLAB
mean_pressure = mean(pressure.d1);
max_velocity = max(sqrt(velocity.d1.^2 + velocity.d2.^2 + velocity.d3.^2));
% Plot using MATLAB
figure;
plot(pressure.p, pressure.d1);
xlabel('Position');
ylabel('Pressure [Pa]');
title('Pressure Distribution');
% Save results
save('pump_results.mat', 'pressure', 'velocity');
% Close COMSOL
ModelUtil.remove('model');
MATLAB によるパラメトリックスタディ
% Parametric study of inlet velocity effects
velocities = 1:1:10; % m/s
results = struct();
for i = 1:length(velocities)
fprintf('Running case %d: velocity = %.1f m/s\n', i, velocities(i));
% Set parameter
model.param.set('inlet_velocity', sprintf('%f[m/s]', velocities(i)));
% Solve
model.study('std1').run();
% Extract force on impeller
force = mphint2(model, 'spf.Fp_x', 'surface', 'selection', 5);
results(i).velocity = velocities(i);
results(i).force = force;
% Extract vibration amplitude
displacement = mphmax(model, 'sqrt(u^2+v^2+w^2)', 'volume', 'selection', 3);
results(i).max_displacement = displacement;
end
% Plot results
figure;
subplot(2,1,1);
plot([results.velocity], [results.force], '-o');
xlabel('Inlet Velocity [m/s]');
ylabel('Force on Impeller [N]');
grid on;
subplot(2,1,2);
plot([results.velocity], [results.max_displacement]*1e6, '-o');
xlabel('Inlet Velocity [m/s]');
ylabel('Max Displacement [μm]');
grid on;
% Save results
save('parametric_results.mat', 'results');
一般的なワークフロー
ワークフロー 1:流体荷重を受けるポンプケーシングの振動
用途:流れによる圧力脈動が原因で発生するポンプケーシングの振動を解析します。
アプローチ:一方向FSI(流体荷重を構造にマッピング)
手順:
-
ジオメトリの設定:
- ポンプケーシングのジオメトリをインポートします
- ケーシング内部に流体領域を作成します
- FSI 境界(流体と構造のインターフェース)を定義します
-
CFD の設定:
- 入口境界と出口境界を定義します
- 乱流モデル(k-epsilon または k-omega SST)を設定します
- 非定常ソルバーを設定します
- 回転するインペラー内の流れを解析する場合は、回転座標系を適用します
-
構造の設定:
- 材料特性(鋼、鋳鉄)を定義します
- 境界条件(取り付け位置での固定支持)を適用します
- 非定常構造解析を設定します
- 既知の場合は減衰を含めます
-
FSI 連成:
- 流体圧力とせん断応力を構造にマッピングします
- 一方向連成(流体に対して構造は剛体と仮定)を行います
- 流体ソルバーと構造ソルバーの間で時間を同期します
-
解析:
- まず非定常 CFD を解きます
- 時間変化する圧力荷重を抽出します
- 構造モデルに荷重を適用します
- 構造動解析を解きます
-
後処理:
- 重要な点の変位を抽出します
- 周波数成分を FFT 解析します
- 固有振動数と比較します
- 応力集中を解析します
ワークフロー 2:インペラーの FSI 解析
用途:流体力を受けるインペラーブレードの変形を連成解析します。
アプローチ:移動メッシュを用いた双方向 FSI
手順:
-
ジオメトリとメッシュ:
- インペラーのジオメトリをインポートします
- インペラー周辺に流体領域を作成します
- ブレード表面に FSI インターフェースを定義します
- 固体インペラーと流体領域をメッシュ化します
- FSI 境界を細かいメッシュにします
-
流体物理:
- 乱流(k-omega SST を推奨)
- インペラーに回転座標系を適用します
- 入口速度または質量流量境界を設定します
- 出口圧力境界を設定します
- 移動メッシュ(ALE)を有効にします
-
構造物理:
- 最初は線形弾性材料を使用します
- シャフトとの接続部を固定します
- 遠心荷重による予応力を設定します
- 回転の影響を含めます
-
双方向 FSI 連成:
- 流体から構造に荷重を適用します
- 構造の変形に合わせてメッシュを移動します
- 各時間ステップ内で反復連成を行います
- FSI 反復の収束基準を設定します
-
予応力を考慮した FSI:
- まず、遠心荷重を適用した静的構造解析を行います
- 次に、予応力状態を FSI の初期条件として使用します
- 収束性と精度が向上します
-
解析戦略:
- 初期過渡状態では粗い時間ステップから開始します
- 周期解に向けて時間刻みを細かくします
- 残差と FSI 反復を監視します
- 強連成では解析時間が長くなることを想定します
-
後処理:
- ブレード先端変位の時間変化
- ブレードの応力分布
- 変形が流れ場に及ぼす影響
- 剛体と柔軟体の解析結果の比較
ワークフロー 3:熱流体連成解析
用途:高温流体を扱うポンプの熱的影響。
アプローチ:熱膨張を考慮した共役熱伝達
手順:
-
複数領域の設定:
- 流体領域(高温液体)
- 固体領域(ケーシング、インペラ)
- 流体と固体の境界を定義
-
連成物理:
- 流体流れの CFD
- 流体の熱伝達(エネルギー方程式)
- 固体の熱伝達(熱伝導)
- 固体の熱応力
- 境界における温度の自動連成
-
境界条件:
- 入口:温度と速度
- 出口:圧力流出
- 外部表面:対流または放射
- 固体境界:固定温度または断熱
-
材料特性:
- 温度依存の粘度
- 熱膨張係数
- 熱伝導率
-
解析シーケンス:
- まず定常熱流体解析を実行
- 熱応力解析の初期条件として使用
- または完全連成の過渡シミュレーションを実行
-
後処理:
- 温度分布
- 熱応力
- 熱膨張による変位
- すきまやはめあいへの影響
ワークフロー 4:流体荷重を考慮したモード解析
用途:流体と接触するポンプケーシングの固有振動数。
アプローチ:流体構造連成による固有振動数解析
手順:
-
ジオメトリ:
- ポンプケーシング構造
- 周囲または内部の流体
- FSI 境界
-
物理設定:
- 流体に対する圧力音響
- 構造に対する固体力学
- 音響構造境界の連成
-
境界条件:
- 構造:固定支持
- 音響:剛体境界における音響硬壁
- FSI:加速度連成
-
解析:
- 固有振動数解析
- 対象範囲内の固有振動数を検索
- 音響構造連成は自動的に含まれます
-
結果:
- 流体荷重を考慮した固有振動数
- モード形状
- 空気中および真空中のモードとの比較
- 流体付加質量の影響
バッチ実行
コマンドライン実行
COMSOL は GUI なしでバッチモード実行できます:
# Run existing model file
comsol batch -inputfile pump_model.mph -outputfile results.mph
# Run Java method file
comsol batch -inputfile PumpFSI.java -outputfile results.mph
# Run with specific study
comsol batch -inputfile pump_model.mph -outputfile results.mph -study std1
# Run with parameter override
comsol batch -inputfile pump_model.mph -outputfile results.mph \
-pname inlet_velocity -plist 5,10,15,20
# Run MATLAB script
comsol batch -inputfile pump_analysis.m -outputfile results.mph
# Specify number of processors
comsol batch -np 8 -inputfile pump_model.mph -outputfile results.mph
バッチスクリプトの例(Linux)
#!/bin/bash
# batch_comsol.sh
# Set license server
export [email protected]
# Set number of processors
NPROCS=8
# Input/output files
INPUT_MODEL="pump_fsi_base.mph"
OUTPUT_DIR="results"
# Create output directory
mkdir -p ${OUTPUT_DIR}
# Parameter sweep: inlet velocities
VELOCITIES="2 4 6 8 10"
for VEL in ${VELOCITIES}; do
echo "Running simulation with inlet velocity = ${VEL} m/s"
OUTPUT_FILE="${OUTPUT_DIR}/pump_fsi_v${VEL}.mph"
LOG_FILE="${OUTPUT_DIR}/pump_fsi_v${VEL}.log"
# Run COMSOL in batch mode
comsol batch -np ${NPROCS} \
-inputfile ${INPUT_MODEL} \
-outputfile ${OUTPUT_FILE} \
-pname inlet_velocity \
-plist ${VEL} \
> ${LOG_FILE} 2>&1
# Check exit status
if [ $? -eq 0 ]; then
echo " Simulation completed successfully"
else
echo " ERROR: Simulation failed - check ${LOG_FILE}"
exit 1
fi
done
echo "All simulations completed"
JPype による Python 自動化
JPype を使用して Python から COMSOL Java API を呼び出します:
import jpype
import jpype.imports
from jpype.types import *
import numpy as np
# Start JVM with COMSOL
comsol_root = '/usr/local/comsol56/multiphysics'
jvm_path = jpype.getDefaultJVMPath()
jpype.startJVM(
jvm_path,
f"-Djava.library.path={comsol_root}/lib/glnxa64",
f"-Dcs.lic.path={comsol_root}/license",
classpath=f"{comsol_root}/plugins/*"
)
# Import COMSOL packages
from com.comsol.model.util import ModelUtil
# Load model
model = ModelUtil.load('/path/to/pump_model.mph')
# Parametric study
velocities = np.linspace(2, 10, 5)
results = []
for vel in velocities:
print(f"Running velocity = {vel:.1f} m/s")
# Set parameter
model.param().set('inlet_velocity', f'{vel}[m/s]')
# Run study
model.study('std1').run()
# Extract results (example)
# Add actual result extraction here
# Save case
model.save(f'results/pump_v{vel:.1f}.mph')
results.append({
'velocity': vel,
# Add extracted results here
})
# Cleanup
ModelUtil.remove('model')
jpype.shutdownJVM()
print("Parametric study completed")
ベストプラクティス
モデル設定
- ジオメトリ:メッシュ生成に適した、クリーンで不要な形状を除去したジオメトリ
- 選択:境界条件には名前付き選択を使用
- パラメーター:変更しやすいようにグローバルパラメーターを使用
- 単位:モデル全体で一貫した単位系を使用
- 対称性:可能な場合は対称性を活用
メッシュ生成
- メッシュ品質:メッシュ品質の指標(スキュー度、成長率)を確認
- 境界層:乱流では特に重要
- FSI インターフェース:流体構造境界に細かいメッシュを設定
- メッシュ独立性:メッシュ収束を確認
- 適応メッシュ:複雑な流れに使用
物理設定
- 適切なモデル:用途に適した物理モデルを選択
- 材料特性:材料データの精度を確認
- 境界条件:物理的な整合性を確保
- 初期条件:適切な初期推定値を設定
- 連成設定:FSI 連成パラメーターを確認
ソルバー戦略
- ソルバーの選択:自動または手動でソルバーを設定
- 収束条件:適切な許容誤差を設定
- 時間ステップ:過渡解析では適応型時間ステップを使用
- 線形化:非線形ソルバーの設定を確認
- 並列計算:複数のコアを効果的に使用
自動化
- バージョン管理:モデルファイルとスクリプトを管理
- ドキュメント化:コードにコメントを付け、ワークフローを文書化
- エラー処理:チェックとエラー復旧を実装
- テスト:まず簡単なケースで自動化を検証
- ライセンス管理:バッチジョブでライセンスが使用可能か確認
後処理
- データ抽出:必要なデータのみをエクスポートします
- 可視化:比較用に標準化されたプロットを作成します
- 検証:実験結果または解析結果と比較します
- レポート作成:レポートの作成を自動化します
- データ管理:結果を体系的に整理します
トラブルシューティング
よくある問題
ライセンスの問題:
- ライセンスサーバーへの接続を確認します
- モジュールが利用可能か確認します
- 自動実行用のバッチライセンスがあることを確認します
メッシュ生成の失敗:
- ジオメトリを簡略化します(小さなフィーチャーを削除します)
- メッシュサイズのパラメーターを調整します
- 別のメッシュシーケンスを使用します
収束の問題:
- 荷重ステップまたは時間ステップを小さくします
- 初期条件を改善します
- ソルバーの許容誤差を調整します
- メッシュ品質が低くないか確認します
- 境界条件を見直します
FSI 固有の問題:
- メッシュ変形の失敗:再メッシュするか、スムージングを調整します
- FSI の収束が遅い:緩和係数を調整します
- 変形が大きい:再メッシュ戦略を検討します
- 時間ステップが大きすぎる:安定性を確保するために小さくします
パフォーマンスの問題:
- 最初は粗いメッシュを使用します
- 物理モデルを簡略化します
- 対称性を活用します
- 並列処理コアを増やします
- 大規模モデルには分離型ソルバーを使用します
追加リソース
ドキュメント
- COMSOL Multiphysics ユーザーズガイド:コア機能
- CFD Module ユーザーズガイド:流体流れの物理
- Structural Mechanics Module ユーザーズガイド:固体力学
- COMSOL API Reference:Java API のドキュメント
- LiveLink for MATLAB ユーザーズガイド:MATLAB との連携
オンラインリソース
- COMSOL Website:https://www.comsol.com
- COMSOL Blog:アプリケーションの例とヒント
- COMSOL Support Center:ナレッジベースとダウンロード
- Application Gallery:モデル例とチュートリアル
- COMSOL Forums:コミュニティでのディスカッション
トレーニング
- COMSOL Training Courses:公式トレーニングプログラム
- Webinar Archive:録画されたトレーニングセッション
- Learning Center:動画チュートリアルとガイド
サポート
- Technical Support:[email protected]
- Regional Support:最寄りの COMSOL オフィスにお問い合わせください
- Application Engineers:複雑な問題への対応