OpenFOAM関連情報:公開

Salome で STL の解像度を変更する方法を検討中

OpenFOAMのsnappyHexMeshでメッシュ生成することがあります。
その時に使うSTLファイルを,Salomeで作ることがあります。
Salome からExportしたSTLの解像度が粗いので,改善する方法を探しています。
とりあえず,1つの方法がありました。メモします。
邪道かもしれません。正式な方法をご存じの方がいらっしゃいましたら,お知らせ頂けるとありがたいです。

SALOME で,File - Preferences を選択する。
表示されるPreferencesウィンドウで,左からGeometry を選択する。
Setting中のDeflection coefficient の値を変える。

Deflection coefficient を小さくすると,STLの構成する面の要素も小さくなる。


変更例(半径0.01の円柱を作成し,底面を見たところ)
Deflection coefficient = 0.001 (Default値)


Deflection coefficient = 0.0001


Deflection coefficient = 0.00001


このように変化します。
とりあえず,曲面の粗さがすこし改善できます。
なお,上記の図は,SalomeからSTL形式でエキスポートしたものを,Paraviewで開いて表示したものです。

salomeのユーザーガイドによりますと,
Deflection coefficient - allows to define default deflection coefficient for lines and surfaces. A smaller coefficient provides better quality of a shape in the viewer.
ということです。
http://docs.salome-platform.org/salome_7_3_0/gui/GEOM/geometry_preferences_page.html
0

run-time selectionについて

OpenFOAMer(コード解読修行中)と,いろいろと話をしました。

コードリーディングで苦戦している理由の1つが,様々な物理モデルの使い分けを容易にしてくれている仕組み「runTime Selection」だと感じました。前から気付いてはいたのですが。

ソルバを利用する時には,とても便利な機能です。しかし,ソルバーのコードを読んでいるときには,使いたい物理モデルにたどり着かないといった事態を引き起こします。

run-time セレクションについては,OpenFOAMの特徴欄にも記載があります。
http://www.openfoam.org/features/extending-libraries.php
Run-time selection
At run-time, OpenFOAM automatically creates lists of names of models and methods defined in libraries, from which the user can make a selection. For example, when a turbulence model library is used, a list of turbulence models is constructed at run-time, from which the user choose a model within one of the case input files. When a library is extended or a new one added, the new models/methods are automatically picked up by the run-time selection mechanism, so are available to the user.

日本語でも説明しているサイトがありました。
http://www.idaj.co.jp/sp_iconcfd/02/02.html
ランタイムセレクション
OpenFOAMは、アプリケーションレイヤーのコードを書きやすくするため、また多くの物理モデルなどを簡単に実装するため、Strategy デザインパターンライクな実装を行っています。これをランタイムセレクションと呼びます。
以下にRANS系非圧縮乱流モデルのクラス図を示します。乱流モデルは多種多様にあり、それに合わせてアプリケーションレイヤーのコードを書き換えるのは効率的ではありません。
Strategyパターンを使って乱流モデルを実装し、アプリケーションレイヤーのコードが乱流モデルを利用するときに変わったとしても、コードを変更する必要がない設計になっています。
うまく説明されています。が,超初心者に対しては,さらなく混乱を招くかもしれません。


この仕組みについては,OpenFOAM Wikiに詳しい解説ページがあります。ただし,このページは,この仕組みをカスタムクラスに実装したい人向けでしょう。コードを読んでいるときに感じる理解しにくさには,触れていないと感じます。
http://openfoamwiki.net/index.php/OpenFOAM_guide/runTimeSelection_mechanism


勉強会@富山で開催した「OpenFOAM(R)ソースコード入門pt1 熱伝導方程式の解法から有限体積法の実装について考える」の後編資料では,こっそりと説明したつもりです。ddtSchemes からEulerDdtScheme.Cにつながる部分です。混乱を避けるために,あっさりとしか説明していません。

コードを読む(だけ)の立場から説明する資料を作りたい。あるいは,勉強中に学生さんに作って欲しい,です。
これについては,デバッガを使って,実行状態を追いかける方が,てっとりばやいとも思います。

ということで,netBeans を使ってデバッグする方法の解説書類を作成中です。近日中に公開することを目指します。
0

OpenFOAMのpos(),neg()関数と,その組み合わせによる式の切り替え

OpenFOAM のコード解読中のメンバーから,pos() と neg() 関数について質問がありました。メモしておきます。

両関数は, src/OpenFOAM/primitives/Scalar/Scalar.H で定義されています。

https://github.com/OpenFOAM/OpenFOAM-2.3.x/blob/master/src/OpenFOAM/primitives/Scalar/Scalar.H

inline Scalar pos(const Scalar s)
{
    return(s>=0)?1:0;
}

inline Scalar neg(const Scalar s)
{
    return(s<0)?1:0;
}

プログラマーズガイド の1.4.1 Algebraic tensor operations in OpenFOAM にも説明が記載されています。

pos関数では,引数となるスカラー値が0以上であれば1が戻り,そうでなければ0が戻ります。つまり, s>=0 なら pos(s) =1,s<0 なら pos(s) =0 です。

同様に,neg関数では,引数となるスカラー値が0より小さければ1が戻り,そうでなければ0が戻ります。つまり, s<0 なら neg(s) =1,s>=0 なら neg(s) =0 です。

この両者を組み合わせて,スカラー値 s の値によって式を切り替えるような使い方がされています。

例えば,
    A = pos( s - 0.5 ) * functionPos  + neg( s - 0.5 ) * functionNeg
のようなものです。
この場合,s>=0.5 であれば,第1項の A = functionPos となります。
s<0.5 では,A = functionNeg です。
0

blockMeshDict の様子を可視化できる GUI

pyFoam の機能の一つに、blockMeshDict の内容を可視化できる GUI を表示するものがあります。 pyFoamDisplayBlockMesh.py です。pyFoamをインストールすると入っています。ただし、python-vtkパッケージを入れておかないと、動かないかも。

表示の一例です。複雑なblockMeshDictの構造が理解しやすくなります。基本的には、表示するだけで、直接編集することはできません。


5月10日開催 オープンCAE勉強会@富山 のミニ講習会でも,紹介します。
講習会用仮想マシンにはpyFoamをインストール済みです。
0

blockMesh にスムージングを追加した拡張版

OpenFOAM の最も基本的なメッシュ生成ユーティリティ blockMesh を拡張し,スムージング機能を追加したモノが公開されています。

Extend blockMesh with smoothing capability
http://www.etudes-ng.net/notre-savoir-faire/applications/mesh-smoothing
http://www.cfd-online.com/Forums/openfoam-meshing/132628-extend-blockmesh-smoothing-capability.html

OpenFOAM 2.3.x にインストールして,試して見ました。
インストールは,上記サイトに記載の方法で,ほぼOKです。

下に,拡張版と標準版で作成したメッシュの画像を添付します。
確かに,スムーズになっています。

5月10日開催 オープンCAE勉強会@富山 のミニ講習会でも,紹介します。

extBlockMesh でメッシュを作成しました。


同じ設定で,blockMeshだとこうなります。
0