void bi::ParticleMCMCNetCDFBuffer::map(const long P, const long T) { std::string name; int id, i; VarType type; Var* var; Dim* dim; /* dimensions */ BI_ERROR_MSG(hasDim("nr"), "File must have nr dimension"); nrDim = mapDim("nr", T); for (i = 0; i < m.getNumDims(); ++i) { dim = m.getDim(i); BI_ERROR_MSG(hasDim(dim->getName().c_str()), "File must have " << dim->getName() << " dimension"); nDims.push_back(mapDim(dim->getName().c_str(), dim->getSize())); } BI_ERROR_MSG(hasDim("np"), "File must have np dimension"); npDim = mapDim("np", P); /* time variable */ tVar = ncFile->get_var("time"); BI_ERROR_MSG(tVar != NULL && tVar->is_valid(), "File does not contain variable time"); BI_ERROR_MSG(tVar->num_dims() == 1, "Variable time has " << tVar->num_dims() << " dimensions, should have 1"); BI_ERROR_MSG(tVar->get_dim(0) == nrDim, "Dimension 0 of variable time should be nr"); /* other variables */ for (i = 0; i < NUM_VAR_TYPES; ++i) { type = static_cast<VarType>(i); if (type == D_VAR || type == R_VAR || type == P_VAR) { vars[type].resize(m.getNumVars(type), NULL); for (id = 0; id < m.getNumVars(type); ++id) { var = m.getVar(type, id); if (hasVar(var->getOutputName().c_str())) { vars[type][id] = mapVar(m.getVar(type, id)); } } } } llVar = ncFile->get_var("loglikelihood"); BI_ERROR_MSG(llVar != NULL && llVar->is_valid(), "File does not contain variable loglikelihood"); BI_ERROR_MSG(llVar->num_dims() == 1, "Variable loglikelihood has " << llVar->num_dims() << " dimensions, should have 1"); BI_ERROR_MSG(llVar->get_dim(0) == npDim, "Dimension 0 of variable loglikelihood should be np"); lpVar = ncFile->get_var("logprior"); BI_ERROR_MSG(lpVar != NULL && lpVar->is_valid(), "File does not contain variable logprior"); BI_ERROR_MSG(lpVar->num_dims() == 1, "Variable logprior has " << lpVar->num_dims() << " dimensions, should have 1"); BI_ERROR_MSG(lpVar->get_dim(0) == npDim, "Dimension 0 of variable logprior should be np"); }
bool FileArome::isValid(std::string iFilename) { bool status = false; NcFile file = NcFile(iFilename.c_str(), NcFile::ReadOnly); if(file.is_valid()) { status = hasDim(file, "time") && hasDim(file, "x") && hasDim(file, "y") && !hasDim(file, "ensemble_member") && hasVar(file, "latitude") && hasVar(file, "longitude"); } file.close(); return status; }
bool FileNetcdf::hasDim(std::string iDim) const { return hasDim(mFile, iDim); }