У меня есть функция для инициализации файла 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();
}
Для одной переменной (здесь в моем примере функции инициализации у меня есть две) и несколько раз вызывая 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 ;}
Как я могу обойти это?
Ошибка возникает из-за того, что функция записи вызывается один раз для каждой переменной, закрывая файл между каждым вызовом. Так что запись ставится для всех переменных в файле nc при каждом вызове функции.
Одним из решений является запись всех полей для одной записи только в одной функции.
Других решений пока нет …