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