構造格子から非構造格子への変換(VTKライブラリ) †
構造格子を非構造格子に変換します。
可視化ソフトウェアParaViewの"Clean to Grid"フィルターおよび"Clean Cells to Grid"フィルターを使うと、構造格子をヘキサ要素に変換することで非構造格子にしますが、下絵の通り、円柱状の構造格子は上手く変換できません。これは、円柱の中心線上にあるプリズム要素を、縮退したヘキサ要素とみなして削除してしまうからです。
そこで、上のフィルター"Clean to Grid"と"Clean Cells to Grid"で使用している関数(vtkCleanUnstructuredGrid, vtkCleanUnstructuredGridCells)を少し書き換えて、縮退したヘキサ要素をプリズム要素、ピラミッド要素、または、テトラ要素に変換するように修正しました。このプログラムを使用すると、穴が空かず、結果は期待するものとなりました。
StructuredGridToUnstructuredGrid.cxxp †
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
48
|
-
-
!
-
|
|
!
|
-
!
|
-
!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
| #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[])
{
if (argc < 2)
{
std::cerr << "Required arguments: InputFilename" << std::endl;
return EXIT_FAILURE;
}
std::string inputFilename = argv[1];
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ファイル: