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