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;
196 [[nodiscard]] std::string
name ()
const;
199 [[nodiscard]] std::string
full_name ()
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;
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;
249 const std::vector<std::string>&)
const;
254 const std::vector<std::string>& dnames)
const
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;
297 create (
const std::string&
name,
const int cmode = NC_CLOBBER | NC_NETCDF4);
299 static NCFile open (
const std::string&
name,
const int cmode = NC_NOWRITE);
302 const int cmode = NC_CLOBBER | NC_NETCDF4 | NC_MPIIO,
303 MPI_Comm comm = MPI_COMM_WORLD,
304 MPI_Info info = MPI_INFO_NULL);
307 const int cmode = NC_NOWRITE,
308 MPI_Comm comm = MPI_COMM_WORLD,
309 MPI_Info info = MPI_INFO_NULL);
345 class NCFile :
public NCGroup
Definition: ERF_NCInterface.H:294
static NCFile open(const std::string &name, const int cmode=NC_NOWRITE)
Definition: ERF_NCInterface.cpp:707
static NCFile create(const std::string &name, const int cmode=NC_CLOBBER|NC_NETCDF4)
Definition: ERF_NCInterface.cpp:700
~NCFile()
Definition: ERF_NCInterface.cpp:729
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: ERF_NCInterface.cpp:722
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: ERF_NCInterface.cpp:714
bool is_open
Definition: ERF_NCInterface.H:318
NCFile(const int id)
Definition: ERF_NCInterface.H:316
void close()
Definition: ERF_NCInterface.cpp:734
Representation of a NetCDF group.
Definition: ERF_NCInterface.H:190
bool has_group(const std::string &) const
Check if a group exists.
Definition: ERF_NCInterface.cpp:553
bool has_attr(const std::string &) const
Check if an attribute exists.
Definition: ERF_NCInterface.cpp:582
std::string get_attr(const std::string &name) const
Definition: ERF_NCInterface.cpp:614
void exit_def_mode() const
Exit definition mode.
Definition: ERF_NCInterface.cpp:698
std::string name() const
Name of this group.
Definition: ERF_NCInterface.cpp:464
int num_dimensions() const
Number of dimensions in this group.
Definition: ERF_NCInterface.cpp:532
int num_variables() const
Number of variables within this group.
Definition: ERF_NCInterface.cpp:546
int num_groups() const
Number of sub-groups within this group.
Definition: ERF_NCInterface.cpp:525
std::string full_name() const
Full name for this group.
Definition: ERF_NCInterface.cpp:474
NCGroup(const int id, const NCGroup *)
Definition: ERF_NCInterface.H:286
NCGroup group(const std::string &) const
Definition: ERF_NCInterface.cpp:484
NCVar var(const std::string &) const
Get the variable instance by name.
Definition: ERF_NCInterface.cpp:518
std::vector< NCGroup > all_groups() const
Return a list of all groups defined in this group.
Definition: ERF_NCInterface.cpp:650
const int ncid
Identifier used with NetCDF API calls.
Definition: ERF_NCInterface.H:193
void def_dim(const std::string &, size_t len) const
Define new dimension.
Definition: ERF_NCInterface.cpp:498
std::vector< NCDim > all_dims() const
Return a list of all dimensions defined in this group.
Definition: ERF_NCInterface.cpp:665
NCGroup(const int id)
Definition: ERF_NCInterface.H:285
bool has_var(const std::string &) const
Check if a variable exists by name.
Definition: ERF_NCInterface.cpp:575
bool has_dim(const std::string &) const
Check if a dimension exists by name.
Definition: ERF_NCInterface.cpp:559
int get_id(const std::string &) const
Definition: ERF_NCInterface.cpp:565
void put_attr(const std::string &name, const std::string &value) const
Definition: ERF_NCInterface.cpp:590
void def_array(const std::string &name, nc_type dtype, const std::vector< std::string > &) const
Define an array.
Definition: ERF_NCInterface.cpp:505
NCDim dim(const std::string &) const
Get the dimension instance by name.
Definition: ERF_NCInterface.cpp:491
void 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: ERF_NCInterface.H:252
void enter_def_mode() const
Enter definition mode (not needed for NetCDF4 format)
Definition: ERF_NCInterface.cpp:687
int num_attributes() const
Number of attributes within this group.
Definition: ERF_NCInterface.cpp:539
std::vector< NCVar > all_vars() const
Return a list of all variables defined in this group.
Definition: ERF_NCInterface.cpp:676
Definition: ERF_NCInterface.cpp:9
Wrapper around NetCDF data types.
Definition: ERF_NCInterface.H:24
double RType
Definition: ERF_NCInterface.H:31
static constexpr nc_type Real
Definition: ERF_NCInterface.H:30
static constexpr nc_type Int
Definition: ERF_NCInterface.H:25
Representation of NetCDF dimension.
Definition: ERF_NCInterface.H:37
const int dimid
Dimension ID used with NetCDF API.
Definition: ERF_NCInterface.H:42
const int ncid
File/Group Identifier.
Definition: ERF_NCInterface.H:39
std::string name() const
Name of this dimension.
Definition: ERF_NCInterface.cpp:32
size_t len() const
Length of this dimension.
Definition: ERF_NCInterface.cpp:41
Representation of a NetCDF variable.
Definition: ERF_NCInterface.H:53
bool has_attr(const std::string &name) const
Definition: ERF_NCInterface.cpp:392
const int ncid
File/Group identifier.
Definition: ERF_NCInterface.H:55
const int varid
Variable ID used with NetCDF API.
Definition: ERF_NCInterface.H:58
std::string name() const
Name of this variable.
Definition: ERF_NCInterface.cpp:51
void par_access(int cmode) const
Definition: ERF_NCInterface.cpp:459
std::string get_attr(const std::string &name) const
Definition: ERF_NCInterface.cpp:424
void put(const double *) const
Write out the entire variable.
Definition: ERF_NCInterface.cpp:111
void put_attr(const std::string &name, const std::string &value) const
Definition: ERF_NCInterface.cpp:400
std::vector< std::string > dimnames() const
Dimension names of the array (str in each array dimension)
Definition: ERF_NCInterface.cpp:70
void get(double *) const
Read the entire variable from file.
Definition: ERF_NCInterface.cpp:269
std::vector< size_t > shape() const
Shape of the array (size in each array dimension)
Definition: ERF_NCInterface.cpp:91
int ndim() const
Number of array dimensions for this variable.
Definition: ERF_NCInterface.cpp:60