攪拌槽のメッシュ作成方法

OpenFOAMの掲示板にて表題のメッシュ作成方法に関するQAがあったのですが、これもSwiftツールを使って簡単に出来る格好の例題でした。ここにやり方とケースファイルを公開しておきます。

ケースファイルの説明

モデル&ケースファイル一式のダウンロード

ダウンロードしたケースファイルを解凍すると、以下のファイル構成で、2つのケースファイルから成っています。

  • 左端最下行の2つのファイルが、掲示板にて公開されている2つのstlファイル
  • この2つのファイルをBlenderへstlインポートして、回転領域を指定する円柱データを追加して1つのstlファイルに合体(円柱データの追加方法と、合体方法は後述)、blender形式で保存したのが、meshAのmodelA.blend。
  • タンク部の上端位置を伸長、上記合体したstlファイルとは別オブジェクトにて、blockMesh領域を設定する為の矩形データ(上端位置が開口部と一致すべく)を追加し、Blenderファイルとして保存⇒meshBのmodelB.blend
  • 上記Blenderファイルにて、Swiftツールを使って、blockMeshパラメタと、snappyHexMeshパラメタの設定を織り込んだもの(具体的な設定方法は後述)⇒modelA(またはB)Swift.blend
  • 上記modelA(またはB)Swift.blendから各Swiftツールのwriteボタンを押して自動出力されたパラメタファイルを赤枠で示してあります。
  • 但し、snappyHexMeshDictファイルだけは、一部手修正が施してあります。(下図、赤枠部:cellZone, faceZone 指定パラメタ)

実行方法

  • blockMeshを実行し、引き続きsnappyHexMeshを実行するだけです。
  • メッシュ作成例(meshA)

  • メッシュ作成例(meshB)

円柱データの追加方法

  •  視方向は上面(または下面)から見た状態
  • 追加 ⇒ メッシュ ⇒ 円柱
  • 左側ツールシェルフ中に、円柱のスペックを指定できるようになるので、サイズや位置を決める。深度だけは適当な値にしておいて、後で詳しく指定する。
  • 視方向を横(前・後・左・右のどちらでも良い)にして、編集モードにて、上端面を選択し、高さ(z座標)を指定する。
  • 同様に下端面の座標値を指定して完成

複数オブジェクトの合体方法

  •  オブジェクトモードにて、どれか一つのオブジェクトを選択(下図では外枠のタンクを選択)した状態にて、Shiftキーを押しながら他のオブジェクトを選択(右ボタンクリック)。⇒最初に選択したオブジェクト以外はやや濃いオレンジ色となって全オブジェクトを選択した状態にする。
  • メニューのオブジェクト⇒接続を選択
  • 全て同一色となって、一つのオブジェクトに合体される

SwiftSnappの具体的設定方法

  • フィーチャーエッジの作成方法やメッシュ制御点の設定方法は割愛(別途講習資料を参照下さい)
    • (2013/1/4 補足) 追加情報を記載しました→記事
  • ここでは、STLのパーツ毎に名前や細分割レベルを変更する為の具体的手順を示します。
  • まずは編集モードの面編集モードにて、全選択状態にしておく「下図)。

  • SwiftSnappツールのPatch settingsのメニューにて、名前を指定し、SetPatchのボタンを押せば、設定が反映される。この時点で、tankというパッチ名で、タンク以外の部分も選択されてしまっているが、この後のプロセスで別の名前に変更する。
  • 視方向を横からの方向にして、Aキーを押して、非選択状態。
  • Bキーを押して、ブロック選択状態にて、回転領域を選択。
  • 回転領域(+回転体)が選択されたら、名前(blade_area)を付け、細分割レベルを指定して、Set Patch ボタンを押す。この時点で回転体(blade)そのものを選択されているが、後のプロセスで別の名前に変更する。
  • 再度、全非選択状態にて、表示拡大し、回転領域と回転体が識別できる状態にしておく
  • 「ビュー」メニューから、ボーダーでクリッピングを選択
  • 回転体だけを範囲選択する
  • マウスボタンを話すと。指定範囲だけがクリッピングされる
  • 視方向を上または下に切り替える。
  • ブロック選択を、数回繰り返せば、回転体(blade)だけを選択できるようになるので、
  • 選択できたら、名前()を付け、細分割レベルを指定して、Set Patch ボタンを押す。
  • 以上で完了。下図はオブジェクトモード、で全体の半分領域をクリッピングして、ソリッドで表示確認したもの。

補足

  • modelASwift.blend では、さらにタンク容器の上面だけを別の名前に変更している
  • mashAのケースで使用しているblockMeshDict は公開しているものをそのまま使用している。
  • 一方、SwiftSnappにて、Make base mesh(下図)にチェックマークを付けてWriteボタンを押すと、対象モデル全体を包含するblockMeshDictを自動作成してくれる。(meshA/system/blockMeshDict)
  • しかし、このblockMeshDictを使って作成した基礎メッシュ(下図参照)を用いてsnappyHexMeshを作成することもできるのだが、何故かfeaturesや、refinementSurfacesの指定が有効になってくれない。
  • 基礎メッシュのサイズはとモデルサイズよりも、ある程度の余裕が必要ということなのか・・・詳細は不明。
  • meshAの方法と、meshBの方法の一番の相違点は、基礎メッシュ(blockMesh)端面をpatchとして使用しているかどうかの違いです。
  • meshBの方法(基礎メッシュ端面をpatchとして使用)で作成した場合、基礎メッシュ端面の近くに、ごく一部ですがメッシュの凹凸が出来てしまっています。これが一般解なのかどうか、本ケースに特有な事例であったのかもしれないが、詳細は不明。

SwiftツールによるOpenFOAM®用メッシュ作成

個人事業主となって、公開でギャラの貰える仕事としては初仕事になる表題の講習会が終了しました。

オープンCAE学会でこれまでに実施してきた講習会の実績からすると、予想以上の集客になってしまい、しかも内容が内容だけに、補助できるサポート要員もない講習会で、一部の人には消化不良になってしまったかもしれません。しかし、Twitterなどでの反応を見る限り、大方の人には及第点をつけて頂けたのでないかと、まずはほっとしております。

一番の反省点としては、Macユーザーさん対応でした。ライブDVDでやると決めた時点から、Macユーザーさんの事はスッパリ抜けていましたが、直前になって「Macユーザーはどうしたらいいんだ?」という問い合わせがあり、仮想マシンでなんとかなるでしょう・・・と、その先のことは全く考えてなかったもんで。ここはいっそ、「Macは駄目です」と回答しておけば、講習会としてはよほどスイスイやれたでしょう・・・ということにはなります。

まぁ、今回、Macは仮想マシンでやってもらって、一番の問題「Macのマウスにはホイールが無い」点に関する配慮さえやっておけば、さほど大きな問題もなくやれそうだ・・・ということが判ったということで、ここは前向きに考えております。

で、そこんところは、どうすんだ? ・・・ を帰ってから、色々調べたんですが、blenderをMacで使う方法に関する情報があまりに少ないことには、少々驚きました。それでもまぁ、色々調べたところ、多分ですが、ホイールを回す相当の機能は、テンキーを使ってほぼ実現できるので、Macの場合もその方法(テンキー)で出来るんじゃないかと思いますが、何せMac使いではないので、Macのテンキーがどうなっているかも知らないので、後はMacユーザーさんにおまかせするしかありません。

一応、マウス操作に関する説明文中に、ホイール操作と同等のテンキー操作方法について内容を追加したものを、講習テキストの電子版(pdf)として、ここに公開しておきます。⇒SwiftツールによるOpenFOAM®用メッシュ作成

motorBikeLES

昨日の追記事の中で記したが、OpenFOAM-2.1.xのチュートリアルケースのうち、表題のケース(incompressible/pisoFoam/motorBike/motorBikeLES)がAlltestでは実行エラーになるものの、通常のAllrunでは実行可能であった。その計算がようやく終わったので、とりあえずアニメーションだけでも披露させていただくことにした。

但し、計算できたとはいうもの、Allrunを単にそのまま実行しただけ。0.7sec間を0.1sec毎に出力する計算なんだが、何しろ計算時間が長大になりそうであったので、せっかく途中まで計算したものを無駄にしたくなかったというところ。ちなみに総計算時間は、4コアをフル使用して約40時間!でした。メッシュサイズは以下の通り。

nPoints:3747803

nCells:3127537

 

計算が終わって、ログファイルを調べるといろんな事がわかりました。

Allrunスクリプトの概要

  1. まず、snappyHexでメッシュ作成して、simpleFoamの計算を実行。⇒motorBike
  2. 上記並列計算したケースファイルをコピー(cloneParallelCase)してLES計算用にケースファイルを作成⇒motorBikeLES
  3. simpleFoam計算結果を初期条件として、pisoFoamにてLES計算を実行

ここで、3.のsimpleFoamの計算結果をコピーする際、 time 500 が決め打ちになっている為、Alltestではコピーエラーが生じていた。

課題

  1. simpleFoam計算の前に、並列ケースにてrenumberMeshを実行しているが、これには失敗している。現時点の2.1.x固有の問題。少し前の時点(2012/3に入手したもの)では成功していた。
  2. snappyHexMeshにおいて、デフォルト(本結果の場合)は

addLayers false;

となっており、物体表面のレイヤーメッシュを作成してありませんでした。多分、そのせいだと思うのですが、Cd(抗力係数)は、simpleFoamで計算した場合の値(Cd=0.455)に比べて、かなり小さくなっています。

 

今後

  1. 並列ケースに対するrenumberMeshの効果は大きいという評判は聞いたことがあるので、部分時間の計算にて、旧ヴァージョンとの比較は実施する予定。
  2. レイヤーメッシュを付加した計算は、SGIのオープンCAE学会員向けクラスタサービスが使えるようになったら挑戦予定。