MDAL
mdal_tuflowfv.hpp
1 /*
2  MDAL - Mesh Data Abstraction Library (MIT License)
3  Copyright (C) 2019 Peter Petrik (zilolv at gmail dot com)
4 */
5 
6 #ifndef MDAL_TUFLOWFV_HPP
7 #define MDAL_TUFLOWFV_HPP
8 
9 #include <string>
10 #include <memory>
11 #include <map>
12 #include <iostream>
13 #include <fstream>
14 
15 #include "mdal_data_model.hpp"
16 #include "mdal_memory_data_model.hpp"
17 #include "mdal.h"
18 #include "mdal_driver.hpp"
19 #include "mdal_cf.hpp"
20 
21 namespace MDAL
22 {
23  namespace TuflowFVActiveFlag
24  {
25  size_t activeData( std::shared_ptr<NetCDFFile> ncFile,
26  size_t timestep,
27  size_t timestepsCount,
28  size_t facesCount,
29  int ncidActive,
30  size_t indexStart,
31  size_t count,
32  int *buffer );
33  }
34 
36  {
37  public:
39  double fillValX,
40  double fillValY,
41  int ncidX,
42  int ncidY,
43  Classification classificationX,
44  Classification classificationY,
45  int ncidActive,
47  size_t timesteps,
48  size_t values,
49  size_t ts,
50  std::shared_ptr<NetCDFFile> ncFile
51  );
52  size_t activeData( size_t indexStart, size_t count, int *buffer ) override;
53  private:
54  int mNcidActive;
55  };
56 
58  {
59  public:
61  int ncidX,
62  int ncidY,
63  int ncidActive,
65  size_t timesteps,
66  size_t volumesCount,
67  size_t facesCount,
68  size_t levelFacesCount,
69  size_t ts,
70  size_t maximumLevelsCount,
71  std::shared_ptr<NetCDFFile> ncFile
72  );
73  virtual ~TuflowFVDataset3D() override;
74 
75  size_t activeData( size_t indexStart, size_t count, int *buffer ) override;
76  size_t verticalLevelCountData( size_t indexStart, size_t count, int *buffer ) override;
77  size_t verticalLevelData( size_t indexStart, size_t count, double *buffer ) override;
78  size_t faceToVolumeData( size_t indexStart, size_t count, int *buffer ) override;
79  size_t scalarVolumesData( size_t indexStart, size_t count, double *buffer ) override;
80  size_t vectorVolumesData( size_t indexStart, size_t count, double *buffer ) override;
81 
82  private:
83  int mNcidX;
84  int mNcidY;
85  int mNcidActive;
86  size_t mTimesteps;
87  size_t mFacesCount;
88  size_t mLevelFacesCount;
90  size_t mTs;
91  std::shared_ptr<NetCDFFile> mNcFile;
92 
93  int mNcidVerticalLevels = -1;
94  int mNcidVerticalLevelsZ = -1;
95  int mNcidActive2D = -1;
96  int mNcid3DTo2D = -1;
97  int mNcid2DTo3D = -1;
98  };
99 
114  class DriverTuflowFV: public DriverCF
115  {
116  public:
117  DriverTuflowFV();
118  ~DriverTuflowFV() override;
119  DriverTuflowFV *create() override;
120 
121  private:
122  CFDimensions populateDimensions( ) override;
123  void populateElements( Vertices &vertices, Edges &, Faces &faces ) override;
124  void addBedElevation( MemoryMesh *mesh ) override;
125  std::string getCoordinateSystemVariableName() override;
126  std::set<std::string> ignoreNetCDFVariables() override;
127  void parseNetCDFVariableMetadata( int varid,
128  std::string &variableName,
129  std::string &name,
130  bool *is_vector,
131  bool *isPolar,
132  bool *invertedDirection,
133  bool *is_x ) override;
134  std::vector<std::pair<double, double>> parseClassification( int varid ) const override;
135  std::string getTimeVariableName() const override;
136  std::shared_ptr<MDAL::Dataset> create2DDataset(
137  std::shared_ptr<MDAL::DatasetGroup> group,
138  size_t ts,
139  const MDAL::CFDatasetGroupInfo &dsi,
140  double fill_val_x, double fill_val_y ) override;
141 
142  std::shared_ptr<MDAL::Dataset> create3DDataset(
143  std::shared_ptr<MDAL::DatasetGroup> group,
144  size_t ts,
145  const MDAL::CFDatasetGroupInfo &dsi,
146  double fill_val_x, double fill_val_y ) override;
147 
148  void addBedElevationDatasetOnFaces();
149  void populateVertices( MDAL::Vertices &vertices );
150  void populateFaces( MDAL::Faces &faces );
151  virtual DateTime defaultReferenceTime() const override;
152 
153  void calculateMaximumLevelCount();
154  int mMaximumLevelsCount = -1;
155  };
156 
157 } // namespace MDAL
158 #endif //MDAL_TUFLOWFV_HPP
Definition: mdal_cf.hpp:78
Definition: mdal_cf.hpp:24
Definition: mdal_data_model.hpp:113
Definition: mdal_data_model.hpp:137
Definition: mdal_datetime.hpp:48
NetCDF Climate and Forecast (CF) Metadata Conventions http://cfconventions.org and http://ugrid-conve...
Definition: mdal_cf.hpp:116
TUFLOW FV format.
Definition: mdal_tuflowfv.hpp:115
Definition: mdal_memory_data_model.hpp:291
Definition: mdal_tuflowfv.hpp:36
size_t activeData(size_t indexStart, size_t count, int *buffer) override
For drivers that supports it, see supportsActiveFlag()
Definition: mdal_tuflowfv.cpp:85
Definition: mdal_tuflowfv.hpp:58
size_t vectorVolumesData(size_t indexStart, size_t count, double *buffer) override
For DataOnVolumes.
Definition: mdal_tuflowfv.cpp:227
size_t verticalLevelData(size_t indexStart, size_t count, double *buffer) override
For DataOnVolumes.
Definition: mdal_tuflowfv.cpp:151
size_t faceToVolumeData(size_t indexStart, size_t count, int *buffer) override
For DataOnVolumes.
Definition: mdal_tuflowfv.cpp:172
size_t activeData(size_t indexStart, size_t count, int *buffer) override
For drivers that supports it, see supportsActiveFlag()
Definition: mdal_tuflowfv.cpp:281
size_t verticalLevelCountData(size_t indexStart, size_t count, int *buffer) override
For DataOnVolumes.
Definition: mdal_tuflowfv.cpp:134
size_t scalarVolumesData(size_t indexStart, size_t count, double *buffer) override
For DataOnVolumes.
Definition: mdal_tuflowfv.cpp:194
Definition: mdal_cf.hpp:54
TimeLocation
Definition: mdal_cf.hpp:56