void bi::InputNetCDFBuffer::readMask0(const VarType type, Mask<ON_HOST>& mask) { typedef temp_host_matrix<real>::type temp_matrix_type; mask.resize(m.getNumVars(type), false); Var* var; int r; long start, len; /* sparse masks */ for (r = 0; r < int(recDims.size()); ++r) { if (timeVars[r] < 0) { BOOST_AUTO(range, modelVars.equal_range(r)); BOOST_AUTO(iter, range.first); BOOST_AUTO(end, range.second); start = 0; len = nc_inq_dimlen(ncid, recDims[r]); temp_matrix_type C(iter->second->getNumDims(), len); readCoords(coordVars[r], start, len, C); for (; iter != end; ++iter) { var = iter->second; if (var->getType() == type) { mask.addSparseMask(var->getId(), C.size2()); serialiseCoords(var, C, mask.getIndices(var->getId())); } } } } /* dense masks */ r = -1; // for those vars not associated with a record dimension BOOST_AUTO(range, modelVars.equal_range(r)); BOOST_AUTO(iter, range.first); BOOST_AUTO(end, range.second); for (; iter != end; ++iter) { var = iter->second; if (var->getType() == type) { mask.addDenseMask(var->getId(), var->getSize()); } } }
void bi::InputNetCDFBuffer::readMask(const size_t k, const VarType type, Mask<ON_HOST>& mask) { typedef temp_host_matrix<real>::type temp_matrix_type; mask.resize(m.getNumVars(type), false); Var* var; int r; long start, len; for (r = 0; r < int(recDims.size()); ++r) { if (timeVars[r] >= 0) { start = recStarts[k][r]; len = recLens[k][r]; if (len > 0) { BOOST_AUTO(range, modelVars.equal_range(r)); BOOST_AUTO(iter, range.first); BOOST_AUTO(end, range.second); if (coordVars[r] >= 0) { /* sparse mask */ temp_matrix_type C(iter->second->getNumDims(), len); readCoords(coordVars[r], start, len, C); for (; iter != end; ++iter) { var = iter->second; if (var->getType() == type) { mask.addSparseMask(var->getId(), len); serialiseCoords(var, C, mask.getIndices(var->getId())); } } } else { /* dense mask */ for (; iter != end; ++iter) { var = iter->second; if (var->getType() == type) { mask.addDenseMask(var->getId(), var->getSize()); } } } } } } }