我正在嘗試使用C編寫一個傳統的.vtk
文件來讀入VisIt。不幸的是,我安裝的VisIt程序拒絕呈現我寫的VTK文件,內容如下: '本地主機失敗'編寫一個VTK ASCII傳統文件在VisIt中繪製輪廓
下面是用於從一個文件中讀取數據並將其轉換爲傳統VTK文件的代碼。我使用宏XPIX
,YPIX
和ZPIX
來描述像素網格的尺寸。每個像素都包含一個標量密度值。我列出的像素在「網格文件」使用行主要順序:即
int list_index(x,y,z) = YPIX * ZPIX * x + ZPIX * y + z;
在這個像素列表中的每個條目被讀取到一個數組叫類型的grid[]
雙,並寫入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繪製輪廓。我的數據集是否太大?
謝謝你的第一個答覆。我現在改變了輸入格式,以便DEFAULT LOOKUP_TABLE每行列出一個條目。 reoformatting vtk的文件,並試圖獲得一個輪廓,我收到以下錯誤消息後: engine_ser(1582年)的malloc:*** MMAP(大小= 1549684736)失敗(錯誤碼= 12) ***錯誤:無法分配區域 ***在malloc_error_break中設置斷點以便調試 無法在本地主機上計算... 這導致我相信我的數據集實際上可能太大。 – rspeare 2012-01-09 19:26:18
@ user1139057你的數據有多大? 「XPIX」,「YPIX」和「ZPIX」的典型值是什麼?當你說你得到一個錯誤時,你的意思是當你嘗試在VisIt中打開你的文件?嘗試使用更高級別的調試來運行VisIt(例如,使用'/ path_to_visit/visit/-debug 5'命令啓動VisIt。請參見[本FAQ](https://wci.llnl.gov/codes/visit/FAQ) .html#4)瞭解更多信息 – Chris 2012-01-09 19:40:56
XPIX,YPIX和ZPIX的典型值是500,每種類型都是double類型的,這意味着我試圖分配大約1.4GB的內存(我的macbook只有2GB )。我目前在調試模式下運行VisIt,希望調試文件會顯示一些新的信息 – rspeare 2012-01-10 02:00:07