MDAL
mdal_ugrid.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_UGRID_HPP
7 #define MDAL_UGRID_HPP
8 
9 #include <map>
10 #include <string>
11 #include <stddef.h>
12 
13 #include "mdal_cf.hpp"
14 #include "mdal_driver.hpp"
15 
16 namespace MDAL
17 {
23  class DriverUgrid: public DriverCF
24  {
25  public:
26  DriverUgrid();
27  ~DriverUgrid() override = default;
28  DriverUgrid *create() override;
29  void save( const std::string &fileName, const std::string &meshName, Mesh *mesh ) override;
30 
31  std::string saveMeshOnFileSuffix() const override;
32 
33  private:
34  std::string buildUri( const std::string &meshFile ) override;
35  CFDimensions populateDimensions( ) override;
36  void populateElements( Vertices &vertices, Edges &edges, Faces &faces ) override;
37  void populateVertices( Vertices &vertices );
38  void populateFaces( Faces &faces );
39  void populateEdges( Edges &edges );
40  void addBedElevation( MemoryMesh *mesh ) override;
41  std::string getCoordinateSystemVariableName() override;
42  std::set<std::string> ignoreNetCDFVariables() override;
43  void parseNetCDFVariableMetadata( int varid,
44  std::string &variableName,
45  std::string &name,
46  bool *is_vector,
47  bool *isPolar,
48  bool *invertedDirection,
49  bool *is_x ) override;
50  std::vector<std::pair<double, double>> parseClassification( int varid ) const override;
51  std::string getTimeVariableName() const override;
52 
53  void parse2VariablesFromAttribute( const std::string &name, const std::string &attr_name,
54  std::string &var1, std::string &var2,
55  bool optional ) const;
56  void parseCoordinatesFrom1DMesh( const std::string &meshName, const std::string &attr_name,
57  std::string &var1, std::string &var2 );
58 
59  std::vector<std::string> findMeshesNames() const;
60  std::vector<std::string> mAllMeshNames; // all mesh names in file
61  std::string mMeshName; // processed mesh name
62  int mMeshDimension;
63  std::string nodeZVariableName() const;
64 
65  void populate1DMeshDimensions( MDAL::CFDimensions &dims );
66  void populate2DMeshDimensions( MDAL::CFDimensions &dims, int &ncid );
67 
68  void ignore1DMeshVariables( const std::string &mesh, std::set<std::string> &ignoreVariables );
69  void ignore2DMeshVariables( const std::string &mesh, std::set<std::string> &ignoreVariables );
70 
71  void writeDimensions( MDAL::Mesh *mesh );
72  void writeVariables( MDAL::Mesh *mesh );
73  void writeGlobals();
74  int faceVerticesMaximumCount() const override
75  { return std::numeric_limits<int>::max(); }
76  };
77 
78 } // namespace MDAL
79 
80 #endif // MDAL_UGRID_HPP
Definition: mdal_cf.hpp:24
NetCDF Climate and Forecast (CF) Metadata Conventions http://cfconventions.org and http://ugrid-conve...
Definition: mdal_cf.hpp:116
Driver of UGRID file format.
Definition: mdal_ugrid.hpp:24
Definition: mdal_memory_data_model.hpp:291
Definition: mdal_data_model.hpp:238