VTK  9.1.0
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=========================================================================*/
30#ifndef vtkWindBladeReader_h
31#define vtkWindBladeReader_h
32
33#include "vtkIOGeometryModule.h" // For export macro
35
38class vtkStringArray;
39class vtkFloatArray;
40class vtkIntArray;
41class vtkPoints;
44class vtkMultiBlockDataSetAglorithm;
46class WindBladeReaderInternal;
47
48class VTKIOGEOMETRY_EXPORT vtkWindBladeReader : public vtkStructuredGridAlgorithm
49{
50public:
53 void PrintSelf(ostream& os, vtkIndent indent) override;
54
57
58 vtkSetVector6Macro(WholeExtent, int);
59 vtkGetVector6Macro(WholeExtent, int);
60
61 vtkSetVector6Macro(SubExtent, int);
62 vtkGetVector6Macro(SubExtent, int);
63
67 vtkStructuredGrid* GetFieldOutput(); // Output port 0
70
72
78 const char* GetPointArrayName(int index);
80
81 int GetPointArrayStatus(const char* name);
82 void SetPointArrayStatus(const char* name, int status);
83
86
87protected:
88 static float DRY_AIR_CONSTANT;
89 static int NUM_PART_SIDES; // Blade parts rhombus
90 static const int NUM_BASE_SIDES; // Base pyramid
91 static const int LINE_SIZE;
92 static int DIMENSION;
93 static int BYTES_PER_DATA;
94 static int SCALAR;
95 static int VECTOR;
96 static int FLOAT;
97 static int INTEGER;
98
101
102 char* Filename; // Base file name
103
104 // Extent information
105 vtkIdType NumberOfTuples; // Number of tuples in subextent
106
107 // Field
108 int WholeExtent[6]; // Extents of entire grid
109 int SubExtent[6]; // Processor grid extent
110 int UpdateExtent[6];
111 int Dimension[3]; // Size of entire grid
112 int SubDimension[3]; // Size of processor grid
113
114 // Ground
115 int GExtent[6]; // Extents of ground grid
116 int GSubExtent[6]; // Processor grid extent
117 int GDimension[3]; // Size of ground grid
118
119 float Step[3]; // Spacing delta
120 int UseTopographyFile; // Topography or flat
121 vtkStdString TopographyFile; // Name of topography data file
122 vtkPoints* Points; // Structured grid geometry
123 vtkPoints* GPoints; // Structured grid geometry for ground
124 vtkPoints* BPoints; // Unstructured grid geometry
125 float Compression; // Stretching at Z surface [0,1]
126 float Fit; // Cubic or quadratic [0,1]
127
128 // Rectilinear coordinate spacing
134
135 // Variable information
136 int NumberOfFileVariables; // Number of variables in data file
137 int NumberOfDerivedVariables; // Number of variables derived from file
138 int NumberOfVariables; // Number of variables to display
139
140 vtkStringArray* DivideVariables; // Divide data by density at read
141 vtkStdString* VariableName; // Names of each variable
142 int* VariableStruct; // SCALAR or VECTOR
143 int* VariableCompSize; // Number of components
144 int* VariableBasicType; // FLOAT or INTEGER
145 int* VariableByteCount; // Number of bytes in basic type
146 long int* VariableOffset; // Offset into data file
147 size_t BlockSize; // Size of every data block
148 size_t GBlockSize; // Size of every data block
149
150 vtkFloatArray** Data; // Actual data arrays
151 vtkStdString RootDirectory; // Directory where the .wind file is.
152 vtkStdString DataDirectory; // Location of actual data
153 vtkStdString DataBaseName; // Base name of files
154
155 // Time step information
156 int NumberOfTimeSteps; // Number of time steps
157 int TimeStepFirst; // First time step
158 int TimeStepLast; // Last time step
159 int TimeStepDelta; // Delta on time steps
160 double* TimeSteps; // Actual times available for request
161
162 // Turbine information
163 int NumberOfBladeTowers; // Number of turbines
164 int NumberOfBladePoints; // Points for drawing parts of blades
165 int NumberOfBladeCells; // Turbines * Blades * Parts
166
167 vtkFloatArray* XPosition; // Location of tower
168 vtkFloatArray* YPosition; // Location of tower
169 vtkFloatArray* HubHeight; // Height of tower
170 vtkFloatArray* AngularVeloc; // Angular Velocity
171 vtkFloatArray* BladeLength; // Blade length
172 vtkIntArray* BladeCount; // Number of blades per tower
173
174 int UseTurbineFile; // Turbine data available
175 vtkStdString TurbineDirectory; // Turbine unstructured data
176 vtkStdString TurbineTowerName; // Name of tower file
177 vtkStdString TurbineBladeName; // Base name of time series blade data
178 int NumberOfLinesToSkip; // New format has lines that need to be skipped in
179 // blade files
180
181 // Selected field of interest
183
184 // Observer to modify this object when array selections are modified
186
187 // Read the header file describing the dataset
188 virtual bool ReadGlobalData();
189 void ReadDataVariables(istream& inStr);
190 virtual bool FindVariableOffsets();
191
192 // Turbine methods
193 virtual void SetupBladeData();
194 virtual void LoadBladeData(int timeStep);
195
196 // Calculate the coordinates
200 virtual void CreateZTopography(float* zdata);
201 float GDeform(float sigma, float sigmaMax, int flag);
202 void Spline(float* x, float* y, int n, float yp1, float ypn, float* y2);
203 void Splint(float* xa, float* ya, float* y2a, int n, float x, float* y, int);
204
205 // Load a variable from data file
206 virtual void LoadVariableData(int var);
207
208 // Variables which must be divided by density after being read from file
209 void DivideByDensity(const char* name);
210
211 // Calculate derived variables
212 virtual void CalculatePressure(int pres, int prespre, int tempg, int density);
213 virtual void CalculateVorticity(int vort, int uvw, int density);
214
215 // convenience functions shared between serial and parallel version
217 vtkInformationVector* outVector, std::ostringstream& fileName, vtkStructuredGrid* field);
221 void InitPressureData(int pressure, int prespre, float*& pressureData, float*& prespreData);
223 float* pressureData, float* prespreData, const float* tempgData, const float* densityData);
224 void SetUpVorticityData(float* uData, float* vData, const float* densityData, float* vortData);
226 int var, int& numberOfComponents, float*& varData, int& planeSize, int& rowSize);
227 bool SetUpGlobalData(const std::string& fileName, std::stringstream& inStr);
228 void ProcessZCoords(float* topoData, float* zValues);
229 void ReadBladeHeader(const std::string& fileName, std::stringstream& inStr, int& numColumns);
230 void ReadBladeData(std::stringstream& inStr);
231
234 vtkInformationVector* outputVector) override;
235
236 static void SelectionCallback(
237 vtkObject* caller, unsigned long eid, void* clientdata, void* calldata);
238
239 static void EventCallback(vtkObject* caller, unsigned long eid, void* clientdata, void* calldata);
240
242
250 vtkInformation* request, vtkInformationVector** inInfo, vtkInformationVector* outInfo) override;
251
252private:
253 WindBladeReaderInternal* Internal;
254
255 vtkWindBladeReader(const vtkWindBladeReader&) = delete;
256 void operator=(const vtkWindBladeReader&) = delete;
257};
258#endif
supports function callbacks
Store on/off settings for data arrays for a vtkSource.
dynamic, self-adjusting array of float
a simple class to control print indentation
Definition: vtkIndent.h:113
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:149
abstract base class for most VTK objects
Definition: vtkObject.h:82
represent and manipulate 3D points
Definition: vtkPoints.h:143
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:105
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)
const char * GetPointArrayName(int index)
The following methods allow selective reading of solutions fields.
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)
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
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.
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