VTK(色付きの等値面の描画)を使用して、通常のグリッドに保存したデータを視覚化しようとしています。低解像度バージョンのデータで機能するvtkレガシー形式でデータをダンプするコードをいくつか作成しました。ParaViewまたはVTKライブラリを使用して、予想される等値面を抽出して表示できます。各次元で解像度を10倍に上げると(nxは約100から1000になり、ny、nzと同じ)、VTKライブラリを使用して作成したparaviewとビューアは正しくありません。それらは、単一の「ブロブ」ではなく、わずかに軸から外れたシートのセットのように見えます。他のテストから、データ自体が正しいことがわかります。
以下の私のレガシーvtkフォーマットのダンプコードに何か問題がありますか?ルックアップテーブルの機能はわかりませんが、低解像度の場合は問題なく機能するようです。
std::ofstream out(filename);
out << "# vtk DataFile Version 3.0" << std::endl;
out << "Signed distance/biharmonic visualizer" << std::endl;
out << "ASCII" << std::endl;
out << "DATASET STRUCTURED_POINTS" << std::endl;
out << "DIMENSIONS " << nx << " " << ny << " " << nz << std::endl;
out << "ORIGIN 0 0 0" << std::endl;
out << "SPACING " << h << " " << h << " " << h << std::endl;
out << "POINT_DATA " << nx*ny*nz << std::endl;
out << "SCALARS signedDistance double" << std::endl;
out << "LOOKUP_TABLE default" << std::endl;
for(size_t i = 0; i < nx; ++i)
for(size_t j = 0; j < ny; ++j)
for(size_t k = 0; k < nz; ++k)
out << tempPhi(i,j,k) << std::endl;
out << "SCALARS biharmonic double" << std::endl;
out << "LOOKUP_TABLE default" << std::endl;
for(size_t i = 0; i < nx; ++i)
for(size_t j = 0; j < ny; ++j)
for(size_t k = 0; k < nz; ++k)
out << biharmonic(i,j,k) << std::endl;
out.close();