TECA
teca_curvilinear_mesh.h
1 #ifndef teca_curvilinear_mesh_h
2 #define teca_curvilinear_mesh_h
3 
4 #include "teca_mesh.h"
5 #include "teca_shared_object.h"
6 TECA_SHARED_OBJECT_FORWARD_DECL(teca_curvilinear_mesh)
7 
8 class teca_curvilinear_mesh : public teca_mesh
10 {
11 public:
12  TECA_DATASET_STATIC_NEW(teca_curvilinear_mesh)
13  TECA_DATASET_NEW_INSTANCE()
14  TECA_DATASET_NEW_COPY()
15 
16  virtual ~teca_curvilinear_mesh() = default;
17 
18  // return a unique string identifier
19  std::string get_class_name() const override
20  { return "teca_curvilinear_mesh"; }
21 
22  // return the type code
23  int get_type_code() const override;
24 
25  // set/get metadata
26  TECA_DATASET_METADATA(whole_extent, unsigned long, 6)
27  TECA_DATASET_METADATA(extent, unsigned long, 6)
28  TECA_DATASET_METADATA(bounds, double, 6)
29  TECA_DATASET_METADATA(periodic_in_x, int, 1)
30  TECA_DATASET_METADATA(periodic_in_y, int, 1)
31  TECA_DATASET_METADATA(periodic_in_z, int, 1)
32  TECA_DATASET_METADATA(x_coordinate_variable, std::string, 1)
33  TECA_DATASET_METADATA(y_coordinate_variable, std::string, 1)
34  TECA_DATASET_METADATA(z_coordinate_variable, std::string, 1)
35  TECA_DATASET_METADATA(t_coordinate_variable, std::string, 1)
36 
37  // get x coordinate array
38  p_teca_variant_array get_x_coordinates()
39  { return m_coordinate_arrays->get("x"); }
40 
41  const_p_teca_variant_array get_x_coordinates() const
42  { return m_coordinate_arrays->get("x"); }
43 
44  // get y coordinate array
45  p_teca_variant_array get_y_coordinates()
46  { return m_coordinate_arrays->get("y"); }
47 
48  const_p_teca_variant_array get_y_coordinates() const
49  { return m_coordinate_arrays->get("y"); }
50 
51  // get z coordinate array
52  p_teca_variant_array get_z_coordinates()
53  { return m_coordinate_arrays->get("z"); }
54 
55  const_p_teca_variant_array get_z_coordinates() const
56  { return m_coordinate_arrays->get("z"); }
57 
58  // set coordinate arrays
59  void set_x_coordinates(const std::string &name,
60  const p_teca_variant_array &array);
61 
62  void set_y_coordinates(const std::string &name,
63  const p_teca_variant_array &array);
64 
65  void set_z_coordinates(const std::string &name,
66  const p_teca_variant_array &array);
67 
68  // copy data and metadata. shallow copy uses reference
69  // counting, while copy duplicates the data.
70  void copy(const const_p_teca_dataset &) override;
71  void shallow_copy(const p_teca_dataset &) override;
72 
73  // copy metadata. always a deep copy.
74  void copy_metadata(const const_p_teca_dataset &other) override;
75 
76  // swap internals of the two objects
77  void swap(p_teca_dataset &) override;
78 
79  // serialize the dataset to/from the given stream
80  // for I/O or communication
81  int to_stream(teca_binary_stream &) const override;
82  int from_stream(teca_binary_stream &) override;
83 
84  // stream to/from human readable representation
85  int to_stream(std::ostream &) const override;
86 
87 protected:
89 
90 private:
91  p_teca_array_collection m_coordinate_arrays;
92 };
93 
94 #endif
teca_binary_stream
Definition: teca_binary_stream.h:16
teca_mesh
a base class for geometric data
Definition: teca_mesh.h:17
teca_curvilinear_mesh
data on a physically uniform curvilinear mesh
Definition: teca_curvilinear_mesh.h:10