DEXCS2015 for OpenFOAM(R) 製作の最終工程

先の第42回オープンCAE勉強会@岐阜(夏合宿)にて使用したDEXCS2015のプロトタイプ版ですが、ほとんどトラブルは無さそうだったので、いよいよ製作の最終工程・・・Winkチュートリアルを作成中です。
ワークスペース 2_984

 

DEXCSは基本Linuxですが、Winkチュートリアルだけは、Windows環境で作成する必要があるので、DEXCS2009以来、毎度の事ながら、この工程が最大の難所です。

拙宅マシンも更新して、仮想WindowsマシンもWindows10に更新、ちょっぴりサクサク作業できるようにはなりましたが・・・

とりあえず、第1弾が完成です。

範囲を選択_985

⇒ まずは使ってみる

蛇足ながら・・・

上のスクリーンショットと、下のそれを比べてみて下さい。

範囲を選択_986

明らかに画像品質が違いますね。下の物は、拙宅のLinuxMint17のデスクトップ環境でChromeを使って表示した場合です。

Chrome(on Linux Mint 17)でなく、FireFoxを使うなり、WindowsマシンのChrome を使えば、上の画像になってくれます。なんでだろ?

baffleMeshing by cfMesh

表題の資料をslideshare

範囲を選択_228

 

にアップしておきましたが、ここに補足解説しておきます。

モデルとメッシュ一式は⇒こちら

要旨

cfMeshでバッフルを有するメッシュを普通に作成すると形状が大きく崩れてしまい、とても使い物にならない(snappyHexMeshで作成したものと比べて)という問題があったので、解決策を調査したものです。

結論

CADモデルとしては、厚みの無いシェルではなく、有限の厚みを持たせるようにすれば、それなりにメッシュが作成できるようです。メッシュとして理想的なバッフル(厚みがゼロ)にはなりませんが、実用面を考えれば、実際の対象物の厚みをそのままモデリングすれば良く、メッシュもその厚み(隙間)サイズを再現してくれるので、これはこれでそれなりに使えそうです。

但し、ファンタイプ境界のようにバッフルの表裏面で、変数の受け渡しが出来るのかどうかは課題になりそうです。

 

おまけ

応用例として、OpenFOAM標準チュートリアルの、interDyMFoam/mixerVesselAMI:撹拌槽問題でバッフルが何ヶ所かあるので、これをcfMeshで作成することとし、その際のTipsをほんのさわりだけですが紹介しています。

実はすでにメッシュも完成し、interDyMFoamの計算も問題なく動いています。

このメッシュ作成法ですが、FreeCADの使い方を含めて、Tipsがたくさんありました。そこで、第42回オープンCAE勉強会@岐阜(夏合宿)

演習4:「cfMeshによる実践的なメッシュ作成」

の題材にならんかなぁ・・・と思案中です。

 

FreeCADで3Dプリンター用データ(STL)を作成する場合の留意点

先の記事の結論を、FreeCADの活用法という観点から言い換えると、

  • cfMesh用のモデラー&メッシュ設定ツールとしては、拙作のマクロを使えば簡単に出力できて問題はなさそう。
  • 3Dプリンター用に出力する際には、修復ソフト(netfabbの無償版が有望)が必要になる場合がある。

と書き直して良いかもしれません。

修復のやり方として、読者の方から、

cfMeshでメッシュを作成後その表面をstlにしたものでもよさそうですね。

というサジェスチョンをいただきましたが、これも一案です。この場合は、特にNetgenなどオールテトラのメッシュ作成に有効になりそうな感触があります。

本記事では、今回取り上げた以下の図のモデルで、STLファイルの修復が必要となったのは、何が問題であったのか(もっと端的に言うと、FreeCADがヘボだったからなのか?)について、掘り下げます。

範囲を選択_039

 

 

黒色表示には要注意

そこでまずは、ブーリアン演算をした結果を以下に再掲します。

範囲を選択_023外観が黒色でシェーディング表示されていますが、FreeCADを使い慣れた人には、何で? と映るんではないかと思います。通常は灰色ですからね。意図的に配色を変更した訳でもありません。表示色を変えても反映されないのです。

つまり、この黒色表示は、「面が正しく生成できていない」ということを意味するんではないか(そんな事は何処にも書いてないと思いますが(-_-;))、だとすると、このデータから作成されるSTLファイルには欠陥があって当然ということになります。

確認の為、iphoneのケースデータでなく、単純なプレートと、拙作Logoデータとの間でブーリアン演算をしてみました。

範囲を選択_040

このように、黒色でなくデフォルトの灰色表示です。もちろん、これから生成されるSTLデータに欠陥はありません。

ということで、欠陥が生じた原因は、ブーリアン演算に問題があったのか、iphoneのケースデータに問題があったのか、ということになります。

後者に問題がなければ、FreeCADのブーリアン演算に問題有り、ということになります。そこで次に、iphoneのケースデータについて調べてみました。

入手したデータがシェルデータであった為、これをソリッドデータに変更しましが、

範囲を選択_032このSolidデータについて調べました。

範囲を選択_041FreeCAD上の表示は、通常の灰色表示で問題はなさそうでした。しかし、これをSTLファイル出力して、件の修復ソフトで調べてみると・・・

範囲を選択_042

 

パッと見にはどこがエラーなのかは判りませんでしたが、例のビックリマークが出て、とにかくエラーがあるというので、詳しく見たら確かに面の欠損部分がいくつか(5箇所)見つかりました。

そこで、これを自動修復。修復したSTLデータを再度FreeCADへインポートし、これを使ったブーリアン演算を実施してみたところOKとなり、ブーリアン演算の問題ではなさそうだ、となりました。

STLデータのソリッド変換方法については後述しますが、ここではエラー箇所が判ったので、FreeCAD上でこれを特定出来ないかと調べてみたところ・・・

範囲を選択_043

 

確かに、開口部を確認できました。ならば、これを(簡単に)修復出来ればということになります。

この修復を、あれこれトライしてみたんですが、基本的に形状構築ツール範囲を選択_017を使って、開口部の面貼りまでは比較的簡単に出来ることがわかったんですが(下図参照)、

範囲を選択_047

作成した面(Face)のままでは、これを元のデータと結合範囲を選択_024してもSolidになってくれません。範囲を選択_048

 

このレポートビューを解釈するに、複合体(compound)として表示されるオブジェクトは、何か欠陥が存在するものだということのようです。

これをShell ⇒ Solid と変換する必要があり、その手間が半端で無さそう、あと一歩のところまではいきましたが・・・タイムオーバーです。(5/26再挑戦にて一件落着しました(後述))

 

結論

  • FreeCADのブーリアン演算機能は、対象Solidに欠陥が無い限りにおいて問題は無さそう。(今回修復が必要になったのは、インポートしたモデルそのものが欠陥を内包していた為)
  • インポートしたSTPモデルに欠陥があるかどうかは、STLファイル出力して、別ソフト(netfabbなど)にて確認、修復するしかなさそう。

 

 

インポートしたstlファイルをSolid化する方法

Partワークベンチで、

範囲を選択_049

「部品」⇒「メッシュから形状を作成」を選択

範囲を選択_051

変換後のオブジェクトはシェルデータなので、形状構築ツール範囲を選択_017を使って、これをソリッドに変換する。

範囲を選択_052

こうして作成したソリッドであれば、正常にブーリアン演算可能。範囲を選択_053

(結果もちゃんと灰色表示です)

フォントデータを3次元化する方法

詳細は、⇒ http://open-shelf.appspot.com/FreeCAD/18.html

Draftワークベンチ ⇒ シェイプストリング範囲を選択_058を使用して文字入力、サイズなど決定。

範囲を選択_057

 

DEXCSの場合、フォントファイルは、

/usr/share/fonts/truetype/

以下にあるフォントであれば何を使っても良い。日本語フォントを使えば、日本語表示も可能。

大きさやレイアウトが決まったら、Partワークベンチの押し出しツール範囲を選択_060を使って完成。

範囲を選択_059

 

 

穴のあるシェルデータの修正方法

基本的に形状構築ツール範囲を選択_017を使います。穴の部分は、上に示した通り、エッジから面を作成します。5箇所の穴を塞いだ結果が下図のような状態になります。

範囲を選択_063

問題は、これらの面をどうやってシェル化するか?です。FreeCADベテランの読者さんからも、これで出来るはずだということだったので、気を取り直して再挑戦したところ、結局2つのコツがあることが判りました。

 

コツ1・・・面の選択方法

単純に考えれば、ツリービューの画面上で、修復前のシェルと追加した面を選択して、「作成」ボタンを押せば良かろう・・・なんですが、これをやると、

範囲を選択_064

 

となってしまいます。当初は、シェルを面に分割してから再結合、とか色々やってみましたが、ようやく判ったのは、ツリービューの画面上での選択はNGだったということです。以下に3Dビュー上で選択した場合とを比較してみます。

範囲を選択_068お判りでしょうか?ツリービュー上で選択したものは、面以外に、エッジや頂点まで選択されてしまっています。この事に気づくまで、随分回り道をしてしまいました(-_-;)

要するに、面の選択は3D画面上で、すべての面(全部で約50面!)を一つづつ根気よくピックしてやらなければならなかった、ということです。

ただ、これをやろうとすると、モデルを大きく拡大して、色々視る方向を変えてやらないと、うまくピックできません。

コツ2・・・グルグル回転を止めるには

問題は、視方向の回転操作をしているうちに、マウス操作を少し間違えると、モデルが勝手にグルグル回転し出してしまう事です。

範囲を選択_074

 

通常の場合だと、3Dビュー画面上で、マウスクリックしてやれば回転は止まってくれます。しかしこの場合、その方法で回転を止めると、それまで苦労してピックアップした面がすべてリセットされてしまうことでした。

この事があったので、尚更にツリービュー画面上で選択する方法に拘って、余分な回り道をしていたのでした。

3Dビュー画面上でマウスクリックする以外に、この回転を止める方法はないものかと、今回改めて、試行錯誤した所、

範囲を選択_075

標準ビュー選択メニュー(上図)のうち、赤枠で囲った部分のボタンを使えば、指定の視方向になって回転が止まり、ピックアップした面もリセットされないということが判りました。

これにて、ようやく一件落着です。

 

 

makeCfMeshSetting.py(改)

来る5/30のオープンCAE講習会にて講習用に使用する計算環境(DEXCS2014 for OpenFOAM®の特別版)を製作するにあたり、表題のFreeCAD用マクロを改良しました。⇒少々シンプルになって使い易くなったと思います。

マクロ画面の説明(旧版)

範囲を選択_999(583)

マクロ画面の説明(新版)

範囲を選択_999(585)

  • Refinement(細分化)方法の指定が不要になったことと、Loadボタンが追加されています。

 

 

マクロの実行手順(旧版)

範囲を選択_999(586)

マクロの実行手順(新版)

範囲を選択_999(587)

  • 中間の確認ダイヤログを廃止しました。

追加機能(Loadボタン)

一番下の左端にあるLoadボタンを押すと・・・

範囲を選択_999(588)既存のmeshDictファイルを読み込んで、設定済のパラメタを反映することが出来るようになりました。これで、やり直しの際の作業効率が格段に向上すると思います。

範囲を選択_999(589)

範囲を選択_999(590)

但し・・・

  1. マウスカーソルで表中をクリックしないと、パラメタが再表示されない。(自動で画面リフレッシュされない)
  2. region以外の表面Type指定(patch/wall/…)は反映されない。(meshDictで指定していないので)

という問題はありますが、致命的ではないと思うので、まずはこのレベルでリリースすることと致しました。

 

謝辞

本マクロを作成するに際しては、旧版の作成記事の中で、「自分は本職のプログラマでないので・・・協力者求む!」的な願望を記したところ、MさんとIさんという強力助っ人が手を挙げてくれて、旧版のソースコードをリファクタリングしてもらえました。GUIの見た目はほとんど変わっていませんが、ソースコード(近日中には公開予定)は一変して見易くなっており、開発環境としてpythonの素の(FreeCADマクロから起動しなくてもよい)環境でデバッグ出来るようにもなり、おかげで今回の改造も大幅に効率upで講習会に間に合わせることが出来ました。

こういう活動の成果も出せるようになったという事は、ようやくオープンCAEの活動らしくなってきたと、ここに改めてお礼申し上げます。

マルチブートUSB

2015-04-28_1552.png_999

約1か月後(5/30)に開催予定の、オープンCAE講習会では、初めて表題のマルチブートUSBなるものを手懸けることになり、これを製作するに際してあれこれ調べたので以下に備忘録として記しておきます。

 経緯

今回のオープンCAE講習会は、流体系と構造系の2本立てで講習が実施されますが、講習参加費は参加コース、本数によらず一定額となっております。その拠り所としては、講習用に講習環境(仮想マシン用イメージファイル)やテキストを全て同梱したUSBを支給する点が挙げられます。したがって講習用USBには流体系と構造系のそれぞれに対応した仮想マシンを同梱し、用途に応じて使い分けできるように、いわゆるマルチブート可能なUSBメモリとして配布しようとなりました。(同一の仮想マシンで、流体系・構造系、どちらも動くように出来ればもっと良いのですが、ディスク容量の制限上困難でありました。)

マルチブートUSB作成法の基本は、こちらのページに詳しく書いてありましたが、これらをステップ踏んでやるのは少々荷が重い。やはり簡便に作ってくれるツールはあるもので、ライブUSBツール(Windows版)に関するまとめ記事なるものも見つかって、これをベースに調査を開始しました。これまで使用していた、LinuxLive USB Creator (LiLi)についても記されていましたが、これはSingleブート用で、今回の用途(マルチブート)には使えないということも判りました。

この中から、マルチブート用には、XBOOT, Easy2Bootというのが定番のようで(他にも、YUMI, SARDUもあったが日本語版で問題がありそうなのでパスした)これらを試してみました。⇒どちらも使えましたが、どちらを選択するかは悩ましい所です。

また、こうやって作成したブータブルUSBの動作確認を、これまではいちいちPCを再起動して確認していましたが、仮想マシンで確認する方法もあるとの事で、とりあえず今回は、VirtualBoxで確認できるようになったので、その方法についても記しておくこととしました。

 

 


XBOOT

2015-04-28_0852

  • 起動画面では、10秒間何もしないとデフォルトメニューが立ち上がってしまいます。
  • 普通に作ると、一番上の Boot from Hard Disk が立ち上がりますが、これだとまずい(Windowsが立ち上がってしまい、再起動させるまでの時間ロスが大きい)。かつ、2番目(流体用)や3番目(構造用)にしておいても、用途に応じて再立ち上げが必要になるので、一番下の Help! が立ち上がるようにしておきました。
  • このブートメニューはUSBを作成した後でも再編集できるので助かる。
  • これだと、下の画面になって、
  • 2015-04-28_0854
  • ここでF10を押せば。
  • 2015-04-28_0854_001
  • となり、Enterキーを押せば、最初の立ち上がり画面に戻れる。
  • 作成方法の要点としては、初期フォーマットが必要な点と、イメージ収納方法のオプションを間違えないようにする事。

初期フォーマットの方法

XBOOTそのものにはフォーマット機能がなく、実は通常のフォーマットではUSBブートした時にブートデバイスとして認識されない。そこでどうすれば良いのかは、こちらの記事に詳しかった・・・のだが、難解すぎて(意味不明のisoイメージの引用が多すぎて)よく判りませんでした。何度も読み直して自分なりに理解した事は、

なんでも良いのISOイメージを持ってきてLinuxLive USB Creator (LiLi)を使ってUSBブートできるようにしてから、USB上に作成されるRemove_LiLi.batというバッチコマンドを実行してファイルを全消去する。(上記記事の文中、まるで、「 フォーマット ソフトとして使ってくれ。 」と言わんばかりの仕様の部分)

というものでした。これをやっておけば、焼き直しの際にも通常のフォーマットでいけるようです。

イメージ収納方法

XBOOTそのものの使い方は簡単で、ブートしたいisoイメージファイル2015-04-28_1051.png_999をドラッグ&ドロップして、USB(又はDVD)作成ボタンを押すだけです。

問題は、ドラッグ&ドロップした時に、それが何であるかを、以下の選択メニューの中から選ばなくてはならない所で、これを間違えると正しく起動してくれない。

2015-04-28_1053

 

上の図には見えていないが、スクロールすると下の方には

Linux — ubuntu

というメニューがあって、これで良いかと思うのだがそうはいかない。しかも、isoイメージファイルが2重で保存されてしまっている。

また、ライブUSBツール(Windows版)に関するまとめ記事を書いた人のXBOOT関連ページには、ubuntu日本語版では、

XBOOT - 【ISO files wihch supports iso-scan/filename kernel parameter】を選択する画面のスクリーンショット

とあったのだが、これで作ると、2重保存の問題は解消されるんだが、やはり起動不能。起動不能というのは、冒頭の選択メニューは表示され、個別のisoを選択した後、

2015-04-29_0905

の画面まではたどり着けるのだが、この後で・・・

2015-04-29_0904

と、よくある起動不能のパターン。

色々試してみた結果の結論は、

ISO files which supports Live-media-path kernel parameter

を選択しなさい・・・ということでした。

 


Easy2Boot

2015-04-28_1552

  • こちらは、メニューがたくさん出てくるが、デフォルトが勝手に起動する事はない。落ち着いて必要なメニューを選択してEnterキーを押せば良い。
  • USBの作成方法は、XBOOTのようにGUI画面でボタンを押して・・・というわけにはいかなくて、ファイルマネージャ上での操作と、実行画面(コマンド端末)でのキー入力。やり方さえ理解すれば、簡単な一本道(フォーマットもやってくれる)だが、isoイメージファイルを所定のフォルダーに入れた後で、デフラグ処理が必要。

USB作成方法

ダウンロードしたzipファイルを解凍すると、Easy2Bootというフォルダが作成されるので、_ISO/docs/Make_E2B_USB_Drive

2015-04-30_1839

というフォルダの中の、MAKE_E2B_USB_DRIVE.cmd というファイルがあるので、これ選択し右クリック⇒管理者として実行する。

以下、端末画面が現れる、

2015-04-29_2216

色々尋ねてくるので、キー入力で回答していくがほとんどデフォルト(Enterキー)で良い。キーボードで Japan を選択するくらいか。設定がすべて完了し、問題なければ緑色の背景色に変わって、何かキーを押せば終了する。問題があると赤色の背景色になって、設定のやり直しを促される。

正常に終了すれば、ファイルマネージャでUSBドライブを調べると、ドライブの名前がE2Bになっており、その中身は先に解凍して出来たEasy2Bootフォルダとほとんど同じファイル構成になっている。

2015-04-30_1859

isoイメージファイルの収納方法

_ISO/MAINMENU のフォルダにコピーするだけです。

2015-04-30_1904

 

LINUXのフォルダに入れたりすると、メインメニューにLINUXが現れて、そのサブメニューで選択できるようになるようです。

ちなみに、このisoイメージファイルは、そのまま仮想マシン用の起動イメージファイルとして使うことも出来る。ちなみにXBOOTで作成したUSB上のisoファイルはNGです。

isoイメージファイルの追加や変更も、ファイルマネージャ上の通常の操作でOK。

 

デフラグが必要

但し、USB起動ディスクとして使うためには、このコピーの後で、デフラグ作業をしておく必要がある。デフラグツールは何を使ってもよいそうだが、作成されたUSBの中に同梱されているので、それ(MAKE_THIS_DRIVE_CONTIGUOUS.cmd)を使う(ダブルクリックするだけ)のが一番手っ取り早い。

注意点は、コピーのやり方。たとえば2つのisoイメージファイルをコピーする際、面倒だからといって2つ同時にコピーしてしまうと、デフラグに必要な時間が長大になってしまう。

1つコピーして一度デフラグにかけると、2つ目のファイルをコピーした後のデフラグは瞬時に終わることもあるようで、isoイメージファイルの追加や変更を実施した際にも、操作の都度デフラグにかけるのが良さそう。

 

 


 

LiveUSB on VirtualBox

Easy2USBのチュートリアルムービーを眺めていたら、ブート用USBを作成して、その場でVirtualBoxで動作確認をやっているシーンがあった。詳しく調べると、その方法(仮想マシンで動作させる方法)について記したページも見つかった。色んな方法があるようだが、ここでは、「Running VBox in ‘read-only’ USB mode」についてのメモです。

MakeUSBvmdk.cmdをダウンロードして、管理者として実行する。⇒USBドライブ番号を指定すると、USBPort1.vmdkというファイルを作成してくれるので、何処に作成されたかを覚えておく。

2015-04-30_2251_001VirtualBoxを管理者として実行。新規マシンを作成し、設定メニューにて、ストレージのIDEコントローラーでハードディスク追加⇒既存のディスクを選択⇒上記ファイル(USBPort1.vmdk)を指定(覚えておいた場所から探す)。

2015-04-30_2246

 注意事項

この方法で起動した際に、下記の画面が立ち上がる事がありました。

2015-04-30_1823

何かキーを押せば続けられるとの事で、インストールした環境そのものは実行可能になりました・・・が、しかし、仮想環境では実行できても、実環境(実際にUSBからブート)ではブートデバイスとしては認識されませんでした(Windowsが立ち上がってしまう)。

ちなみに、このデバイスは再起動されたWindowsマシンから(他のLinuxマシンからも)全く認識されなくなり、修復も不能になってしまいました(;_;)/~~~ 上記画面が出た時点(USBそのものは認識出来ている)で、USBそのものの初期化なり、再フォーマットした方が良いということかもしれません。

 


まとめ

本記事の作成に着手した時点では、経緯に記したように、XBOOTにするかEasy2USBにするかの選択は悩ましかったのですが、その理由は、

  • チャチャッと作るならXBOOTだが、仮想マシン用のisoイメージを別に同梱する必要がある。
  • Easy2USBはその必要がない(ブート用と仮想マシン用で共用できる)が、製作時間(デフラグに要する時間)がかかりすぎ。

といったものでした。記事を書きながらいろいろ検証しているうちに、Easy2USBの最大の問題であったデフラグに時間がかかる事について、やり方次第で、短く出来る事も判ってきた事と、出来上がったUSBに対して、isoイメージファイルの変更や追加も簡単に出来る事が判ってきたので、本番用にはEasy2USBを使うことになりそうです。