構造格子から非構造格子への変換(VTKライブラリ)

構造格子を非構造格子に変換します。

可視化ソフトウェアParaViewの"Clean to Grid"フィルターおよび"Clean Cells to Grid"フィルターを使うと、構造格子をヘキサ要素に変換することで非構造格子にしますが、下絵の通り、円柱状の構造格子は上手く変換できません。これは、円柱の中心線上にあるプリズム要素を、縮退したヘキサ要素とみなして削除してしまうからです。

ParaViewでの変換

そこで、上のフィルター"Clean to Grid"と"Clean Cells to Grid"で使用している関数(vtkCleanUnstructuredGrid, vtkCleanUnstructuredGridCells)を少し書き換えて、縮退したヘキサ要素をプリズム要素、ピラミッド要素、または、テトラ要素に変換するように修正しました。このプログラムを使用すると、穴が空かず、結果は期待するものとなりました。

プログラムでの変換

StructuredGridToUnstructuredGrid.cxxp

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 
 
 
 
 
 
 
 
 
 
 
-
-
!
-
|
|
!
|
-
!
|
-
!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
#include <vtkSmartPointer.h>
#include <vtkXMLGenericDataObjectReader.h>
#include <vtkXMLUnstructuredGridWriter.h>
#include <vtksys/SystemTools.hxx>
 
#include "vtkCleanUnstructuredGrid.h"
#include "vtkCleanUnstructuredGridCells.h"
 
#include<string>
 
int main(int argc, char* argv[])
{
  // Verify input arguments
  if (argc < 2)
    {
    std::cerr << "Required arguments: InputFilename" << std::endl;
    return EXIT_FAILURE;
    }
 
  // Get the filename from the command line;
  std::string inputFilename = argv[1];
 
  // Get all data from the file
  vtkSmartPointer<vtkXMLGenericDataObjectReader> reader =
    vtkSmartPointer<vtkXMLGenericDataObjectReader>::New();
  reader->SetFileName(inputFilename.c_str());
  reader->Update();
 
  vtkSmartPointer<vtkCleanUnstructuredGrid> cleanFilter =
    vtkSmartPointer<vtkCleanUnstructuredGrid>::New();
  cleanFilter->SetInputConnection(reader->GetOutputPort());
  cleanFilter->Update();
 
  vtkSmartPointer<vtkCleanUnstructuredGridCells> cleanCellsFilter =
    vtkSmartPointer<vtkCleanUnstructuredGridCells>::New();
  cleanCellsFilter->SetInputConnection(cleanFilter->GetOutputPort());
  cleanCellsFilter->Update();
 
  std::string outputFilename = vtksys::SystemTools::GetFilenameWithoutExtension(inputFilename)
                               + ".vtu";
  vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer =
    vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New();
  writer->SetFileName(outputFilename.c_str());
  writer->SetInputConnection(cleanCellsFilter->GetOutputPort());
  writer->Update();
}

ダウンロードとビルド

ソースコードとCMakeLists.txtファイル:


添付ファイル: fileStructuredGridToUnstructuredGrid_src.zip 264件 [詳細] filestruct_to_unstruct_paraview.png 674件 [詳細] filestruct_to_unstruct.png 695件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-06-10 (火) 09:45:11 (1281d)