38 #include "utils/logger.h"
47 : m_filename(filename),
49 m_names(0L), m_size(0L)
56 io::NetCdfReader::~NetCdfReader()
59 std::lock_guard<threads::Mutex> lock(netcdfLock);
75 std::lock_guard<threads::Mutex> lock(netcdfLock);
77 if (nc_open(m_filename.c_str(), NC_NOWRITE, &m_file) != NC_NOERR) {
84 if (nc_inq_varid(m_file, varname, &m_variable) != NC_NOERR) {
91 nc_inq_varndims(m_file, m_variable, &m_dimensions);
93 if (m_dimensions > MAX_DIMENSIONS) {
94 logDebug(m_rank) <<
"Unsupported number of variable dimensions:"
102 int dimIds[MAX_DIMENSIONS];
103 nc_inq_vardimid(m_file, m_variable, dimIds);
105 m_names =
new std::string[m_dimensions];
106 m_size =
new size_t[m_dimensions];
108 logDebug(m_rank) <<
"Dimension mapping:";
109 for (
int i = m_dimensions-1; i >= 0; i--) {
111 char name[NC_MAX_NAME+1];
114 nc_inq_dim(m_file, dimIds[i], name, &size);
119 logDebug(m_rank) <<
"\t dimension" << (m_dimensions-i-1) <<
":="
124 nc_inq_vartype(m_file, m_variable, &type);
125 nc_inq_type(m_file, type, 0L, &m_varSize);
NetCdfReader(const char *filename, int rank)
static threads::Mutex netcdfLock
asagi::Grid::Error open(const char *varname="z")