9 #ifndef ERF_NC_INTERFACE_H
10 #define ERF_NC_INTERFACE_H
14 #include <unordered_map>
18 #include <netcdf_par.h>
25 static constexpr nc_type
Int = NC_INT;
26 #ifdef AMREX_USE_FLOAT
27 static constexpr nc_type
Real = NC_FLOAT;
30 static constexpr nc_type
Real = NC_DOUBLE;
45 [[nodiscard]] std::string
name()
const;
48 [[nodiscard]]
size_t len()
const;
61 [[nodiscard]] std::string
name ()
const;
64 [[nodiscard]]
int ndim ()
const;
67 [[nodiscard]] std::vector<size_t> shape ()
const;
70 [[nodiscard]] std::vector<std::string> dimnames ()
const;
73 void put (
const double*)
const;
74 void put (
const float*)
const;
75 void put (
const int*)
const;
80 const std::vector<size_t>&,
81 const std::vector<size_t>&)
const;
87 const std::vector<size_t>&,
88 const std::vector<size_t>&,
89 const std::vector<ptrdiff_t>&)
const;
93 const std::vector<size_t>&,
94 const std::vector<size_t>&)
const;
100 const std::vector<size_t>&,
101 const std::vector<size_t>&,
102 const std::vector<ptrdiff_t>&)
const;
104 void put (
const int*,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
108 const std::vector<size_t>&,
109 const std::vector<size_t>&,
110 const std::vector<ptrdiff_t>&)
const;
112 void put (
const char**,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
115 put (
const char** dptr,
116 const std::vector<size_t>& start,
117 const std::vector<size_t>& count,
118 const std::vector<ptrdiff_t>& stride)
const;
121 void get (
double*)
const;
122 void get (
float*)
const;
123 void get (
int*)
const;
127 get (
double*,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
132 const std::vector<size_t>&,
133 const std::vector<size_t>&,
134 const std::vector<ptrdiff_t>&)
const;
138 get (
float*,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
143 const std::vector<size_t>&,
144 const std::vector<size_t>&,
145 const std::vector<ptrdiff_t>&)
const;
148 get (
int*,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
152 const std::vector<size_t>&,
153 const std::vector<size_t>&,
154 const std::vector<ptrdiff_t>&)
const;
158 get (
char*,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
163 const std::vector<size_t>&,
164 const std::vector<size_t>&,
165 const std::vector<ptrdiff_t>&)
const;
167 [[nodiscard]]
bool has_attr (
const std::string&
name)
const;
169 void put_attr (
const std::string&
name,
const std::string&
value)
const;
172 put_attr (
const std::string&
name,
const std::vector<double>&
value)
const;
175 put_attr (
const std::string&
name,
const std::vector<float>&
value)
const;
177 void put_attr (
const std::string&
name,
const std::vector<int>&
value)
const;
179 [[nodiscard]] std::string get_attr (
const std::string&
name)
const;
181 void get_attr (
const std::string&
name, std::vector<double>&
value)
const;
182 void get_attr (
const std::string&
name, std::vector<float>&
value)
const;
183 void get_attr (
const std::string&
name, std::vector<int>&
value)
const;
185 void par_access (
int cmode)
const;
196 [[nodiscard]] std::string
name ()
const;
199 [[nodiscard]] std::string full_name ()
const;
202 [[nodiscard]]
int num_groups ()
const;
205 [[nodiscard]]
int num_dimensions ()
const;
208 [[nodiscard]]
int num_variables ()
const;
211 [[nodiscard]]
int num_attributes ()
const;
214 [[nodiscard]]
bool has_group (
const std::string&)
const;
217 [[nodiscard]]
bool has_dim (
const std::string&)
const;
223 [[nodiscard]]
int get_id (
const std::string&)
const;
226 [[nodiscard]]
bool has_var (
const std::string&)
const;
229 [[nodiscard]]
bool has_attr (
const std::string&)
const;
235 [[nodiscard]] NCGroup group (
const std::string&)
const;
238 [[nodiscard]] NCDim dim (
const std::string&)
const;
241 [[nodiscard]] NCVar var (
const std::string&)
const;
244 void def_dim (
const std::string&,
size_t len)
const;
247 void def_array (
const std::string&
name,
249 const std::vector<std::string>&)
const;
252 void def_var (
const std::string&
name,
254 const std::vector<std::string>& dnames)
const
256 def_array(
name, dtype, dnames);
259 void put_attr (
const std::string&
name,
const std::string&
value)
const;
260 void put_attr (
const std::string&
name,
const std::vector<double>&
value)
const;
261 void put_attr (
const std::string&
name,
const std::vector<float>&
value)
const;
262 void put_attr (
const std::string&
name,
const std::vector<int>&
value)
const;
264 [[nodiscard]] std::string get_attr (
const std::string&
name)
const;
265 void get_attr (
const std::string&
name, std::vector<double>&
value)
const;
266 void get_attr (
const std::string&
name, std::vector<float>&
value)
const;
267 void get_attr (
const std::string&
name, std::vector<int>&
value)
const;
270 [[nodiscard]] std::vector<NCGroup> all_groups ()
const;
273 [[nodiscard]] std::vector<NCDim> all_dims ()
const;
276 [[nodiscard]] std::vector<NCVar> all_vars ()
const;
279 void enter_def_mode ()
const;
282 void exit_def_mode ()
const;
285 NCGroup (
const int id) :
ncid(
id) {}
286 NCGroup (
const int id,
const NCGroup* ) :
ncid(
id) {}
293 class NCFile :
public NCGroup
296 static NCFile create (
const std::string&
name,
const int cmode = NC_CLOBBER | NC_NETCDF4);
297 static NCFile
open (
const std::string&
name,
const int cmode = NC_NOWRITE);
299 static NCFile create_par (
const std::string&
name,
300 const int cmode = NC_CLOBBER | NC_NETCDF4 | NC_MPIIO,
301 MPI_Comm comm = MPI_COMM_WORLD,
302 MPI_Info info = MPI_INFO_NULL);
304 static NCFile open_par (
const std::string&
name,
305 const int cmode = NC_NOWRITE,
306 MPI_Comm comm = MPI_COMM_WORLD,
307 MPI_Info info = MPI_INFO_NULL);
314 NCFile (
const int id) : NCGroup(
id), is_open{true} {}
Real value
Definition: ERF_HurricaneDiagnostics.cpp:30
pp get("wavelength", wavelength)
std::string name
Definition: ERF_Plotfile2DCatalog.cpp:97
DiagnosticID id
Definition: ERF_Plotfile2DWaterPath.cpp:23
int Int
Definition: ERF_ShocInterface.H:20
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NCInterface.H:344
Definition: ERF_NCInterface.H:338
const int ncid
Definition: ERF_NCInterface.H:340
@ open
Definition: ERF_IndexDefines.H:255
Definition: ERF_NCInterface.cpp:9
Definition: ERF_NCInterface.H:326
const int dimid
Definition: ERF_NCInterface.H:328
const int ncid
Definition: ERF_NCInterface.H:327
Definition: ERF_NCInterface.H:332
const int ncid
Definition: ERF_NCInterface.H:333
const int varid
Definition: ERF_NCInterface.H:334