MDAL
mdal_hec2d.hpp
1 /*
2  MDAL - Mesh Data Abstraction Library (MIT License)
3  Copyright (C) 2018 Peter Petrik (zilolv at gmail dot com)
4 */
5 
6 #ifndef MDAL_HEC2D_HPP
7 #define MDAL_HEC2D_HPP
8 
9 #include <string>
10 
11 #include "mdal_data_model.hpp"
12 #include "mdal_memory_data_model.hpp"
13 #include "mdal.h"
14 #include "mdal_hdf5.hpp"
15 #include "mdal_driver.hpp"
16 
17 namespace MDAL
18 {
38  class DriverHec2D: public Driver
39  {
40  public:
41  DriverHec2D();
42  ~DriverHec2D( ) override = default;
43  DriverHec2D *create() override;
44 
45  bool canReadMesh( const std::string &uri ) override;
46  std::unique_ptr< Mesh > load( const std::string &resultsFile, const std::string &meshName = "" ) override;
47 
48  private:
49  std::unique_ptr< MDAL::MemoryMesh > mMesh;
50  std::string mFileName;
51 
52  std::vector<MDAL::RelativeTimestamp> mTimes ;
53  DateTime mReferenceTime;
54 
55  // Pre 5.0.5 format
56  bool canReadOldFormat( const std::string &fileType ) const;
57  std::vector<std::string> read2DFlowAreasNamesOld( HdfGroup gGeom2DFlowAreas ) const;
58 
59  // 5.0.5 + format
60  bool canReadFormat505( const std::string &fileType ) const;
61  std::vector<std::string> read2DFlowAreasNames505( HdfGroup gGeom2DFlowAreas ) const;
62 
63  // Common functions
64  void readFaceOutput( const HdfFile &hdfFile,
65  const HdfGroup &rootGroup,
66  const std::vector<size_t> &areaElemStartIndex,
67  const std::vector<std::string> &flowAreaNames,
68  const std::string rawDatasetName,
69  const std::string datasetName,
70  const std::vector<MDAL::RelativeTimestamp> &times,
71  const DateTime &referenceTime );
72 
73  void readFaceResults( const HdfFile &hdfFile,
74  const std::vector<size_t> &areaElemStartIndex,
75  const std::vector<std::string> &flowAreaNames );
76 
77  std::shared_ptr<MDAL::MemoryDataset2D> readElemOutput(
78  const HdfGroup &rootGroup,
79  const std::vector<size_t> &areaElemStartIndex,
80  const std::vector<std::string> &flowAreaNames,
81  const std::string rawDatasetName,
82  const std::string datasetName,
83  const std::vector<MDAL::RelativeTimestamp> &times,
84  std::shared_ptr<MDAL::MemoryDataset2D> bed_elevation,
85  const DateTime &referenceTime );
86 
87  std::shared_ptr<MDAL::MemoryDataset2D> readBedElevation(
88  const HdfGroup &gGeom2DFlowAreas,
89  const std::vector<size_t> &areaElemStartIndex,
90  const std::vector<std::string> &flowAreaNames );
91 
92  void setProjection( HdfFile hdfFile );
93 
94  void parseMesh( HdfGroup gGeom2DFlowAreas,
95  std::vector<size_t> &areaElemStartIndex,
96  const std::vector<std::string> &flowAreaNames );
97 
98  void readElemResults(
99  const HdfFile &hdfFile,
100  std::shared_ptr<MDAL::MemoryDataset2D> bed_elevation,
101  const std::vector<size_t> &areaElemStartIndex,
102  const std::vector<std::string> &flowAreaNames );
103  };
104 
105 } // namespace MDAL
106 #endif //MDAL_HEC2D_HPP
Definition: mdal_hdf5.hpp:60
Definition: mdal_hdf5.hpp:108
Definition: mdal_datetime.hpp:48
HEC-RAS 2D format.
Definition: mdal_hec2d.hpp:39
Definition: mdal_driver.hpp:28