2013-07-12 49 views
0

我有一個函數來初始化一個netcdf文件,然後寫一個字段。這裏是他們:Netcdf C++ |如何爲單個變量寫入記錄?

void initNc(string name){ 
    NcFile myfile(name.c_str(), NcFile::Replace); 
    NcDim *xdim = myfile.add_dim("xdim", NX); 
    NcDim *tdim = myfile.add_dim("tdim"); 
    myfile.add_var("x", ncDouble, tdim, xdim); 
    myfile.add_var("vx", ncDouble, tdim, xdim); 
} 

void writeToNcFile(double *x, string name, string varname){ 
    NcFile myfile(name.c_str(), NcFile::Write); 
    NcDim *tdim = myfile.get_dim("tdim"); 
    NcVar *xvar = myfile.get_var(varname.c_str()); 
    long sz = tdim->size(); 
    xvar->set_rec(sz); 
    xvar->put_rec(x); 
    myfile.close(); 
} 

對於一個變量(在我的初始化函數比如這裏我有兩個),並調用了幾次writeToNcFile,這是工作的罰款,附加結果如下記錄尺寸。然而,只要我有兩個變量(如本例中稱爲x和vx),並且我爲每個變量調用一個函數(如此,兩個調用),它會爲每個變量PER調用一個記錄,以便函數!這裏是例如NX = 10的文件內容:

dimensions: 
xdim = 10 ; 
tdim = UNLIMITED ; // (2 currently) 
variables: 
    double x(tdim, xdim) ; 
    double vx(tdim, xdim) ; 
data: 
x = 
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
    _, _, _, _, _, _, _, _, _, _ ; 
vx = 
    _, _, _, _, _, _, _, _, _, _, 
    0, 2, 4, 6, 8, 10, 12, 14, 16, 18 ;} 

我該如何解決這個問題?

回答

1

錯誤來自這樣一個事實,即每個變量都會調用一次寫入函數,從而在每次調用之間關閉文件。因此,每次調用函數時,都會在nc文件中爲所有變量記錄一條記錄。 一種解決方案是隻將一個記錄的所有字段寫入一個函數中。

相關問題