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