XdmfRegularGrid.hpp 15.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 : XdmfRegularGrid.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 XDMFREGULARGRID_HPP_
#define XDMFREGULARGRID_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 regular grid consists of congruent points arranged
 * regularly in space.
39
 *
40 41 42
 * XdmfRegularGrid represents a regular mesh of congruent points
 * arranged in space. In order to define a regular grid, three sets of
 * terms need to be supplied:
43 44 45 46 47
 *
 * Brick Size (Dx, Dy, (Dz)) - Size of an individual brick.
 * Dimensions (X, Y, (Z)) - Number of points in X, Y, and Z directions
 * Origin Location (X, Y, (Z)) - Location of the origin of the mesh in space.
 */
48
class XDMF_EXPORT XdmfRegularGrid : public XdmfGrid {
49

50
public:
51 52 53 54

  /**
   * Create a new structured grid (Two dimensional).
   *
55 56 57 58
   * Example of use:
   *
   * C++
   *
59
   * @dontinclude ExampleXdmfRegularGrid.cpp
60 61 62 63
   * @skipline //#initvalue
   * @until //#initvalue
   * @skipline //#initialization2
   * @until //#initialization2
64 65 66
   *
   * Python
   *
67
   * @dontinclude XdmfExampleRegularGrid.py
68 69 70 71
   * @skipline #//initvalue
   * @until #//initvalue
   * @skipline #//initialization2
   * @until #//initialization2
72
   *
73 74 75 76 77 78 79 80
   * @param     xBrickSize      The size of the brick in the x direction.
   * @param     yBrickSize      The size of the brick in the y direction.
   * @param     xNumPoints      The number of points in the x direction.
   * @param     yNumPoints      The number of points in the y direction.
   * @param     xOrigin         The x coordinate of the origin.
   * @param     yOrigin         The y coordinate of the origin.
   *
   * @return                    Constructed structured grid.
81
   */
82 83 84 85 86 87
  static shared_ptr<XdmfRegularGrid> New(const double xBrickSize,
                                         const double yBrickSize,
                                         const unsigned int xNumPoints,
                                         const unsigned int yNumPoints,
                                         const double xOrigin,
                                         const double yOrigin);
88 89 90 91

  /**
   * Create a new structured grid (Three dimensional).
   *
92 93 94 95
   * Example of use:
   *
   * C++
   *
96
   * @dontinclude ExampleXdmfRegularGrid.cpp
97 98 99 100
   * @skipline //#initvalue
   * @until //#initvalue
   * @skipline //#initialization3
   * @until //#initialization3
101 102 103
   *
   * Python
   *
104
   * @dontinclude XdmfExampleRegularGrid.py
105 106 107 108
   * @skipline #//initvalue
   * @until #//initvalue
   * @skipline #//initialization3
   * @until #//initialization3
109
   *
110 111 112 113 114 115 116 117 118 119 120
   * @param     xBrickSize      The size of the brick in the x direction.
   * @param     yBrickSize      The size of the brick in the y direction.
   * @param     zBrickSize      The size of the brick in the z direction.
   * @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.
   * @param     xOrigin         The x coordinate of the origin.
   * @param     yOrigin         The y coordinate of the origin.
   * @param     zOrigin         The z coordinate of the origin.
   *
   * @return                    Constructed structured grid.
121
   */
122 123 124 125 126 127 128 129 130
  static shared_ptr<XdmfRegularGrid> New(const double xBrickSize,
                                         const double yBrickSize,
                                         const double zBrickSize,
                                         const unsigned int xNumPoints,
                                         const unsigned int yNumPoints,
                                         const unsigned int zNumPoints,
                                         const double xOrigin,
                                         const double yOrigin,
                                         const double zOrigin);
131 132 133 134

  /**
   * Create a new structured grid (N dimensional).
   *
135 136 137 138
   * Example of use:
   *
   * C++
   *
139
   * @dontinclude ExampleXdmfRegularGrid.cpp
140 141
   * @skipline //#initializationvector
   * @until //#initializationvector
142 143 144
   *
   * Python
   *
145
   * @dontinclude XdmfExampleRegularGrid.py
146 147
   * @skipline #//initializationvector
   * @until #//initializationvector
148
   *
149 150 151
   * @param     brickSize       The size of the brick in each direction.
   * @param     numPoints       The number of points in each direction.
   * @param     origin          The coordinates of the origin.
152
   *
153
   * @return                    Constructed structured grid.
154
   */
155 156 157 158
  static shared_ptr<XdmfRegularGrid>
  New(const shared_ptr<XdmfArray> brickSize,
      const shared_ptr<XdmfArray> numPoints,
      const shared_ptr<XdmfArray> origin);
159 160 161

  virtual ~XdmfRegularGrid();

162
  LOKI_DEFINE_VISITABLE(XdmfRegularGrid, XdmfGrid)
163 164 165
  static const std::string ItemTag;

  /**
166
   * Get the size of the bricks composing the grid.
167
   *
168 169 170 171
   * Example of use:
   *
   * C++
   *
172
   * @dontinclude ExampleXdmfRegularGrid.cpp
173 174 175 176 177 178
   * @skipline //#initvalue
   * @until //#initvalue
   * @skipline //#initialization2
   * @until //#initialization2
   * @skipline //#getBrickSize
   * @until //#getBrickSize
179 180 181
   *
   * Python
   *
182
   * @dontinclude XdmfExampleRegularGrid.py
183 184 185 186 187 188
   * @skipline #//initvalue
   * @until #//initvalue
   * @skipline #//initialization2
   * @until #//initialization2
   * @skipline #//getBrickSize
   * @until #//getBrickSize
189
   *
190
   * @return    XdmfArray containing brick sizes for this grid.
191
   */
192
  shared_ptr<XdmfArray> getBrickSize();
193 194

  /**
195
   * Get the size of the bricks composing the grid (const version).
196
   *
197 198 199 200
   * Example of use:
   *
   * C++
   *
201
   * @dontinclude ExampleXdmfRegularGrid.cpp
202 203 204 205 206 207
   * @skipline //#initvalue
   * @until //#initvalue
   * @skipline //#initialization2
   * @until //#initialization2
   * @skipline //#getBrickSizeconst
   * @until //#getBrickSizeconst
208 209 210
   *
   * Python: Does not support a constant version of this function
   *
211
   * @return    XdmfArray containing brick sizes for this grid.
212
   */
213
  shared_ptr<const XdmfArray> getBrickSize() const;
214 215

  /**
216 217
   * Get the dimensions of the grid, the number of points in each
   * direction.
218
   *
219 220 221 222
   * Example of use:
   *
   * C++
   *
223
   * @dontinclude ExampleXdmfRegularGrid.cpp
224 225 226 227 228 229
   * @skipline //#initvalue
   * @until //#initvalue
   * @skipline //#initialization2
   * @until //#initialization2
   * @skipline //#getDimensions
   * @until //#getDimensions
230 231 232
   *
   * Python
   *
233
   * @dontinclude XdmfExampleRegularGrid.py
234 235 236 237 238 239
   * @skipline #//initvalue
   * @until #//initvalue
   * @skipline #//initialization2
   * @until #//initialization2
   * @skipline #//getDimensions
   * @until #//getDimensions
240
   *
241
   * @return    XdmfArray containing dimensions of this grid.
242
   */
243
  shared_ptr<XdmfArray> getDimensions();
244 245

  /**
246 247
   * Get the dimensions of the grid, the number of points in each
   * direction (const version).
248
   *
249 250 251 252
   * Example of use:
   *
   * C++
   *
253
   * @dontinclude ExampleXdmfRegularGrid.cpp
254 255 256 257 258 259
   * @skipline //#initvalue
   * @until //#initvalue
   * @skipline //#initialization2
   * @until //#initialization2
   * @skipline //#getDimensionsconst
   * @until //#getDimensionsconst
260 261 262
   *
   * Python: Does not support a constant version of this function
   *
263
   * @return    XdmfArray containing the dimensions of this grid.
264
   */
265
  shared_ptr<const XdmfArray> getDimensions() const;
266 267 268 269

  /**
   * Get the location of the origin of the grid.
   *
270 271 272 273
   * Example of use:
   *
   * C++
   *
274
   * @dontinclude ExampleXdmfRegularGrid.cpp
275 276 277 278 279 280
   * @skipline //#initvalue
   * @until //#initvalue
   * @skipline //#initialization2
   * @until //#initialization2
   * @skipline //#getOrigin
   * @until //#getOrigin
281 282 283
   *
   * Python
   *
284
   * @dontinclude XdmfExampleRegularGrid.py
285 286 287 288 289 290
   * @skipline #//initvalue
   * @until #//initvalue
   * @skipline #//initialization2
   * @until #//initialization2
   * @skipline #//getOrigin
   * @until #//getOrigin
291
   *
292 293
   * @return    XdmfArray containing the location of the origin of the
   *            grid.
294
   */
295
  shared_ptr<XdmfArray> getOrigin();
296 297 298 299

  /**
   * Get the location of the origin of the grid.
   *
300 301 302 303
   * Example of use:
   *
   * C++
   *
304
   * @dontinclude ExampleXdmfRegularGrid.cpp
305 306 307 308 309 310
   * @skipline //#initvalue
   * @until //#initvalue
   * @skipline //#initialization2
   * @until //#initialization2
   * @skipline //#getOriginconst
   * @until //#getOriginconst
311 312 313
   *
   * Python: Does not support a constant version of this function
   *
314 315
   * @return    XdmfArray containing the location of the origin of the
   *            grid (const version).
316
   */
317
  shared_ptr<const XdmfArray> getOrigin() const;
318

319 320 321 322
  virtual void read();

  virtual void release();

323 324 325
  /**
   * Set the size of the points composing the grid.
   *
326 327 328 329
   * Example of use:
   *
   * C++
   *
330
   * @dontinclude ExampleXdmfRegularGrid.cpp
331 332 333 334
   * @skipline //#initializationvector
   * @until //#initializationvector
   * @skipline //#setBrickSize
   * @until //#setBrickSize
335 336 337
   *
   * Python
   *
338
   * @dontinclude XdmfExampleRegularGrid.py
339 340 341 342
   * @skipline #//initializationvector
   * @until #//initializationvector
   * @skipline #//setBrickSize
   * @until #//setBrickSize
343
   *
344 345 346
   * @param     brickSize       The sizes of the points composing the mesh. This
   *                            should have the same number of terms as the
   *                            dimensionality of the mesh.
347
   */
348
  void setBrickSize(const shared_ptr<XdmfArray> brickSize);
349 350

  /**
351 352
   * Set the dimensions of the grid, the number of points in each
   * direction.
353
   *
354 355 356 357
   * Example of use:
   *
   * C++
   *
358
   * @dontinclude ExampleXdmfRegularGrid.cpp
359 360 361 362
   * @skipline //#initializationvector
   * @until //#initializationvector
   * @skipline //#setDimensions
   * @until //#setDimensions
363 364 365
   *
   * Python
   *
366
   * @dontinclude XdmfExampleRegularGrid.py
367 368 369 370
   * @skipline #//initializationvector
   * @until #//initializationvector
   * @skipline #//setDimensions
   * @until #//setDimensions
371
   *
372
   * @param     dimensions      The dimension of the grid.
373
   */
374
  void setDimensions(const shared_ptr<XdmfArray> dimensions);
375 376 377 378

  /**
   * Set the origin of the grid.
   *
379 380 381 382
   * Example of use:
   *
   * C++
   *
383
   * @dontinclude ExampleXdmfRegularGrid.cpp
384 385 386 387
   * @skipline //#initializationvector
   * @until //#initializationvector
   * @skipline //#setOrigin
   * @until //#setOrigin
388 389 390
   *
   * Python
   *
391
   * @dontinclude XdmfExampleRegularGrid.py
392 393 394 395
   * @skipline #//initializationvector
   * @until #//initializationvector
   * @skipline #//setOrigin
   * @until #//setOrigin
396
   *
397 398 399
   * @param     origin  Location of the origin of the grid.  This should
   *                    have the same number of terms as the dimensionality
   *                    of the mesh.
400
   */
401
  void setOrigin(const shared_ptr<XdmfArray> origin);
402

403 404
  XdmfRegularGrid(XdmfRegularGrid &);

405
protected:
406

407 408 409
  XdmfRegularGrid(const shared_ptr<XdmfArray> brickSize,
                  const shared_ptr<XdmfArray> numPoints,
                  const shared_ptr<XdmfArray> origin);
410

411 412 413
  virtual void
  copyGrid(shared_ptr<XdmfGrid> sourceGrid);

414
  void populateItem(const std::map<std::string, std::string> & itemProperties,
415
                    const std::vector<shared_ptr<XdmfItem> > & childItems,
416 417
                    const XdmfCoreReader * const reader);

418
private:
419 420 421 422 423 424 425 426 427

  /**
   * PIMPL
   */
  class XdmfRegularGridImpl;

  XdmfRegularGrid(const XdmfRegularGrid &);  // Not implemented.
  void operator=(const XdmfRegularGrid &);  // Not implemented.

428 429
};

430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481
#endif

#ifdef __cplusplus
extern "C" {
#endif

// C wrappers go here

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

XDMF_EXPORT XDMFREGULARGRID * XdmfRegularGridNew2D(double xBrickSize,
                                                   double yBrickSize,
                                                   unsigned int xNumPoints,
                                                   unsigned int yNumPoints,
                                                   double xOrigin,
                                                   double yOrigin);

XDMF_EXPORT XDMFREGULARGRID * XdmfRegularGridNew3D(double xBrickSize,
                                                   double yBrickSize,
                                                   double zBrickSize,
                                                   unsigned int xNumPoints,
                                                   unsigned int yNumPoints,
                                                   unsigned int zNumPoints,
                                                   double xOrigin,
                                                   double yOrigin,
                                                   double zOrigin);

XDMF_EXPORT XDMFREGULARGRID * XdmfRegularGridNew(XDMFARRAY * brickSize,
                                                 XDMFARRAY * numPoints,
                                                 XDMFARRAY * origin,
                                                 int passControl);

XDMF_EXPORT XDMFARRAY * XdmfRegularGridGetBrickSize(XDMFREGULARGRID * grid, int * status);

XDMF_EXPORT XDMFARRAY * XdmfRegularGridGetDimensions(XDMFREGULARGRID * grid, int * status);

XDMF_EXPORT XDMFARRAY * XdmfRegularGridGetOrigin(XDMFREGULARGRID * grid, int * status);

XDMF_EXPORT void XdmfRegularGridSetBrickSize(XDMFREGULARGRID * grid, XDMFARRAY * brickSize, int passControl, int * status);

XDMF_EXPORT void XdmfRegularGridSetDimensions(XDMFREGULARGRID * grid, XDMFARRAY * dimensions, int passControl, int * status);

XDMF_EXPORT void XdmfRegularGridSetOrigin(XDMFREGULARGRID * grid, XDMFARRAY * origin, int passControl, int * status);

XDMF_ITEM_C_CHILD_DECLARE(XdmfRegularGrid, XDMFREGULARGRID, XDMF)
XDMF_GRID_C_CHILD_DECLARE(XdmfRegularGrid, XDMFREGULARGRID, XDMF)

#ifdef __cplusplus
}
#endif

482
#endif /* XDMFREGULARGRID_HPP_ */