/*========================================================================= Program: Visualization Toolkit Module: $RCSfile: vtkPPhastaReader.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 vtkPPhastaReader - parallel Phasta meta-file reader // vtkPPhastaReader reads XML based Phasta meta-files and the underlying // Phasta files. The meta-file has the following form: // @verbatim // // // // // // // // // // // // // // // // @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 // 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 // vtkPhastaReader ///////////// #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 __vtkPPhastaReader_h #define __vtkPPhastaReader_h #include "vtkMultiBlockDataSetAlgorithm.h" class vtkPVXMLParser; class vtkPhastaReader; //BTX struct vtkPPhastaReaderInternal; //ETX class VTK_EXPORT vtkPPhastaReader : public vtkMultiBlockDataSetAlgorithm { public: static vtkPPhastaReader* New(); vtkTypeRevisionMacro(vtkPPhastaReader, 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_LARGE_INTEGER); vtkGetMacro(TimeStepIndex, int); // Description: // The min and max values of timesteps. vtkGetVector2Macro(TimeStepRange, int); static int CanReadFile(const char *filename); protected: vtkPPhastaReader(); ~vtkPPhastaReader(); 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]; vtkPhastaReader* Reader; vtkPVXMLParser* Parser; int ActualTimeStep; private: vtkPPhastaReaderInternal* Internal; vtkPPhastaReader(const vtkPPhastaReader&); // Not implemented. void operator=(const vtkPPhastaReader&); // Not implemented. }; #endif