MeteoIODoc  MeteoIODoc-2.6.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
libncpp.h
Go to the documentation of this file.
1 /***********************************************************************************/
2 /* Copyright 2014 WSL Institute for Snow and Avalanche Research SLF-DAVOS */
3 /***********************************************************************************/
4 /* This file is part of MeteoIO.
5  MeteoIO is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  MeteoIO is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with MeteoIO. If not, see <http://www.gnu.org/licenses/>.
17 */
18 #ifndef LIBNCPP_H
19 #define LIBNCPP_H
20 
22 
23 #include <netcdf.h>
24 #include <string>
25 #include <vector>
26 
27 namespace ncpp {
28 
29  //Opening, creating, closing dataset
30  void open_file(const std::string& filename, const int& omode, int& ncid);
31  void create_file(const std::string& filename, const int& cmode, int& ncid);
32  void start_definitions(const std::string& filename, const int& ncid);
33  void end_definitions(const std::string& filename, const int& ncid);
34  void close_file(const std::string& filename, const int& ncid);
35 
36  //Adding variables
37  void add_0D_variable(const int& ncid, const std::string& varname, const nc_type& xtype, int& varid);
38  void add_1D_variable(const int& ncid, const std::string& varname, const nc_type& xtype, const int& dimid, int& varid);
39  void add_2D_variable(const int& ncid, const std::string& varname, const nc_type& xtype, const int& dimid1, const int& dimid2, int& varid);
40  void add_3D_variable(const int& ncid, const std::string& varname, const nc_type& xtype, const int& dimid_record,
41  const int& dimid1, const int& dimid2, int& varid);
42 
43  //Adding attributes
44  void add_attribute(const int& ncid, const int& varid, const std::string& attr_name, const std::string& attr_value);
45  void add_attribute(const int& ncid, const int& varid, const std::string& attr_name, const double& attr_value);
46  void get_DimAttribute(const int& ncid, const std::string& dimname, const std::string& attr_name, std::string& attr_value);
47  void get_VarAttribute(const int& ncid, const std::string& varname, const std::string& attr_name, std::string& attr_value);
48  void get_attribute(const int& ncid, const std::string& varname, const int& varid, const std::string& attr_name, std::string& attr_value);
49  void get_attribute(const int& ncid, const std::string& varname, const int& varid, const std::string& attr_name, double& attr_value);
50  bool check_attribute(const int& ncid, const int& varid, const std::string& attr_name);
51 
52  //Adding dimensions
53  void add_dimension(const int& ncid, const std::string& dimname, const size_t& length, int& dimid);
54 
55  //Reading data from NetCDF file
56  void read_data(const int& ncid, const std::string& varname, const int& varid,
57  const size_t& pos, const size_t& latlen, const size_t& lonlen, double*& data);
58  void read_data_2D(const int& ncid, const std::string& varname, const int& varid,
59  const size_t& record, const size_t& count, const size_t& length, double*& data);
60  void read_value(const int& ncid, const std::string& varname, const int& varid, double& data);
61  void read_value(const int& ncid, const std::string& varname, const int& varid, const size_t& pos, double& data);
62  void read_data(const int& ncid, const std::string& varname, const int& varid, double*& data);
63 
64  //Writing data to NetCDF file
65  void write_data(const int& ncid, const std::string& varname, const int& varid, const double * const data);
66  void write_data(const int& ncid, const std::string& varname, const int& varid, const size_t& nrows, const size_t& ncols,
67  const size_t& pos_start, const double * const data);
68  void write_data(const int& ncid, const std::string& varname, const int& varid, const int * const data);
69  void write_data(const int& ncid, const std::string& varname, const int& varid, const size_t& nrows, const size_t& ncols,
70  const size_t& pos_start, const int * const data);
71 
72  //Dealing with variables that have dimension NC_UNLIMITED
73  bool get_dimensionMinMax(const int& ncid, const std::string& varname, double &min, double &max);
74  bool get_recordMinMax(const int& ncid, const std::string& varname, const int& varid, double &min, double &max);
75  size_t find_record(const int& ncid, const std::string& varname, const double& data);
76  size_t find_record(const int& ncid, const std::string& varname, const int& varid, const double& data);
77  size_t add_record(const int& ncid, const std::string& varname, const int& varid, const double& data);
78  void write_record(const int& ncid, const std::string& varname, const int& varid, const size_t& pos,
79  const size_t& length, const double * const data);
80  void write_record(const int& ncid, const std::string& varname, const int& varid, const size_t& start_pos,
81  const size_t& length, const int * const data);
82 
83  //Dealing with variables and dimensions
84  bool check_dim_var(const int& ncid, const std::string& dimname);
85  bool check_variable(const int& ncid, const std::string& varname);
86  void get_variable(const int& ncid, const std::string& varname, int& varid);
87  void get_variables(const int& ncid, const std::vector<std::string>& dimensions, std::vector<std::string>& variables);
88  bool check_dimensions(const int& ncid, const std::string& varname, const int& varid, const std::vector<std::string>& names);
89  void get_dimension(const int& ncid, const std::string& dimname, int& dimid);
90  void get_dimension(const int& ncid, const std::string& dimname, int& dimid, size_t& dimlen);
91  void get_dimension(const int& ncid, const std::string& varname, const int& varid,
92  std::vector<int>& dimid, std::vector<int>& dim_varid, std::vector<std::string>& dimname, std::vector<size_t>& dimlen);
93 
94  //Wrappers to MeteoIO's data classes
95  void copy_grid(const std::string& coordin, const std::string& coordinparam, const size_t& latlen, const size_t& lonlen, const double * const lat, const double * const lon,
96  const double * const grid, const double& nodata, mio::Grid2DObject& grid_out);
97  double calculate_cellsize(const size_t& latlen, const size_t& lonlen, const double * const lat, const double * const lon,
98  double& factor_x, double& factor_y);
99  void calculate_dimensions(const mio::Grid2DObject& grid, double*& lat_array, double*& lon_array);
100  void fill_grid_data(const mio::Grid2DObject& grid, double*& data);
101  void fill_grid_data(const mio::Grid2DObject& grid, const double& new_nodata, int*& data);
102 } // end namespace
103 
104 #endif
void read_data(const int &ncid, const std::string &varname, const int &varid, const size_t &pos, const size_t &latlen, const size_t &lonlen, double *&data)
Definition: libncpp.cc:283
void write_record(const int &ncid, const std::string &varname, const int &varid, const size_t &start_pos, const size_t &length, const double *const data)
Definition: libncpp.cc:469
bool check_dim_var(const int &ncid, const std::string &dimname)
Definition: libncpp.cc:167
void get_VarAttribute(const int &ncid, const std::string &varname, const std::string &attr_name, std::string &attr_value)
Definition: libncpp.cc:94
void get_variable(const int &ncid, const std::string &varname, int &varid)
Definition: libncpp.cc:50
void add_3D_variable(const int &ncid, const std::string &varname, const nc_type &xtype, const int &dimid_record, const int &dimid1, const int &dimid2, int &varid)
Definition: libncpp.cc:536
void add_2D_variable(const int &ncid, const std::string &varname, const nc_type &xtype, const int &dimid1, const int &dimid2, int &varid)
Definition: libncpp.cc:525
void open_file(const std::string &filename, const int &omode, int &ncid)
Definition: libncpp.cc:36
void read_value(const int &ncid, const std::string &varname, const int &varid, double &data)
Definition: libncpp.cc:268
void fill_grid_data(const mio::Grid2DObject &grid, double *&data)
Definition: libncpp.cc:684
void close_file(const std::string &filename, const int &ncid)
Definition: libncpp.cc:565
bool get_dimensionMinMax(const int &ncid, const std::string &varname, double &min, double &max)
Definition: libncpp.cc:371
bool get_recordMinMax(const int &ncid, const std::string &varname, const int &varid, double &min, double &max)
Definition: libncpp.cc:392
void write_data(const int &ncid, const std::string &varname, const int &varid, const double *const data)
Definition: libncpp.cc:301
void read_data_2D(const int &ncid, const std::string &varname, const int &varid, const size_t &record, const size_t &nr_of_records, const size_t &length, double *&data)
Definition: libncpp.cc:257
void add_0D_variable(const int &ncid, const std::string &varname, const nc_type &xtype, int &varid)
Definition: libncpp.cc:510
void copy_grid(const std::string &coordin, const std::string &coordinparam, const size_t &latlen, const size_t &lonlen, const double *const lat, const double *const lon, const double *const grid, const double &nodata, mio::Grid2DObject &grid_out)
Definition: libncpp.cc:575
void add_1D_variable(const int &ncid, const std::string &varname, const nc_type &xtype, const int &dimid, int &varid)
Definition: libncpp.cc:518
void add_attribute(const int &ncid, const int &varid, const std::string &attr_name, const double &attr_value)
Definition: libncpp.cc:496
size_t add_record(const int &ncid, const std::string &varname, const int &varid, const double &data)
Definition: libncpp.cc:342
A class to represent 2D Grids. Typical application as DEM or Landuse Model.
Definition: Grid2DObject.h:37
bool check_variable(const int &ncid, const std::string &varname)
Definition: libncpp.cc:157
void get_dimension(const int &ncid, const std::string &dimname, int &dimid)
Definition: libncpp.cc:57
bool check_attribute(const int &ncid, const int &varid, const std::string &attr_name)
Definition: libncpp.cc:147
const double nodata
This is the internal nodata value.
Definition: IOUtils.h:60
double calculate_cellsize(const size_t &latlen, const size_t &lonlen, const double *const lat, const double *const lon, double &factor_x, double &factor_y)
Definition: libncpp.cc:627
void end_definitions(const std::string &filename, const int &ncid)
Definition: libncpp.cc:557
void get_attribute(const int &ncid, const std::string &varname, const int &varid, const std::string &attr_name, std::string &attr_value)
Definition: libncpp.cc:115
void calculate_dimensions(const mio::Grid2DObject &grid, double *&lat_array, double *&lon_array)
Definition: libncpp.cc:657
void get_DimAttribute(const int &ncid, const std::string &dimname, const std::string &attr_name, std::string &attr_value)
Definition: libncpp.cc:73
bool check_dimensions(const int &ncid, const std::string &varname, const int &varid, const std::vector< std::string > &names)
Definition: libncpp.cc:199
void create_file(const std::string &filename, const int &cmode, int &ncid)
Definition: libncpp.cc:43
size_t find_record(const int &ncid, const std::string &varname, const double &data)
Definition: libncpp.cc:416
void add_dimension(const int &ncid, const std::string &dimname, const size_t &length, int &dimid)
Definition: libncpp.cc:489
void get_variables(const int &ncid, const std::vector< std::string > &dimensions, std::vector< std::string > &variables)
Definition: libncpp.cc:177
void start_definitions(const std::string &filename, const int &ncid)
Definition: libncpp.cc:549