2014年1月20日月曜日

Karman Vortex street by Code_Saturne Tutorial_4

ポスト処理を行っていく。
SAOMEにもポスト処理機能は付いているが、機能的にもう一歩な感じなのでParaViewを使う。
ParaViewはSALOMEのウィンドウの中からでも起動できる。
ただその場合、どうしてもウィンドウの中のメニューが増え過ぎて、画面が狭い感じがしたので、
自分の場合はParaViewのみを独立して起動させる。
Code_Saturneの計算 結果は、
/home/(User Name)/Documents/KARMANVORTEX2D/CASE1/RESU/CHR.ENSIGHT.(mmddhhmm)/に保存されている。
ParaViewでCHR.caseを開くことで一覧できる状態になる。
余談だが、これとは別に、Tutorial_3の最後でモニタリングに使ったフォルダ
/home/(User Name)/tmp_Saturne/KARMANVORTEX2D.CASE1.(mmddhhmm)/chr.ensight/
にも保存されているので、ディスク容量は2倍使っている事になる。

ソルバーが完遂した場合は
/home/(User Name)/tmp_Saturne/
以下に書き出されていたファイル群が
/home/(User Name)/Documents/
 以下にコピーされる仕組みらしい。なので
/home/(User Name)/tmp_Saturne/
以下のファイルは必要に応じて削除すると良い。

ソルバーが完遂しなかった場合は、
/home/(User Name)/tmp_Saturne/
以下のファイルを開いて、完遂しなかった原因を調査する事になる。

さて、ParaViewでCHR.caseを開いたら、とりあえずApplyをクリックする。
解析モデルが表示されるので、画像に黄色蛍光ペン風にマークしたメニューとアイコンを使って料理を進めていく。ここは特に難しい設定では無いと思うので、適当に操作して探ればコンタが得られると思う。(手抜き説明ですが、実際簡単です。)
一応マウスオペレーションだけ書いておくと、
  • 左クリック&上下左右ドラッグ:自由回転
  • トグルボタンクリック&ドラッグ:パンニング
  • Shift+左クリック&上下左右ドラッグ:回転(表示されている水平面基準)
  • Ctrl+左クリック&上下ドラッグ:拡大縮小
  • Ctrl+トグルボタンクリック&ドラッグ:自由回転
見るべき値は解析目的によって異なるが、今回の場合はVelocity Magunitude Surfaceを見る。
コンタのスケールは好みで調整すれば良い。
デフォルトのコンタ表示はセルの持っている値をそのまま表示するので、コンタはスムーズでない。メニューから
Menu-Filter-Alphabetical-Cell Data to Point Data
を適用すると
スムーズなコンタマップが得られる。
さらに
Menu-Filter-Alphabetical-Glyph
Properties TAB-Glyph type:2D Glyph
Display TAB-Color-Coloer by:GlyphVector
とすると、速度場のベクトル表示が得られる。
ParaViewのフィルター機能は結構奥が深いみたいで、もっと色々な事が出来そうなのだけど、研究していきたいと思う。
 
以上で、Code_Saturneによる2Dカルマン渦のチュートリアルを終わります。

2014年1月18日土曜日

Karman Vortex street by Code_Saturne Tutorial_3

前回SALOMEで作成した.MEDファイルをCode_Satuneに読み込む。
まずCode_Saturne GUIを起動する。Ubuntuのメニューから起動できる。
Ubuntu Menu-Applications-CAELinux-Code-Saturne Wizard
Code_Saturne CFD Study window
が開いたらスタディ名、ケース名、ベースディレクトリ、メッシュファイルの場所、を指定する。
Study Name:KarmanVortex2D
Case Name:case1
Base directory:/home/(User Name)/Documents
MED Mesh File:home/(User Name)/Documents/Mesh_1.med
New parameters set - Code_Saturne GUI window
File-New file
続いて一旦ファイルを保存する
File-Save as
File Name:boundarys
Click Save
この時点で
New parameters set - Code_Saturne GUI window
boundarys - Code_Saturne GUI window
に変わる。続いてメッシュの自動チェックを行う。
-Calculation environment
 -Mesh quality criteria
    Post-processing format:EnSight Gold
    Click Check mesh
デフォルトはSALOMEのポストプロセッサ用のMEDフォーマットになっているが、EnSight Goldフォーマットに変更することで、ParaViewで読むことが出来る。
Run mesh quality criteria window
が開いて、色々メッセージが表示される。これは後で見れば良いので、とりあえずSaveする。
Save File As window
File Name:checkmesh
Click Save
Run mesh quality criteria window
に表示されたメッセージは、メシュ品質に関する情報で、この後の解析が走らなかったり結果がおかしかった場合には見返す事になる。とりあえずこれはこれで良いので次に進む。
Click OK


ここから先はCode_Saturneのデフォルト値を少しずつ変更していくだけなので、変更箇所のみを書いていく。CAELinux2011はCode_Saturne2.0.2なので、バージョンが違う場合はデフォルト値が異なるので注意。

-Thermophysical models
  -Turbulance models:Nomodel(i.e. laminar flow)

-Physical propaties
  -Fluid propaties
   Density:1000
   Viscosity:0.000894
   Specific heat:4217

ちなみにCode_Saturneの流体物性値のデフォルトは空気の値みたいです。ここでは水の例として書き換えました。今回は熱計算をさせないので、比熱は適当な値でも結果は変わりません。
-Physical propaties
  -Gravity,hydrostatic pressure
    Gravity:X9.8

今回の例は閉じた流路の中の流れなので重力もあまり影響が無い。空気の熱対流などを計算させると場合は影響が出やすいと思う。

-Volume conditions
  -initialization
    Velocity initialization:Velocity:Y1.0

初期条件は非常に重要で、この値が大き過ぎたり、最終的に到達する流れとかけ離れた方向に与えたりすると計算が発散しやすい。小さすぎても計算に時間を要したりする。

-Boundary conditions
  -Definition of boundary regions
    Add from preprocessor listing
      Import groups and reference from Preprocessor listing

ここで、先ほどCheck meshで保存したファイルを参照させる。
フォルダマークのアイコンをクリックすると参照するファイルを求められる。
Select a Code_Saturne Preprocessor listing window
が開くが、デフォルトのPreprocessor listingをAll Filesにすると、先ほど保存したcheckmeshファイルが参照できる。
Click Open
するとSALOMEで定義したグループ名が列記される。
NatureをSelection criteriaの名前に揃えていく。
-Boundary conditions
  -Boundary conditions
    inlet;Velocity:1.0m/s
入力速度を設定する。マスフローやボリュームフローで指定することもできるが、今回は2D解析なので速度で指定する。
-Numerical parameters
  -Time step
    Reference time step:0.002
    Number of iterations:2000
非定常解析場合、解析1ステップあたりの進行秒数と、それを何回繰り返すかを指定する。掛け算すると総解析時間になる。タイムステップは小さいほど良いが、それだけ計算負荷も上がるので程々の値にするのが良い。大きくし過ぎると計算の収束性に影響する。一般的には1タイムステップでセル1個を通過するかしないか程度の値にするのが良いらしい。今回はあまり考えずに適当に短めにしている。
-Calculation control
  -Output control
    -Output control TAB
      Post-processing
        Post-processing every 'n' time steps:10
コンタマップを描画させる為のポストプロセスファイルを出力する頻度をしていする。全てのタイムステップで出力すれば一番解像度が良いが、PCのディスク容量と相談しつつ決める。
 
-Caluculation management
  -Prepare batch caluculation
    Prepare batch caluculation
      Number of processors:1 to n
最後に計算に使うプロセッサ数を指定する。
PCのプロセッサスペックにしたがって決める。
本例はVMwareを使っているので、仮想マシンを作る時点でコア数を何個割り当てるか決めていた値が上限値となる。
私の場合はCore-i3なので2個使う事にする。
 
これで設定が完了。
run Code_Saturne batch job
をクリックすると、計算がスタートするが、Saveしてからクリックしないとエラーメッセージが出る。
 
Terminal windowを見ると、エラーメッセージが出ているが気にしなくて良い。
自動的に計算領域分割がされ、並列計算が実行される。
領域分割を行なう標準のパーティショナーは機能している。
並列計算を最適化するオプションのパーティショナーがあるようだが、本家のユーザーフォーラムを見てみると、大して変わらないから気にするなというような事が書いてあった。
数割早くなるイメージらしいので、計算規模が大きい時はきちんとした最適化がされるパーティショナーを導入すれば良いだろう。これは今後の研究課題。
 
計算が走っている間、何もする事が無いが、きちんと動いているのかどうか、モニタリングする方法を紹介しておく。
Ubuntuのメニューなにもない所で右クリックすると出てくるメニューから、
Add to Panel...
 System Monitor
を選択するとCPU、メモリの使用率が判るようになる。 
 さらに
Terminal window
を開いて
listingファイルを参照する事で計算の進行具合が詳細に把握できる。
使うコマンドは、
less listing
grep "CPU TIME" listing
grep "v  Pressure" listing
grep "c  Pressure" listing

これは以前にもメモとして以下に記事を書いておいた。
http://himawarimemo.blogspot.jp/2014/01/convergence-httporangain.html
あれこれしている内にCode_SaturneのTerminal windowに
normal simulation finish
と表示されれば無事終了。
 
もし
Error in caluculation stage
と表示されたら、その際は色々見直す作業をしていくが結構ストレスになる。
このソフトがおかしいんじゃないのか、と思いたくなるが、ぐっとこらえて
「シミュレーションは、設定した条件の下で、常に正しい結果を返す。」
事を念頭に置いて自分の間違いを探す作業をしなければならない。
結構根気と忍耐が要る作業だが、理由が判ると馬鹿馬鹿しいミスをしている事が多いので、
その都度、見るべき所が身に付いて行く。

2014年1月15日水曜日

Karman Vortex street by Code_Saturne Tutorial_2

前回作成した解析モデルにグルーピング処理をしていく。

まずはエッジのグルーピングをする。
Grouping Edges:
SALOME operation
  Menu-New Entity-Group-Create
    Create Group window
      Shape Type:Edge
      Group Name:height
      Main Shape And Sub-Shapes:Partition_1
      Main Shape Selecion restriction:No restriction
    Select All Edges of height then click Add and then click Apply.

マウスとキーボードを操作して、高さを表すエッジを全て選択し、Add、をクリックすると、選択したエッジの要素番号がウインドウ中に転記される。さらにApplyをクリックしてグルーピングを確定させる。

SALOMEのGEOMETRY MODULEのマウス操作は以下ような動きになっている。
 Ctrl+左クリック&ドラッグ:拡大縮小
 Ctrl+トグルクリック&ドラッグ:パンニング
 Ctrl+右クリック&ドラッグ:回転
 Shift+左クリック:複数選択

続いて面のグルーピングをする。
Grouping Faces:
SALOME operation
    Create Group window
      Shape Type:Face
      Group Name:symmetry
      Main Shape And Sub-Shapes:Partition_1
      Main Shape Selecion restriction:No restriction
    Select All Faces of symmetry then click Add and then click Apply.
    symmetryのグルーピング作業は対象面が多いので、意図したとおりに選択できているか確認する方が良い。
  Menu-View-Display Mode-Shading/Wireframe
表示をワイヤフレームからシェイディングに切り替えると、意図した面が全て選択できているか、確認しやすい。
    Select All Faces of inlet then click Add and then click Apply.
    Select All Faces of outlet then click Add and then click Apply.
    Select All Faces of walls then click Add and then click Apply.
wallsは、円筒の外周面を選択するが、この作業の際には"Hide Selectied"を使うと便利。邪魔な面の表示を隠してくれる。
    Select All Faces of secondhalf then click Add and then click Apply.
 
このように、解析モデルの中で同一の境界条件にする面を全て選択し名前を付けて保存していく。エッジのグルーピングは、メッシングの際に分割数を設定するのに用いる。

グルーピングが完了したらメッシュモジュールに切り替える。
  Menu-Mesh-Create Mesh
    Create Mesh window
      Name:mesh_1
      Geometry:Partition_1
        3D tab:Algorithm:Hexahedron(i,j,k)
        2D tab:Algorithm:Quadrangle(Mapping)
        1D tab:Algorithm:Wire discretisation,Hypothesis:Nb. Segments_1
          Arguments:Number of Segments=30,Type of distribution=Equidistant distribution
        Apply and Close

  Menu-Mesh-Create Sub-Mesh
    Name:Submesh_1
    Mesh:Mesh_1
    Geometry:height
        1D tab:Algorithm:Wire discretisation,Hypothesis:Nb. Segments_2
          Arguments:Number of Segments=1,Type of distribution=Equidistant distribution
        Apply

    Name:Submesh_2
    Geometry:secondhalf
        1D tab:Algorithm:Wire discretisation,Hypothesis:Nb. Segments_3
          Arguments:Number of Segments=60,Type of distribution=Equidistant distribution
        Apply and Close

  Menu-Mesh-Compute
これでメッシング完了。
Code_Saturneで2D解析を行う場合は、厚み方向を1分割でメッシングし、symmetry定義を用いる。他に軸対称解析も出来るみたいなので、後々チャレンジしたいと思っている。

Number of Segmentsの値は任意に設定して良い。壁際をもっと細かく切りたい場合は、数値を増せば良い。また今回はsymmetryで定義したが側壁を定義したい場合は、partitionを切る際に、壁際に細分割を施す厚み分を考慮すると良い。
 
ジオメトリモジュールで定義したグループをメッシュグループに適用する。
  Menu-Mesh-Create Group from Geometry
    Create Group from Geometry window
適用対象はFaceグループのみで、symmetry,inlet,outlet,wallsの4つ。
これでメッシュ作成作業が完了。

SALOMEの作業履歴を保存する場合は標準フォーマットは.hdfだが、Code_Saturneで読み込む為には.MEDフォーマットに出力する必要がある。

  Menu-Export-MED File

適当な場所に適当な名前で保存すれば良いが、/home/(user name)/Document/、以下を推奨する。他の場所でフォルダを作って試した事があるが、何故かうまく行かなかった経験があり、原因解明までは出来ていない。

2014年1月11日土曜日

Karman Vortex street by Code_Saturne Tutorial_1

カルマン渦のシミュレーションを行う手順を、数回に分けて紹介していきたい。まず、SALOMEでジオメトリを定義していく。以下、SALOMEメニューの操作をトレースしていく。

SALOME operation
  Menu-File-New-GEOMETRY MODULE
  Menu-New Entity-Primitives-Box
    Box Construction window-Dx:3,Dy:4,Dz:0.1_Apply and Close
  Menu-New Entity-Basic-Point
    Point Construction window-X:1.5,Y:1,Z:0_Apply and Close
  Menu-New Entity-Basic-Origin and Base Vectors
  Menu-New Entity-Primitives-Cylinder
    Cylinder Construction window-Base Point:Vertex_1,Vector:OZ,Radius:0.08,Height:0.1_Apply and Close
  Menu-Operations-Boolean-Cut
    Cut Of Two Objects window-Main Object:Box_1,Tool Object:Cylinder_1_Apply and Close
  Menu-New Entity-Primitives-Cylinder
    Cylinder Construction window-Base Point:Vertex_1,Vector:OZ,Radius:0.5,Height:0.1_Apply and Close
  Menu-New Entity-Basic-Point
    Point Construction window-X:0,Y:0,Z:0_Apply
    Point Construction window-X:0,Y:0,Z:0.1_Apply
    Point Construction window-X:0,Y:2,Z:0.1_Apply
    Point Construction window-X:0,Y:2,Z:0_Apply and Close
  Menu-New Entity-Basic-Plane
    Plane Construction window-Point:Vertex_1,Vector:OX,Size of Plane:7_Apply
    Plane Construction window-Point:Point1:Vertex_5,Point2:Vertex_4,Point3:Vertex_1,Size of Plane:8_Apply
 
    Plane Construction window-Point:Point1:Vertex_1,Point2:Vertex_2,Point3:Vertex_3,Size of Plane:8_Apply
    Plane Construction window-Point:Point:Vertex_4,Vector:OY,Size of Plane:7_Apply and Close
    Plane Construction window-Point:Point:Vertex_1,Vector:OY,Size of Plane:8_Apply and Close
  Menu-Operations-Partition
    Partition Of Object With Tool window-Objects:Cut_1,Tool Objects:5_objects(Cylinder_2,Plane1,2,3,4,5)
  Geometry definitions finished.
  
これにて、円柱を配した流路の形状定義が完了した。

2014年1月5日日曜日

Karman Vortex street by Code_Saturne 2D laminer

CFDのメジャーな例題といえば、ミキシングエルボ円柱周りのカルマン渦だと思う。ミキシングエルボの例題はCAELinuxデスクトップのGetting Startedアイコンの先に動画で紹介されているので、カルマン渦の例を紹介したいと思う。

何はともあれ、まずは動画をアップ。


これを作るまでの作業は、
  1. SALOME: ジオメトリ定義、メッシング、エクスポート
  2. Code_Saturne GUI: 境界条件設定とソルバランニング
  3. Terminal: Convergenceモニタリング
  4. ParaView: ポスト処理
  5. AG-デスクトップレコーダー: デスクトップ動画キャプチャ
という流れになっている。1~4まではCAELinux、5はWindows。
コンタのスケールは色々試したが、渦っぽさが一番良く見えるのはグレースケールだったので、あえて自然色は使わなかった。
縦3m、横4m、円柱直径0.08m、想定流体は常温の水、流速1m/sec、上下端はsymmetryとし壁は円柱周りのみとした。
また記事を改めて、上記の作業を紹介したいと思う。

2014年1月4日土曜日

Convergenceのモニタリング

Convergenceのモニタリングをする時に使う標準コマンドをまとめているサイトのメモ。
http://orangain.hatenablog.com/entry/20100916/1284631280
Code_Saturneはlistingというファイルに計算ステップ毎の出力情報をテキスト出力しているので、less、grep、awk、などのコマンドを使って、とりあえずは標準出力(コマンドのターミナル画面)からテキストのベタ見で確認する。
grep "CPU TIME" listing
grep "v  Pressure" listing
grep "c  Pressure" listing
grep "v  Pressure" listing | awk '{print $4}'
といった具合のコマンドを使う。
CAELinuxのCode_Saturneは、デフォルトで
home/(user name)/tmp_Saturne/(Study Name).(Case Name).mmddhhmm
というフォルダの中に、listing、というファイルが出力されている。
あとはこれをグラフ描画ツールに流してやれば、市販の汎用コードのようにConvergenceの視覚的モニタリングが出来る、という予定。

CAELinuxからCFDへ

 実際にどう操作するのかは、チュートリアル動画が最も判り易いと思う。Ubuntuのデスクトップに「Getting Started」というアイコンがあるので、それを叩くとFireFoxが起動して解説ページを表示してくれる。「Video Tutorials:」と書いてある所に動画のハイパーリンクがあるので、再生して見ればおおまかな操作の流れが把握できると思う。

 解説情報は全て英語(アルファベットだが別の国の言語も時々混ざってる)で書いてあるので読めば良いのだが、日本語の情報を書く事が目的なので、ここから先はペースを落として少しずつ時間をかけて、記事を編集していきたいと思う。

 ここでは大まかな流れだけ書いておいて、詳細記事は後日書きたい。
  1. Windowsから共有フォルダにSTEP形式の形状データを置き、Ubuntuからそれを見る。
  2. CAELinuxにインストールされているSALOMEというソフトでSTEPファイルを開き、プリ処理を行う。   
    SALOMEは統合プレポスト環境で、
      ジオメトリ定義
      メッシング
      ポスト処理
     までひと通り出来る。

     ジオメトリ定義の作業は、SALOMEで直接定義する事も出来るし、CADデータ(STEP形式)をインポートして、点(Vertex)、線(Edge)、面(Face)、固体(Solid)、をキーワードに境界領域を定義する事も出来る。実務的には別のCADで形状を作ってSTEP形式でインポートするのが現実的。

     メッシングの作業はCFD最大の要所。SALOMEは構造格子、非構造格子、どちらも作れるが、自動メッシャーがまともに動くのは非構造格子(四面体)の場合だけで、構造格子を切る為には形状データに対して自分でパーテションを定義して、六頂点六面体に切り刻んでやる必要がある。OpenFOAMの記事に登場するSnappyというCut-Cellのテクニックを使ってみたいのだが、現時点ではSALOMEでCut-Cellが使えそうな記事は見つかっていない。

     なので色々試してみた結果、単純形状の部分は構造格子で、複雑形状の部分は非構造格子で、と切り分けをする事が現時点での解だ。

     ポスト処理はSALOMEはちょっと弱い感じなので、ParaViewを使う方が良さそうだ。
     
  3. SALOMEで行ったプレ処理結果をMED形式でエクスポートし、Code_Saturneに読ませる。 Code_SaterneのGUIからCFDパラメーターを設定し、ソルバを走らせる。
     ポストファイルの出力は、EnSightGoldフォーマットを指定する(ParaViewで読める)。
     ConvergenceのモニタリングはCUIからGrepコマンドを使ってテキストで観察する。
     ここはもうちょっと工夫してグラフでモニタリングが出来るようにしたい所。
  4. ソルバが終了したら、ParaViewで出力ファイルを開き、コンタマップ等を必要に応じて作成する。
以上が流れになる。

ここまで出来るようになるのに色々苦労したが、出来てしまえば簡単なので、まずは簡単に出来て実用性があるという事を知ってもらいたい。