Marine systems simulation
Loading...
Searching...
No Matches
NetCDFParser.h
1#pragma once
2
8namespace netcdf_sinmod
9{
11struct Date
12{
13 int year;
14 int month;
15 int day;
16 int hour;
17 int minute;
18 int second;
19};
20
22struct Grid
23{
24 int numX;
25 int numY;
26 int numZ;
27 int numT;
28 double sizeX;
29 double sizeY;
30};
31} // namespace netcdf_sinmod
32
33#ifdef NETCDFCPP_AVAILABLE
34# include "netcdf-cxx4/netcdf"
35
36# include <string>
37# include <vector>
38
39using std::string;
40using std::vector;
41
42namespace netcdf_sinmod
43{
45class Exception
46{
47public:
52 Exception(string errorMessage)
53 {
54 m_error_message = "Error in NetCDF parser: " + errorMessage;
55 }
60 void AppendErrorMessage(string errormessage)
61 {
62 m_error_message.append("\nError in NetCDF parser: " + errormessage);
63 }
67 string GetErrorMessage()
68 {
69 return m_error_message;
70 }
71
72private:
73 string m_error_message;
74};
75
84class Parser
85{
86public:
88 Parser();
89
91 ~Parser(void);
92
97 void LoadFile(string NetCDF_Filepath);
98
102 Grid GetGridInfo();
103
110 void GetStaticData(double* layer_depth, double* depth_map, Date* timeline);
111
116 void SetCurrentTime(int offset_from_start_time);
117
124 void GetDynamicData(double* x_velocity, double* y_velocity, double* z_velocity);
125
126private:
128 enum DIMENSION_NUMBER
129 {
130 X_NUM = 0,
131 Y_NUM = 1,
132 Z_NUM = 2,
133 T_NUM = 3,
134 T2_NUM = 4
135 };
137 enum DIMENSION_BITMASK
138 {
139 X_MASK = 1 << X_NUM,
140 Y_MASK = 1 << Y_NUM,
141 Z_MASK = 1 << Z_NUM,
142 T_MASK = 1 << T_NUM,
143 T2_MASK = 1 << T2_NUM,
144 VOID_DIMENSION_MASK = 1 << 5
145 };
146 static const DIMENSION_BITMASK SURFACE = (DIMENSION_BITMASK)(X_MASK | Y_MASK);
147 static const DIMENSION_BITMASK DEPTH = Z_MASK;
148 static const DIMENSION_BITMASK SPACE = (DIMENSION_BITMASK)(SURFACE | DEPTH);
149 static const DIMENSION_BITMASK SPACE_TIME = (DIMENSION_BITMASK)(SPACE | T_MASK);
150 static const DIMENSION_BITMASK SURFACE_TIME = (DIMENSION_BITMASK)(SURFACE | T_MASK);
151 static const DIMENSION_BITMASK EXPANDED_TIME = (DIMENSION_BITMASK)(T_MASK | T2_MASK);
152 static const DIMENSION_BITMASK ALL_SPACE_AND_TIME = (DIMENSION_BITMASK)(SPACE | EXPANDED_TIME);
153
155 struct variable_info
156 {
157 string name;
158 netCDF::NcVar ncvar;
159 DIMENSION_BITMASK required_dimensions;
160 };
162 struct system_variables
163 {
164 variable_info vx;
165 variable_info vy;
166 variable_info vz;
167 variable_info depth;
168 variable_info layer_depth;
169 variable_info time;
170 };
171
172 string m_x_dim_name;
173 string m_y_dim_name;
174 string m_z_dim_name;
175 string m_t_dim_name;
176 string m_t2_dim_name;
177
179 void set_to_NULL();
180
186 void read_dynamic_variable_data(double* value_array, variable_info variable);
187
194 void read_variable_info_from_file(variable_info& variable);
195
200 void report_exception(string error_message);
201
202 netCDF::NcFile* m_ncfile;
203 Grid m_grid;
204 int m_current_time_offset;
205
206 system_variables m_variables;
207
208 double m_fill_value;
209 string m_fill_value_attribute_name;
210 string m_offset_value_attribute_name;
211 string m_scaling_value_attribute_name;
212 string m_resolution_attribute_name;
213
214 Exception* m_exception_collector;
215};
216} // namespace netcdf_sinmod
217
218#endif
Definition NetCDFParser.h:9
Date structure for time coordinates.
Definition NetCDFParser.h:12
int hour
Hour.
Definition NetCDFParser.h:16
int minute
Minute.
Definition NetCDFParser.h:17
int day
Day.
Definition NetCDFParser.h:15
int year
Year.
Definition NetCDFParser.h:13
int second
Second.
Definition NetCDFParser.h:18
int month
Month.
Definition NetCDFParser.h:14
Grid dimensions structure.
Definition NetCDFParser.h:23
double sizeY
Size of grid cells in Y-direction [m].
Definition NetCDFParser.h:29
int numX
Number of grid cells in X-direction.
Definition NetCDFParser.h:24
int numT
Number of time steps.
Definition NetCDFParser.h:27
int numY
Number of grid cells in Y-direction.
Definition NetCDFParser.h:25
int numZ
Number of grid cells in Z-direction.
Definition NetCDFParser.h:26
double sizeX
Size of grid cells in X-direction [m].
Definition NetCDFParser.h:28