メインコンテンツに移動

直方体のセルとフラックス

セルデータを作成

直方体のセルとフラックスを記述するサンプルを実行してみましょう.

XCodeでrect_2を実行します:

 

これでデータが見えますね!

まあもっとも,rect_2プログラムでフォルダーを rect_2.Body/ と指定したから,データがここにできるわけで.別の場所にしたければ,プログラムで指定すれば良いのであるです:

  • カレントフォルダー:boost::filesystem::current_path()
  • ホームフォルダー:boost::filesystem::path home=getenv("HOME")

データを表示

では作成したデータを表示していましょう.ParaViewを起動します.

表面の値なんか描画しても仕方がないのですが,やってしまいますよね〜:

まあ,フラックスデータであるwall*.vtmなら,これでも役には立ちます.

断面の作成

表面では仕方がない場合,断面でも描いて見ますかね.

で,断面の方向とか位置とか:

で,断面だけにして

出来上がり:

*昔から今でも,PDF/EPS/SVGの【Export】は,なんかダメですよね・・・これは【ScreenShot】です.

別の断面作成法として,CLIPってのも使えます:

もう説明はいりませんよねー

等高線の作成

セルデータでは,等高線を作成することはできません.
 

領域の表示・非表示

wall*vtmを読み込みます.壁面は6つのエリアから構成されています.そこで,奥側だけを表示して見たいと思いましょう.
【Select Block】ボタンを押し(bとキータイプした方が早いかもです),消去したいブロックを選択します:
 
ブロックの消去は1回しかできません(複数回消去すると,あらあら不思議ランダムにブロックがいくつか消えるバグに入ってしまう)ので,消すべきブロックは【選択追加】ボタンを使って残さず選択しておいてください.そしてHide Blocksを実行します.んで,こうなるわけー
 

流線の作成

流線とは,あるベクトル場が与えられた時に,そのベクトル場を接ベクトルとし,指定した点を通る曲線であります.んで,ベクトル場はVTKでロードしてるやつで,始点はお前がぽいっと設定した直線上に適当に分布させたものであることにして流線を描くことができます.
【Common】【Filters】【Stream Tracer】で,まあ流線の表示は【Resolution】だのをテキトーな感じでいじり倒せば,勘でできるでしょう:
 

領域に名前を

MultiBlockDataSetでは,領域に名前をつけることができます.

#include <vtkInformation.h> //MetaDataへのアクセス
...
auto body=vtkSmartPointer<vtkMultiBlockDataSet>::New();
...
for(int idom=0;idom<domMax;idom++)
{
   ...
   auto ibody=vtkSmartPointer<vtkImageData>::New();//別にどんなデータでも良い
   ...
   body->SetBlock(idom,ibody);//MultiBlockDataSetにまずデータを登録
   body->GetMetaData(idom)->Set(vtkCompositeDataSet::NAME(),"AHO"+std::to_string(idom));//命名!
   ...
}
...

こうやって作ったデータをParaViewで開きます.で, ExtractBlockフィルターに通すと,領域名で選択できるって寸法です:

set