Customized FreeCAD for DEXCS

オープンCAEの世界では3D-CADとして定番のFreeCAD。この日本語解説本が出たので早速購入。
拙作DEXCS for OpenFOAM(R)の中でもFreeCADを使わせてもらっていますが、これまでは行きあたりばったりのカスタマイズ。本書を読んでカスタマイズの全般的な仕組みが判ってきたので、次期DEXCS2016では、もうちょっとスマートなカスタマイズ構想が芽生えてきました。

FreeCAD起動画面

範囲を選択_002

上図、右上赤枠部分がDEXCS用にカスタマイズしたメニューボタンです。

DEXCSで想定している解析シーンでは、3次元の形状モデル(3D-CADモデル)は、

  • 簡単なモデル(上図の2つの直方体ブロックなど)はFreeCAD上で作成
  • 上図のDexcsフォントモデルのような複雑なモデルは、ユーザーが使い慣れた3D-CADツールで作成し、STLまたはstep形式でエクスポートしたファイルをFreeCADにインポートする(step形式がベター)

としています。つまり、上図が典型的な形状モデルということになります。

DEXCS上でカスタマイズされたFreeCADでは、こうして作成された形状データに対して、下記の作業を支援出来るようにしています。

  • 解析用に面の区分け、名前付け(変更)を実施
  • メッシュ(cfMesh)作成用の設定ファイル(*.fms, meshDict)を自動作成

つまり、上図赤枠部のメニューボタンを使って、上記の作業が、以下のように簡単に出来てしまうということです。

 



 

面の分割

分割したいパーツ(windTunnel)を選択して、赤枠部の「ダウングレード」ボタンを押す。

範囲を選択_005

下図のように、6つのFaceに分割される。

範囲を選択_006

 

境界面の再構築

inlet, outlet は個別に名前変更。

範囲を選択_003

残りの4面をまとめて選択して、赤枠部「和集合作成」ボタンを押す。

範囲を選択_007

4つの面が一つのパーツ(fusion)になったので、この名前を変更し、見易くすべく色合いや透明度を変更して、下図のように解析モデルの完成です。

解析モデルの完成

範囲を選択_010

cfMesh用パラメタファイルの作成

赤枠部のボタンを押せば、一発で拙作のマクロが起動します(マクロの使い方はこちらを参照下さい)。

範囲を選択_011

ちなみにこれまでは、下図に示すように3アクション必要でした。

範囲を選択_012

マクロの名前なんて、、、説明するのも面倒でしたね^^;

 

また、面の区分けに使う「ダウングレード」や、再構築における「和集合作成」は、FreeCAD本来の機能で、これらを使うのにワークベンチを切り替えたりする必要があったのを1箇所のツールバーにまとめたというに過ぎません。それでもこうやって使えるようになってみると存外に便利なので・・・乞うご期待です。

 

ただ、やっぱりFreeCADはまだまだ開発途上のツールなんだな・・・と思わざる得ない面も多々ありますけどね。たとえば、、、

スタートアップ画面の問題

FreeCADには様々なワークベンチがあって、その機能をほとんど使えるのがCompleteワークベンチなのですが、正直ボタンがいっぱい有り過ぎてウザイ。またレイアウトが美しくない。

DEXCS用のカスタマイズでは、これまで下図のようなStartワークベンチにしていましたが、これにすると、、、

範囲を選択_013

右上赤枠部のツールボタンの中で、「ダウングレード」ボタンが表示されなくなってしまいます。

実は、この後で、Completeなり、Draftワークベンチに切り替えて、再度Startワークベンチに切り替えると、、、

範囲を選択_015

となるんですが、これじゃあねぇ・・・

FEMワークベンチ(応力解析機能)

これはFreeCADの日本語解説本を読んで初めて知ったんですが、Calculixという「FEMソルバー」が搭載されているとか。

この検証もやってみましたが、何かと挙動がおかしかったですねぇ。これに関してはまた別レポートします。

 



cfMesh VS snappyHexMesh, 回転メッシュで比較

背景

先の記事で、OpenFOAM 標準チュートリアルのmixerVesselを対象に、cfMeshを使ったメッシュ作成法を紹介した。

   

 

その結果を見る限りにおいて、メッシュ数や計算時間は、ほぼ同等の結果になっていた。 一方、cfMeshでは境界層レイヤーがきちんと作成出来ているし、メッシュ作成に要する計算時間も短く済むので、この種の回転体問題でも、マルチリージョンメッシュを作成する(個別に作成して合体させる)手間が必要ではあるが、cfMeshの利用を推奨してきた。 しかし、最近取り組んだ現実の設計問題で、cfMeshではsnappyHexMesh(以下SHMと記す)に比べて、どうしてもメッシュ数が多くなりすぎてしまうという問題が生じた。 この現実の設計問題と、mixerVesselの問題との違いは何であったのか?・・・どうも回転体と静止部分間のクリアランスに違いがあるようであった。  

 
 

問題の略式化

そこで、この違いをもう少し明確にすべく、もっとシンプルな形状でクリアランスの違いがメッシュ数にどう効いてくるのか。以下のようなモデルを使って、cfMeshとSHMで比較してみました。 範囲を選択_999(232) 2つの円柱の入れ子構造で、2つの円柱で囲まれた領域(上右図中、水色の領域)でメッシュ作成するというもの。回転体問題のメッシュ作成に際して、どちらかが回転境界面(cyclicAMI)になり、もう一方が、物体(回転体、もしくは固定境界)になることを想定しています。 物体と回転境界面の隙間が小さいと、きれいな回転境界面が出来なくなってしまい、計算が不能ということになります。したがって隙間の大きさに対して、メッシュの最少分割サイズをどこまで大きく出来るか?というアプローチで取り組んでみました。 メッシュの分割方案としては、内部の円柱(inner)を最小セルサイズ(min cellSize)になるようにして、ベースセルサイズ(Base cellSize)は、その8倍となるよう設定しました。参考に、DEXCS2015 for OpenFOAM(R)を使った場合のパラメタ設定画面(min cellSize=1の場合)を以下に添付しておきます。 範囲を選択_999(236)下図は、min cellSize に対して、出来上がったメッシュのサイズをプロットしたものです。 範囲を選択_999(237) なお、snappyHexMeshでは、内部円柱の内部をcellZone定義するという方法でメッシュ作成しており、この図に記したメッシュ数(No. of cells)は、cfMeshで作成したメッシュと対比すべく、この内部を除いた領域( splitMeshRegions -cellZones を実施してメッシュ分割したもの)におけるメッシュ数です。 min cellSizeが小さい(=0.2)場合、cfMeshとSHMで、ほとんど違いはありませんが、 範囲を選択_999(246) 大きくなるにつれ、cfMeshのほうがメッシュ数が大きくなります(下図は、minCellSize=0.5)。 範囲を選択_999(245) また、隙間の大きさ(=5)に対し、SHMでは約70%のminCellSizeでメッシュ生成できるのに対して、cfMeshでは、20%を超えたところで、以下のようなメッシュとなって、回転境界面として不適切な物になってしまいました(下図は、minCellSize=1.5で、上のプロット図中では赤の✕印に相当するケース)。   範囲を選択_999(244)  

keepCellsIntersectingPatches

但し、cfMeshには、keepCellsIntersectingPatches というオプションパラメタがあって、これを使うと、上記のような狭い隙間でも、patch の形状を再現してくれるようになります。その代わりにメッシュ数は下図(緑がオプション無し、赤がオプション有り)で示したようにもう少し増えてしまいます。

 

範囲を選択_999(247)

下図は、minCellSize=2 におけるメッシュを比較したものです。

範囲を選択_999(250)

最終的には、minCellSize=2.25(隙間に対して45%)まで大きくすることは出来ましたが、いずれにせよ、SHM(隙間に対して70%)に比べると、そんなに大きくできないので、最少メッシュサイズが隙間サイズで規定されるようなケースでは、cfMeshの方がメッシュ数は増えてしまうことになります。

 

現実の設計問題と、mixerVessel問題との違いを改めて考察

mixerVessel問題の寸法を改めてチェックし直したところ、最少メッシュサイズが隙間サイズに対して約20%の大きさになっていました。このサイズであれば、cfMeshとSHMはほぼ同等なので、上述のケースには該当しない。

一方、現実の設計問題で取り扱った例では、最少メッシュサイズが隙間サイズで規定され、cfMeshではSHMよりも最少メッシュサイズを小さくせざるを得なくなり、大幅なメッシュ増加になったということでした。

 

結論

回転体問題では、メッシュ生成に際して、隙間(回転面と回転体、または回転面と静止境界間)のサイズが重要なファクターで、このサイズに対して最少メッシュサイズを、

  • cfMeshの場合、45%以下
  • SHMの場合、70%以下

にする必要がある。

この基準でメッシュ作成した場合、cfMeshのメッシュ数はSHMに比べ、最大で8倍程度増加する。

mixerVessel by cfMesh

遅ればせながら、この夏に第42回オープンCAE勉強会@岐阜、夏合宿にて使用した表題講習会の資料とケースファイルを公開します。



資料はこちら

ケースファイルはこちら

動作環境として、講習会ではDEXCS2015 for OpenFOAM(R) のプロトタイプ版で実施しましたが、もちろん最新の公開版でも出来ます。

資料の33頁以降に、OpenFOAMの標準チュートリアルとして同梱されているSTLファイルをベースに、これらをFreeCADにインポートして、解析モデルの作成法ついて説明してありますが、はっきりと言って、面倒臭い。

そこで、講習会では、これが完成したという前提で、これらを使って、DEXCSに搭載のFreeCADマクロやTreeFoamをどうやって使うか?という話の流れになっています。

講習会では、メッシュを作成するデモしか行えませんでしたが、上述のようにFreeCADによるモデル作成も出来るようになっているので、FreeCADの練習がてらお試しあれ。

 

また、ここでは計算結果についても掲載しておきます。

範囲を選択_999(180)

 

 

お役に立つと思ったら、下の広告をクリックしてやって下さい。



DEXCS2015 for OpenFOAM(R) リリースノート

ダウンロードはこちら

(2015/9/26公開)

DEXCS for OpenFOAM(R) は、OpenFOAMと、これをより簡単・高度に活用できるようにする為の様々なツールをすべてインストール済のオール・イン・ワンパッケージで、誰でも簡単・即使えるようにしたマシンイメージ(isoファイル)です。

範囲を選択_999(005)

詳しくはこちら

DEXCSランチャーのヘルプメニューからも参照できます

DEXCS2015では、

  • ベースOSはLinux Mint 17.1 Cinnamon No Codecs(LTS)
    • DEXCS2014ではやむ無くubuntu でしたが、Linux Mint に戻しました
    • 国際化にも対応しました。但し、ヘルプファイルは日本語のみ。
    • 2015/9/23 システムアップデート
  • OpenFOAMやその他の組み込みツールのヴァージョンアップに対応
  • DEXCS2011から搭載するようになった中級者向けツール(TreeFoam)の機能強化を図りました。
  • FreeCADマクロ(cfMesh用簡単設定ツール)を、より使い易くしました。

なお、DEXCS2012までは、32/64bit版がありましたが、DEXCS2013からは、64bit版のみです。

また、製作可能なisoイメージの最大容量の制限の関係上、今回はHelyx-OS と、OpenMDAOの搭載は見送る事としました。

 

インストールと利用法

範囲を選択_999(006)

詳しくはこちら


マシンイメージなので、DVDにイメージ書き込みすれば、DVDから起動してそのまま利用することができます。 (DEXCS初体験の人はこのライブDVDとして「まずは使ってみる」方法をお薦めします。)

  • 起動後にインストール機能により、HDD等に直接インストールできる上、使用するユーザー名等を選択することができます。
  • VMWare Playerや、VirtualBox等の仮想環境で起動して、仮想環境を作成することも簡単です。
  • 基本的に、DEXCS2011でやった方法と同じです.DEXCS2012,2013では、同じやり方が通用しない部分が一部ありましたが、それらの不具合はなくなりました。
  • VirtualBoxにインストールする方法は、こちらにDEXCS2013について詳しく記されていますが、基本は同じです。また、DEXCS2011までは、”Guest Additions”が入っておりませんでしたが、DEXCS2014では導入済みなので、共有ファイルの設定なども同様に実施可能です。

同梱プログラム

範囲を選択_999(007)

その他のドキュメントについて

    • DEXCSランチャーのヘルプメニューを参照下さい。
      • 本当に初めて使う人は、「ランチャーの使い方」-「まずは使ってみる」をご覧下さい。
      • 「ランチャーの使い方」-「形状作成」にて、FreeCADの使い方を概略説明しています。
      • 「ランチャーの使い方」-「メッシュ」にて、FreeCADマクロで起動される表形式のGUIの使い方と、cfMesh作成に必要なパラメタの概要を説明しています。
      • 「ランチャーの使い方」-「計算実行」「結果処理」を理解できるようになると、OpenFOAMの基本的なファイル構造を理解できたことにもなります。
      • 以上は動画チュートリアルになっていますが、「フラッシュプレーヤー」を変更して参照することを強くお勧めします。変更方法は、最下段の「フラッシュプレーヤーの変更方法」をご覧ください。
    • Blender⇒SwiftツールをDEXCSランチャーから使用することはなくなりましたが、ツールそのものは使用可能で、メッシュ作成用のテンプレートフォルダもBlenderモデルと併せて同梱してあります(デスクトップ上:DEXCS/template/swift_dexcsMesh)。
    • Swiftツールもヴァージョンアップして、出力ファイルの仕様が少々変更になっていますが、基本的な使用方法は変わっておりません。使用法の詳細を知りたい方はDEXCS2013のリリースノートをご覧ください。
    • SLURMというリソースマネージャもインストールしてあり、サブミット用のサンプルスクリプトを含んだケースファイルも同梱してあります(デスクトップ上:DEXCS/template/slurm_damBreak)。コア数が4つのマシンであれば、以下のコマンドを、そのまま利用可能(のはず)です。
      • $ sbatch submit.sh  (ジョブサブミット)
      • $ squeue  (ジョブ確認)
      • $ scancel [jobID] (ジョブ停止)
    • コア数が4でないなどの環境で、バッチジョブがペンディング状態のまま実行出来ない場合は、デスクトップ上、DEXCS/launcherOpen/doc/slurm.pdf を参考に設定ファイル(slurm.conf)を変更して使用して下さい。
    • ジョブサブミット、ジョブ確認は、TreeFoamの十徳ナイフからも起動できます.
    • 上記を含めて、TreeFoamから起動する十徳ナイフのメニューに変更はありません。
    • JAVA gnuplot GUI の使用方法
    • TreeFoamの基本的な使い方はTreeFoamのヘルプメニューから、「使い方」を参照して下さい。(DEXCS2014までは内容が古い物になっていましたが、DEXCS2015では、最新版に対応した内容になっています)
    • TreeFoamに関する情報は、DEXCS公式HPの AboutTreeFoamの記事にまとめてあります。
    • DEXCS2015に搭載のTreeFOAMは、+dexcsSwakとして、上記公式ページに掲載ヴァージョンに対して独自のカスタマイズが加えてあります。範囲を選択_999(008)
    • また、これに関連し、一部の機能が無効になっています範囲を選択_999(009)

 

FreeCADとcfMesh用マクロの使い方

先の記事に書いた通り、ただいまDEXCS2015 for OpenFOAM(R) の動画チュートリアルを作成中ですが、その一部は単独でそのまま表題の説明用途にも使えるわなぁ・・・と改めて気付いたので、本記事にて紹介しておきます。

FreeCADの基本的な使い方

範囲を選択_987

DEXCSでは、複雑な形状作成はユーザーが使い慣れた3D-CAD(もちろん頑張ればDEXCSに搭載のFreeCADやBlenderでも可能です!)で作成してもらうとして、これをstepまたはstl形式でFreeCADにインポートして使ってもらう事を想定しています。

その際に、FreeCADに標準搭載のプリミティブ要素(直方体や円柱など)を使って、領域を追加で定義したり、解析用の境界面を定義するのに、面の分割や再結合の操作が必要になりますが、これらの操作方法を具体例で確認することが出来ます。

⇒ チュートリアルを見る

 

cfMesh用マクロの使い方と機能の概要説明

範囲を選択_988

上述の方法で、FreeCADのソリッドモデルで解析空間を定義できるようになれば、DEXCSに搭載のFreeCAD用マクロ(makeCfMeshSetting.py)を使って、cfMesh用に境界面の定義や分割方法を指定する為の設定ファイル(meshDict)を自動作成できます。

このチュートリアルでは、マクロで起動される表形式のGUIの使い方と、実際に作成したmeshDictを対比させながらmeshDictファイルのパラメタの意味を解説するとともに、GUIでは指定しなかった、または指定出来ないパラメタを手修正で追加する方法についても解説しています。

⇒ チュートリアルを見る