Citlali
Loading...
Searching...
No Matches
netcdf_io.h
Go to the documentation of this file.
1#pragma once
2
3#include <netcdf>
4
5struct DataIOError : public std::runtime_error {
6 using std::runtime_error::runtime_error;
7};
8
9// write scalars to netcdf file
10template<typename T>
11void add_netcdf_var(netCDF::NcFile &fo, std::string name, T data) {
12 // create netcdf dimension
13 netCDF::NcDim dim;
14 // create netcdf variable
15 netCDF::NcVar var;
16
17 auto dim_name = name;
18
19 // make dimension name lower case for cleanliness
20 std::transform(dim_name.begin(), dim_name.end(), dim_name.begin(),
21 [](unsigned char c){ return std::tolower(c); });
22
23 dim_name += "_dim";
24
25 // if int
26 if constexpr (std::is_same_v<T, int>) {
27 dim = fo.addDim(dim_name,1);
28 var = fo.addVar(name, netCDF::ncInt, dim);
29 var.putVar(&data);
30 }
31 // if bool (netcdf has no bool type)
32 if constexpr (std::is_same_v<T, bool>) {
33 dim = fo.addDim(dim_name.c_str(),1);
34 var = fo.addVar(name, netCDF::ncInt, dim);
35 var.putVar(&data);
36 }
37 // if double
38 if constexpr (std::is_same_v<T, double>) {
39 dim = fo.addDim(dim_name.c_str(),1);
40 var = fo.addVar(name, netCDF::ncDouble, dim);
41 var.putVar(&data);
42 }
43 // if string
44 if constexpr (std::is_same_v<T, std::string>) {
45 dim = fo.addDim(dim_name.c_str(),1);
46 var = fo.addVar(name, netCDF::ncString, dim);
47 const std::vector<size_t> index = {0};
48 var.putVar(index,data);
49 }
50}
void add_netcdf_var(netCDF::NcFile &fo, std::string name, T data)
Definition netcdf_io.h:11
Definition netcdf_io.h:5