forked from matthb2/ParaViewSyncIOReaderPlugin
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathvtkPhastaSyncIOMetaReader.h
199 lines (172 loc) · 7.29 KB
/
vtkPhastaSyncIOMetaReader.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkPhastaSyncIOMetaReader.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkPhastaSyncIOMetaReader - parallel Phasta meta-file reader
// vtkPhastaSyncIOMetaReader reads XML based Phasta meta-files and the underlying
// Phasta files. The meta-file has the following form:
// @verbatim
// <?xml version="1.0" ?>
//
// <PhastaMetaFile number_of_pieces="2">
// <GeometryFileNamePattern pattern="geombc.dat.%d"
// has_piece_entry="1"
// has_time_entry="0"/>
// <FieldFileNamePattern pattern="restart.%d.%d"
// has_piece_entry="1"
// has_time_entry="1"/>
//
// <TimeSteps number_of_steps="2"
// auto_generate_indices="1"
// start_index="0"
// increment_index_by="20"
// start_value="0."
// increment_value_by="20.">
// <TimeStep index="0" geometry_index="" field_index="0" value="0.0"/>
// <TimeStep index="1" geometry_index="" field_index="20" value="20.0"/>
// </TimeSteps>
// <Fields number_of_fields="2">
// <Field paraview_field_tag="velocity"
// phasta_field_tag="solution"
// start_index_in_phasta_array="1"
// number_of_componenets="3"
// datadependency="0"
// data_type="double"/>
// <Field paraview_field_tag="average speed"
// phasta_field_tag="ybar"
// start_index_in_phasta_array="4"
// number_of_componenets="1"/>
// </Fields>
//</PhastaMetaFile>
// @endverbatim
// The GeometryFileNamePattern and FieldFileNamePattern elements have
// three attributes:
// @verbatim
// 1. pattern: This is the pattern used to get the Phasta filenames.
// The %d placeholders will be replaced by appropriate
// indices. The first index is time (if specified), the
// second one is piece.
// 2. has_piece_entry (0 or 1): Specifies whether the pattern has a
// piece placeholder. The piece placeholder is replaced by the
// update piece number.
// 3. has_time_entry (0 or 1): Specified whether the pattern has a
// time placeholder. The time placeholder is replaced by an index
// specified in the TimeSteps element
//
// The TimeSteps element contains TimeStep sub-elements. Each TimeStep
// element specifies an index (index attribute), an index used in the
// geometry filename pattern (geometry_index), an index used in the
// field filename pattern (field_index) and a time value (float).
// In the example above, there are two timesteps. The first one is
// stored in files named geombc.dat.(0,1), restart.(0,20).(0,1).
// The time placeholders are substituted with the the geometry_index
// and field_index attribute values.
//
// Normally there is one TimeStep element per timestep. However, it
// is possible to ask the reader to automatically generate timestep
// entries. This is done with setting the (optional) auto_generate_indices
// to 1. In this case, the reader will generate number_of_steps entries.
// The geometry_index and field_index of these entries will start at
// start_index and will be incremented by increment_index_by.
// The time value of these entries will start at start_value and
// will be incremented by increment_value_by.
// Note that it is possible to use a combination of both approaches.
// Any values specified with the TimeStep elements will overwrite anything
// automatically computed. A common use of this is to let the reader
// compute all indices for field files and overwrite the geometry indices
// with TimeStep elements.
//
// The Fields element contain number_of_fields Field sub-element.
// Each Field element specifies tag attribute to be used in paraview,
// tag under which the field is stored in phasta files, start index of
// the array in phasta files, number of components of the field, data
// dependency, i.e., either 0 for nodal or 1 for elemental and
// data type, i.e., "double" (as of now supports only 1, 3 & 9 for number
// of components, i.e., scalars, vectors & tensors, and "double" for
// type of data).
// In the example above, there are two fields to be visualized
// one is velocity field stored under tag solution from index 1 to 3
// in phasta files which is a vector field defined on nodes with
// double values, and the other field is average speed scalar field
// stored under tag ybar at index 4 in phasta files
// If any Field element is specified then default attribute values are :
// (phasta_field_tag is mandatory)
// paraview_field_tag = Field <number>
// start_index_in_phasta_array = 0
// number_of_components = 1
// data_dependency = 0
// data_type = double
// If no Field(s) is/are specfied then the default is following 3 fields :
// pressure (index 0 under solution),
// velocity (index 1-3 under solution)
// temperature (index 4 under soltuion)
//
// .SECTION See Also
// vtkPhastaSyncIOReader
/////////////
#ifndef PHASTA_NEW_IO
#define PHASTA_NEW_IO
extern int NUM_PIECES;
extern int NUM_FILES;
extern int TIME_STEP;
extern char * FILE_PATH;
extern int PART_ID;
extern int FILE_ID;
extern double opentime_total;
#endif
////////////
#ifndef __vtkPhastaSyncIOMetaReader_h
#define __vtkPhastaSyncIOMetaReader_h
#include "vtkMultiBlockDataSetAlgorithm.h"
class vtkPVXMLParser;
class vtkPhastaSyncIOReader;
//BTX
struct vtkPhastaSyncIOMetaReaderInternal;
//ETX
class VTK_EXPORT vtkPhastaSyncIOMetaReader : public vtkMultiBlockDataSetAlgorithm
{
public:
static vtkPhastaSyncIOMetaReader* New();
vtkTypeMacro(vtkPhastaSyncIOMetaReader, vtkMultiBlockDataSetAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Set and get the Phasta meta file name
vtkSetStringMacro(FileName);
vtkGetStringMacro(FileName);
// Description:
// Set the step number for the geometry.
vtkSetClampMacro(TimeStepIndex, int, 0, VTK_INT_MAX);
vtkGetMacro(TimeStepIndex, int);
// Description:
// The min and max values of timesteps.
vtkGetVector2Macro(TimeStepRange, int);
static int CanReadFile(const char *filename);
protected:
vtkPhastaSyncIOMetaReader();
~vtkPhastaSyncIOMetaReader();
virtual int RequestInformation(vtkInformation* request,
vtkInformationVector** inputVector,
vtkInformationVector* outputVector);
virtual int RequestData(vtkInformation* request,
vtkInformationVector** inputVector,
vtkInformationVector* outputVector);
char* FileName;
int TimeStepIndex;
// Descriptions:
// Store the range of time steps
int TimeStepRange[2];
vtkPhastaSyncIOReader* Reader;
vtkPVXMLParser* Parser;
int ActualTimeStep;
private:
vtkPhastaSyncIOMetaReaderInternal* Internal;
vtkPhastaSyncIOMetaReader(const vtkPhastaSyncIOMetaReader&); // Not implemented.
void operator=(const vtkPhastaSyncIOMetaReader&); // Not implemented.
};
#endif