9 #ifndef NC_INTREMORAACE_H
10 #define NC_INTREMORAACE_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 std::string
name()
const;
61 std::string
name()
const;
67 std::vector<size_t>
shape()
const;
70 void put(
const double*)
const;
71 void put(
const float*)
const;
72 void put(
const int*)
const;
77 const std::vector<size_t>&,
78 const std::vector<size_t>&)
const;
84 const std::vector<size_t>&,
85 const std::vector<size_t>&,
86 const std::vector<ptrdiff_t>&)
const;
90 const std::vector<size_t>&,
91 const std::vector<size_t>&)
const;
97 const std::vector<size_t>&,
98 const std::vector<size_t>&,
99 const std::vector<ptrdiff_t>&)
const;
101 void put(
const int*,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
104 const std::vector<size_t>&,
105 const std::vector<size_t>&,
106 const std::vector<ptrdiff_t>&)
const;
108 void put(
const char**,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
112 const std::vector<size_t>& start,
113 const std::vector<size_t>& count,
114 const std::vector<ptrdiff_t>& stride)
const;
117 void get(
double*)
const;
118 void get(
float*)
const;
119 void get(
int*)
const;
123 get(
double*,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
128 const std::vector<size_t>&,
129 const std::vector<size_t>&,
130 const std::vector<ptrdiff_t>&)
const;
134 get(
float*,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
139 const std::vector<size_t>&,
140 const std::vector<size_t>&,
141 const std::vector<ptrdiff_t>&)
const;
144 get(
int*,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
147 const std::vector<size_t>&,
148 const std::vector<size_t>&,
149 const std::vector<ptrdiff_t>&)
const;
153 get(
char*,
const std::vector<size_t>&,
const std::vector<size_t>&)
const;
158 const std::vector<size_t>&,
159 const std::vector<size_t>&,
160 const std::vector<ptrdiff_t>&)
const;
163 void put_attr(
const std::string&
name,
const std::string& value)
const;
165 put_attr(
const std::string&
name,
const std::vector<double>& value)
const;
167 put_attr(
const std::string&
name,
const std::vector<float>& value)
const;
168 void put_attr(
const std::string&
name,
const std::vector<int>& value)
const;
171 void get_attr(
const std::string&
name, std::vector<double>& value)
const;
172 void get_attr(
const std::string&
name, std::vector<float>& value)
const;
173 void get_attr(
const std::string&
name, std::vector<int>& value)
const;
185 std::string
name()
const;
203 bool has_group(
const std::string&)
const;
206 bool has_dim(
const std::string&)
const;
209 bool has_var(
const std::string&)
const;
212 bool has_attr(
const std::string&)
const;
221 NCDim dim(
const std::string&)
const;
224 NCVar var(
const std::string&)
const;
230 NCDim def_dim(
const std::string&,
const size_t len)
const;
237 const std::string&
name,
239 const std::vector<std::string>&)
const;
243 const std::string&
name,
245 const std::vector<std::string>& dnames)
const
250 void put_attr(
const std::string&
name,
const std::string& value)
const;
251 void put_attr(
const std::string&
name,
const std::vector<double>& value)
const;
252 void put_attr(
const std::string&
name,
const std::vector<float>& value)
const;
253 void put_attr(
const std::string&
name,
const std::vector<int>& value)
const;
256 void get_attr(
const std::string&
name, std::vector<double>& value)
const;
257 void get_attr(
const std::string&
name, std::vector<float>& value)
const;
258 void get_attr(
const std::string&
name, std::vector<int>& value)
const;
264 std::vector<NCDim>
all_dims()
const;
267 std::vector<NCVar>
all_vars()
const;
288 create(
const std::string&
name,
const int cmode = NC_CLOBBER | NC_NETCDF4);
290 static NCFile open(
const std::string&
name,
const int cmode = NC_NOWRITE);
293 const std::string&
name,
294 const int cmode = NC_CLOBBER | NC_NETCDF4 | NC_MPIIO,
295 MPI_Comm comm = MPI_COMM_WORLD,
296 MPI_Info info = MPI_INFO_NULL);
299 const std::string&
name,
300 const int cmode = NC_NOWRITE,
301 MPI_Comm comm = MPI_COMM_WORLD,
302 MPI_Info info = MPI_INFO_NULL);
338 class NCFile :
public NCGroup
Definition: NCInterface.H:285
static NCFile open(const std::string &name, const int cmode=NC_NOWRITE)
Definition: NCInterface.cpp:577
static NCFile create(const std::string &name, const int cmode=NC_CLOBBER|NC_NETCDF4)
Definition: NCInterface.cpp:570
~NCFile()
Definition: NCInterface.cpp:601
static NCFile open_par(const std::string &name, const int cmode=NC_NOWRITE, MPI_Comm comm=MPI_COMM_WORLD, MPI_Info info=MPI_INFO_NULL)
Definition: NCInterface.cpp:593
static NCFile create_par(const std::string &name, const int cmode=NC_CLOBBER|NC_NETCDF4|NC_MPIIO, MPI_Comm comm=MPI_COMM_WORLD, MPI_Info info=MPI_INFO_NULL)
Definition: NCInterface.cpp:584
bool is_open
Definition: NCInterface.H:311
NCFile(const int id)
Definition: NCInterface.H:309
void close()
Definition: NCInterface.cpp:606
Representation of a NetCDF group.
Definition: NCInterface.H:179
bool has_group(const std::string &) const
Check if a group exists.
Definition: NCInterface.cpp:429
bool has_attr(const std::string &) const
Check if an attribute exists.
Definition: NCInterface.cpp:447
std::string get_attr(const std::string &name) const
Definition: NCInterface.cpp:482
void exit_def_mode() const
Exit definition mode.
Definition: NCInterface.cpp:568
std::string name() const
Name of this group.
Definition: NCInterface.cpp:322
NCVar def_scalar(const std::string &name, const nc_type dtype) const
Define a scalar variable, i.e., 0-dimensional array.
Definition: NCInterface.cpp:370
int num_dimensions() const
Number of dimensions in this group.
Definition: NCInterface.cpp:408
int num_variables() const
Number of variables within this group.
Definition: NCInterface.cpp:422
int num_groups() const
Number of sub-groups within this group.
Definition: NCInterface.cpp:401
std::string full_name() const
Full name for this group.
Definition: NCInterface.cpp:332
NCGroup(const int id, const NCGroup *)
Definition: NCInterface.H:277
NCGroup group(const std::string &) const
Definition: NCInterface.cpp:349
NCVar var(const std::string &) const
Get the variable instance by name.
Definition: NCInterface.cpp:394
std::vector< NCGroup > all_groups() const
Return a list of all groups defined in this group.
Definition: NCInterface.cpp:520
const int ncid
Identifier used with NetCDF API calls.
Definition: NCInterface.H:182
std::vector< NCDim > all_dims() const
Return a list of all dimensions defined in this group.
Definition: NCInterface.cpp:535
NCGroup(const int id)
Definition: NCInterface.H:276
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)
Definition: NCInterface.H:242
bool has_var(const std::string &) const
Check if a variable exists by name.
Definition: NCInterface.cpp:441
bool has_dim(const std::string &) const
Check if a dimension exists by name.
Definition: NCInterface.cpp:435
NCGroup def_group(const std::string &) const
Define new group.
Definition: NCInterface.cpp:342
NCVar def_array(const std::string &name, const nc_type dtype, const std::vector< std::string > &) const
Define an array.
Definition: NCInterface.cpp:377
void put_attr(const std::string &name, const std::string &value) const
Definition: NCInterface.cpp:455
NCDim dim(const std::string &) const
Get the dimension instance by name.
Definition: NCInterface.cpp:356
NCDim def_dim(const std::string &, const size_t len) const
Define new dimension.
Definition: NCInterface.cpp:363
void enter_def_mode() const
Enter definition mode (not needed for NetCDF4 format)
Definition: NCInterface.cpp:557
int num_attributes() const
Number of attributes within this group.
Definition: NCInterface.cpp:415
std::vector< NCVar > all_vars() const
Return a list of all variables defined in this group.
Definition: NCInterface.cpp:546
Definition: NCInterface.cpp:9
Wrapper around NetCDF data types.
Definition: NCInterface.H:24
double RType
Definition: NCInterface.H:31
static constexpr nc_type Real
Definition: NCInterface.H:30
static constexpr nc_type Int
Definition: NCInterface.H:25
Representation of NetCDF dimension.
Definition: NCInterface.H:37
const int dimid
Dimension ID used with NetCDF API.
Definition: NCInterface.H:42
const int ncid
File/Group Identifier.
Definition: NCInterface.H:39
std::string name() const
Name of this dimension.
Definition: NCInterface.cpp:24
size_t len() const
Length of this dimension.
Definition: NCInterface.cpp:30
Representation of a NetCDF variable.
Definition: NCInterface.H:53
bool has_attr(const std::string &name) const
Definition: NCInterface.cpp:247
const int ncid
File/Group identifier.
Definition: NCInterface.H:55
const int varid
Variable ID used with NetCDF API.
Definition: NCInterface.H:58
std::string name() const
Name of this variable.
Definition: NCInterface.cpp:37
std::string get_attr(const std::string &name) const
Definition: NCInterface.cpp:282
void put(const double *) const
Write out the entire variable.
Definition: NCInterface.cpp:65
void par_access(const int cmode) const
Definition: NCInterface.cpp:317
void put_attr(const std::string &name, const std::string &value) const
Definition: NCInterface.cpp:255
void get(double *) const
Read the entire variable from file.
Definition: NCInterface.cpp:156
std::vector< size_t > shape() const
Shape of the array (size in each array dimension)
Definition: NCInterface.cpp:50
int ndim() const
Number of array dimensions for this variable.
Definition: NCInterface.cpp:43