2013-07-12 21 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文件中为所有变量记录一条记录。 一种解决方案是只将一个记录的所有字段写入一个函数中。

相关问题