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