/home/runner/work/kynema/kynema/kynema/src/utilities/netcdf/netcdf_file.hpp Source File

Kynema API: /home/runner/work/kynema/kynema/kynema/src/utilities/netcdf/netcdf_file.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
netcdf_file.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <span>
4#include <string>
5#include <vector>
6
7#include <netcdf.h>
8
9namespace kynema::util {
10
13public:
20 explicit NetCDFFile(const std::string& file_path, bool create = true);
21
22 // Prevent copying and moving (since we don't want copies made of output file)
23 NetCDFFile(const NetCDFFile&) = delete;
24 NetCDFFile& operator=(const NetCDFFile&) = delete;
27
35
36 //--------------------------------------------------------------------------
37 // Setter/Write methods
38 //--------------------------------------------------------------------------
39
46 [[nodiscard]] int AddDimension(const std::string& name, size_t length) const;
47
55 template <typename T>
56 [[nodiscard]] int AddVariable(const std::string& name, std::span<const int> dim_ids) const;
57
64 void AddAttribute(const std::string& var_name, const std::string& attr_name, float value) const;
65 void AddAttribute(const std::string& var_name, const std::string& attr_name, double value) const;
66 void AddAttribute(const std::string& var_name, const std::string& attr_name, int value) const;
67 void AddAttribute(
68 const std::string& var_name, const std::string& attr_name, const std::string& value
69 ) const;
70
82 void WriteVariable(const std::string& name, std::span<const float> data) const;
83 void WriteVariable(const std::string& name, std::span<const double> data) const;
84 void WriteVariable(const std::string& name, std::span<const int> data) const;
85 void WriteVariable(const std::string& name, std::span<const std::string> data) const;
86
104 void WriteVariableAt(
105 const std::string& name, std::span<const size_t> start, std::span<const size_t> count,
106 std::span<const float> data
107 ) const;
108 void WriteVariableAt(
109 const std::string& name, std::span<const size_t> start, std::span<const size_t> count,
110 std::span<const double> data
111 ) const;
112 void WriteVariableAt(
113 const std::string& name, std::span<const size_t> start, std::span<const size_t> count,
114 std::span<const int> data
115 ) const;
116 void WriteVariableAt(
117 const std::string& name, std::span<const size_t> start, std::span<const size_t> count,
118 std::span<const std::string> data
119 ) const;
120
122 void Sync() const;
123
124 //--------------------------------------------------------------------------
125 // Getter/Read methods
126 //--------------------------------------------------------------------------
127
129 [[nodiscard]] int GetNetCDFId() const;
130
132 [[nodiscard]] int GetDimensionId(const std::string& name) const;
133
135 [[nodiscard]] int GetVariableId(const std::string& name) const;
136
143 [[nodiscard]] size_t GetNumberOfDimensions(const std::string& var_name) const;
144
151 [[nodiscard]] size_t GetDimensionLength(int dim_id) const;
152
154 [[nodiscard]] size_t GetDimensionLength(const std::string& name) const;
155
162 [[nodiscard]] std::vector<size_t> GetShape(const std::string& var_name) const;
163
176 void ReadVariable(const std::string& name, float* data) const;
177 void ReadVariable(const std::string& name, double* data) const;
178 void ReadVariable(const std::string& name, int* data) const;
179
189 void ReadVariableAt(
190 const std::string& name, std::span<const size_t> start, std::span<const size_t> count,
191 float* data
192 ) const;
193 void ReadVariableAt(
194 const std::string& name, std::span<const size_t> start, std::span<const size_t> count,
195 double* data
196 ) const;
197 void ReadVariableAt(
198 const std::string& name, std::span<const size_t> start, std::span<const size_t> count,
199 int* data
200 ) const;
201
213 const std::string& name, std::span<const size_t> start, std::span<const size_t> count,
214 std::span<const ptrdiff_t> stride, float* data
215 ) const;
217 const std::string& name, std::span<const size_t> start, std::span<const size_t> count,
218 std::span<const ptrdiff_t> stride, double* data
219 ) const;
221 const std::string& name, std::span<const size_t> start, std::span<const size_t> count,
222 std::span<const ptrdiff_t> stride, int* data
223 ) const;
224
225private:
226 int netcdf_id_{-1};
227};
228
229} // namespace kynema::util
Class for managing NetCDF files for writing outputs.
Definition netcdf_file.hpp:12
void Sync() const
Synchronizes (flushes) the NetCDF file to disk.
Definition netcdf_file.cpp:219
size_t GetNumberOfDimensions(const std::string &var_name) const
Gets the number of dimensions of a variable in the NetCDF file.
Definition netcdf_file.cpp:243
void ReadVariable(const std::string &name, float *data) const
Reads data from a variable in the NetCDF file.
Definition netcdf_file.cpp:280
NetCDFFile & operator=(const NetCDFFile &)=delete
NetCDFFile(NetCDFFile &&)=delete
size_t GetDimensionLength(int dim_id) const
Gets the length of a dimension in the NetCDF file.
Definition netcdf_file.cpp:253
~NetCDFFile()
Destructor to close the NetCDF file.
Definition netcdf_file.cpp:31
std::vector< size_t > GetShape(const std::string &var_name) const
Gets the shape (dimension lengths) of a variable in the NetCDF file.
Definition netcdf_file.cpp:263
int GetNetCDFId() const
Returns the NetCDF file ID.
Definition netcdf_file.cpp:223
int GetDimensionId(const std::string &name) const
Returns the dimension ID for a given dimension name.
Definition netcdf_file.cpp:227
int GetVariableId(const std::string &name) const
Returns the variable ID for a given variable name.
Definition netcdf_file.cpp:235
void ReadVariableWithStride(const std::string &name, std::span< const size_t > start, std::span< const size_t > count, std::span< const ptrdiff_t > stride, float *data) const
Reads data from a variable with specified stride in the NetCDF file.
Definition netcdf_file.cpp:330
void AddAttribute(const std::string &var_name, const std::string &attr_name, float value) const
Adds an attribute to a variable in the NetCDF file.
Definition netcdf_file.cpp:100
NetCDFFile & operator=(NetCDFFile &&)=delete
void ReadVariableAt(const std::string &name, std::span< const size_t > start, std::span< const size_t > count, float *data) const
Reads data from a variable at specific indices in the NetCDF file.
Definition netcdf_file.cpp:301
int AddVariable(const std::string &name, std::span< const int > dim_ids) const
Adds a variable to the NetCDF file.
int AddDimension(const std::string &name, size_t length) const
Adds a dimension to the NetCDF file.
Definition netcdf_file.cpp:39
NetCDFFile(const NetCDFFile &)=delete
void WriteVariableAt(const std::string &name, std::span< const size_t > start, std::span< const size_t > count, std::span< const float > data) const
Writes data to a variable at specific indices in the NetCDF file.
Definition netcdf_file.cpp:173
void WriteVariable(const std::string &name, std::span< const float > data) const
Writes data to a variable in the NetCDF file.
Definition netcdf_file.cpp:141
Definition aerodyn_inflow.hpp:15