.vtk
C を使用して VisIt に読み込まれるレガシー ファイルを書き込もうとしています。残念ながら、インストールした VisIt プログラムは、書き込んだ VTK ファイルのレンダリングを拒否し、「ローカル ホストに失敗しました」と表示されます。
以下は、1 つのファイルからデータを読み取り、それを従来の VTK ファイルに変換するために使用されるコードです。マクロXPIX
、YPIX
、およびを使用してZPIX
、ピクセル グリッドの寸法を記述します。各ピクセルには、スカラー密度値が含まれています。行優先順序を使用して「グリッドファイル」にピクセルをリストしました:つまり
int list_index(x,y,z) = YPIX * ZPIX * x + ZPIX * y + z;
grid[]
このピクセル リストのすべてのエントリはdouble 型の配列に読み込まれoutfile
、従来の VTK ヘッダー データの下に書き込まれます。
/*Write vtk header */
fprintf(outfile,"# vtk DataFile Version 3.0\n");
fprintf(outfile,"Galaxy density grid\nASCII\nDATASET STRUCTURED_POINTS\n");
fprintf(outfile,"DIMENSIONS %d %d %d \n", (XPIX+1), (YPIX+1), (ZPIX+1));
fprintf(outfile,"ORIGIN 0 0 0\n");
fprintf(outfile,"SPACING 1 1 1\n");//or ASPECT_RATIO
fprintf(outfile,"CELL_DATA %d\n", totalpix);
fprintf(outfile,"SCALARS cell_density float 1\n");
fprintf(outfile, "LOOKUP_TABLE default\n");
/*Create Memory Space to store Pixel Grid*/
double *grid;
grid = malloc(XPIX * YPIX * ZPIX * sizeof(double));
if (grid == NULL ){
fprintf(stderr, "Pixel grid of type double failed to initialize\n");
exit(EXIT_FAILURE);
}
fprintf(stderr,"Pixel grid has been initialized.\n Now reading infile\n");
/*Read infile contents into double grid[], using Row-Major Indexing*/
double rho;
char newline;
int i, j, k;
for(i = 0; i < XPIX; i++){
for(j = 0; j < YPIX; j++){
for(k = 0; k < ZPIX; k++){
fscanf(infile, "%lf", &rho);
grid[getindex(i,j,k)] = rho;
}
}
fprintf(stderr,"%d\n", i);
}
fprintf(stderr,"Finished reading\n");
#if !DEBUG
/*Write out grid contents in Row major order*/
fprintf(stderr,"Now writing vtk file");
for(i = 0; i < XPIX; i++){
for(j = 0; j < YPIX; j++){
for(k = 0; k < ZPIX; k++){
fprintf(outfile, "%lf ", grid[getindex(i,j,k)]);
}
fprintf(outfile,"\n");
}
}
fprintf(stderr,"Finished Writing to outfile\n");
#endif
このルーチンでグリッド データ リストを実行するXPIX*YPIX
と、lookup_table に行があり、それぞれにZPIX
エントリがあります。これは間違ったフォーマットですか?VisIt は引き続き入力ファイルの読み取りに失敗します。が列メジャー インデックスを使用している可能性があることは承知していstructured_points
ますが、もちろん私の最初の目標は、VisIt から何らかの結果を取得することです。最終的には、スカラー cell_density を使用して輪郭を描画したいと思います。私のデータセットは単に大きすぎますか?