Featured image of post Ansysのバージョン選択ツールの作成|古い解析ファイルを別バージョンで開くリスクを減らす

Ansysのバージョン選択ツールの作成|古い解析ファイルを別バージョンで開くリスクを減らす

Ansysを複数バージョン運用している環境で、意図しない版で解析ファイルを開くリスクを減らすために作ったバージョン選択ツールを紹介。Fluent・SpaceClaim・Workbenchに対応。

GitHub: mitz17/ANSYS_Version_Selector
このツールは GitHub で公開している。
この記事で紹介するツールは個人が作成した非公式ツールであり、Ansys の公式製品・公式サポートとは一切無関係である。

目次

作った理由

私のPCには、ANSYS関連ソフト(Fluent、SpaceClaim、Workbench) が複数バージョンインストールされている

ANSYS関連ソフトは俗に言う「後方互換性はあるが、前方互換性はない」仕様となっている。
新しいバージョンのソフトでは古いファイルを読めるが、新しいソフトで保存したファイルは古いバージョンのソフトで読むことはできない。
だから、ANSYSファイルを開いたり上書き保存するときには細心の注意を払う必要がある。(n敗)

しかし、ANSYSとWindows標準の機能のみでは、好きなバージョンを選択してファイルを開くことは難しい。(少なくとも私の環境では)
図のようにプログラムから開くを選択しても、1つのバージョンしか表示されない。PCでアプリを選択するを押して、別バージョンのexeファイルを選択しても一覧に表示されないことが多い。
表示されたとしても指定したバージョンと別のバージョン(規定のバージョン)で勝手に開かれてしまう。(非常に不思議な仕様である)

Windowsのアプリ選択画面

図1 Windowsのアプリ選択画面

そこで、FluentSpaceClaimWorkbench を「どのバージョンで開くか」を明示的に選べるツールをつくった。

ツールの使い方

  1. GitHubのリリースのページから最新版のexeファイル一式をダウンロードする(ソースコードから自分でexe化してもよい)
  2. 好きな場所に保存する(例: C:\CombinedAnsysLauncher 直下)
  3. ANSYSファイルの拡張子をFluentVersionSelector.exe、SpaceClaimVersionSelector.exe、WorkbenchVersionSelector.exeのどれかに関連付けてwindowsの規定で開くように設定する
  4. 関連付けた状態でANSYSファイルをダブルクリックで開く
  5. 下図のようなGUIが開く。入力ファイルに開きたいファイルが表示されていることを確認する
  6. 自動でバージョンを検出するので、開きたいバージョンを選択して起動ボタンを押す
SpaceClaim バージョン選択ツールの画面

図2 SpaceClaimのバージョン選択画面

Workbench バージョン選択ツールの画面

図3 Workbenchのバージョン選択画面

Fluent のみ

  • ソルバ / メッシング切り替え
  • 2D / 3D
  • Double Precision
  • 並列数指定

のオプションに対応している。
「Fluent Launcherを起動」ボタンも用意している。

Fluent バージョン選択ツールの画面

図4 Fluentのバージョン選択画面

なお、UIの改善にはemilkowalski/skills のUI設計を使用した。

バージョンの手動検出

C:\Program Files\ANSYS Inc にANSYSをインストールしている場合、自動でバージョンを検出する。 上記以外の場所にインストールしている場合は、手動で追加することができる。 設定ボタンを押して、バージョン名と実行ファイルパスを入力する。

また、追加・更新・削除だけでなく、上へ / 下へ ボタンで並び順も変更できるようにしてある。

このように設定して閉じるを押すと、設定が記録され、exeがあるフォルダ内に〇〇_version.jsonにバージョン情報が保存される。 例えばFluentだと以下のようになる。

{
  "versions": {
    "v252": "C:\\Program Files\\ANSYS Inc\\v252\\fluent\\ntbin\\win64\\fluent.exe"
  }
}
バージョン設定ダイアログ

図5 バージョン設定ダイアログ

コードの解説

コードは、大きく次の4つに分かれている。

ANSYS_Version_Selector/
├─ Fluent_Launcher.py        # Fluentの検索・設定・起動処理
├─ SpaceClaim_Launcher.py    # SpaceClaimの検索・起動処理
├─ Workbench_Launcher.py     # Workbenchの検索・起動処理
├─ launcher_common.py        # 設定保存やファイル選択などの共通処理
├─ webui/                    # アプリ画面を構成するファイル
│  ├─ app.html               # 画面の部品や配置
│  ├─ app.css                # 画面のデザイン
│  └─ app.js                 # ボタン操作とPythonとの連携
├─ build_all_exe.ps1         # PythonコードをEXE化するスクリプト
├─ README.md                 # ツールの説明書
└─ 各種アイコン              # EXEや画面で使用するアイコン

ANSYSのインストール先を探す処理

def find_fluent_exes() -> dict[str, str]:

上記の関数は、以下のようなフォルダを確認する。

C:\Program Files\ANSYS Inc
C:\Program Files\Ansys Inc

その下にあるv252やv241などのフォルダを調べ、次のような実行ファイルを探す。(Fluentの場合)

v252\fluent\ntbin\win64\fluent.exe

見つかった場合は、次のような辞書を作りjson形式で保存する。

{
    "v252": "C:\\Program Files\\ANSYS Inc\\v252\\fluent\\ntbin\\win64\\fluent.exe"
}

SpaceClaim・Workbenchを起動する処理

SpaceClaimとWorkbenchは、どちらも実行ファイルと対象ファイルのパスを組み合わせ、subprocess.Popen()で起動する。

まず、実行ファイルをリストに入れる。

cmd = [exe]

#対象ファイルが指定されている場合は、そのパスを起動コマンドへ追加する。

#SpaceClaimは、ファイルパスをそのまま渡す。
SpaceClaim.exe "D:\cad\sample.scdoc"

#Workbenchは、-Fオプションを付けてプロジェクトファイルを渡す。
RunWB2.exe -F "D:\project\sample.wbpj"

#外部アプリを起動
subprocess.Popen(cmd)

Fluentを起動する処理

Fluentは上記のように行かず一時jouを作成して読み込ませる必要がある

def launch_fluent(
    fluent_exe,
    mode,
    product,
    journal_text,
    workdir,
    n_procs,
    ...
):

上記関数が、Fluentを起動する。

内部では、起動コマンドをリストとして組み立てる。

たとえば、3D・Double Precision・4並列なら、おおよそ次のような形だ。

fluent.exe 3ddp -t4 -i 一時ジャーナル.jou

Pythonでは、次の処理で外部アプリを起動している。

subprocess.Popen(cmd)

Fluentのみ読み込むファイルの種類によって処理を変える必要がある。

たとえば、

  • .msh なら read-mesh
  • .cas なら read-case
  • .dat なら必要に応じて対応する .cas を先に探してから read-data

というように、起動時に流すジャーナルを変えている。

親プロセス側でジャーナルをすぐ消してしまうと、Fluent 側の読み込みタイミング次第で失敗する可能性があるため、一時 .jou は即削除しない設計にした。
代わりに、48 時間以上古いランチャー由来のジャーナルを次回起動時に掃除するようにしている。

さいごに

起動バージョンの管理が楽になったぜ!!!!
皆様のQOALが向上することを切に願う。

関連記事

※ Ansys、Ansys Fluent、Ansys SpaceClaim、Ansys Workbench は Ansys, Inc. またはその関連会社の商標または登録商標だ。本記事は第三者による非公式な紹介だ。

この記事をシェアする

X (Twitter) Bluesky
Hugo で構築されています。
テーマ StackJimmy によって設計されています。