XdmfCurvilinearGrid.hpp 10.2 KB
Newer Older
Kenneth Leiter's avatar
Kenneth Leiter committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*****************************************************************************/
/*                                    XDMF                                   */
/*                       eXtensible Data Model and Format                    */
/*                                                                           */
/*  Id : XdmfCurvilinearGrid.hpp                                             */
/*                                                                           */
/*  Author:                                                                  */
/*     Kenneth Leiter                                                        */
/*     kenneth.leiter@arl.army.mil                                           */
/*     US Army Research Laboratory                                           */
/*     Aberdeen Proving Ground, MD                                           */
/*                                                                           */
/*     Copyright @ 2011 US Army Research Laboratory                          */
/*     All Rights Reserved                                                   */
/*     See Copyright.txt for details                                         */
/*                                                                           */
/*     This software is distributed WITHOUT ANY WARRANTY; without            */
/*     even the implied warranty of MERCHANTABILITY or FITNESS               */
/*     FOR A PARTICULAR PURPOSE.  See the above copyright notice             */
/*     for more information.                                                 */
/*                                                                           */
/*****************************************************************************/

24 25
#ifndef XDMFCURVILINEARGRID_HPP_
#define XDMFCURVILINEARGRID_HPP_
26

27
// C Compatible Includes
28
#include "Xdmf.hpp"
29 30
#include "XdmfGrid.hpp"

31 32 33 34 35
#ifdef __cplusplus

// Forward Declarations
class XdmfArray;

36
/**
37 38
 * @brief A curvilinear (or structured) grid consisting of cells and
 * points arranged on a regular lattice in space.
39
 *
40 41
 * XdmfCurvilinearGrid represents a mesh of cells and points arranged
 * with regular topology and irregular geometry.
42
 *
43 44
 * In order to define a curvilinear grid, the dimensions of the grid
 * must be supplied along with the coordinates of each point.
45 46
 *
 */
47
class XDMF_EXPORT XdmfCurvilinearGrid : public XdmfGrid {
48

49
public:
50 51 52 53

  /**
   * Create a new curvilinear grid (Two dimensional).
   *
54 55 56 57
   * Example of use:
   *
   * C++
   *
58
   * @dontinclude ExampleXdmfCurvilinearGrid.cpp
59 60
   * @skipline //#initializationdim2
   * @until //#initializationdim2
61 62 63
   *
   * Python
   *
64
   * @dontinclude XdmfExampleCurvilinearGrid.py
65 66 67 68
   * @skipline #//initialization
   * @until #//initialization
   * @skipline #//constructor2
   * @until #//constructor2
69
   *
70 71
   * @param     xNumPoints      The number of points in the x direction.
   * @param     yNumPoints      The number of points in the y direction.
72
   *
73
   * @return                    Constructed curvilinear grid.
74
   */
75
  static shared_ptr<XdmfCurvilinearGrid>
76 77 78 79 80 81
  New(const unsigned int xNumPoints,
      const unsigned int yNumPoints);

  /**
   * Create a new curvilinear grid (Three dimensional).
   *
82 83 84 85
   * Example of use:
   *
   * C++
   *
86
   * @dontinclude ExampleXdmfCurvilinearGrid.cpp
87 88
   * @skipline //#initializationdim3
   * @until //#initializationdim3
89 90 91
   *
   * Python
   *
92
   * @dontinclude XdmfExampleCurvilinearGrid.py
93 94 95 96
   * @skipline #//initialization
   * @until #//initialization
   * @skipline #//constructor3
   * @until #//constructor3
97
   *
98 99 100
   * @param     xNumPoints      The number of points in the x direction.
   * @param     yNumPoints      The number of points in the y direction.
   * @param     zNumPoints      The number of points in the z direction.
101
   *
102
   * @return                    Constructed curvilinear grid.
103
   */
104
  static shared_ptr<XdmfCurvilinearGrid>
105 106 107 108 109 110 111
  New(const unsigned int xNumPoints,
      const unsigned int yNumPoints,
      const unsigned int zNumPoints);

  /**
   * Create a new curvilinear grid (N dimensional).
   *
112 113 114 115
   * Example of use:
   *
   * C++
   *
116
   * @dontinclude ExampleXdmfCurvilinearGrid.cpp
117 118
   * @skipline //#initializationvector
   * @until //#initializationvector
119 120 121
   *
   * Python
   *
122
   * @dontinclude XdmfExampleCurvilinearGrid.py
123 124 125 126
   * @skipline #//initialization
   * @until #//initialization
   * @skipline #//constructorvector
   * @until #//constructorvector
127
   *
128
   * @param     numPoints       The number of points in each direction.
129
   *
130
   * @return                    Constructed curvilinear grid.
131
   */
132 133
  static shared_ptr<XdmfCurvilinearGrid>
  New(const shared_ptr<XdmfArray> numPoints);
134 135 136

  virtual ~XdmfCurvilinearGrid();

137
  LOKI_DEFINE_VISITABLE(XdmfCurvilinearGrid, XdmfGrid)
138 139 140
  static const std::string ItemTag;

  /**
141 142
   * Get the dimensions of the grid, the number of points in each
   * direction.
143
   *
144 145 146 147
   * Example of use:
   *
   * C++
   *
148
   * @dontinclude ExampleXdmfCurvilinearGrid.cpp
149 150 151 152 153 154
   * @skipline //#initializationdim3
   * @until //#initializationdim3
   * @skipline //#setDimensions
   * @until //#setDimensions
   * @skipline //#getDimensions
   * @until //#getDimensions
155 156 157
   *
   * Python
   *
158
   * @dontinclude XdmfExampleCurvilinearGrid.py
159 160 161 162 163 164 165 166
   * @skipline #//initialization
   * @until #//initialization
   * @skipline #//constructorvector
   * @until #//constructorvector
   * @skipline #//setDimensions
   * @until #//setDimensions
   * @skipline #//getDimensions
   * @until #//getDimensions
167
   *
168
   * @return    XdmfArray containing dimensions of this grid.
169
   */
170
  shared_ptr<XdmfArray> getDimensions();
171 172

  /**
173 174
   * Get the dimensions of the grid, the number of points in each
   * direction (const version).
175
   *
176 177 178 179
   * Example of use:
   *
   * C++
   *
180
   * @dontinclude ExampleXdmfCurvilinearGrid.cpp
181 182 183 184 185 186
   * @skipline //#initializationdim3
   * @until //#initializationdim3
   * @skipline //#setDimensions
   * @until //#setDimensions
   * @skipline //#getDimensionsconst
   * @until //#getDimensionsconst
187 188 189
   *
   * Python: Python doesn't have a constant version
   *
190
   * @return    XdmfArray containing the dimensions of this grid.
191
   */
192
  shared_ptr<const XdmfArray> getDimensions() const;
193 194 195 196

  /**
   * Get the geometry associated with this grid.
   *
197 198 199 200
   * Example of use:
   *
   * C++
   *
201
   * @dontinclude ExampleXdmfCurvilinearGrid.cpp
202 203 204 205 206 207
   * @skipline //#initializationdim3
   * @until //#initializationdim3
   * @skipline //#setGeometry
   * @until //#setGeometry
   * @skipline //#getGeometry
   * @until //#getGeometry
208 209 210
   *
   * Python
   *
211
   * @dontinclude XdmfExampleCurvilinearGrid.py
212 213 214 215 216 217 218 219
   * @skipline #//initialization
   * @until #//initialization
   * @skipline #//constructorvector
   * @until #//constructorvector
   * @skipline #//setGeometry
   * @until #//setGeometry
   * @skipline #//getGeometry
   * @until #//getGeometry
220
   *
221
   * @return    The geometry associated with this grid.
222
   */
223
  shared_ptr<XdmfGeometry> getGeometry();
224
  using XdmfGrid::getGeometry;
225

226 227 228 229
  virtual void read();

  virtual void release();

230
  /**
231 232
   * Set the dimensions of the grid, the number of points in each
   * direction.
233
   *
234 235 236 237
   * Example of use:
   *
   * C++
   *
238
   * @dontinclude ExampleXdmfCurvilinearGrid.cpp
239 240 241 242
   * @skipline //#initializationdim3
   * @until //#initializationdim3
   * @skipline //#setDimensions
   * @until //#setDimensions
243 244 245
   *
   * Python
   *
246
   * @dontinclude XdmfExampleCurvilinearGrid.py
247 248 249 250 251 252
   * @skipline #//initialization
   * @until #//initialization
   * @skipline #//constructorvector
   * @until #//constructorvector
   * @skipline #//setDimensions
   * @until #//setDimensions
253
   *
254
   * @param     dimensions      The dimension of the grid.
255
   */
256
  void setDimensions(const shared_ptr<XdmfArray> dimensions);
257 258 259 260

  /**
   * Set the geometry associated with this grid.
   *
261 262 263 264
   * Example of use:
   *
   * C++
   *
265
   * @dontinclude ExampleXdmfCurvilinearGrid.cpp
266 267 268 269
   * @skipline //#initializationdim3
   * @until //#initializationdim3
   * @skipline //#setGeometry
   * @until //#setGeometry
270 271 272
   *
   * Python
   *
273
   * @dontinclude XdmfExampleCurvilinearGrid.py
274 275 276 277 278 279
   * @skipline #//initialization
   * @until #//initialization
   * @skipline #//constructorvector
   * @until #//constructorvector
   * @skipline #//setGeometry
   * @until #//setGeometry
280
   *
281
   * @param     geometry        An XdmfGeometry to associate with this grid.
282
   */
283
  void setGeometry(const shared_ptr<XdmfGeometry> geometry);
284

285 286
  XdmfCurvilinearGrid(XdmfCurvilinearGrid &);

287
protected:
288

289
  XdmfCurvilinearGrid(const shared_ptr<XdmfArray> numPoints);
290 291 292

  void
  populateItem(const std::map<std::string, std::string> & itemProperties,
293
               const std::vector<shared_ptr<XdmfItem> > & childItems,
294 295
               const XdmfCoreReader * const reader);

296
private:
297 298 299 300 301

  /**
   * PIMPL
   */
  class XdmfCurvilinearGridImpl;
302
  XdmfCurvilinearGrid(const XdmfCurvilinearGrid &); // Not implemented.
303 304
  void operator=(const XdmfCurvilinearGrid &);  // Not implemented.

305 306
  void
  copyGrid(shared_ptr<XdmfGrid> sourceGrid);
307 308
};

309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343
#endif

#ifdef __cplusplus
extern "C" {
#endif

// C wrappers go here

struct XDMFCURVILINEARGRID; // Simply as a typedef to ensure correct typing
typedef struct XDMFCURVILINEARGRID XDMFCURVILINEARGRID;

XDMF_EXPORT XDMFCURVILINEARGRID * XdmfCurvilinearGridNew2D(unsigned int xNumPoints,
                                                           unsigned int yNumPoints);

XDMF_EXPORT XDMFCURVILINEARGRID * XdmfCurvilinearGridNew3D(unsigned int xNumPoints,
                                                           unsigned int yNumPoints,
                                                           unsigned int zNumPoints);

XDMF_EXPORT XDMFCURVILINEARGRID * XdmfCurvilinearGridNew(XDMFARRAY * numPoints, int * status);

XDMF_EXPORT XDMFARRAY * XdmfCurvilinearGridGetDimensions(XDMFCURVILINEARGRID * grid, int * status);

XDMF_EXPORT XDMFGEOMETRY * XdmfCurvilinearGridGetGeometry(XDMFCURVILINEARGRID * grid);

XDMF_EXPORT void XdmfCurvilinearGridSetDimensions(XDMFCURVILINEARGRID * grid, XDMFARRAY * dimensions, int passControl, int * status);

XDMF_EXPORT void XdmfCurvilinearGridSetGeometry(XDMFCURVILINEARGRID * grid, XDMFGEOMETRY * geometry, int passControl);

XDMF_ITEM_C_CHILD_DECLARE(XdmfCurvilinearGrid, XDMFCURVILINEARGRID, XDMF)
XDMF_GRID_C_CHILD_DECLARE(XdmfCurvilinearGrid, XDMFCURVILINEARGRID, XDMF)

#ifdef __cplusplus
}
#endif

344
#endif /* XDMFCURVILINEARGRID_HPP_ */