33 enum Dimensions {
firstdimension=
mio::MeteoGrids::lastparam+10,
NONE=
firstdimension,
TIME,
LATITUDE,
LONGITUDE,
NORTHING,
EASTING,
STATION,
STATSTRLEN,
DATESTRLEN,
ZREF,
UREF,
lastdimension=
UREF};
42 typedef struct VAR_ATTR {
43 VAR_ATTR() : name(), standard_name(), long_name(), units(), height(
mio::IOUtils::
nodata), param(
mio::IOUtils::
npos), type(-1) {}
44 VAR_ATTR(
const int& i_type) : name(), standard_name(), long_name(), units(), height(
mio::IOUtils::
nodata), param(
mio::IOUtils::
npos), type(i_type) {}
45 VAR_ATTR(
const std::string& i_name,
const int& i_type) : name(i_name), standard_name(), long_name(), units(), height(
mio::IOUtils::
nodata), param(
mio::IOUtils::
npos), type(i_type) {}
46 VAR_ATTR(
const size_t& prm,
const std::string& i_name,
const double& hgt,
const int& i_type)
47 : name(i_name), standard_name(), long_name(), units(), height(hgt), param(prm), type(i_type) {}
48 VAR_ATTR(
const size_t& prm,
const std::string& i_name,
const std::string& std_name,
const std::string& lg_name,
const std::string& i_units,
const double& hgt,
const int& i_type)
49 : name(i_name), standard_name(std_name), long_name(lg_name), units(i_units), height(hgt), param(prm), type(i_type) {}
52 std::string
toString()
const {std::ostringstream os; os <<
"[" << ((param<=
ncpp::lastdimension)?
getParameterName(param) :
"Unknown") <<
" - " << name <<
" / " << standard_name <<
" / " << long_name <<
" , in " << units <<
" @ " << height <<
", type=" << type <<
"]";
return os.str();}
64 typedef struct NC_VARIABLE {
65 NC_VARIABLE() : attributes(), dimids(), dimid_time(0.), dimid_X(0.), dimid_Y(0.), scale(1.), offset(0.),
nodata(
mio::IOUtils::
nodata), varid(-1) {}
66 NC_VARIABLE(
const int& i_type) : attributes(i_type), dimids(), dimid_time(0.), dimid_X(0.), dimid_Y(0.), scale(1.), offset(0.),
nodata(
mio::IOUtils::
nodata), varid(-1) {}
68 : attributes(attr), dimids(), dimid_time(0.), dimid_X(0.), dimid_Y(0.), scale(1.), offset(0.),
nodata(i_nodata), varid(-1) {}
69 NC_VARIABLE(
const var_attr& attr,
const size_t& i_dimid_time,
const size_t& i_dimid_X,
const size_t& i_dimid_Y,
const double& i_scale,
const double& i_offset,
const double& i_nodata,
const int& i_varid)
70 : attributes(attr), dimids(), dimid_time(i_dimid_time), dimid_X(i_dimid_X), dimid_Y(i_dimid_Y), scale(i_scale), offset(i_offset),
nodata(i_nodata), varid(i_varid) {}
72 bool isUndef()
const {
return (attributes.isUndef());}
73 std::string
toString()
const {std::ostringstream os; os <<
"[" << varid <<
" - " <<
"\"" << attributes.name <<
"\" - packing( *" << scale <<
", +" << offset <<
"), nodata=" <<
nodata <<
" - depends on (";
for(
size_t ii=0; ii<dimids.size(); ii++) os <<
" " << dimids[ii]; os <<
") ]";
return os.str();}
86 typedef struct NC_DIMENSION {
89 : name(i_name), length(0), dimid(-1), param(i_param), isUnlimited(false) {}
90 NC_DIMENSION(
const size_t& i_param,
const std::string& i_name,
const size_t& len,
const int& i_dimid,
const bool& unlimited)
91 : name(i_name), length(len), dimid(i_dimid), param(i_param), isUnlimited(unlimited) {}
92 std::string
toString()
const {std::ostringstream os; os <<
getParameterName(param) <<
" -> [ " << dimid <<
" - " << name <<
", length " << length;
if (isUnlimited) os <<
", unlimited"; os <<
"]";
return os.str();}
101 void open_file(
const std::string& filename,
const int& omode,
int& ncid);
102 void create_file(
const std::string& filename,
const int& cmode,
int& ncid);
103 void file_redef(
const std::string& filename,
const int& ncid);
106 void close_file(
const std::string& filename,
const int& ncid);
108 void add_attribute(
const int& ncid,
const int& varid,
const std::string& attr_name,
const double& attr_value);
109 void add_attribute(
const int& ncid,
const int& varid,
const std::string& attr_name,
const float& attr_value);
110 void add_attribute(
const int& ncid,
const int& varid,
const std::string& attr_name,
const int& attr_value);
111 void add_attribute(
const int& ncid,
const int& varid,
const std::string& attr_name,
const double& attr_value,
const int& data_type);
112 void add_attribute(
const int& ncid,
const int& varid,
const std::string& attr_name,
const std::string& attr_value);
114 bool check_attribute(
const int& ncid,
const int& varid,
const std::string& attr_name);
115 void getGlobalAttribute(
const int& ncid,
const std::string& attr_name, std::string& attr_value);
116 void getGlobalAttribute(
const int& ncid,
const std::string& attr_name,
int& attr_value);
117 void getAttribute(
const int& ncid,
const nc_variable& var,
const std::string& attr_name, std::string& attr_value);
120 void read_data(
const int& ncid,
const nc_variable& var,
const size_t& pos,
const size_t& nrows,
const size_t& ncols,
const size_t& pos_i,
const size_t& row_i,
const size_t& col_i,
double* data);
121 void read_data_point(
const int& ncid,
const nc_variable& var,
const size_t& row,
const size_t& col,
const size_t& row_i,
const size_t& col_i,
double* data);
122 void read_data_point(
const int& ncid,
const nc_variable& var,
const size_t& pos,
const size_t& row,
const size_t& col,
const size_t& pos_i,
const size_t& row_i,
const size_t& col_i,
double* data);
125 void readVariableMetadata(
const int& ncid, ncpp::nc_variable& var,
const bool& readTimeTransform=
false,
const double& TZ=0.);
126 void write_data(
const int& ncid,
const nc_variable& var,
const size_t& pos,
const size_t& nrows,
const size_t& ncols,
const double *
const data);
127 void write_1Ddata(
const int& ncid,
const nc_variable& var,
const std::vector<double>& data,
const bool& isUnlimited=
false);
128 void write_1Ddata(
const int& ncid,
const nc_variable& var,
const std::vector<std::string>& data,
const int& strMaxLen);
131 void getTimeTransform(
const std::string& time_units,
const double& i_TZ,
double &o_time_offset,
double &o_time_multiplier);
148 void initFromSchema(std::map<size_t, ncpp::nc_variable> &vars, std::map<size_t, ncpp::nc_dimension> &dimensions_map);
154 static std::map< std::string, std::vector<ncpp::var_attr> > initSchemasVars();
155 static std::map< std::string, std::vector<ncpp::nc_dimension> > initSchemasDims();
156 static std::vector<ncpp::var_attr> initUserSchemas(
const mio::Config& i_cfg);
157 static std::vector<ncpp::nc_dimension> initUserDimensions(
const mio::Config& i_cfg);
158 void initSchemaCst(
const std::string& schema);
160 static std::map< std::string, std::vector<ncpp::var_attr> > schemas_vars;
161 static std::map< std::string, std::vector<ncpp::nc_dimension> > schemas_dims;
163 std::vector<ncpp::var_attr> user_schemas;
164 std::vector<ncpp::nc_dimension> user_dimensions;
This class contains and handles NetCDF schemas.
Definition: libncpp.h:144
bool force_station_dimension
force writing a station dimension even if only one station is present
Definition: libncpp.h:170
NC_SCHEMA(const mio::Config &cfg, const std::string &schema)
Definition: libncpp.cc:694
std::string name
name of the current schema
Definition: libncpp.h:167
const ncpp::nc_dimension getSchemaDimension(const std::string &dimname) const
Definition: libncpp.cc:1069
double nodata
nodata value as defined in the schema
Definition: libncpp.h:168
const ncpp::var_attr getSchemaAttributes(const std::string &var) const
Definition: libncpp.cc:1033
void initFromSchema(std::map< size_t, ncpp::nc_variable > &vars, std::map< size_t, ncpp::nc_dimension > &dimensions_map)
Definition: libncpp.cc:1020
int dflt_type
default data type as defined in the schema
Definition: libncpp.h:169
This class contains and handles NetCDF Attribute Conventions Dataset Discovery attributes (see ACDD).
Definition: libacdd.h:115
A class that reads a key/value file. These files (typically named *.ini) follow the INI file format s...
Definition: Config.h:79
A class to represent 2D Grids. Typical application as DEM or Landuse Model.
Definition: Grid2DObject.h:42
@ lastparam
Definition: MeteoData.h:84
const size_t npos
npos is the out-of-range value
Definition: IOUtils.h:80
const double nodata
This is the internal nodata value.
Definition: IOUtils.h:75
Definition: libncpp.cc:38
void getGlobalAttribute(const int &ncid, const std::string &attr_name, std::string &attr_value)
Read a given global attribute (if not found, an empty string is returned)
Definition: libncpp.cc:505
void create_variable(const int &ncid, ncpp::nc_variable &var)
Write a pre-defined set of attributes for the given variable.
Definition: libncpp.cc:191
void fill2DGrid(mio::Grid2DObject &grid, const double data[], const double &nodata, const bool &normal_Xorder, const bool &normal_Yorder)
Fill a Grid2DObject with 2D gridded data as read from a NetCDF file.
Definition: libncpp.cc:600
void getTimeTransform(const std::string &time_units, const double &i_TZ, double &o_time_offset, double &o_time_divisor)
Parse a time unit specification.
Definition: libncpp.cc:539
Dimensions
This enum expands the parameters given in mio::MeteoGrids::Parameters and adds parameters used as dim...
Definition: libncpp.h:33
@ STATION
Definition: libncpp.h:33
@ firstdimension
Definition: libncpp.h:33
@ NORTHING
Definition: libncpp.h:33
@ ZREF
Definition: libncpp.h:33
@ LONGITUDE
Definition: libncpp.h:33
@ LATITUDE
Definition: libncpp.h:33
@ lastdimension
Definition: libncpp.h:33
@ TIME
Definition: libncpp.h:33
@ DATESTRLEN
Definition: libncpp.h:33
@ NONE
Definition: libncpp.h:33
@ UREF
Definition: libncpp.h:33
@ EASTING
Definition: libncpp.h:33
@ STATSTRLEN
Definition: libncpp.h:33
void add_attribute(const int &ncid, const int &varid, const std::string &attr_name, const double &attr_value, const int &data_type)
Add an attribute to the file pointed to by ncid.
Definition: libncpp.cc:83
void read_data(const int &ncid, const nc_variable &var, const size_t &pos, const size_t &nrows, const size_t &ncols, const size_t &pos_i, const size_t &row_i, const size_t &col_i, double *data)
Read 2D gridded data at the provided time position for a specific variable.
Definition: libncpp.cc:258
void close_file(const std::string &filename, const int &ncid)
Definition: libncpp.cc:238
void open_file(const std::string &filename, const int &omode, int &ncid)
Definition: libncpp.cc:59
void read_data_point(const int &ncid, const nc_variable &var, const size_t &row, const size_t &col, const size_t &row_i, const size_t &col_i, double *data)
Read grid point in 2D gridded data for non time dependent data.
Definition: libncpp.cc:289
void create_file(const std::string &filename, const int &cmode, int &ncid)
Definition: libncpp.cc:66
void writeACDDAttributes(const int &ncid, const mio::ACDD &acdd)
Add all the ACDD attributes contained in the acdd object to the file pointed to by ncid.
Definition: libncpp.cc:131
void write_data(const int &ncid, const nc_variable &var, const size_t &pos, const size_t &nrows, const size_t &ncols, const double *const data)
Write 2D gridded data at the provided time position for a specific variable.
Definition: libncpp.cc:400
std::string getParameterDescription(const size_t ¶m)
Definition: libncpp.cc:649
void readVariableMetadata(const int &ncid, ncpp::nc_variable &var, const bool &readTimeTransform, const double &TZ)
Read a pre-defined set of attributes for the given variable, from the provided file.
Definition: libncpp.cc:364
void file_redef(const std::string &filename, const int &ncid)
Re-open the file in "definition" mode.
Definition: libncpp.cc:223
std::string getParameterUnits(const size_t ¶m)
Definition: libncpp.cc:655
std::string generateHistoryAttribute()
Build a CF-1 history string (date of creation, creator, software version)
Definition: libncpp.cc:680
bool check_attribute(const int &ncid, const int &varid, const std::string &attr_name)
Check if a variable has a given attribute.
Definition: libncpp.cc:149
void write_1Ddata(const int &ncid, const nc_variable &var, const std::vector< double > &data, const bool &isUnlimited)
Write a vector of data for a given 1D variable.
Definition: libncpp.cc:427
void getAttribute(const int &ncid, const nc_variable &var, const std::string &attr_name, std::string &attr_value)
Read a given attribute from a variable (if not found, an empty string is returned)
Definition: libncpp.cc:467
size_t getParameterIndex(const std::string ¶m)
Given a parameter name, return its associated index.
Definition: libncpp.cc:667
std::string getParameterName(const size_t ¶m)
Given a parameter index, return its associated name.
Definition: libncpp.cc:636
void createDimension(const int &ncid, ncpp::nc_dimension &dimension, const size_t &length)
Create a new dimension.
Definition: libncpp.cc:577
void end_definitions(const std::string &filename, const int &ncid)
Definition: libncpp.cc:230
NC_DIMENSION(const size_t &i_param, const std::string &i_name, const size_t &len, const int &i_dimid, const bool &unlimited)
Definition: libncpp.h:90
size_t param
parameter index (from Dimensions or MeteoGrids::Parameters)
Definition: libncpp.h:97
NC_DIMENSION()
Definition: libncpp.h:87
bool isUnlimited
at most, one dimension can be "unlimited"
Definition: libncpp.h:98
std::string toString() const
Definition: libncpp.h:92
std::string name
dimension name
Definition: libncpp.h:94
int dimid
dimension ID, set to -1 and then to a positive value after reading/writing to/from a file
Definition: libncpp.h:96
NC_DIMENSION(const size_t &i_param, const std::string &i_name)
Definition: libncpp.h:88
size_t length
dimension length (irrelevant when the dimension is "unlimited")
Definition: libncpp.h:95
NC_VARIABLE(const var_attr &attr, const size_t &i_dimid_time, const size_t &i_dimid_X, const size_t &i_dimid_Y, const double &i_scale, const double &i_offset, const double &i_nodata, const int &i_varid)
Definition: libncpp.h:69
double nodata
scale and offset for data packing, nodata value
Definition: libncpp.h:81
NC_VARIABLE(const var_attr &attr, const double &i_nodata)
Definition: libncpp.h:67
var_attr attributes
metadata about the variable
Definition: libncpp.h:75
bool isUndef() const
Definition: libncpp.h:72
int varid
variable ID, set to -1 and then to a positive value after reading/writing to/from a file
Definition: libncpp.h:82
std::string toString() const
Definition: libncpp.h:73
NC_VARIABLE(const int &i_type)
Definition: libncpp.h:66
std::vector< int > dimids
dimensions this variable depends on
Definition: libncpp.h:76
size_t dimid_X
dimension sequence for longitude/easting
Definition: libncpp.h:79
size_t dimid_Y
dimension sequence for latitude/northing
Definition: libncpp.h:80
size_t dimid_time
dimension sequence for time variable
Definition: libncpp.h:78
NC_VARIABLE()
Definition: libncpp.h:65
std::string name
variable name (it is possible to retrieve a variable by name)
Definition: libncpp.h:54
std::string toString() const
Definition: libncpp.h:52
VAR_ATTR(const std::string &i_name, const int &i_type)
Definition: libncpp.h:45
int type
contain NetCDF External Data Types, -1 for "none"
Definition: libncpp.h:60
bool isUndef() const
Definition: libncpp.h:51
VAR_ATTR()
Definition: libncpp.h:43
std::string units
unit string representation
Definition: libncpp.h:57
size_t param
parameter index (from Dimensions or MeteoGrids::Parameters)
Definition: libncpp.h:59
std::string long_name
non-standard but often present, longer description of the variable
Definition: libncpp.h:56
VAR_ATTR(const size_t &prm, const std::string &i_name, const std::string &std_name, const std::string &lg_name, const std::string &i_units, const double &hgt, const int &i_type)
Definition: libncpp.h:48
VAR_ATTR(const size_t &prm, const std::string &i_name, const double &hgt, const int &i_type)
Definition: libncpp.h:46
double height
sensor height (currently unused)
Definition: libncpp.h:58
VAR_ATTR(const int &i_type)
Definition: libncpp.h:44
std::string standard_name
somehow human-friendly, standardized description of the name
Definition: libncpp.h:55