Go to the documentation of this file.
8 #include "ioda/io/IodaIO.h"
12 #include "oops/mpi/mpi.h"
13 #include "oops/util/abor1_cpp.h"
14 #include "oops/util/Logger.h"
21 const std::size_t MaxFrameSize) :
22 fname_(FileName), fmode_(FileMode), num_unexpect_dtypes_(0),
23 num_excess_dims_(0), max_frame_size_(MaxFrameSize) {
124 return igrp->second.begin();
136 return igrp->second.end();
160 return ivar->second.dtype;
173 bool GroupExists =
false;
174 bool VarExists =
false;
180 std::string ErrorMsg =
"Group name is not available: " + GroupName;
181 oops::Log::error() << ErrorMsg << std::endl;
185 VarIter ivar = igrp->second.find(VarName);
186 VarExists = !(ivar == igrp->second.end());
188 std::string ErrorMsg =
"Group name, variable name combination is not available: " +
189 GroupName +
", " + VarName;
190 oops::Log::error() << ErrorMsg << std::endl;
194 return GroupExists & VarExists;
208 std::string ErrorMsg =
"Group name, variable name combination is not available: " +
209 GroupName +
", " + VarName;
214 VarIter ivar = igrp->second.find(VarName);
215 return ivar->second.dtype;
227 return ivar->second.shape;
240 const std::string & VarName) {
242 std::string ErrorMsg =
"Group name, variable name combination is not available: " +
243 GroupName +
", " + VarName;
248 VarIter ivar = igrp->second.find(VarName);
249 return ivar->second.shape;
261 return ivar->second.file_shape;
274 const std::string & VarName) {
276 std::string ErrorMsg =
"Group name, variable name combination is not available: " +
277 GroupName +
", " + VarName;
282 VarIter ivar = igrp->second.find(VarName);
283 return ivar->second.file_shape;
295 return ivar->second.file_name;
309 std::string ErrorMsg =
"Group name, variable name combination is not available: " +
310 GroupName +
", " + VarName;
315 VarIter ivar = igrp->second.find(VarName);
316 return ivar->second.file_name;
328 return ivar->second.file_type;
342 std::string ErrorMsg =
"Group name, variable name combination is not available: " +
343 GroupName +
", " + VarName;
348 VarIter ivar = igrp->second.find(VarName);
349 return ivar->second.file_type;
361 return ivar->second.var_id;
373 std::size_t
IodaIO::var_id(
const std::string & GroupName,
const std::string & VarName) {
375 std::string ErrorMsg =
"Group name, variable name combination is not available: " +
376 GroupName +
", " + VarName;
381 VarIter ivar = igrp->second.find(VarName);
382 return ivar->second.var_id;
395 const std::string & VarType,
const std::vector<std::size_t> & VarShape,
396 const std::string & FileVarName,
const std::string & FileType,
397 const std::size_t MaxStringSize) {
398 GrpVarInsert(GroupName, VarName, VarType, VarShape, FileVarName, FileType, MaxStringSize);
451 return idim->second.id;
462 return idim->second.size;
475 if (
id == idim->second.id) {
481 std::string ErrorMsg =
482 "IodaIO::dim_id_size: Dimension id does not exist: " + std::to_string(
id);
486 return idim->second.size;
499 if (
id == idim->second.id) {
505 std::string ErrorMsg =
506 "IodaIO::dim_id_name: Dimension id does not exist: " + std::to_string(
id);
522 std::string ErrorMsg =
"IodaIO::dim_name_size: Dimension name does not exist: " + name;
526 return dim_info_.find(name)->second.size;
538 std::string ErrorMsg =
"IodaIO::dim_name_id: Dimension name does not exist: " + name;
596 return iframe->start;
616 std::size_t FrameStart = 0;
617 while (FrameStart < MaxVarSize) {
619 if ((FrameStart + FrameSize) > MaxVarSize) {
620 FrameSize = MaxVarSize - FrameStart;
679 std::string & VarName) {
680 std::size_t Spos = Name.find(
"@");
681 if (Spos != Name.npos) {
682 GroupName = Name.substr(Spos+1);
683 VarName = Name.substr(0, Spos);
686 std::string(
"IodaIO::ExtractGrpVarName: Input file contains variables ") +
687 std::string(
"that are missing group names (ie, no @GroupName suffix).");
VarInfoMap::const_iterator VarIter
group-variable map, variable iterator
void grp_var_insert(const std::string &GroupName, const std::string &VarName, const std::string &VarType, const std::vector< std::size_t > &VarShape, const std::string &FileVarName, const std::string &FileType, const std::size_t MaxStringSize=0)
std::size_t num_unexpect_dtypes_
count of unexpected data types
void dim_insert(const std::string &, const std::size_t)
std::string fname() const
bool dim_exists(const std::string &)
GroupVarInfoMap::const_iterator GroupIter
group-variable map, group iterator
std::size_t nlocs() const
FrameInfo frame_info_
frame information vector
std::size_t max_frame_size_
maximum frame size
FrameInfo::const_iterator FrameIter
std::string fmode_
file mode
std::unique_ptr< FrameDataMap< int > > int_frame_data_
Containers for file frame.
std::size_t frame_start(FrameIter &)
start value of current frame
DimInfoMap dim_info_
dimension information map
virtual void InitializeFrame()=0
std::string var_name(VarIter)
virtual void GrpVarInsert(const std::string &GroupName, const std::string &VarName, const std::string &VarType, const std::vector< std::size_t > &VarShape, const std::string &FileVarName, const std::string &FileType, const std::size_t MaxStringSize)=0
std::string fmode() const
void frame_write(FrameIter &)
write from the frame containers into the file
std::size_t dim_name_size(const std::string &)
void frame_read(FrameIter &)
read from the file into the frame containers
virtual void FinalizeFrame()=0
std::size_t var_id(VarIter)
std::unique_ptr< FrameDataMap< float > > float_frame_data_
std::string dim_id_name(const int &)
VarIter var_end(GroupIter)
void frame_finalize()
finalize frame access
int dim_name_id(const std::string &)
virtual void DimInsert(const std::string &Name, const std::size_t Size)=0
std::size_t num_excess_dims_
count of too many dimensions
bool unexpected_data_types() const
std::size_t nvars_
number of unique variables
void frame_data_init()
initialize the frame data container
FrameIter frame_end()
ending frame iterator
std::string file_name(VarIter)
void frame_info_init(std::size_t MaxVarSize)
initialize the frame info container
std::string file_type(VarIter)
std::size_t dim_id_size(const int &)
GroupVarInfoMap grp_var_info_
group-variable information map
FrameIter frame_begin()
beginning frame iterator
void frame_initialize()
initialize frame access
std::size_t frame_size(FrameIter &)
size value of current frame
VarIter var_begin(GroupIter)
std::string var_dtype(VarIter)
virtual void WriteFrame(IodaIO::FrameIter &iframe)=0
std::size_t dim_size(DimIter)
std::string fname_
file name
std::string dim_name(DimIter)
bool grp_var_exists(const std::string &, const std::string &)
virtual void ReadFrame(IodaIO::FrameIter &iframe)=0
IodaIO(const std::string &FileName, const std::string &FileMode, const std::size_t MaxFrameSize)
std::vector< std::size_t > var_shape(VarIter)
DimInfoMap::const_iterator DimIter
std::size_t nvars() const
std::unique_ptr< FrameDataMap< std::string > > string_frame_data_
static void ExtractGrpVarName(const std::string &Name, std::string &GroupName, std::string &VarName)
std::string group_name(GroupIter)
std::size_t nlocs_
number of unique locations
void frame_info_insert(std::size_t Start, std::size_t Size)
insert item into the frame info container
std::vector< std::size_t > file_shape(VarIter)