Netcdf C ++ |如何为单个变量写一条记录?

时间:2013-07-12 08:08:06

标签: c++ netcdf

我有一个初始化netcdf文件的函数,然后是一个写字段的函数。他们是:

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();
}

对于一个变量(在我的init函数示例中,我有两个),并且多次调用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 个答案:

答案 0 :(得分:1)

错误来自于为每个变量调用一次写入函数,在每次调用之间关闭文件。因此,每次调用函数时,都会为nc文件中的所有变量添加记录。 一种解决方案是仅在一个函数内写入一个记录的所有字段。