VTK
vtkWindBladeReader.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkWindBladeReader.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 =========================================================================*/
33 #ifndef vtkWindBladeReader_h
34 #define vtkWindBladeReader_h
35 
36 #include "vtkIOGeometryModule.h" // For export macro
38 
40 class vtkCallbackCommand;
41 class vtkStringArray;
42 class vtkFloatArray;
43 class vtkIntArray;
44 class vtkPoints;
45 class vtkStructuredGrid;
47 class vtkMultiBlockDataSetAglorithm;
49 class WindBladeReaderInternal;
50 
51 class VTKIOGEOMETRY_EXPORT vtkWindBladeReader : public vtkStructuredGridAlgorithm
52 {
53 public:
56  void PrintSelf(ostream& os, vtkIndent indent);
57 
58  vtkSetStringMacro(Filename);
59  vtkGetStringMacro(Filename);
60 
61  vtkSetVector6Macro(WholeExtent, int);
62  vtkGetVector6Macro(WholeExtent, int);
63 
64  vtkSetVector6Macro(SubExtent, int);
65  vtkGetVector6Macro(SubExtent, int);
66 
70  vtkStructuredGrid *GetFieldOutput(); // Output port 0
71  vtkUnstructuredGrid *GetBladeOutput(); // Output port 1
72  vtkStructuredGrid *GetGroundOutput(); // Output port 2
73 
75 
81  const char* GetPointArrayName(int index);
83 
84  int GetPointArrayStatus(const char* name);
85  void SetPointArrayStatus(const char* name, int status);
86 
89 
90 protected:
91 
92  static float DRY_AIR_CONSTANT;
93  static int NUM_PART_SIDES; // Blade parts rhombus
94  const static int NUM_BASE_SIDES; // Base pyramid
95  const static int LINE_SIZE;
96  static int DIMENSION;
97  static int BYTES_PER_DATA;
98  static int SCALAR;
99  static int VECTOR;
100  static int FLOAT;
101  static int INTEGER;
102 
105 
106  char* Filename; // Base file name
107 
108  // Extent information
109  vtkIdType NumberOfTuples; // Number of tuples in subextent
110 
111  // Field
112  int WholeExtent[6]; // Extents of entire grid
113  int SubExtent[6]; // Processor grid extent
114  int UpdateExtent[6];
115  int Dimension[3]; // Size of entire grid
116  int SubDimension[3]; // Size of processor grid
117 
118  // Ground
119  int GExtent[6]; // Extents of ground grid
120  int GSubExtent[6]; // Processor grid extent
121  int GDimension[3]; // Size of ground grid
122 
123  float Step[3]; // Spacing delta
124  int UseTopographyFile; // Topography or flat
125  vtkStdString TopographyFile; // Name of topography data file
126  vtkPoints* Points; // Structured grid geometry
127  vtkPoints* GPoints; // Structured grid geometry for ground
128  vtkPoints* BPoints; // Unstructured grid geometry
129  float Compression; // Stretching at Z surface [0,1]
130  float Fit; // Cubic or quadratic [0,1]
131 
132  // Rectilinear coordinate spacing
137  float ZMinValue;
138 
139  // Variable information
140  int NumberOfFileVariables; // Number of variables in data file
141  int NumberOfDerivedVariables; // Number of variables derived from file
142  int NumberOfVariables; // Number of variables to display
143 
144  vtkStringArray* DivideVariables; // Divide data by density at read
145  vtkStdString* VariableName; // Names of each variable
146  int* VariableStruct; // SCALAR or VECTOR
147  int* VariableCompSize; // Number of components
148  int* VariableBasicType; // FLOAT or INTEGER
149  int* VariableByteCount; // Number of bytes in basic type
150  long int* VariableOffset; // Offset into data file
151  size_t BlockSize; // Size of every data block
152  size_t GBlockSize; // Size of every data block
153 
154  vtkFloatArray** Data; // Actual data arrays
155  vtkStdString RootDirectory; // Directory where the .wind file is.
156  vtkStdString DataDirectory; // Location of actual data
157  vtkStdString DataBaseName; // Base name of files
158 
159  // Time step information
160  int NumberOfTimeSteps; // Number of time steps
161  int TimeStepFirst; // First time step
162  int TimeStepLast; // Last time step
163  int TimeStepDelta; // Delta on time steps
164  double* TimeSteps; // Actual times available for request
165 
166  // Turbine information
167  int NumberOfBladeTowers; // Number of turbines
168  int NumberOfBladePoints; // Points for drawing parts of blades
169  int NumberOfBladeCells; // Turbines * Blades * Parts
170 
171  vtkFloatArray* XPosition; // Location of tower
172  vtkFloatArray* YPosition; // Location of tower
173  vtkFloatArray* HubHeight; // Height of tower
174  vtkFloatArray* AngularVeloc; // Angular Velocity
175  vtkFloatArray* BladeLength; // Blade length
176  vtkIntArray* BladeCount; // Number of blades per tower
177 
178  int UseTurbineFile; // Turbine data available
179  vtkStdString TurbineDirectory; // Turbine unstructured data
180  vtkStdString TurbineTowerName; // Name of tower file
181  vtkStdString TurbineBladeName; // Base name of time series blade data
182  int NumberOfLinesToSkip; // New format has lines that need to be skipped in
183  // blade files
184 
185  // Selected field of interest
187 
188  // Observer to modify this object when array selections are modified
190 
191 
192  // Read the header file describing the dataset
193  virtual bool ReadGlobalData();
194  void ReadDataVariables(istream& inStr);
195  virtual bool FindVariableOffsets();
196 
197  // Turbine methods
198  virtual void SetupBladeData();
199  virtual void LoadBladeData(int timeStep);
200 
201  // Calculate the coordinates
205  virtual void CreateZTopography(float* zdata);
206  float GDeform(float sigma, float sigmaMax, int flag);
207  void Spline(float* x, float* y, int n, float yp1, float ypn, float* y2);
208  void Splint(float* xa, float* ya, float* y2a, int n, float x, float* y, int);
209 
210  // Load a variable from data file
211  virtual void LoadVariableData(int var);
212 
213  // Variables which must be divided by density after being read from file
214  void DivideByDensity(const char* name);
215 
216  // Calculate derived variables
217  virtual void CalculatePressure(int pres, int prespre, int tempg, int density);
218  virtual void CalculateVorticity(int vort, int uvw, int density);
219 
220  // convenience functions shared between serial and parallel version
222  std::ostringstream &fileName,
227  void InitPressureData(int pressure, int prespre,
228  float *&pressureData, float *&prespreData);
229  void SetUpPressureData(float* pressureData, float* prespreData,
230  const float* tempgData, const float* densityData);
231  void SetUpVorticityData(float* uData, float* vData, const float *densityData,
232  float* vortData);
233  void InitVariableData(int var, int &numberOfComponents, float *&varData,
234  int &planeSize, int &rowSize);
235  bool SetUpGlobalData(const std::string &fileName, std::stringstream& inStr);
236  void ProcessZCoords(float *topoData, float *zValues);
237  void ReadBladeHeader(const std::string &fileName, std::stringstream &inStr,
238  int &numColumns);
239  void ReadBladeData(std::stringstream &inStr);
240 
243  virtual int RequestData(
244  vtkInformation* request,
245  vtkInformationVector** inputVector,
246  vtkInformationVector* outputVector);
247 
248  static void SelectionCallback(
249  vtkObject *caller,
250  unsigned long eid,
251  void *clientdata,
252  void *calldata);
253 
254  static void EventCallback(
255  vtkObject* caller,
256  unsigned long eid,
257  void* clientdata, void* calldata);
258 
260 
268  vtkInformationVector **inInfo,
269  vtkInformationVector *outInfo);
270 
271 private:
272  WindBladeReaderInternal * Internal;
273 
274  vtkWindBladeReader(const vtkWindBladeReader&) VTK_DELETE_FUNCTION;
275  void operator=(const vtkWindBladeReader&) VTK_DELETE_FUNCTION;
276 };
277 #endif
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:40
vtkWindBladeReader::SelectionCallback
static void SelectionCallback(vtkObject *caller, unsigned long eid, void *clientdata, void *calldata)
vtkWindBladeReader::FindVariableOffsets
virtual bool FindVariableOffsets()
vtkWindBladeReader::NUM_BASE_SIDES
static const int NUM_BASE_SIDES
Definition: vtkWindBladeReader.h:94
vtkWindBladeReader
class for reading WindBlade data files
Definition: vtkWindBladeReader.h:52
vtkStructuredGridAlgorithm.h
vtkWindBladeReader::YSpacing
vtkFloatArray * YSpacing
Definition: vtkWindBladeReader.h:134
vtkWindBladeReader::ReadBladeData
void ReadBladeData(std::stringstream &inStr)
vtkWindBladeReader::TimeSteps
double * TimeSteps
Definition: vtkWindBladeReader.h:164
vtkWindBladeReader::InitPressureData
void InitPressureData(int pressure, int prespre, float *&pressureData, float *&prespreData)
vtkWindBladeReader::Splint
void Splint(float *xa, float *ya, float *y2a, int n, float x, float *y, int)
vtkWindBladeReader::FillOutputPortInformation
virtual int FillOutputPortInformation(int, vtkInformation *)
Fill the output port information objects for this algorithm.
vtkWindBladeReader::LINE_SIZE
static const int LINE_SIZE
Definition: vtkWindBladeReader.h:95
vtkIdType
int vtkIdType
Definition: vtkType.h:287
vtkWindBladeReader::BYTES_PER_DATA
static int BYTES_PER_DATA
Definition: vtkWindBladeReader.h:97
vtkStructuredGridAlgorithm
Superclass for algorithms that produce only structured grid as output.
Definition: vtkStructuredGridAlgorithm.h:42
vtkFloatArray
dynamic, self-adjusting array of float
Definition: vtkFloatArray.h:42
vtkWindBladeReader::ReadGlobalData
virtual bool ReadGlobalData()
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:42
vtkWindBladeReader::UseTopographyFile
int UseTopographyFile
Definition: vtkWindBladeReader.h:124
vtkWindBladeReader::LoadBladeData
virtual void LoadBladeData(int timeStep)
vtkWindBladeReader::ZTopographicValues
float * ZTopographicValues
Definition: vtkWindBladeReader.h:136
vtkWindBladeReader::Data
vtkFloatArray ** Data
Definition: vtkWindBladeReader.h:154
vtkWindBladeReader::CreateCoordinates
void CreateCoordinates()
vtkStructuredGrid
topologically regular array of data
Definition: vtkStructuredGrid.h:64
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:60
vtkWindBladeReader::GetPointArrayStatus
int GetPointArrayStatus(const char *name)
vtkWindBladeReader::SetUpGroundData
void SetUpGroundData(vtkInformationVector *outVector)
vtkWindBladeReader::XPosition
vtkFloatArray * XPosition
Definition: vtkWindBladeReader.h:171
vtkWindBladeReader::DRY_AIR_CONSTANT
static float DRY_AIR_CONSTANT
Definition: vtkWindBladeReader.h:92
vtkWindBladeReader::DIMENSION
static int DIMENSION
Definition: vtkWindBladeReader.h:96
vtkWindBladeReader::DisableAllPointArrays
void DisableAllPointArrays()
vtkWindBladeReader::TurbineBladeName
vtkStdString TurbineBladeName
Definition: vtkWindBladeReader.h:181
vtkWindBladeReader::ZMinValue
float ZMinValue
Definition: vtkWindBladeReader.h:137
vtkWindBladeReader::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
vtkWindBladeReader::BPoints
vtkPoints * BPoints
Definition: vtkWindBladeReader.h:128
vtkWindBladeReader::SetUpVorticityData
void SetUpVorticityData(float *uData, float *vData, const float *densityData, float *vortData)
vtkWindBladeReader::DataBaseName
vtkStdString DataBaseName
Definition: vtkWindBladeReader.h:157
vtkWindBladeReader::Filename
char * Filename
Definition: vtkWindBladeReader.h:106
vtkWindBladeReader::InitBladeData
void InitBladeData(vtkInformationVector *outVector)
vtkWindBladeReader::RequestInformation
virtual int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
vtkWindBladeReader::VariableName
vtkStdString * VariableName
Definition: vtkWindBladeReader.h:145
vtkWindBladeReader::FLOAT
static int FLOAT
Definition: vtkWindBladeReader.h:100
vtkWindBladeReader::EnableAllPointArrays
void EnableAllPointArrays()
vtkWindBladeReader::ZSpacing
vtkFloatArray * ZSpacing
Definition: vtkWindBladeReader.h:135
vtkWindBladeReader::TimeStepDelta
int TimeStepDelta
Definition: vtkWindBladeReader.h:163
vtkWindBladeReader::TopographyFile
vtkStdString TopographyFile
Definition: vtkWindBladeReader.h:125
vtkWindBladeReader::NumberOfVariables
int NumberOfVariables
Definition: vtkWindBladeReader.h:142
vtkWindBladeReader::SetUpFieldVars
void SetUpFieldVars(vtkStructuredGrid *field)
vtkWindBladeReader::XSpacing
vtkFloatArray * XSpacing
Definition: vtkWindBladeReader.h:133
vtkWindBladeReader::CreateZTopography
virtual void CreateZTopography(float *zdata)
vtkDataArraySelection
Store on/off settings for data arrays for a vtkSource.
Definition: vtkDataArraySelection.h:35
vtkWindBladeReader::DivideByDensity
void DivideByDensity(const char *name)
vtkWindBladeReader::Points
vtkPoints * Points
Definition: vtkWindBladeReader.h:126
vtkWindBladeReader::DivideVariables
vtkStringArray * DivideVariables
Definition: vtkWindBladeReader.h:144
vtkWindBladeReader::NUM_PART_SIDES
static int NUM_PART_SIDES
Definition: vtkWindBladeReader.h:93
vtkWindBladeReader::GetPointArrayName
const char * GetPointArrayName(int index)
vtkWindBladeReader::ProcessZCoords
void ProcessZCoords(float *topoData, float *zValues)
vtkWindBladeReader::GetNumberOfPointArrays
int GetNumberOfPointArrays()
The following methods allow selective reading of solutions fields.
vtkWindBladeReader::RootDirectory
vtkStdString RootDirectory
Definition: vtkWindBladeReader.h:155
vtkWindBladeReader::Fit
float Fit
Definition: vtkWindBladeReader.h:130
vtkWindBladeReader::~vtkWindBladeReader
~vtkWindBladeReader()
vtkWindBladeReader::NumberOfTimeSteps
int NumberOfTimeSteps
Definition: vtkWindBladeReader.h:160
vtkWindBladeReader::ReadBladeHeader
void ReadBladeHeader(const std::string &fileName, std::stringstream &inStr, int &numColumns)
vtkWindBladeReader::GBlockSize
size_t GBlockSize
Definition: vtkWindBladeReader.h:152
vtkWindBladeReader::SetPointArrayStatus
void SetPointArrayStatus(const char *name, int status)
vtkWindBladeReader::NumberOfBladeCells
int NumberOfBladeCells
Definition: vtkWindBladeReader.h:169
vtkWindBladeReader::GetFieldOutput
vtkStructuredGrid * GetFieldOutput()
Get the reader's output.
vtkWindBladeReader::VariableStruct
int * VariableStruct
Definition: vtkWindBladeReader.h:146
vtkWindBladeReader::NumberOfFileVariables
int NumberOfFileVariables
Definition: vtkWindBladeReader.h:140
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:40
vtkWindBladeReader::VariableBasicType
int * VariableBasicType
Definition: vtkWindBladeReader.h:148
vtkWindBladeReader::HubHeight
vtkFloatArray * HubHeight
Definition: vtkWindBladeReader.h:173
vtkIntArray
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:46
vtkX3D::field
@ field
Definition: vtkX3D.h:177
vtkWindBladeReader::VariableOffset
long int * VariableOffset
Definition: vtkWindBladeReader.h:150
vtkWindBladeReader::GPoints
vtkPoints * GPoints
Definition: vtkWindBladeReader.h:127
vtkWindBladeReader::NumberOfBladeTowers
int NumberOfBladeTowers
Definition: vtkWindBladeReader.h:167
vtkWindBladeReader::PointDataArraySelection
vtkDataArraySelection * PointDataArraySelection
Definition: vtkWindBladeReader.h:186
vtkWindBladeReader::vtkWindBladeReader
vtkWindBladeReader()
vtkWindBladeReader::BladeLength
vtkFloatArray * BladeLength
Definition: vtkWindBladeReader.h:175
vtkWindBladeReader::VECTOR
static int VECTOR
Definition: vtkWindBladeReader.h:99
vtkWindBladeReader::NumberOfLinesToSkip
int NumberOfLinesToSkip
Definition: vtkWindBladeReader.h:182
vtkWindBladeReader::SetupBladeData
virtual void SetupBladeData()
vtkWindBladeReader::FillGroundCoordinates
void FillGroundCoordinates()
vtkGetStringMacro
vtkGetStringMacro(ExtensionsString)
Returns a string listing all available extensions.
vtkWindBladeReader::TimeStepLast
int TimeStepLast
Definition: vtkWindBladeReader.h:162
vtkWindBladeReader::TurbineDirectory
vtkStdString TurbineDirectory
Definition: vtkWindBladeReader.h:179
vtkWindBladeReader::LoadVariableData
virtual void LoadVariableData(int var)
vtkX3D::name
@ name
Definition: vtkX3D.h:219
vtkWindBladeReader::ProcessRequest
int ProcessRequest(vtkInformation *request, vtkInformationVector **inInfo, vtkInformationVector *outInfo)
We intercept the requests to check for which port information is being requested for and if there is ...
vtkWindBladeReader::SelectionObserver
vtkCallbackCommand * SelectionObserver
Definition: vtkWindBladeReader.h:189
vtkWindBladeReader::GDeform
float GDeform(float sigma, float sigmaMax, int flag)
vtkWindBladeReader::CalculatePressure
virtual void CalculatePressure(int pres, int prespre, int tempg, int density)
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:87
vtkWindBladeReader::AngularVeloc
vtkFloatArray * AngularVeloc
Definition: vtkWindBladeReader.h:174
vtkX3D::string
@ string
Definition: vtkX3D.h:490
vtkWindBladeReader::INTEGER
static int INTEGER
Definition: vtkWindBladeReader.h:101
vtkWindBladeReader::BladeCount
vtkIntArray * BladeCount
Definition: vtkWindBladeReader.h:176
vtkWindBladeReader::SetUpPressureData
void SetUpPressureData(float *pressureData, float *prespreData, const float *tempgData, const float *densityData)
vtkWindBladeReader::InitVariableData
void InitVariableData(int var, int &numberOfComponents, float *&varData, int &planeSize, int &rowSize)
vtkWindBladeReader::FillCoordinates
void FillCoordinates()
vtkWindBladeReader::New
static vtkWindBladeReader * New()
vtkWindBladeReader::NumberOfBladePoints
int NumberOfBladePoints
Definition: vtkWindBladeReader.h:168
vtkWindBladeReader::GetGroundOutput
vtkStructuredGrid * GetGroundOutput()
vtkWindBladeReader::UseTurbineFile
int UseTurbineFile
Definition: vtkWindBladeReader.h:178
vtkWindBladeReader::Compression
float Compression
Definition: vtkWindBladeReader.h:129
vtkWindBladeReader::SetUpGlobalData
bool SetUpGlobalData(const std::string &fileName, std::stringstream &inStr)
vtkCallbackCommand
supports function callbacks
Definition: vtkCallbackCommand.h:51
vtkWindBladeReader::TurbineTowerName
vtkStdString TurbineTowerName
Definition: vtkWindBladeReader.h:180
vtkStringArray
a vtkAbstractArray subclass for strings
Definition: vtkStringArray.h:43
vtkWindBladeReader::BlockSize
size_t BlockSize
Definition: vtkWindBladeReader.h:151
vtkWindBladeReader::NumberOfTuples
vtkIdType NumberOfTuples
Definition: vtkWindBladeReader.h:109
vtkWindBladeReader::VariableCompSize
int * VariableCompSize
Definition: vtkWindBladeReader.h:147
vtkWindBladeReader::SCALAR
static int SCALAR
Definition: vtkWindBladeReader.h:98
vtkWindBladeReader::VariableByteCount
int * VariableByteCount
Definition: vtkWindBladeReader.h:149
vtkWindBladeReader::InitFieldData
void InitFieldData(vtkInformationVector *outVector, std::ostringstream &fileName, vtkStructuredGrid *field)
vtkWindBladeReader::ReadDataVariables
void ReadDataVariables(istream &inStr)
vtkUnstructuredGrid
dataset represents arbitrary combinations of all possible cell types
Definition: vtkUnstructuredGrid.h:83
vtkWindBladeReader::TimeStepFirst
int TimeStepFirst
Definition: vtkWindBladeReader.h:161
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:49
vtkWindBladeReader::YPosition
vtkFloatArray * YPosition
Definition: vtkWindBladeReader.h:172
vtkWindBladeReader::EventCallback
static void EventCallback(vtkObject *caller, unsigned long eid, void *clientdata, void *calldata)
vtkX3D::index
@ index
Definition: vtkX3D.h:246
vtkWindBladeReader::DataDirectory
vtkStdString DataDirectory
Definition: vtkWindBladeReader.h:156
vtkWindBladeReader::RequestData
virtual int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
This is called by the superclass.
vtkWindBladeReader::Spline
void Spline(float *x, float *y, int n, float yp1, float ypn, float *y2)
vtkWindBladeReader::GetBladeOutput
vtkUnstructuredGrid * GetBladeOutput()
vtkWindBladeReader::NumberOfDerivedVariables
int NumberOfDerivedVariables
Definition: vtkWindBladeReader.h:141
vtkWindBladeReader::CalculateVorticity
virtual void CalculateVorticity(int vort, int uvw, int density)