VTK  9.2.6
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=========================================================================*/
32
33#ifndef vtkWindBladeReader_h
34#define vtkWindBladeReader_h
35
36#include "vtkIOGeometryModule.h" // For export macro
38
41class vtkStringArray;
42class vtkFloatArray;
43class vtkIntArray;
44class vtkPoints;
47class vtkMultiBlockDataSetAglorithm;
49class WindBladeReaderInternal;
50
51class VTKIOGEOMETRY_EXPORT vtkWindBladeReader : public vtkStructuredGridAlgorithm
52{
53public:
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
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
90protected:
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
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
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
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
255private:
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:40
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
dynamic, self-adjusting array of int
Definition vtkIntArray.h:46
represent and manipulate 3D points
Definition vtkPoints.h:40
Wrapper around std::string to keep symbols short.
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
vtkCallbackCommand * SelectionObserver
void SetPointArrayStatus(const char *name, int status)
static void EventCallback(vtkObject *caller, unsigned long eid, void *clientdata, void *calldata)
const char * GetPointArrayName(int index)
The following methods allow selective reading of solutions fields.
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)
void ReadDataVariables(istream &inStr)
vtkUnstructuredGrid * GetBladeOutput()
vtkFloatArray * ZSpacing
vtkFloatArray * BladeLength
vtkStdString * VariableName
vtkFloatArray * YPosition
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
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.
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)
vtkStructuredGrid * GetGroundOutput()
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)
vtkStructuredGrid * GetFieldOutput()
Get the reader's output.
void SetUpVorticityData(float *uData, float *vData, const float *densityData, float *vortData)
static vtkWindBladeReader * New()
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)
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.
void FillGroundCoordinates()
int vtkTypeBool
Definition vtkABI.h:69
int vtkIdType
Definition vtkType.h:332