9#ifndef REMORA_NC_INTERFACE_H
10#define REMORA_NC_INTERFACE_H
12#ifdef REMORA_USE_NETCDF
14#include <unordered_map>
44 std::string
name()
const;
47 MPI_Offset
len()
const;
60 std::string
name()
const;
66 std::vector<MPI_Offset>
shape()
const;
69 void put(
const double* ptr)
const;
71 void put(
const float* ptr)
const;
73 void put(
const int* ptr)
const;
78 const std::vector<MPI_Offset>&
start,
79 const std::vector<MPI_Offset>&
count)
const;
84 const std::vector<MPI_Offset>&
start,
85 const std::vector<MPI_Offset>&
count)
const;
93 MPI_Offset*
const* starts,
94 MPI_Offset*
const* counts,
95 const double*
dptr)
const;
100 MPI_Offset*
const* starts,
101 MPI_Offset*
const* counts,
102 const float*
dptr)
const;
106 const std::vector<MPI_Offset>&
start,
107 const std::vector<MPI_Offset>&
count,
113 const std::vector<MPI_Offset>&
start,
114 const std::vector<MPI_Offset>&
count,
115 const std::vector<MPI_Offset>&
stride)
const;
119 const std::vector<MPI_Offset>&
start,
120 const std::vector<MPI_Offset>&
count,
121 const std::vector<MPI_Offset>&
stride)
const;
125 const std::vector<MPI_Offset>&
start,
126 const std::vector<MPI_Offset>&
count)
const;
130 const std::vector<MPI_Offset>&
start,
131 const std::vector<MPI_Offset>&
count)
const;
135 const std::vector<MPI_Offset>&
start,
136 const std::vector<MPI_Offset>&
count,
137 const std::vector<MPI_Offset>&
stride)
const;
141 const std::vector<MPI_Offset>&
start,
142 const std::vector<MPI_Offset>&
count,
143 const std::vector<MPI_Offset>&
stride)
const;
147 void put(
const int*
dptr,
const std::vector<MPI_Offset>&
start,
const std::vector<MPI_Offset>&
count)
const;
149 void put_all(
const int*
dptr,
const std::vector<MPI_Offset>&
start,
const std::vector<MPI_Offset>&
count)
const;
154 const std::vector<MPI_Offset>&
start,
155 const std::vector<MPI_Offset>&
count,
156 const std::vector<MPI_Offset>&
stride)
const;
160 const std::vector<MPI_Offset>&
start,
161 const std::vector<MPI_Offset>&
count,
162 const std::vector<MPI_Offset>&
stride)
const;
166 void put(
const char**
dptr,
const std::vector<MPI_Offset>&
start,
const std::vector<MPI_Offset>&
count)
const;
171 const std::vector<MPI_Offset>&
start,
172 const std::vector<MPI_Offset>&
count,
173 const std::vector<MPI_Offset>&
stride)
const;
176 void get(
double* ptr)
const;
178 void get(
float* ptr)
const;
180 void get(
int* ptr)
const;
184 get(
double*
dptr,
const std::vector<MPI_Offset>&
start,
const std::vector<MPI_Offset>&
count)
const;
188 get_all(
double*
dptr,
const std::vector<MPI_Offset>&
start,
const std::vector<MPI_Offset>&
count)
const;
193 const std::vector<MPI_Offset>&
start,
194 const std::vector<MPI_Offset>&
count,
195 const std::vector<MPI_Offset>&
stride)
const;
200 const std::vector<MPI_Offset>&
start,
201 const std::vector<MPI_Offset>&
count,
202 const std::vector<MPI_Offset>&
stride)
const;
206 get(
float*
dptr,
const std::vector<MPI_Offset>&
start,
const std::vector<MPI_Offset>&
count)
const;
208 void get_all(
float*
dptr,
const std::vector<MPI_Offset>&
start,
const std::vector<MPI_Offset>&
count)
const;
213 const std::vector<MPI_Offset>&
start,
214 const std::vector<MPI_Offset>&
count,
215 const std::vector<MPI_Offset>&
stride)
const;
220 const std::vector<MPI_Offset>&
start,
221 const std::vector<MPI_Offset>&
count,
222 const std::vector<MPI_Offset>&
stride)
const;
226 get(
int*
dptr,
const std::vector<MPI_Offset>&
start,
const std::vector<MPI_Offset>&
count)
const;
229 get_all(
int*
dptr,
const std::vector<MPI_Offset>&
start,
const std::vector<MPI_Offset>&
count)
const;
234 const std::vector<MPI_Offset>&
start,
235 const std::vector<MPI_Offset>&
count,
236 const std::vector<MPI_Offset>&
stride)
const;
240 const std::vector<MPI_Offset>&
start,
241 const std::vector<MPI_Offset>&
count,
242 const std::vector<MPI_Offset>&
stride)
const;
247 get(
char*
dptr,
const std::vector<MPI_Offset>&
start,
const std::vector<MPI_Offset>&
count)
const;
252 const std::vector<MPI_Offset>&
start,
253 const std::vector<MPI_Offset>&
count,
254 const std::vector<MPI_Offset>&
stride)
const;
290 const std::string& name,
292 MPI_Comm
comm = MPI_COMM_WORLD,
297 const std::string& name,
299 MPI_Comm
comm = MPI_COMM_WORLD,
317 bool has_dim(
const std::string&)
const;
320 bool has_var(
const std::string&)
const;
323 bool has_attr(
const std::string&)
const;
326 NCDim dim(
const std::string&)
const;
329 NCVar var(
const std::string&)
const;
332 NCDim def_dim(
const std::string&,
const size_t len)
const;
339 const std::string& name,
341 const std::vector<std::string>&)
const;
345 const std::string& name,
347 const std::vector<std::string>&
dnames,
352 const std::string& name,
354 const std::vector<std::string>&
dnames)
const
361 const std::string& name,
363 const std::vector<std::string>&
dnames,
370 void put_attr(
const std::string& name,
const std::string&
value)
const;
372 void put_attr(
const std::string& name,
const std::vector<double>&
value)
const;
374 void put_attr(
const std::string& name,
const std::vector<float>&
value)
const;
376 void put_attr(
const std::string& name,
const std::vector<int>&
value)
const;
379 std::string
get_attr(
const std::string& name)
const;
381 void get_attr(
const std::string& name, std::vector<double>&
value)
const;
383 void get_attr(
const std::string& name, std::vector<float>&
value)
const;
385 void get_attr(
const std::string& name, std::vector<int>&
value)
const;
391 std::vector<NCDim>
all_dims()
const;
394 std::vector<NCVar>
all_vars()
const;
416 const int ncid { -1 };
417 const int dimid { -1 };
421 const int ncid { -1 };
422 const int varid { -1 };
427 const int ncid { -1 };
mf_h setVal(geomdata.ProbHi(2))
void put_attr(const std::string &name, const std::string &value) const
Set file attribute to value.
std::vector< NCDim > all_dims() const
Return a list of all dimensions defined in this group.
NCVar def_scalar(const std::string &name, const nc_type dtype) const
Define a scalar variable, i.e., 0-dimensional array.
NCVar def_array(const std::string &name, const nc_type dtype, const std::vector< std::string > &) const
Define an array.
std::vector< NCVar > all_vars() const
Return a list of all variables defined in this group.
NCDim dim(const std::string &) const
Get the dimension instance by name.
void enter_def_mode() const
Enter definition mode (not needed for NetCDF4 format)
bool has_var(const std::string &) const
Check if a variable exists by name.
bool has_attr(const std::string &) const
Check if an attribute exists.
NCVar def_var(const std::string &name, const nc_type dtype, const std::vector< std::string > &dnames) const
Define a variable (wrapper for def_array)
NCDim def_dim(const std::string &, const size_t len) const
Define new dimension.
void exit_def_mode() const
Exit definition mode.
std::string get_attr(const std::string &name) const
Read file attribute from file.
int num_dimensions() const
Number of dimensions.
void wait_all(int num_requests, int *requests)
wait for non-blocking calls to finish
bool has_dim(const std::string &) const
Check if a dimension exists by name.
int num_attributes() const
Number of attributes.
static NCFile create(const std::string &name, const int cmode=NC_CLOBBER|NC_64BIT_DATA, MPI_Comm comm=MPI_COMM_WORLD, MPI_Info info=MPI_INFO_NULL)
Create a file. Defaults to CDF-5; classic CDF-1 has a 2GB limit.
int num_variables() const
Number of variables.
static NCFile open(const std::string &name, const int cmode=NC_NOWRITE, MPI_Comm comm=MPI_COMM_WORLD, MPI_Info info=MPI_INFO_NULL)
Open an existing file.
void close()
Close file object.
NCVar var(const std::string &) const
Get the variable instance by name.
NCVar def_var_fill(const std::string &name, const nc_type dtype, const std::vector< std::string > &dnames, const void *fill_val) const
Define a variable (wrapper for def_array)
NCVar def_array_fill(const std::string &name, const nc_type dtype, const std::vector< std::string > &dnames, const void *fill_val) const
Define an array with a fill value.
Wrapper around NetCDF data types.
static constexpr nc_type Real
static constexpr nc_type Int
Representation of NetCDF dimension.
const int dimid
Dimension ID used with NetCDF API.
const int ncid
File/Group Identifier.
MPI_Offset len() const
Length of this dimension.
std::string name() const
Name of this dimension.
Representation of a NetCDF variable.
bool has_attr(const std::string &name) const
Whether a variable has an attribute with name.
const int ncid
File/Group identifier.
const int varid
Variable ID used with NetCDF API.
void iput(const double *dptr, const std::vector< MPI_Offset > &start, const std::vector< MPI_Offset > &count, int *request) const
Write out a slice of data with with strides (see hyperslab definition in NetCDF)
std::string name() const
Name of this variable.
void put_varn_all(int num, MPI_Offset *const *starts, MPI_Offset *const *counts, const double *dptr) const
void put(const double *ptr) const
Write out the entire double variable.
void get(double *ptr) const
Read the entire variable from file.
std::string get_attr(const std::string &name) const
Read attribute from file.
void put_all(const double *dptr, const std::vector< MPI_Offset > &start, const std::vector< MPI_Offset > &count) const
Write out a slice of data, collective.
void put_attr(const std::string &name, const std::string &value) const
Set attribute "name" to "value".
std::vector< MPI_Offset > shape() const
Shape of the array (size in each array dimension)
void get_all(double *dptr, const std::vector< MPI_Offset > &start, const std::vector< MPI_Offset > &count) const
Read a chunk of data from the file, collective.
int ndim() const
Number of array dimensions for this variable.