VTK
vtkMPASReader.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkMPASReader.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 /*=========================================================================
16 
17 Copyright (c) 2002-2005 Los Alamos National Laboratory
18 
19 This software and ancillary information known as vtk_ext (and herein
20 called "SOFTWARE") is made available under the terms described below.
21 The SOFTWARE has been approved for release with associated LA_CC
22 Number 99-44, granted by Los Alamos National Laboratory in July 1999.
23 
24 Unless otherwise indicated, this SOFTWARE has been authored by an
25 employee or employees of the University of California, operator of the
26 Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
27 the United States Department of Energy.
28 
29 The United States Government has rights to use, reproduce, and
30 distribute this SOFTWARE. The public may copy, distribute, prepare
31 derivative works and publicly display this SOFTWARE without charge,
32 provided that this Notice and any statement of authorship are
33 reproduced on all copies.
34 
35 Neither the U. S. Government, the University of California, nor the
36 Advanced Computing Laboratory makes any warranty, either express or
37 implied, nor assumes any liability or responsibility for the use of
38 this SOFTWARE.
39 
40 If SOFTWARE is modified to produce derivative works, such modified
41 SOFTWARE should be clearly marked, so as not to confuse it with the
42 version available from Los Alamos National Laboratory.
43 
44 =========================================================================*/
80 #ifndef vtkMPASReader_h
81 #define vtkMPASReader_h
82 
83 #include "vtkIONetCDFModule.h" // For export macro
85 
86 #include <string> // for std::string
87 
88 class vtkCallbackCommand;
90 class vtkDoubleArray;
91 class vtkStdString;
92 class vtkStringArray;
93 
94 class VTKIONETCDF_EXPORT vtkMPASReader : public vtkUnstructuredGridAlgorithm
95 {
96  public:
97  static vtkMPASReader *New();
99  void PrintSelf(ostream& os, vtkIndent indent) override;
100 
102 
105  vtkSetStringMacro(FileName);
106  vtkGetStringMacro(FileName);
108 
110 
113  vtkGetMacro(MaximumCells, int);
115 
117 
120  vtkGetMacro(MaximumPoints, int);
122 
124 
127  virtual int GetNumberOfCellVars();
128  virtual int GetNumberOfPointVars();
130 
132 
138 
140 
146  vtkSetMacro(UseDimensionedArrayNames, bool)
147  vtkGetMacro(UseDimensionedArrayNames, bool)
148  vtkBooleanMacro(UseDimensionedArrayNames, bool)
150 
152 
157  int GetNumberOfPointArrays();
158  const char* GetPointArrayName(int index);
159  int GetPointArrayStatus(const char* name);
160  void SetPointArrayStatus(const char* name, int status);
161  void DisableAllPointArrays();
162  void EnableAllPointArrays();
164 
165  int GetNumberOfCellArrays();
166  const char* GetCellArrayName(int index);
167  int GetCellArrayStatus(const char* name);
168  void SetCellArrayStatus(const char* name, int status);
169  void DisableAllCellArrays();
170  void EnableAllCellArrays();
171 
173 
181  vtkIdType GetNumberOfDimensions();
182  std::string GetDimensionName(int idx);
183  vtkStringArray* GetAllDimensions();
184  int GetDimensionCurrentIndex(const std::string &dim);
185  void SetDimensionCurrentIndex(const std::string &dim, int idx);
186  int GetDimensionSize(const std::string &dim);
188 
190 
194  vtkSetMacro(VerticalDimension, std::string)
195  vtkGetMacro(VerticalDimension, std::string)
197 
199 
203  void SetVerticalLevel(int level);
204  int GetVerticalLevel();
206 
207  vtkGetVector2Macro(VerticalLevelRange, int)
208 
209  vtkSetMacro(LayerThickness, int)
210  vtkGetMacro(LayerThickness, int)
211  vtkGetVector2Macro(LayerThicknessRange, int)
212 
213  void SetCenterLon(int val);
214  vtkGetVector2Macro(CenterLonRange, int)
215 
216  vtkSetMacro(ProjectLatLon, bool)
217  vtkGetMacro(ProjectLatLon, bool)
218 
219  vtkSetMacro(IsAtmosphere, bool)
220  vtkGetMacro(IsAtmosphere, bool)
221 
222  vtkSetMacro(IsZeroCentered, bool)
223  vtkGetMacro(IsZeroCentered, bool)
224 
225  vtkSetMacro(ShowMultilayerView, bool)
226  vtkGetMacro(ShowMultilayerView, bool)
227 
231  static int CanReadFile(const char *filename);
232 
233  vtkMTimeType GetMTime() override;
234 
235  protected:
237  ~vtkMPASReader() override;
238  void ReleaseNcData();
239  void DestroyData();
240 
241  char *FileName; // First field part file giving path
242 
243  size_t NumberOfTimeSteps; // Temporal domain
244  double DTime; // The current time
245 
246  // Observer to modify this object when array selections are modified
247  vtkCallbackCommand* SelectionObserver;
248 
249  int RequestData(vtkInformation *, vtkInformationVector **,
250  vtkInformationVector *) override;
251  int RequestInformation(vtkInformation *, vtkInformationVector **,
252  vtkInformationVector *) override;
253 
254 
255  static void SelectionCallback(vtkObject* caller, unsigned long eid,
256  void* clientdata, void* calldata);
257 
258  // Selected field of interest
259  vtkDataArraySelection* PointDataArraySelection;
260  vtkDataArraySelection* CellDataArraySelection;
261 
266  void UpdateDimensions(bool force = false);
267 
268  std::string VerticalDimension;
269  int VerticalLevelRange[2];
270 
271  int LayerThickness;
272  int LayerThicknessRange[2];
273 
274  int CenterLon;
275  int CenterLonRange[2];
276 
278  {
281  Planar
282  };
283 
285 
286  bool ProjectLatLon; // User option
287  bool OnASphere; // Data file attribute
291 
293  bool DoBugFix;
294  double CenterRad;
295 
297 
298  // geometry
303  size_t PointOffset;
305  size_t CurrentExtraPoint; // current extra point
306  size_t CurrentExtraCell; // current extra cell
307  double* PointX; // x coord of point
308  double* PointY; // y coord of point
309  double* PointZ; // z coord of point
310  size_t ModNumPoints;
311  size_t ModNumCells;
312  int* OrigConnections; // original connections
313  int* ModConnections; // modified connections
314  size_t* CellMap; // maps from added cell to original cell #
315  size_t* PointMap; // maps from added point to original point #
317  int MaximumCells; // max cells
318  int MaximumPoints; // max points
319 
320  void SetDefaults();
321  int GetNcDims();
322  int GetNcAtts();
323  int CheckParams();
324  int GetNcVars(const char* cellDimName, const char* pointDimName);
330  void ShiftLonData();
331  int AddMirrorPoint(int index, double dividerX, double offset);
332  void FixPoints();
334  void OutputPoints();
335  void OutputCells();
336  unsigned char GetCellType();
337 
342 
352 
353  private:
354  vtkMPASReader(const vtkMPASReader&) = delete;
355  void operator=(const vtkMPASReader&) = delete;
356 
357  class Internal;
358  Internal *Internals;
359 };
360 
361 #endif
vtkMPASReader::DoBugFix
bool DoBugFix
Definition: vtkMPASReader.h:293
vtkMPASReader::MaximumPoints
int MaximumPoints
Definition: vtkMPASReader.h:318
vtkMPASReader::New
static vtkMPASReader * New()
vtkMPASReader::LookupPointDataArray
vtkDataArray * LookupPointDataArray(int varIdx)
vtkMPASReader::EliminateXWrap
int EliminateXWrap()
vtkMPASReader::IsAtmosphere
bool IsAtmosphere
Definition: vtkMPASReader.h:288
vtkMPASReader::CenterRad
double CenterRad
Definition: vtkMPASReader.h:294
vtkIdType
int vtkIdType
Definition: vtkType.h:347
vtkMPASReader::OutputCells
void OutputCells()
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:42
vtkMPASReader::ModConnections
int * ModConnections
Definition: vtkMPASReader.h:313
vtkMPASReader::GetNumberOfPointVars
virtual int GetNumberOfPointVars()
vtkMPASReader::PointY
double * PointY
Definition: vtkMPASReader.h:308
vtkMPASReader::AllocProjectedGeometry
int AllocProjectedGeometry()
vtkMPASReader::OutputPoints
void OutputPoints()
vtkMPASReader::CurrentExtraPoint
size_t CurrentExtraPoint
Definition: vtkMPASReader.h:305
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:60
vtkMPASReader::OnASphere
bool OnASphere
Definition: vtkMPASReader.h:287
vtkMPASReader::GetNumberOfCellVars
virtual int GetNumberOfCellVars()
Get the number of data variables at the cell centers and points.
vtkMPASReader::SetDefaults
void SetDefaults()
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:55
vtkMPASReader::LoadPointVarData
vtkDataArray * LoadPointVarData(int variable)
vtkMPASReader::ReadAndOutputGrid
int ReadAndOutputGrid()
vtkMPASReader::MaximumLevelPoint
int * MaximumLevelPoint
Definition: vtkMPASReader.h:316
vtkMPASReader::LookupCellDataArray
vtkDataArray * LookupCellDataArray(int varIdx)
vtkMPASReader::AddMirrorPoint
int AddMirrorPoint(int index, double dividerX, double offset)
vtkMPASReader::PointsPerCell
size_t PointsPerCell
Definition: vtkMPASReader.h:304
vtkMPASReader::UseDimensionedArrayNames
bool UseDimensionedArrayNames
Definition: vtkMPASReader.h:296
vtkMPASReader::Spherical
@ Spherical
Definition: vtkMPASReader.h:279
vtkDataArraySelection
Store on/off settings for data arrays for a vtkSource.
Definition: vtkDataArraySelection.h:38
vtkMPASReader::CellOffset
int CellOffset
Definition: vtkMPASReader.h:302
vtkMPASReader::IncludeTopography
bool IncludeTopography
Definition: vtkMPASReader.h:292
vtkMPASReader::OrigConnections
int * OrigConnections
Definition: vtkMPASReader.h:312
vtkX3D::level
@ level
Definition: vtkX3D.h:395
vtkMPASReader::NumberOfCells
size_t NumberOfCells
Definition: vtkMPASReader.h:300
vtkMPASReader::GetNcAtts
int GetNcAtts()
vtkMPASReader
Read an MPAS netCDF file.
Definition: vtkMPASReader.h:95
vtkMPASReader::NumberOfPoints
size_t NumberOfPoints
Definition: vtkMPASReader.h:301
vtkMPASReader::LoadTimeFieldData
void LoadTimeFieldData(vtkUnstructuredGrid *dataset)
Update the "Time" vtkStringArray in dataset's FieldData to contain the xtime string for the current t...
vtkMPASReader::LoadCellVarData
vtkDataArray * LoadCellVarData(int variable)
vtkX3D::offset
@ offset
Definition: vtkX3D.h:438
vtkMPASReader::PointX
double * PointX
Definition: vtkMPASReader.h:307
vtkMPASReader::PointZ
double * PointZ
Definition: vtkMPASReader.h:309
vtkMPASReader::CurrentExtraCell
size_t CurrentExtraCell
Definition: vtkMPASReader.h:306
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:40
vtkMPASReader::AllocPlanarGeometry
int AllocPlanarGeometry()
vtkMPASReader::AllocSphericalGeometry
int AllocSphericalGeometry()
vtkMPASReader::MaximumCells
int MaximumCells
Definition: vtkMPASReader.h:317
vtkMPASReader::GetNcDims
int GetNcDims()
vtkMPASReader::MaximumNVertLevels
size_t MaximumNVertLevels
Definition: vtkMPASReader.h:299
vtkMPASReader::CellMap
size_t * CellMap
Definition: vtkMPASReader.h:314
vtkX3D::name
@ name
Definition: vtkX3D.h:219
vtkMPASReader::ShiftLonData
void ShiftLonData()
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:87
vtkMPASReader::PointMap
size_t * PointMap
Definition: vtkMPASReader.h:315
vtkMPASReader::GeometryType
GeometryType
Definition: vtkMPASReader.h:278
vtkMPASReader::GetOutput
vtkUnstructuredGrid * GetOutput(int index)
vtkCallbackCommand
supports function callbacks
Definition: vtkCallbackCommand.h:51
vtkMPASReader::GetCellType
unsigned char GetCellType()
vtkUnstructuredGridAlgorithm.h
vtkMPASReader::ModNumPoints
size_t ModNumPoints
Definition: vtkMPASReader.h:310
vtkStringArray
a vtkAbstractArray subclass for strings
Definition: vtkStringArray.h:43
vtkMPASReader::GetOutput
vtkUnstructuredGrid * GetOutput()
Get the reader's output.
vtkUnstructuredGridAlgorithm
Superclass for algorithms that produce only unstructured grid as output.
Definition: vtkUnstructuredGridAlgorithm.h:41
vtkDoubleArray
dynamic, self-adjusting array of double
Definition: vtkDoubleArray.h:42
vtkUnstructuredGrid
dataset represents arbitrary combinations of all possible cell types
Definition: vtkUnstructuredGrid.h:89
vtkMPASReader::ModNumCells
size_t ModNumCells
Definition: vtkMPASReader.h:311
vtkMPASReader::CheckParams
int CheckParams()
vtkMPASReader::ShowMultilayerView
bool ShowMultilayerView
Definition: vtkMPASReader.h:290
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:41
vtkMPASReader::GetNcVars
int GetNcVars(const char *cellDimName, const char *pointDimName)
vtkMPASReader::BuildVarArrays
int BuildVarArrays()
vtkX3D::index
@ index
Definition: vtkX3D.h:246
vtkMPASReader::Projected
@ Projected
Definition: vtkMPASReader.h:280
vtkMPASReader::FixPoints
void FixPoints()
vtkMPASReader::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkMPASReader::ProjectLatLon
bool ProjectLatLon
Definition: vtkMPASReader.h:286
vtkMPASReader::IsZeroCentered
bool IsZeroCentered
Definition: vtkMPASReader.h:289
vtkMPASReader::Geometry
GeometryType Geometry
Definition: vtkMPASReader.h:284
vtkMPASReader::PointOffset
size_t PointOffset
Definition: vtkMPASReader.h:303
vtkMTimeType
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:302