(タイトル)未定(副題)DEXCS for OpenFOAM の使い方(第6章)

6. DEXCS-OFのインストール・更新方法



DEXCS-OFは、これまで1年に1度のペースで更新してきている。全くの初心者であれば、最新版を利用して頂ければ良いのであるが、既に初心者でなくなってしまった人に対して、更新されたDEXCS-OFを都度インストールして使うというのは、あまり現実的ではない。

利用している実際の計算環境をそのまま残すのか、改変なり、追加するのか、といった選択肢がある。

計算環境に十分な余裕のあるユーザーであれば、これまでの環境はそのまま残して、新しい環境で更新されたDEXCS-OFを使うというのも一つの方法である。特に計算環境として、仮想マシンを使う場合は現実的なチョイスかもしれない。

計算環境が十分でなく、かつ初心者でないといっても、ほとんど使い込んで居ない人であれば、この際全く入れ替えて心気一転・・・という選択肢もあるだろう。

しかし、ある程度DEXCS-OFを使い込んだユーザーであれば、既存の使用環境の中で、必要な更新機能だけを使いたいと考えるのが普通の心理であろう。

そこで本章では、DEXCS-OFの基本OSも含む主要コンポーネントのインストール・更新方法について取り纏めておく。

なお、改めて記すまでないと思うが念の為、DEXCS-OFをインストールモードで使用する事が前提である。

6.1. 基本OS

DEXCS-OFでは、デフォルトで自動更新が有効になるよう設定されているので、ネットワーク接続された環境で使用していると、時々更新のお知らせが案内される。

図6-1.ソフトウェアの更新案内

時々案内されると記したが、このダイヤログ画面を意図的に表示させるには、「アプリケーション」⇒「ソフトウェアの更新」を実行しても表示される。

ここで普通には、「後で通知する」(インストールしない)「今すぐインストールする」のどちらでも良いが、インストールするを選択した場合、システムの再起動が必要になる事があるので、計算中の場合などはその点を考慮して選択したい。

「アップデートの詳細」をクリックすると、具体的なアップデートの内容が表示される(図5-6-2.)。

図6-2.アップデートの詳細

ここで、特定のソフトウェアだけチェックマークを外して更新しないようにする事もできるが、よほど特別な事情が無い限り、かようなチェックは不要であろう。

一方、下段左の「設定」ボタンを押すと、アップデートの設定画面が現れ、設定変更も可能になる。但し、管理者権限が必要。DEXCS-OFのインストール直後では、図6-3.の状態になっているはずである。

図6-3

真ん中あたりで、アップデートの頻度を設定できるが、企業の中で使う場合によくあるケースで、外部の公衆インターネットを利用できない環境であればアップデートそのものが出来ないので、これを「しない」に変更すれば良い。

アップデート出来る環境であれば、その下3段でアップデートの内容に応じて変更も可能だ。また、アップデートの内容として、大きく3つの内容、つまり

  1. セキュリティアップデート
  2. その他のアップデート
  3. Ubuntuの新ヴァージョン(OSのアップグレード)

があるということも分かるであろう。一般的なアップデート要領は、このデフォルト設定が推奨される。DEXCS-OFでも変わりはないが、しいて挙げるのであれば、1.はこの通り使う。2.は好みで実施。3.は実施する際には要注意で、しないのが無難といったところである。

また、ここで云うその他のアップデートの中には、DEXCS-OFで同梱(3章で説明)したアプリケーションの中で、パッケージインストールしたもの(例: emacs, shutter, 等)は含まれるているので、それらの更新方法については以降での説明はしない(但しTreeFoamは除く)。


6.2. OpenFOAM

DEXCS-OFに搭載のOpenFOAMは、ヴァージョンによって異なるが、DEXCS2017以降、OpenCFD 社 (ESI) 版を使用している。このヴァージョンは半年に1度のペースで更新されており、DEXCS2019はv1906であったのに対して、執筆時点ではすでにv1912がリリースされており、間もなくv2006が噂されている。

その他にも、OpenFOAM Foundation版は、ほぼ1年に一度のペースで更新されており、現在ではv7が最新(2019/7/8リリース)である。

基本的にDEXCS-OFのOpenFOAMをこれらのヴァージョンに変更したり、複数のヴァージョンを切り替えて使用する事は可能である。

但し、OpenFOAMのヴァージョンによってはインストール方法が微妙に異なったりする事はあるので、ここでは、OpenCFD 社 (ESI) 版のv1912と、Foundation版のOpenFOAM v7を実際にDEXCS2019にインストールしてみた結果について説明する。

またDEXCS-OFでは、これらを他のツールから呼び出して使っていく事になるので、連携に必要な変更箇所についても説明する。

なお、OpenFOAMのインストールについては、従来、openfoamwiki のInstallationページにて取り纏められており、OpenFOAMのヴァージョン別に、様々なOSや、Linuxではディストリビューションに応じた詳細なインストール手順が公開されており、DEXCS-OFでもこれまで基本のインストール手順として使わせて頂いてきている。

しかしながら、OpenFOAM-v1806を最後に、更新されていない。DEXCS2019(OpenFOAM-v1906)ではやむなく、OpenFOAM-v1806用に記載された手順のうち、「v1806」の部分を「v1906」と読み替えてインストールし、完全なインストールには至らなかった(注記1)が、実用面で問題はなさそうとしてリリースした。

openfoamwiki のInstallationページが更新されていない理由は不明であるが、少なくともOpenFOAM本体のインストールに関しては、OpenFOAM版元で公開されている情報だけで、ほぼインストールが可能になっている点はあげられよう。

そこで、以下、OpenFOAM版元で公開されている情報を使って、DEXCS2019にインストールした際の結果について説明する。

DEXCS2019でOpenFOAM-v1906をインストールした手順とは異なるので、すんなりいかない箇所もあった。その際には、エラーメッセージを見てどう対処したのかという方策も含めて説明しておくので、今回取り上げたヴァージョンはこの方法で対処できたとしても、今後の他のヴァージョンで同じ方法が通用する事もあれば、新たな対処方法が必要になるやもしれない、という観点で参考にしてもらいたい。

OpenFOAM-v1912

基本的には公開されている Installation From Source および、Build Guide に基づいてコンパイルするが、

まずはシステム要件のページにて、Ubuntu OSに係る依存パッケージをインストールせよとの指示がある。

$ sudo apt-get update
$ sudo apt-get install build-essential flex bison cmake zlib1g-dev libboost-system-dev libboost-thread-dev libopenmpi-dev openmpi-bin gnuplot libreadline-dev libncurses-dev libxt-dev
$ sudo apt-get install qt4-dev-tools libqt4-dev libqt4-opengl-dev freeglut3-dev libqtwebkit-dev
$ sudo apt-get install libscotch-dev libcgal-dev

念の為上記インストールも実施したが、DEXCS2019ではすでに全てインストール済であることを確認できた。

OpenFOAMのインストール場所は任意で良いが、DEXCS-OFでは、~/OpenFOAM(ホームディレクトリ下のOpenFOAM以下で、実体は/opt/OpenFOAM)としているので、本ヴァージョンも同じ場所で並存させることとし、ソースコードをダウンロード、展開する。

$ cd ~/OpenFOAM
$ wget https://sourceforge.net/projects/openfoam/files/v1912/OpenFOAM-v1912.tgz
$ wget https://sourceforge.net/projects/openfoam/files/v1912/ThirdParty-v1912.tgz
$ tar -xzf OpenFOAM-v1912.tgz
$ tar -xzf ThirdParty-v1912.tgz

OpenFOAM-v1912の環境をセットする。

$ source ~/OpenFOAM/OpenFOAM-v1912/etc/bashrc

または、

$ . ~/OpenFOAM/OpenFOAM-v1912/etc/bashrc

そうすると、

No cd ..completion added for /home/dexcs/OpenFOAM/OpenFOAM-v1912/platforms/linux64GccDPInt32Opt/bin
… incorrect platform, or not yet compiled?

というメッセージが表示され、一瞬エラーかと思ってしまうが、良く読めば、not yet compiled なので問題ない。

通常はparaFoamを実行できるように最初にParaViewをコンパイルするが、OpenFOAM本体をコンパイルするのと同じくらいの時間が必要になる。DEXCS-OFですでにparaFoamを使える環境になっており、paraFoam自体まで更新する必要が無ければParaViewをコンパイルする必要もない。

ここでも機能面で取り立てて更新する理由は見当たらなかったが、DEXCS2019でParaViewのコンパイルが未完全であった事もあり、更新ヴァージョンでどうなるか興味があったので、実施することとした。

$ cd $WM_THIRD_PARTY_DIR
$ ./makeParaView
./makeParaView: 64: local: -DWM_DP: bad variable name
./makeParaView: 64: ./makeParaView: -DOPENFOAM: bad variable name

$WM_THIRD_PARTY_DIR、つまり~/OpenFOAM/ThirdParty-v1912 に移動して、makeParaViewスクリプトを実行しようとしたのであるが、これまでに経験のない意味不明のエラーで進めない。

色々調べた結果、これはシェルの方言の問題である可能性が大であると思われた。そこで、シェルを調べると、

$ which sh
/bin/sh
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 9 5月 18 08:51 /bin/sh -> /bin/dash

dashになっており、これをbashに変更する事とした。

$ sudo rm /bin/sh
$ sudo ln -s /bin/sh /bin/bash
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 9 5月 18 08:51 /bin/sh -> /bin/bash

こうすれば、先のエラーは出なくなりコンパイルが進行する事を確認できた。ここでコンパイルを一旦強制終了(Ctrl+C)して、コンパイルオプションを指定してやり直してみた。

$ ./makeParaView -python -mpi -python-lib /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0

………………..

(途中出力省略)

………………..

====
Installation complete for paraview-5.6.3 with qt-5.9.5
ParaView_DIR=/home/dexcs/OpenFOAM/ThirdParty-v1912/platforms/linux64Gcc/ParaView-5.6.3

You may need to update the OpenFOAM environment by running:
wmRefresh
====

Done

DEXCS2019では、-mpi オプションで失敗していたのを駄目元でやってみたら、すんなり成功してしまったという事である。

但し、このままではParaViewがGPUを搭載していないマシンで画面表示できない(真っ黒な画面になる)ので、OpenGLの拡張機能をOSMesaで代替できるようにしておく必要がある。

正攻法でやるならば、mesaのソースコードを入手してライブラリをビルドする事になるが、このビルドにもたいへん長時間必要になる。DEXCS-OF2019ではすでにOpenFOAM-v1906/ParaView-5.6.0用にビルド済のものがあるのでこれを流用できないかと考え、以下のようにコピーし、シンボリックリンクを作成したところ問題なく起動できた。

$ cd $WM_THIRD_PARTY_DIR
$ cd platforms/linux64Gcc/ParaView-5.6.3/lib/
$ cp ~/OpenFOAM/ThirdParty-v1906/platforms/linux64Gcc/ParaView-5.6.0/lib/libGL.so.1.5 ./
$ cp ~/OpenFOAM/ThirdParty-v1906/platforms/linux64Gcc/ParaView-5.6.0/lib/xlib.os ./
$ ln -s libGL.so.1.5 libGL.so.1
$ ln -s libGL.so.1.5 libGL.so

OpenFOAM本体も、

$ wmRefresh
No cd ..completion added for /home/dexcs/OpenFOAM/OpenFOAM-v1912/platforms/linux64GccDPInt32Opt/bin
… incorrect platform, or not yet compiled?

$ foamSystemCheck

Checking basic system…
———————————————————————–
Shell: /bin/bash
Host: dexcs2019-OF
OS: Linux version 5.0.0-29-generic
User: dexcs

System check: PASS
==================
Continue OpenFOAM installation.

$ foam
$ ./Allwmake -j 2
Compiling enabled on 2 cores
gcc=/usr/bin/gcc

………………….

(途中結果省略)

………………….
========================================
OpenFOAM-v1912
Gcc system compiler
linux64GccDPInt32Opt, with SYSTEMOPENMPI openmpi-system

api = 1912
patch = 0
bin = 291 entries
lib = 135 entries

========================================

となって、何も問題なく完了。

なお、Allwmakeのオプション -j の後の数字は、コンパイルに使用するプロセッサの数で大きいほど早く終了するので利用環境次第で変更する。

一応、お決まりの作業用ディレクトリも作成しておこう。

$ mkdir -p $FOAM_RUN
$ run

run コマンドを実行して、エラーにならないで、~/OpenFOAM/[user-name]-v1912/run というディレクトリに移動出来ているはずである。

これで、v1912を利用可能となった訳だが、v1906と並存しているので、どちらを使うかは状況に応じて選択できるようにしておきたい。色んなやり方が考えられるが、DEXCS-OFでは2通りのやり方を想定している。つまり、

  • 通常の端末から、平易なコマンドで環境をセットする
  • 専用端末(アプリケーション)を作成する

前者については、ホームディレクトリ下の.bashrcファイル(通常の端末起動時に読み込まれるファイル)中の最下行で、以下のコマンドaliasを定義している。

alias of1906+='source $HOME/OpenF1のOAM/OpenFOAM-v1906/etc/bashrc ; echo "OpenFOAMv1906 is enabled."'

したがって、これをコピー編集して、以下、

alias of1912+='source $HOME/OpenFOAM/OpenFOAM-v1912/etc/bashrc ; echo "OpenFOAMv1912 is enabled."'

追加しておけば、of1906+、またはofv1912+のコマンドで切り替える事ができる。

後者のアプリケーションの実体は、~/.local/share/applications/にあって、ofv1906.desktopをコピーしたファイルを、ofv1912.desktopという名前に変更。その内容は、

[Desktop Entry]
Comment=terminalForOpenFOAM-v1812
Name=OF-v1906Terminal
Exec=gnome-terminal -- /bin/bash --rcfile ~/.bashrc-OF4v1906
Terminal=false
Type=Application
Icon=/usr/share/icons/UUAuEXym.png
Name[ja_JP]=ofv1906

となっている(2行目の-v1812 は-v1906とすべきであった)ので、

[Desktop Entry]
Comment=terminalForOpenFOAM-v1912
Name=OF-v1912Terminal
Exec=gnome-terminal -- /bin/bash --rcfile ~/.bashrc-OF4v1912
Terminal=false
Type=Application
Icon=/usr/share/icons/Uok8LXNl.png
Name[ja_JP]=ofv1912

と変更すれば良い。なお、アイコン(Uok8LXNl.png)は、OpenFOAM のTwitterアカウントで使われていたものを借用させた頂いた。

この実行プログラムの実体はホームディレクトリ下の、.bashrc-OF4v1906 というファイルである。これをコピーしたファイルを、.bashrc-OF4v1912という名前に変更。このファイルも最後の2行で

. /opt/OpenFOAM/OpenFOAM-v1906/etc/bashrc
echo "OpenFOAMv1906 is enabled."'

となっているので、この部分を

. /opt/OpenFOAM/OpenFOAM-v1912/etc/bashrc
echo "OpenFOAMv1912 is enabled."

と変更すれば良い。そうすると、下図で示すように、

図6-4.登録アプリケーションの確認

Dickランチャーの①「アプリケーションを表示する」をクリックすると、アプリケーション一覧が現れて、②OF-v1906専用端末に加えて、③OF-v1912専用端末が追加される。これらをクリックして専用端末を立ち上げても良いし、必要であれば、これをDockランチャーに追加(マウス右クリックして「お気に入りに追加」を選択)して、Dockランチャーから起動もできる。

OpenFOAM v7

Foundation版では、Ubuntu用のバイナリーパッケージが用意されているので、こちらを利用する事にする。バイナリーパッケージは、OSのヴァージョン毎に内容が異なり、DEXCS-OFのOSは、ubuntu-18.04 LTS なので、Download v7 | Ubuntuページに記述の内容に従ってインストールすれば良い。

$ sudo sh -c “wget -O – https://dl.openfoam.org/gpg.key | apt-key add -“
$ sudo add-apt-repository http://dl.openfoam.org/ubuntu
$ sudo apt-get update
$ sudo apt-get -y install openfoam7

インターネットの回線速度にも依存するが、普通に速ければ数分でインストールが完了するはずで、/opt以下に

  • openfoam7
  • paraviewopenfoam56

というフォルダが出来ているはずである。したがって、インストールが出来ているかどうかの確認は、

$ . /opt/openfoam7/etc/bashrc
$ mkdir -p $FOAM_RUN
$ run

run コマンドを実行して、エラーにならないで、~/OpenFOAM/[user-name]-7/run というディレクトリに移動出来ているはずである。

問題なければ、.bashrc の最後に

alias ofv7='source /opt/openfoam7/etc/bashrc ; echo "OpenFOAMv7 is enabled."'

また、ofv1906.desktopをコピーしたファイルを、ofv7.desktopという名前に変更。その内容を、

[Desktop Entry]
Comment=terminalForOpenFOAM-v7
Name=OF-v7Terminal
Exec=gnome-terminal -- /bin/bash --rcfile ~/.bashrc-OF4v7
Terminal=false
Type=Application
Icon=/usr/share/icons/.png
Name[ja_JP]=ofv7

に変更。また.bashrc-OF4v1906 をコピーしたファイルを、.bashrc-OF4v7という名前に変更。このファイルも最後の2行で

. /opt/openfoam7/etc/bashrc
echo "OpenFOAM-v7 is enabled."

と変更すれば、v7専用端末のアプリケーションを作成出来た事になる。

連携1. TreeFoam

前項で説明したOpenFoamやparaFoam(ParaView)の更新作業によって、端末操作レベルでのヴァージョンを変えた解析作業は可能になっているが、TreeFoam上の作業でヴァージョンを切り替えるにはもうひと手間必要になる。

TreeFoamの「ファイル」メニューから「configTreeFoamの変更」を選択すると、

図6-5

「TreeFoamの設定変更」画面が現れ、全部で6つのアプリケーションとの連携が定義されていることがわかる。中央欄右端の▼をクリックするとプルダウンメニューで他の候補が現れて変更も可能である。左欄のボタンを押すとエディタが立ち上がって選択欄に表示された設定ファイルの内容を確認・編集できるようになっている。選択を変更したら、下段の「設定」ボタンを押す事で変更が有効になるという仕組みである。

デフォルト設定で「bashrc-FOAM*」のボタンを押すと、

図6-6

となっており、初心者には意味不明な内容もあるだろうが、ポイントは31行目でOpenFOAM-v1906の環境をセットして、41行目でその旨を表示するという内容である。この2行を使用したいヴァージョン用に変更するというのが一つのやり方であろう。

もうひとつ、「runParaFoam*」ボタンを押して、内容を確認すると、

図6-7

となっており、bashrc-FOAM.DEXCSがセットされているので、これを使う限りにおいて、変更したOpenFOAMのヴァージョンに応じたParaViewが立ち上がる事になるので、bashrc-FOAM.DEXCSの先の2行を書き換えておけば、こちらはそのまま使えるという事になる。

たったの2行でも、都度書き替えるのが面倒な人は、書き換えたbashrc-FOAM-DEXCSを、別の名前(bashrc-FOAM-v1912 など)で保存しておいて、選択を都度切り替えるというやり方もある。但し、この場合は、runParaFoam-DEXCSの方も各バージョンに応じた設定ファイルを用意しておいて選択する作業も必要になる。2箇所の書き換えと、2回のプルダウンメニュー選択とで、どちらが面倒と感じるのかは個人の好みの問題かとも思う。

なお、ここではparaFoamをOpenFOAMのヴァージョンに相応のParaViewを使うという前提で記してきたが、実際の使用環境でそうしなければならないという積極的理由はほとんど見当たらない。

また逆に、OpenFOAMのヴァージョンによらず、ParaViewは常に開発元の最新版を使いたいという人が居るかもしれない。そういう人向けにはrunParaFoam-BrandNew なりで相応の設定は出来る(後述)のでparaFoamはこれで固定、やはりOpenFOAMのヴァージョンに応じたbashrc-FOAM-v##を作っておいて、これを都度選択するのが良いのかもしれない。

なお、こういった設定によって、TreeFoamから異なるヴァージョンのOpenFOAMやParaViewを起動できるようになるというだけで、動作を保証するものではないという点はお断りしておく。

連携2. FreeCADマクロ(DEXCSランチャー)

DEXCSランチャー(FreeCADマクロ版)においては、まだTreeFoamのように統合的に環境を設定する方法が用意されていない。TreeFoamのサブセットを利用しているマクロの一部ではTreeFoamの設定変更をそのまま引き継ぐものもあるが、そうでないものはマクロのソースコードを直接変更する必要がある。また、OpenFOAM/ParaViewの機能とは無関係なマクロもあるので、ここでは関係のあるマクロについてのみ、変更の要点を説明するが、その前に各マクロのアイコンと起動されるマクロの実体との関係について調べる方法について記しておく。

図6-8

FreeCADを起動したら、①「ツール」メニューから、②「カスタマイズ」を選択すると、カスタマイズ画面が開く。タグがたくさんあるが、③「マクロ」のタグをクリックすると、DEXCSでカスタマイズしたマクロの一覧が表示されるので、調べたいものを④ダブルクリックすれば、⑤にマクロのファイル名がわかるという事である。

因みにこの欄右端の上下矢印部分をクリックすると、その他のマクロ一覧が表示され、これらの中からを選択を変更しても良いという事である。後に説明する方法で、OpenFOAMやParaViewの環境を変更したら、変更後のファイルを別名で保存して、都度切り替えるというのも一案であろう。

なお、これらのマクロファイルは、ホームディレクトリ下の、.FreeCAD という隠しフォルダ中に収納されている。変更の方法として、この画面から直接の変更手段があれば良いのだが、残念ながら無さそうなので、マクロファイルの名前を覚えておいて、次のいずれかの方法で変更する。

  • ファイルマネージャから直接編集する
  • FreeCADの専用エディタで編集する。

収納されているフォルダが隠しフォルダであると記したが、DEXCS-OFのファイルマネージャは隠しファイルも表示する設定になっているので、これで閲覧、編集したいものをダブルクリックすればテキストエディタが立ち上がって編集が可能になる。

FreeCAD専用エディタは

図6-9.FreeCADマクロ専用エディタの起動

①「マクロ」メニューから、②「」を選択すると、「マクロの実行」画面が現れるが、③編集したいマクロを選択して、④「編集」ボタンを押せば、専用エディタが起動して⑤マクロが表示され編集可能になる。但しこの場合には、編集したファイルをそのまま保存するしかないようで、別名で保存(隠しフォルダを選択)することが出来ないようである。

makeCfMeshSetting.FCMacro(cfMesh用設定ファイルを作成します)

1409行目で、

PATH_4_OPENFOAM = "/opt/OpenFOAM/OpenFOAM-v1906"

となっているので、これを

PATH_4_OPENFOAM = "/opt/OpenFOAM/OpenFOAM-v1912"

と変更すれば、OpenFOAM/OpenFOAM-v1912に搭載のcfMesh(cartesianMesh)を使えるようになる。とは云ってもcfMeshのヴァージョンは同一でソースコードもほとんど同じなので、変更する意味はあまり無いと思うが、cfMeshが使用するOpenFOAMのライブラリが異なる事による差異はあるかもしれない。興味のある方は試されたい。

また、計算実行にFoundation版のOpenFOAMを使いたい場合でも、Foundation版のOpenFOAMにはcfMeshが同梱されていないので、メッシュ作成に係る本マクロを変更してはならない。

runSolver.py(solverを起動)

同様に、61行目を変更する。

envSet = ". /opt/OpenFOAM/OpenFOAM-v1906/etc/bashrc\n"

runParaview.py(paraFoamの起動)

同様、38行目であるが、

paraFoamFix = os.path.expanduser("~") + "/.TreeFoamUser/app/runParaFoam-DEXCS"

こちらは、TreeFoamの設定ファイルを流用している。


6.3. ParaView

3-2.で説明したように、OpenFOAMではヴァージョンに応じたParaViewを使うことで、OpenFOAMが独自で開発したParaview用のリーダーと、ParaView側で開発したリーダーのどちらでも使える様になっているが、どうしてもParaViewのヴァージョンは最新ヴァージョンからは遅れたものを使わざるを得ない。本書の執筆時点で、ParaView最新ヴァージョンは5.8.0であるのに対して、OpenFOAM-v1906, v7 用は5.6.0、OpenFOAM-v1912用が5.6.3である。

OpenFOAMが独自で開発したParaView用のリーダーを使うメリットの一つには、OpenFOAMのメッシュ情報のうち、setやzoneといったメッシュ情報を表示できる点があった。一方、ParaView側で開発したリーダーでも最近はRead zones のオプションで、ある程度代用出来るようにもなっているので、これが使えればParaViewは最新ヴァージョンを使うという選択肢も十分実用的であろう。

ここでは以下、Paraviewの最新版をインストールして、TreeFoamやDEXCSランチャーとの連携方法について説明する。

ParaView最新版のインストールは至極簡単である。ParaViewの公式DownloadサイトからLinux用パッケージ(執筆時点では、ParaView-5.8.0-MPI-Linux-Python3.7-64bit.tar.gz)をダウンロードして、任意の場所で解凍する。解凍して出来たフォルダ中のbinフォルダ下にparaviewというファイルがあるので、これをダブルクリックすれば最新版のParaViewが立ち上がる。

起動出来る事を確認できたら、収納場所を決めておこう。収納場所はどこでも良いが、/opt/以下に収納する事とする。その際に、将来のヴァージョンアップ対応を見越して、アクセス用のシンボリックリンクを作成しておこう。

$ sudo ln -s /opt/ParaView-5.8.0-MPI-Linux-Python3.7-64bit/ /opt/ParaView

こうしておけば、ParaViewの起動コマンドが、/opt/ParaView/bin/paraview とできる。そこで以下に作成するparaFoam起動スクリプト中でこれを使用する事にしておけば、ヴァージョンが更新されても、上記シンボリックリンクを作成し直すだけで良いことになる。

!/bin/sh
#
paraview launcher
export LD_LIBRARY_PATH=''
a=`pwd`
openName=`basename $a`.foam
touch $openName
/opt/ParaView/bin/paraview $openName
rm $openName

このparaFoam起動スクリプトは、デフォルトでパスの通った場所(例:/usr/bin)に収納し、実行権限も付与しておく。

さらに、OpenFOAMに付属のparaFoamは、paraFoam.origとでも名前を変更しておけば、TreeFoam, DEXCSランチャー共に、ParaView関連の設定の如何によらず、本paraFoamが起動されることになる。


6.4. FreeCAD

以下の方法で最新開発版のパッケージインストール(/usr/bin/freecad-daily)が可能、

$ sudo add-apt-repository ppa:freecad-maintainers/freecad-daily
$ sudo apt-get update
$ sudo apt-get install freecad-daily && sudo apt-get upgrade

また、以下の方法でソースビルドも可能(/opt/freecad)

$ sudo add-apt-repository –enable-source ppa:freecad-maintainers/freecad-daily && sudo apt-get update
$ sudo apt-get build-dep freecad-daily
$ git clone https://github.com/FreeCAD/FreeCAD.git freecad-source
$ mkdir freecad-build
$ cd freecad-build/
$ cmake -DCMAKE_INSTALL_PREFIX=/opt/freecad -DBUILD_QT5=ON -DPYTHON_EXECUTABLE=/usr/bin/python3 ../freecad-source/
$ make -j 2
$ sudo make install

であるが、最新開発版は十分テストされておらず不安定な場合がある。
DEXCSでは、ソースビルドで安定に動作した版のソースコードを残しておいて、最新開発版で動作が不安定であった場合、安定版コードを使ってソースビルドするようにしている。

パッケージインストールではfreecad-daily、ソースビルドでは/opt/freecad/bin/FreeCAD というコマンドで起動できるが、このままだと起動画面は立ち上がるが、操作しようとすると即落ちる場合があるので、起動用コマンドを以下作成し、

$ sudo gedit /usr/bin/freecad

#!/bin/bash
export SVGA_VGPU10=0
#/usr/bin/freecad-daily $1
#/usr/local/bin/FreeCAD $1
/opt/freecad/bin/FreeCAD $1

2行目が仮想マシンで生じる不具合(即落ちる)対策であるが、3〜5行目で使用するヴァージョンを切り替えられるようにしておく(行頭に#の有る行はコメントとして扱われ有効にならない)と良いであろう。

以下、実行権限を付与し、freecadが起動できることを確認。

$ sudo chmod +x /usr/bin/freecad
$ freecad

但し、このままではDockランチャーや、ファイルをダブルクリックしての立ち上げが出来ないので、まずは以下のようにしてアプリケーションとして登録する。

$ gedit ~/.local/share/applications/freecad.desktop

[Desktop Entry]
Name=FreeCAD-DEXCS
Comment=Feature based Parametric Modeler
Comment[de_DE]=Feature-basierter parametrischer Modellierer
Comment[fr]=Modeleur paramétrique à base de fonctions
GenericName=CAD Application
GenericName[de_DE]=CAD-Anwendung
GenericName[fr]=Application de CAO
Exec="/usr/bin/freecad" %U
Terminal=false
Type=Application
Icon=/usr/share/freecad-daily/share/icons/hicolor/48x48/apps/freecad.png
Categories=Graphics;Science;Engineering;
StartupNotify=true
MimeType=application/x-extension-fcstd;

ファイルの作成が完了したら、実行権限を付与しておく。

$ chmod +x ~/.local/share/applications/freecad.desktop

アプリケーションファイルが正しく作成できておれば、下図のようにDockランチャーの①「アプリケーションを表示する」にて、

図6-10

3つのFreeCADアイコンが見つかるはずである。②がDEXCS-OFのオリジナル版で、②はパッケージインストールしたfreecad-daily版、③が上で登録したアプリケーションになるので、Dockランチャーに登録してあったたアプリケーション①を、③に置き換えれば良い(マウス右クリック操作でお気に入り登録/削除)。

もうひとつ、ダブルクリックした際に起動アプリを変更するには、ファイルマネージャー上でFreeCADで作成したファイル(.FCstd という拡張子、FreeCADのアイコンで表示されているファイル)をマウス右クリック選択で「別のアプリケーションで開く」を選択すると、下図、「アプリケーションの選択」画面が現れる。

図6-11

①「すべてのアプリケーションを表示」ボタンを押して、先に登録したアプリケーション②「FreeCAD-DEXCS」を選択、③「選択」ボタンを押せば、登録したFreeCADのヴァージョンが起動してモデルを開くはずである。

先に、最新開発版は十分テストされておらず不安定な場合があると記したが、不具合はすぐにはわからない事も多いので、とりあえず最新版を使いながら、不具合が生じた時点で、/usr/bin/freecad を書き換えてヴァージョン変更し、その不具合がヴァージョンに固有のものかどうか確認などしながら使い分けていくのが良いのではないかと思う。


6.5. TreeFoam

TreeFoamは AboutTreeFoamのページにて更新情報を得る事が出来る。執筆時点で、新ヴァージョン(3.02.200602)が公開されているが、TreeFoam本体のみで、DEXCS用はまだであった。

この最新版をインストールして、さらにDEXCS用に改変(dexcs十徳ナイフを使えるように)するには、変更用のパッチ(diffTF-3.02vs+DL+swak-200617.tar.gz)を入手して実施すれば良い(具体的な変更内容は次項で説明する)。

なお、このパッチは、dexcs十徳ナイフを使えるようにする事以外にも、DEXCSランチャー(FreeCADマクロ版)を、TreeFoamの3系でも動かせるようにする為のパッチも同梱しており、同梱のupDateTF-3.02+DL+swak.shを管理者権限で実行すると、以下に示すように、

$ sudo ./upDateTF-3.02+DL+swak.sh
patching file /opt/TreeFoam/python/getPyQtModule.py
patching file /opt/TreeFoam/python/gridEditorQtDialog.py
patching file /opt/TreeFoam/python/runParaFoamOptionDialog.py
patching file /opt/TreeFoam/python/selectFolderFilesDialog.py
patching file /opt/TreeFoam/python/createAndChangeCaseDialog.py
patching file /opt/TreeFoam/python/runParallelDialog.py
TreeFoam update for DEXCS Launcher has done.

TreeFoam update for TreeFoam+dexcsSwak
dexcsSwak modules exist in /opt/DEXCS/SWAK/
Continue ? (Y/N)

最初に、DEXCSランチャー用のパッチを実行した後で、dexcsSwak(十徳ナイフ)を使えるようにするかどうか聞いてくる。ここで「Y」を入力する必要がある点は留意されたい。

これは、この前者のパッチが、DEXCSで構築したシステム以外でTreeFoamを利用している人も想定しているからである。そういう人がここで「Y」を入力してしまうと、TreeFoamが使えなくなってしまうので注意して頂きたい。


6.6. DEXCSオリジナルツール

DEXCSランチャーを始めとするDEXCSオリジナルツールは、これまでDEXCSに同梱する形でしか配付していなかった。ソースコードそのものは同梱されているので、これを別のシステムにコピーして使うことも可能ではあったが、そのまま動かせることはほとんどなく、コピー先のシステム(OSやOpenFOAMのヴァージョン)に応じて何らかのカスタマイズが必要であった。

また、そもそもDEXCSオリジナルツールの位置づけは、他の様々なオープンCAEツールだけでは出来ないようなツール間のニッチな隙間をつなぐ事が本来の開発動機で、他のツールで出来るようになってしまい自然消滅したものもある。かような取捨選択の末、現在のところ当面使っていけそうなツールとして残っているのは、DEXCSランチャー(FreeCADマクロ版)と、TreeFoamのアドオンツールとして作成したdexcs十徳ナイフくらいであろうか。この2つのツールについて、更新方法を以下に記しておく。

6.6.1. DEXCSランチャー(FreeCADマクロ版)

DEXCSランチャーは次期ヴァージョン以降においては、いわゆるポータビリティを考慮してソースコードに修正を加えたものを配付する予定である。そのプロトタイプとして位置づけて開発したものを、DexcsLauncherV20200617.zipとして公開している。

これをダウンロードして、任意の場所で解凍し、同梱のconfigDexcsというファイルの内容が以下のようになっているので、

# cfMesh がインストールされたOpenFOAM環境
#for DEXCS-2019
    cfMesh     /opt/OpenFOAM/OpenFOAM-v1906
# for DEXCS-2018 ( not available)
#     cfMesh     /opt/OpenFOAM/OpenFOAM-v1806
# for DEXCS-2017
#     cfMesh /opt/OpenFOAM/OpenFOAM-4.x
# for DEXCS-2016
#     cfMesh     /opt/OpenFOAM/OpenFOAM-4.x
# for DEXCS-2015
#     cfMesh     /opt/OpenFOAM/OpenFOAM-2.4.x
# for DEXCS-2014
#     cfMesh     /opt/OpenFOAM/OpenFOAM-2.3.x
#configTreeFoam のインストール場所
    TreeFoam ~/.TreeFoamUser
#dexcs のインストール場所
# for DEXCS-2017 〜
    dexcs     /opt/DEXCS
# for 〜 DEXCS-2016
#    dexcs     ~/Desktop/DEXCS

この3つのパラメタ(cfMesh, TreeFoam, dexcs)の内容(行頭に#の有る行はコメント行)を、インストール先の環境に合致させておいてから、同梱のupdateDexcsLauncher.sh を端末上で実行する。その際、既存のuser.cfgを上書きするかどうかの質問があるので、

./updateDexcsLauncher.sh
DEXCS Launcher update
Overwrite your FreeCAD SettingFile(user.cfg)? (Y/N)

上書きして良ければ「Y」を入力してアップデートは完了。

上書きの可否は、インストール先のFreeCADの利用環境で自身でカスタマイズしたマクロやツールバーの有無次第で判断されたい。上書きしてしまうと、それらの情報が無くなってしまうということである。「N」を入力した場合には、マクロファイルがアップデートされるだけなので、ツールボタンを自身で作り直す作(注記2)が必要になる。

なお、上書きした場合でも、元の user.cfg ファイルは、user.cfr.<user>.orig という名前で残すようにしてあるので復元は可能。またテキストファイルなので、内容を理解した上での新旧ファイル間での組み合わせ改変は可能である。

また、DEXCSで構築したシステムでなくとも、TreeFoamが動く環境であれば、若干のファイル追加で動作するはずなので、その要件と追加方(注記3)についても記しておく。この部分も、DEXCS2020以降では、configDexcsの設定だけで対応可能にしていく予定である。

6.6.1 dexcs十徳ナイフ

dexcs十徳ナイフは、元々は単独のツールとして開発してきたものであったが、TreeFoamが世に出て、単独ツールとして目指した役割はTreeFoamで代用できると判断されるに至った。とはいえ、TreeFoamに含まれない、もしくは含まれてはいるものの、もっと簡単に起動したいものだけを厳選して、TreeFoamのアドオンメニューとして使えるようにしたのが現在のdexcs十徳ナイフである。

プログラム本体は、/opt/DEXCS/SWAK の下に、pyDexcsSwak.py として収納され、TreeFoamは起動時にこのモジュールをインポートしてメニューから呼び出せるようTreeFoam本体のソースコードを修正(具体的には追加)している。

以下に修正の要点を記しておくが、TreeFoamのVer.2系と、Ver.3系ではソースコードの構造が異なっており、Ver.2系までは、開発元にて、+dexcsSwak版も同時に公開されていたので、ここでは新しいVer.3系について記すことにする。

修正は、以下のファイルが対象となるが、

  1. /opt/TreeFoam/treefoam
  2. /opt/TreeFoam/treefoam.py
  3. /opt/TreeFoam/treefoam.glade
  4. /opt/TreeFoam/data/locale/inputFiles
  5. /opt/TreeFoam/data/locale/treefoam.po
  6. /opt/TreeFoam/data/locale/treefoam.mo
  7. /opt/TreeFoam/data/locale/en_US/LC_MESSAGES/treefoam.mo

4番目以降は、TreeFoamを英語環境で使う際に必要になる翻訳辞書に係るもので、日本語環境で使う限りにおいて修正は不要である。

/opt/TreeFoam/treefoam

本ファイルはTreeFoamの起動用プログラムで、プログラム本体(treeFoam.py)を呼び出す前に、様々な環境変数を定義しているブロックがあり、ここでDEXCSで使う際の固有変数を変更・追加しておく。

#pyFoam関連
-export pyFoamDir=~/OpenFOAM/PyFoam
+#export pyFoamDir=~/OpenFOAM/PyFoam
+export pyFoamDir=/usr/local # for DEXCS
#PATHの設定
-export PYTHONPATH=$TreeFoamPath/python:$TreeFoamPath/bin:$pyFoamDir:PYTHONPATH
+
+
+
+export dexcsSwakPath=/opt/DEXCS/SWAK #DEXCS
+export PYTHONPATH=$TreeFoamPath/python:$TreeFoamPath/bin:$pyFoamDir:$dexcsSwakPath:PYTHONPATH
/opt/TreeFoam/treefoam.py

これが、TreeFoamのプログラム本体である。424行目までにimport文で様々なモジュールを追加しているので、その下に十徳ナイフモジュール(pyDexcsSwak.py)を追加する。

#----Dexcs用追加--------------
import pyDexcsSwak
#-----------------------------

436行目で、ヴァージョン名を定義しているので、これを変更する(必須ではない)。

-version = "3.02-200603"
+version = "3.02-200603+dexcsSwak" # for DEXCS"

672〜701行で、メニューバーを定義しているので、その下に十徳ナイフ用のメニューを追加する。

#—-Dexcs用追加————–
self.menuItemRunDexcsDispBlockMesh = builder.get_object(“menuRunDexcsDispBlockMesh”)
self.menuItemRunDexcsBlockMesh = builder.get_object(“menuRunDexcsBlockMesh”)
self.menuItemRunDexcsCfMesh = builder.get_object(“menuRunDexcsCfMesh”)
self.menuItemRunDexcsCheckMesh = builder.get_object(“menuRunDexcsCheckMesh”)
self.menuItemRunDexcsAllrun = builder.get_object(“menuRunDexcsAllrun”)
self.menuItemRunDexcsAllclean = builder.get_object(“menuRunDexcsAllclean”)
self.menuItemRunDexcsSubmitJob = builder.get_object(“menuRunDexcsSubmitJob”)
self.menuItemRunDexcsSubmitStatus = builder.get_object(“menuRunDexcsSubmitStatus”)
self.menuItemRunDexcsJGP = builder.get_object(“menuRunDexcsJGP”)
self.menuItemRunDexcsKdiff3 = builder.get_object(“menuRunDexcsKdiff3”)
self.menuItemRunDexcsSearch = builder.get_object(“menuRunDexcsSearch”)
#—————————–

768〜862行で、メニューが選択された場合の呼び出し関数を定義しているので、その下に十徳ナイフのメニューに関する呼び出し関数についても追加する。

#—-Dexcs用追加————–
def menuRunDexcsDispBlockMesh(self,event):
self.runDexcsDispBlockMesh(event)
def menuRunDexcsBlockMesh(self,event):
self.runDexcsBlockMesh(event)
def menuRunDexcsCfMesh(self,event):
self.runDexcsCfMesh(event)
def menuRunDexcsCheckMesh(self,event):
self.runDexcsCheckMesh(event)
def menuRunDexcsAllrun(self,event):
self.runDexcsAllrun(event)
def menuRunDexcsAllclean(self,event):
self.runDexcsAllclean(event)
def menuRunDexcsSubmitJob(self,event):
self.runDexcsSubmitJob(event)
def menuRunDexcsSubmitStatus(self,event):
self.runDexcsSubmitStatus(event)
def menuRunDexcsJGP(self,event):
self.runDexcsJGP(event)
def menuRunDexcsKdiff3(self,event):
self.runDexcsKdiff3(event)
def menuRunDexcsSearch(self,event):
self.runDexcsSearch(event)
#—————————–

2813行目までに、様々な関数が定義されているので、その下に十徳ナイフ用の呼び出し関数を追加する。

#—-Dexcs用追加————–
def dexcsReload(self):
self.writeStatusBar(u”tree data を読み込み中…”)
#currentCaseを保存
item = self.treeView.get_selection()
#selCaseDir = self.getDirectory(item)
#再読込
self.reload()
#caseName, solverをlabelにセット
#caseItem = self.getItem(solveCaseDir)
#self.changeSolveCase(caseItem)
#currentCaseを設定
#self.setSelectCase(self.convDirToList(selCaseDir))
#self.clearStatus()
def runDexcsDispBlockMesh(self,event):
#global solveCaseDir, envOpenFOAMFix
pyDexcsSwak.dispBlockMesh(solveCaseDir,envOpenFOAMFix)
#event.Skip()
def runDexcsBlockMesh(self,event):
#global solveCaseFix, envOpenFOAMFix
pyDexcsSwak.runBlockMesh(solveCaseDir, envOpenFOAMFix)
self.dexcsReload()
#event.Skip()
def runDexcsCheckMesh(self,event):
#global solveCaseFix, envOpenFOAMFix
pyDexcsSwak.runCheckMesh(solveCaseDir, envOpenFOAMFix)
self.dexcsReload()
#event.Skip()
def runDexcsCfMesh(self,event):
#global solveCaseFix, envOpenFOAMFix
pyDexcsSwak.runCfMesh(solveCaseDir, envOpenFOAMFix)
self.dexcsReload()
#event.Skip()
def runDexcsAllrun(self,event):
#global solveCaseFix, envOpenFOAMFix
pyDexcsSwak.runAllrun(solveCaseDir, envOpenFOAMFix)
self.dexcsReload()
#event.Skip()
def runDexcsAllclean(self,event):
#global solveCaseFix, envOpenFOAMFix
pyDexcsSwak.runAllclean(solveCaseDir, envOpenFOAMFix)
self.dexcsReload()
#event.Skip()
def runDexcsSubmitJob(self,event):
#global solveCaseFix, envOpenFOAMFix
pyDexcsSwak.runSubmitJob(solveCaseDir, envOpenFOAMFix)
self.dexcsReload()
#event.Skip()
def runDexcsSubmitStatus(self,event):
#global solveCaseFix, envOpenFOAMFix
pyDexcsSwak.runSubmitStatus(solveCaseDir, envOpenFOAMFix)
self.dexcsReload()
#event.Skip()
def runDexcsJGP(self,event):
#global solveCaseFix, envOpenFOAMFix
pyDexcsSwak.runJGP(solveCaseDir, envOpenFOAMFix)
#event.Skip()
def runDexcsKdiff3(self,event):
os.system(“kdiff3 &”)
#event.Skip()
def runDexcsSearch(self,event):
#global envOpenFOAMFix
pyDexcsSwak.runSearch(envOpenFOAMFix)
#event.Skip()
#—————————–

それぞれのメニューに応じて、pyDexcsSwakモジュールの、特定の関数を呼び出すように定義されているということである。

/opt/TreeFoam/treefoam.glade

拡張子が.gladeとなっているファイルは、treeFoam3系から新たに使われるようになったもので、GUI画面のボタンやアイコンの配置を具体的に定義するファイルである(treeFoam2系では、この部分もtreeFoam.py の本体の中で定義していた)。

5〜239行で、様々なアイコンを定義しているブロック(<object class=…>〜</object>)があるが、その最下段以下に追加。この部分は、プルダウンメニューの各行の先頭に表示されるアイコンを定義している。本来なら、これもメニュー毎にアイコンを変更したいところだが、今の所、すべてsalome_default.pngで代用している。

<!– DEXCS –>
<object class=”GtkImage” id=”menuImageRunDexcsDispBlockMesh”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”pixbuf”>icons/salome_default.png</property>
</object>
<object class=”GtkImage” id=”menuImageRunDexcsBlockMesh”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”pixbuf”>icons/salome_default.png</property>
</object>
<object class=”GtkImage” id=”menuImageRunDexcsCfMesh”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”pixbuf”>icons/salome_default.png</property>
</object>
<object class=”GtkImage” id=”menuImageRunDexcsCheckMesh”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”pixbuf”>icons/salome_default.png</property>
</object>
<object class=”GtkImage” id=”menuImageRunDexcsAllrun”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”pixbuf”>icons/salome_default.png</property>
</object>
<object class=”GtkImage” id=”menuImageRunDexcsAllclean”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”pixbuf”>icons/salome_default.png</property>
</object>
<object class=”GtkImage” id=”menuImageRunDexcsSubmitJob”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”pixbuf”>icons/salome_default.png</property>
</object>
<object class=”GtkImage” id=”menuImageRunDexcsSubmitStatus”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”pixbuf”>icons/salome_default.png</property>
</object>
<object class=”GtkImage” id=”menuImageRunDexcsJGP”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”pixbuf”>icons/salome_default.png</property>
</object>
<object class=”GtkImage” id=”menuImageRunDexcsKdiff3″>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”pixbuf”>icons/salome_default.png</property>
</object>
<object class=”GtkImage” id=”menuImageRunDexcsSearch”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”pixbuf”>icons/salome_default.png</property>
</object>
<!– –>

660行目以降に、「ヘルプ(_H)」メニューを定義したブロック(<child>〜</child>)が存在するが、その前に以下「十徳ナイフ」のメニューを定義したブロックを追加する。

<!– DEXCS –>
<child>
<object class=”GtkMenuItem”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”label” translatable=”yes”>十徳ナイフ(_J)</property>
<property name=”use_underline”>True</property>
<child type=”submenu”>
<object class=”GtkMenu”>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<child>
<object class=”GtkImageMenuItem” id=”menuRunDexcsDispBlockMesh”>
<property name=”label” translatable=”yes”>blockMeshの表示</property>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”image”>menuImageRunDexcsDispBlockMesh</property>
<property name=”use_stock”>False</property>
<property name=”always_show_image”>False</property>
<signal name=”activate” handler=”menuRunDexcsDispBlockMesh” swapped=”no”/>
</object>
</child>
<child>
<object class=”GtkImageMenuItem” id=”menuRunDexcsBlockMesh”>
<property name=”label” translatable=”yes”>blockMeshの実行</property>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”image”>menuImageRunDexcsBlockMesh</property>
<property name=”use_stock”>False</property>
<property name=”always_show_image”>False</property>
<signal name=”activate” handler=”menuRunDexcsBlockMesh” swapped=”no”/>
</object>
</child>
<child>
<object class=”GtkImageMenuItem” id=”menuRunDexcsCfMesh”>
<property name=”label” translatable=”yes”>cfMesh(cartesianMesh)の実行</property>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”image”>menuImageRunDexcsCfMesh</property>
<property name=”use_stock”>False</property>
<property name=”always_show_image”>False</property>
<signal name=”activate” handler=”menuRunDexcsCfMesh” swapped=”no”/>
</object>
</child>
<child>
<object class=”GtkImageMenuItem” id=”menuRunDexcsCheckMesh”>
<property name=”label” translatable=”yes”>checkMeshの実行</property>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”image”>menuImageRunDexcsCheckMesh</property>
<property name=”use_stock”>False</property>
<property name=”always_show_image”>False</property>
<signal name=”activate” handler=”menuRunDexcsCheckMesh” swapped=”no”/>
</object>
</child>
<child>
<object class=”GtkImageMenuItem” id=”menuRunDexcsAllrun”>
<property name=”label” translatable=”yes”>Allrunの実行</property>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”image”>menuImageRunDexcsAllrun</property>
<property name=”use_stock”>False</property>
<property name=”always_show_image”>False</property>
<signal name=”activate” handler=”menuRunDexcsAllrun” swapped=”no”/>
</object>
</child>
<child>
<object class=”GtkImageMenuItem” id=”menuRunDexcsAllclean”>
<property name=”label” translatable=”yes”>Allcleanの実行</property>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”image”>menuImageRunDexcsAllclean</property>
<property name=”use_stock”>False</property>
<property name=”always_show_image”>False</property>
<signal name=”activate” handler=”menuRunDexcsAllclean” swapped=”no”/>
</object>
</child>
<child>
<object class=”GtkImageMenuItem” id=”menuRunDexcsSubmitJob”>
<property name=”label” translatable=”yes”>バッチジョブをサブミット</property>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”image”>menuImageRunDexcsSubmitJob</property>
<property name=”use_stock”>False</property>
<property name=”always_show_image”>False</property>
<signal name=”activate” handler=”menuRunDexcsSubmitJob” swapped=”no”/>
</object>
</child>
<child>
<object class=”GtkImageMenuItem” id=”menuRunDexcsSubmitStatus”>
<property name=”label” translatable=”yes”>バッチジョブの確認</property>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”image”>menuImageRunDexcsSubmitStatus</property>
<property name=”use_stock”>False</property>
<property name=”always_show_image”>False</property>
<signal name=”activate” handler=”menuRunDexcsSubmitStatus” swapped=”no”/>
</object>
</child>
<child>
<object class=”GtkImageMenuItem” id=”menuRunDexcsJGP”>
<property name=”label” translatable=”yes”>汎用gnuplot-GUI(jgp)の起動</property>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”image”>menuImageRunDexcsJGP</property>
<property name=”use_stock”>False</property>
<property name=”always_show_image”>False</property>
<signal name=”activate” handler=”menuRunDexcsJGP” swapped=”no”/>
</object>
</child>
<child>
<object class=”GtkImageMenuItem” id=”menuRunDexcsKdiff3″>
<property name=”label” translatable=”yes”>ケース比較(Kdiff3)の起動</property>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”image”>menuImageRunDexcsKdiff3</property>
<property name=”use_stock”>False</property>
<property name=”always_show_image”>False</property>
<signal name=”activate” handler=”menuRunDexcsKdiff3″ swapped=”no”/>
</object>
</child>
<child>
<object class=”GtkImageMenuItem” id=”menuRunDexcsSerch”>
<property name=”label” translatable=”yes”>十徳サーチ</property>
<property name=”visible”>True</property>
<property name=”can_focus”>False</property>
<property name=”image”>menuImageRunDexcsSearch</property>
<property name=”use_stock”>False</property>
<property name=”always_show_image”>False</property>
<signal name=”activate” handler=”menuRunDexcsSearch” swapped=”no”/>
</object>
</child>
</object>
</child>
</object>
</child>
<!– –>

/opt/TreeFoam/data/locale/inputFiles

TreeFoamを英語環境で使う際に翻訳対象となるモジュールを定義したファイルリストである。最終行以下に、十徳ナイフ関連ファイルを追加しておく。

../../../DEXCS/SWAK/pyDexcsSwak.py
../../../DEXCS/SWAK/dexcsTextSearcher.py
../../../DEXCS/SWAK/dexcsTextSearcher.glade
../../../DEXCS/SWAK/treeview.py
../../../DEXCS/SWAK/treeviewScroll.glade

十徳ナイフを追加したことに伴う翻訳辞書をマージした後、moファイルを作成し直して、それを所定のフォルダに収納しておく。


注記1

DEXCS2019におけるOpenFOAM-v1906のインストール方法とは異なっているので、標準的なインストール方法では

注記2. user.cfgを上書きしないで、作り直す方法

DEXCS2017へインストールした例で説明する。FreeCADを起動して、「ツール」メニューから「カスタマイズ」を選択すると以下の画面になる。

図6-12

ここでマクロ欄右端の▼(上図赤印)をクリックすると、マクロ一覧が現れるので、登録したいマクロを選択し、メニューテキストなど空欄に説明事項を印しておく。ピクセルマップの「…」ボタンを押すと、以下の画面が現れてアイコンを選択できるようになる。何を選んでも良いが、

図6-13

その際に、「アイコンフォルダー…」のボタンを押して、

図6-14

「+」ボタンを押して、TreeFoamのアイコンフォルダ(/opt/TreeFoam/icons)を追加しておく。そうすると、TreeFoamのアイコンを登録できるようになる。

図6-15

空欄を埋めて、アイコンが決まったら、「追加」ボタンを押してひとつのマクロの登録が完了である。

図6-16

登録が必要なマクロは以下の通りである。

マクロファイル名メニューテキストツールチップ等アイコン
runTreefoam.pytreefoamtreefoam を起動します
runGridEditor.pygridEditorgridEditorの起動
runParaview.pyrunParaviewparaFoamの起動
runClearCase.pyrunClearCase計算結果を削除して、caseを初期化します
runJgp.pyrunJGPlotjgpファイルの適合
checkCaseFileName.pycheckCase解析ケースファイルの確認
runCheckMesh.pycheckMeshcheckMeshを実行する
solverSet.pysolverSet新規にcaseを作成、又はsolverやmeshを入れ替え
editConstantFolder.pyeditConstantFolderPropertiesの編集
editSystemFolder.pyeditSystemFolderDict(system)の編集
runSolver.pyrunSolversolverを起動
runPlotWatcher.pyrunPlotWatcherplotWatcherの起動
runParallel.pyrunParallel並列処理

登録が終わったら、次にツールバーへの登録である。上記カスタマイズ画面において、「ツールバー」のタグ画面にて、左欄で「マクロ」、右欄で「全体」選択し、DEXCSツールバーを展開すると、下図の状態になる。

図6-17

ここで、登録したマクロを左欄で選択し、中央の右矢印ボタンを押せば、右欄に追加されるので、新たに登録したもののうち、必要なものを右欄に移し、順序も好みで入れ替えて使ってもらえば良い。

注記3. DEXCS以外のプラットフォームで動作させる為の要件
  • cfMesh(cartesianMesh)がインストールされており、configDecs中に、これを起動する為の(ビルドした)OpenFOAMの環境情報が記してある事。
  • TreeFoamがインストールされており(+dexcsSwak版でなくとも可)、configDecs中に configTreeFoam のインストール場所が記されている事。但し、ヴァージョン2系のみ。ヴァージョン3系では一部のマクロが動作しない(ので現在製作中)。
  • FreeCADのVerは0.16以上で、AppImage版でない事
  • configDecs中にdexcs指定フォルダを定義しておき、指定したフォルダ下にSWAKというフォルダとtemplateというフォルダを作成。SWAKフォルダ下にpyDexcsSwak.py という空ファイルを作成。templateフォルダ下には、dexcsという名前でOpenFOAMのケースフォルダを収納しておく。ケースフォルダの中身は、ケースファイルとして有効な内容であれば何でも良いが、FreeCADモデルがOpenFOAMのケースフォルダでない場所でメッシュ作成する際の雛形フォルダとして使われることになる。

この章の最初へ 全体目次