1*59599516SKenneth E. Jansen /*=========================================================================
2*59599516SKenneth E. Jansen
3*59599516SKenneth E. Jansen Program: Visualization Toolkit
4*59599516SKenneth E. Jansen Module: $RCSfile: vtkPhastaReader.cxx,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 #include "vtkPhastaReader.h"
16*59599516SKenneth E. Jansen
17*59599516SKenneth E. Jansen #include "vtkByteSwap.h"
18*59599516SKenneth E. Jansen #include "vtkCellType.h" //added for constants such as VTK_TETRA etc...
19*59599516SKenneth E. Jansen #include "vtkDataArray.h"
20*59599516SKenneth E. Jansen #include "vtkIntArray.h"
21*59599516SKenneth E. Jansen #include "vtkDoubleArray.h"
22*59599516SKenneth E. Jansen #include "vtkFloatArray.h"
23*59599516SKenneth E. Jansen #include "vtkInformation.h"
24*59599516SKenneth E. Jansen #include "vtkInformationVector.h"
25*59599516SKenneth E. Jansen #include "vtkObjectFactory.h"
26*59599516SKenneth E. Jansen #include "vtkPointData.h"
27*59599516SKenneth E. Jansen #include "vtkCellData.h"
28*59599516SKenneth E. Jansen #include "vtkPointSet.h"
29*59599516SKenneth E. Jansen #include "vtkSmartPointer.h"
30*59599516SKenneth E. Jansen #include "vtkUnstructuredGrid.h"
31*59599516SKenneth E. Jansen //change
32*59599516SKenneth E. Jansen #include "vtkStreamingDemandDrivenPipeline.h"
33*59599516SKenneth E. Jansen #include "vtkPVXMLElement.h"
34*59599516SKenneth E. Jansen #include "vtkPVXMLParser.h"
35*59599516SKenneth E. Jansen
36*59599516SKenneth E. Jansen #include "vtkCellData.h"
37*59599516SKenneth E. Jansen #include "vtkFieldData.h"
38*59599516SKenneth E. Jansen #include "vtkMultiBlockDataSet.h"
39*59599516SKenneth E. Jansen #include "vtkMultiPieceDataSet.h"
40*59599516SKenneth E. Jansen
41*59599516SKenneth E. Jansen //change end
42*59599516SKenneth E. Jansen vtkCxxRevisionMacro(vtkPhastaReader, "$Revision: 1.11 $");
43*59599516SKenneth E. Jansen vtkStandardNewMacro(vtkPhastaReader);
44*59599516SKenneth E. Jansen
45*59599516SKenneth E. Jansen #include <vtkstd/map>
46*59599516SKenneth E. Jansen #include <vtkstd/vector>
47*59599516SKenneth E. Jansen #include <vtkstd/string>
48*59599516SKenneth E. Jansen #include <vtksys/ios/sstream>
49*59599516SKenneth E. Jansen
50*59599516SKenneth E. Jansen //CHANGE////////////////////////////////////////////////////////////////
51*59599516SKenneth E. Jansen #include "rdtsc.h"
52*59599516SKenneth E. Jansen #define clockRate 2670000000.0
53*59599516SKenneth E. Jansen unsigned long long start, end;
54*59599516SKenneth E. Jansen //double opentime_total = 0.0;
55*59599516SKenneth E. Jansen int LAST_FILE_ID;
56*59599516SKenneth E. Jansen
startTimer(unsigned long long * start)57*59599516SKenneth E. Jansen void startTimer(unsigned long long* start) {
58*59599516SKenneth E. Jansen *start = rdtsc();
59*59599516SKenneth E. Jansen }
60*59599516SKenneth E. Jansen
endTimer(unsigned long long * end)61*59599516SKenneth E. Jansen void endTimer(unsigned long long* end) {
62*59599516SKenneth E. Jansen *end = rdtsc();
63*59599516SKenneth E. Jansen }
64*59599516SKenneth E. Jansen
computeTime(unsigned long long * start,unsigned long long * end)65*59599516SKenneth E. Jansen void computeTime(unsigned long long* start, unsigned long long* end) {
66*59599516SKenneth E. Jansen double time = (double)((*end-*start)/clockRate);
67*59599516SKenneth E. Jansen opentime_total += time;
68*59599516SKenneth E. Jansen }
69*59599516SKenneth E. Jansen
70*59599516SKenneth E. Jansen
71*59599516SKenneth E. Jansen #define VERSION_INFO_HEADER_SIZE 8192
72*59599516SKenneth E. Jansen #define DB_HEADER_SIZE 1024
73*59599516SKenneth E. Jansen #define TWO_MEGABYTE 2097152
74*59599516SKenneth E. Jansen #define ENDIAN_TEST_NUMBER 12180 // Troy's Zip Code!!
75*59599516SKenneth E. Jansen #define MAX_PHASTA_FILES 64
76*59599516SKenneth E. Jansen #define MAX_PHASTA_FILE_NAME_LENGTH 1024
77*59599516SKenneth E. Jansen #define MAX_FIELDS_NUMBER 48
78*59599516SKenneth E. Jansen #define MAX_FIELDS_NAME_LENGTH 128
79*59599516SKenneth E. Jansen #define DefaultMHSize (4*1024*1024)
80*59599516SKenneth E. Jansen int MasterHeaderSize = DefaultMHSize;
81*59599516SKenneth E. Jansen int diff_endian = 0;
82*59599516SKenneth E. Jansen long long counter = 0;
83*59599516SKenneth E. Jansen
84*59599516SKenneth E. Jansen enum PhastaIO_Errors
85*59599516SKenneth E. Jansen {
86*59599516SKenneth E. Jansen MAX_PHASTA_FILES_EXCEEDED = -1,
87*59599516SKenneth E. Jansen UNABLE_TO_OPEN_FILE = -2,
88*59599516SKenneth E. Jansen NOT_A_MPI_FILE = -3,
89*59599516SKenneth E. Jansen GPID_EXCEEDED = -4,
90*59599516SKenneth E. Jansen DATA_TYPE_ILLEGAL = -5,
91*59599516SKenneth E. Jansen };
92*59599516SKenneth E. Jansen
93*59599516SKenneth E. Jansen //CHANGE END////////////////////////////////////////////////////////////
94*59599516SKenneth E. Jansen struct vtkPhastaReaderInternal
95*59599516SKenneth E. Jansen {
96*59599516SKenneth E. Jansen struct FieldInfo
97*59599516SKenneth E. Jansen {
98*59599516SKenneth E. Jansen int StartIndexInPhastaArray;
99*59599516SKenneth E. Jansen int NumberOfComponents;
100*59599516SKenneth E. Jansen int DataDependency; // 0-nodal, 1-elemental
101*59599516SKenneth E. Jansen vtkstd::string DataType; // "int" or "double"
102*59599516SKenneth E. Jansen vtkstd::string PhastaFieldTag;
103*59599516SKenneth E. Jansen
FieldInfovtkPhastaReaderInternal::FieldInfo104*59599516SKenneth E. Jansen FieldInfo() : StartIndexInPhastaArray(-1), NumberOfComponents(-1), DataDependency(-1), DataType(""), PhastaFieldTag("")
105*59599516SKenneth E. Jansen {
106*59599516SKenneth E. Jansen }
107*59599516SKenneth E. Jansen };
108*59599516SKenneth E. Jansen
109*59599516SKenneth E. Jansen typedef vtkstd::map<vtkstd::string, FieldInfo> FieldInfoMapType;
110*59599516SKenneth E. Jansen FieldInfoMapType FieldInfoMap;
111*59599516SKenneth E. Jansen };
112*59599516SKenneth E. Jansen
113*59599516SKenneth E. Jansen
114*59599516SKenneth E. Jansen // Begin of copy from phastaIO
115*59599516SKenneth E. Jansen
116*59599516SKenneth E. Jansen //CHANGE////////////////////////////////////////////////////////////////
117*59599516SKenneth E. Jansen
118*59599516SKenneth E. Jansen /***********************************************************************/
119*59599516SKenneth E. Jansen /***************** NEW PHASTA IO CODE STARTS HERE **********************/
120*59599516SKenneth E. Jansen /***********************************************************************/
121*59599516SKenneth E. Jansen
122*59599516SKenneth E. Jansen int partID_counter;
123*59599516SKenneth E. Jansen
124*59599516SKenneth E. Jansen typedef struct
125*59599516SKenneth E. Jansen {
126*59599516SKenneth E. Jansen bool Wrong_Endian; /* default to false */
127*59599516SKenneth E. Jansen
128*59599516SKenneth E. Jansen char filename[MAX_PHASTA_FILE_NAME_LENGTH]; /* defafults to 1024 */
129*59599516SKenneth E. Jansen int nppp;
130*59599516SKenneth E. Jansen int nPPF;
131*59599516SKenneth E. Jansen int nFiles;
132*59599516SKenneth E. Jansen int nFields;
133*59599516SKenneth E. Jansen unsigned long long my_offset;
134*59599516SKenneth E. Jansen
135*59599516SKenneth E. Jansen char * master_header;
136*59599516SKenneth E. Jansen double * double_chunk;
137*59599516SKenneth E. Jansen int * int_chunk;
138*59599516SKenneth E. Jansen double * read_double_chunk;
139*59599516SKenneth E. Jansen int * read_int_chunk;
140*59599516SKenneth E. Jansen unsigned long long **my_offset_table;
141*59599516SKenneth E. Jansen unsigned long long **my_read_table;
142*59599516SKenneth E. Jansen int field_count;
143*59599516SKenneth E. Jansen int part_count;
144*59599516SKenneth E. Jansen int read_field_count;
145*59599516SKenneth E. Jansen int read_part_count;
146*59599516SKenneth E. Jansen int GPid;
147*59599516SKenneth E. Jansen int start_id;
148*59599516SKenneth E. Jansen unsigned long long next_start_address;
149*59599516SKenneth E. Jansen
150*59599516SKenneth E. Jansen int myrank;
151*59599516SKenneth E. Jansen int numprocs;
152*59599516SKenneth E. Jansen int local_myrank;
153*59599516SKenneth E. Jansen int local_numprocs;
154*59599516SKenneth E. Jansen } phastaio_file_t;
155*59599516SKenneth E. Jansen
156*59599516SKenneth E. Jansen //default: Paraview disabled
157*59599516SKenneth E. Jansen
158*59599516SKenneth E. Jansen typedef struct
159*59599516SKenneth E. Jansen {
160*59599516SKenneth E. Jansen int fileID;
161*59599516SKenneth E. Jansen int nppf, nfields;
162*59599516SKenneth E. Jansen int GPid;
163*59599516SKenneth E. Jansen int read_field_count;
164*59599516SKenneth E. Jansen char * masterHeader;
165*59599516SKenneth E. Jansen unsigned long long **offset_table;
166*59599516SKenneth E. Jansen unsigned long long my_offset;
167*59599516SKenneth E. Jansen
168*59599516SKenneth E. Jansen }serial_file;
169*59599516SKenneth E. Jansen
170*59599516SKenneth E. Jansen serial_file *SerialFile;
171*59599516SKenneth E. Jansen phastaio_file_t *PhastaIOActiveFiles[MAX_PHASTA_FILES];
172*59599516SKenneth E. Jansen int PhastaIONextActiveIndex = 0; /* indicates next index to allocate */
173*59599516SKenneth E. Jansen
174*59599516SKenneth E. Jansen //CHANGE END////////////////////////////////////////////////////////////
175*59599516SKenneth E. Jansen
176*59599516SKenneth E. Jansen #define swap_char(A,B) { ucTmp = A; A = B ; B = ucTmp; }
177*59599516SKenneth E. Jansen
178*59599516SKenneth E. Jansen vtkstd::map< int , char* > LastHeaderKey;
179*59599516SKenneth E. Jansen vtkstd::vector< FILE* > fileArray;
180*59599516SKenneth E. Jansen vtkstd::vector< int > byte_order;
181*59599516SKenneth E. Jansen vtkstd::vector< int > header_type;
182*59599516SKenneth E. Jansen int DataSize=0;
183*59599516SKenneth E. Jansen int LastHeaderNotFound = 0;
184*59599516SKenneth E. Jansen int Wrong_Endian = 0 ;
185*59599516SKenneth E. Jansen int Strict_Error = 0 ;
186*59599516SKenneth E. Jansen int binary_format = 0;
187*59599516SKenneth E. Jansen
188*59599516SKenneth E. Jansen // the caller has the responsibility to delete the returned string
StringStripper(const char istring[])189*59599516SKenneth E. Jansen char* vtkPhastaReader::StringStripper( const char istring[] )
190*59599516SKenneth E. Jansen {
191*59599516SKenneth E. Jansen int length = strlen( istring );
192*59599516SKenneth E. Jansen char* dest = new char [ length + 1 ];
193*59599516SKenneth E. Jansen strcpy( dest, istring );
194*59599516SKenneth E. Jansen dest[ length ] = '\0';
195*59599516SKenneth E. Jansen
196*59599516SKenneth E. Jansen if ( char* p = strpbrk( dest, " ") )
197*59599516SKenneth E. Jansen {
198*59599516SKenneth E. Jansen *p = '\0';
199*59599516SKenneth E. Jansen }
200*59599516SKenneth E. Jansen
201*59599516SKenneth E. Jansen return dest;
202*59599516SKenneth E. Jansen }
203*59599516SKenneth E. Jansen
cscompare(const char teststring[],const char targetstring[])204*59599516SKenneth E. Jansen int vtkPhastaReader::cscompare( const char teststring[],
205*59599516SKenneth E. Jansen const char targetstring[] )
206*59599516SKenneth E. Jansen {
207*59599516SKenneth E. Jansen
208*59599516SKenneth E. Jansen char* s1 = const_cast<char*>(teststring);
209*59599516SKenneth E. Jansen char* s2 = const_cast<char*>(targetstring);
210*59599516SKenneth E. Jansen
211*59599516SKenneth E. Jansen while( *s1 == ' ') { s1++; }
212*59599516SKenneth E. Jansen while( *s2 == ' ') { s2++; }
213*59599516SKenneth E. Jansen while( ( *s1 )
214*59599516SKenneth E. Jansen && ( *s2 )
215*59599516SKenneth E. Jansen && ( *s2 != '?')
216*59599516SKenneth E. Jansen && ( tolower( *s1 )==tolower( *s2 ) ) )
217*59599516SKenneth E. Jansen {
218*59599516SKenneth E. Jansen s1++;
219*59599516SKenneth E. Jansen s2++;
220*59599516SKenneth E. Jansen while( *s1 == ' ') { s1++; }
221*59599516SKenneth E. Jansen while( *s2 == ' ') { s2++; }
222*59599516SKenneth E. Jansen }
223*59599516SKenneth E. Jansen if ( !( *s1 ) || ( *s1 == '?') )
224*59599516SKenneth E. Jansen {
225*59599516SKenneth E. Jansen return 1;
226*59599516SKenneth E. Jansen }
227*59599516SKenneth E. Jansen else
228*59599516SKenneth E. Jansen {
229*59599516SKenneth E. Jansen return 0;
230*59599516SKenneth E. Jansen }
231*59599516SKenneth E. Jansen }
232*59599516SKenneth E. Jansen
isBinary(const char iotype[])233*59599516SKenneth E. Jansen void vtkPhastaReader::isBinary( const char iotype[] )
234*59599516SKenneth E. Jansen {
235*59599516SKenneth E. Jansen char* fname = StringStripper( iotype );
236*59599516SKenneth E. Jansen if ( cscompare( fname, "binary" ) )
237*59599516SKenneth E. Jansen {
238*59599516SKenneth E. Jansen binary_format = 1;
239*59599516SKenneth E. Jansen }
240*59599516SKenneth E. Jansen else
241*59599516SKenneth E. Jansen {
242*59599516SKenneth E. Jansen binary_format = 0;
243*59599516SKenneth E. Jansen }
244*59599516SKenneth E. Jansen delete [] fname;
245*59599516SKenneth E. Jansen
246*59599516SKenneth E. Jansen }
247*59599516SKenneth E. Jansen
typeSize(const char typestring[])248*59599516SKenneth E. Jansen size_t vtkPhastaReader::typeSize( const char typestring[] )
249*59599516SKenneth E. Jansen {
250*59599516SKenneth E. Jansen char* ts1 = StringStripper( typestring );
251*59599516SKenneth E. Jansen
252*59599516SKenneth E. Jansen if ( cscompare( "integer", ts1 ) )
253*59599516SKenneth E. Jansen {
254*59599516SKenneth E. Jansen delete [] ts1;
255*59599516SKenneth E. Jansen return sizeof(int);
256*59599516SKenneth E. Jansen }
257*59599516SKenneth E. Jansen else if ( cscompare( "double", ts1 ) )
258*59599516SKenneth E. Jansen {
259*59599516SKenneth E. Jansen delete [] ts1;
260*59599516SKenneth E. Jansen return sizeof( double );
261*59599516SKenneth E. Jansen }
262*59599516SKenneth E. Jansen else if ( cscompare( "float", ts1 ) )
263*59599516SKenneth E. Jansen {
264*59599516SKenneth E. Jansen delete [] ts1;
265*59599516SKenneth E. Jansen return sizeof( float );
266*59599516SKenneth E. Jansen }
267*59599516SKenneth E. Jansen else
268*59599516SKenneth E. Jansen {
269*59599516SKenneth E. Jansen delete [] ts1;
270*59599516SKenneth E. Jansen fprintf(stderr,"unknown type : %s\n",ts1);
271*59599516SKenneth E. Jansen return 0;
272*59599516SKenneth E. Jansen }
273*59599516SKenneth E. Jansen }
274*59599516SKenneth E. Jansen
readHeader(FILE * fileObject,const char phrase[],int * params,int expect)275*59599516SKenneth E. Jansen int vtkPhastaReader::readHeader( FILE* fileObject,
276*59599516SKenneth E. Jansen const char phrase[],
277*59599516SKenneth E. Jansen int* params,
278*59599516SKenneth E. Jansen int expect )
279*59599516SKenneth E. Jansen {
280*59599516SKenneth E. Jansen char* text_header;
281*59599516SKenneth E. Jansen char* token;
282*59599516SKenneth E. Jansen char Line[1024];
283*59599516SKenneth E. Jansen char junk;
284*59599516SKenneth E. Jansen int FOUND = 0 ;
285*59599516SKenneth E. Jansen int real_length;
286*59599516SKenneth E. Jansen int skip_size, integer_value;
287*59599516SKenneth E. Jansen int rewind_count=0;
288*59599516SKenneth E. Jansen
289*59599516SKenneth E. Jansen if( !fgets( Line, 1024, fileObject ) && feof( fileObject ) )
290*59599516SKenneth E. Jansen {
291*59599516SKenneth E. Jansen rewind( fileObject );
292*59599516SKenneth E. Jansen clearerr( fileObject );
293*59599516SKenneth E. Jansen rewind_count++;
294*59599516SKenneth E. Jansen fgets( Line, 1024, fileObject );
295*59599516SKenneth E. Jansen }
296*59599516SKenneth E. Jansen
297*59599516SKenneth E. Jansen while( !FOUND && ( rewind_count < 2 ) )
298*59599516SKenneth E. Jansen {
299*59599516SKenneth E. Jansen if ( ( Line[0] != '\n' ) && ( real_length = strcspn( Line, "#" )) )
300*59599516SKenneth E. Jansen {
301*59599516SKenneth E. Jansen text_header = new char [ real_length + 1 ];
302*59599516SKenneth E. Jansen strncpy( text_header, Line, real_length );
303*59599516SKenneth E. Jansen text_header[ real_length ] =static_cast<char>(NULL);
304*59599516SKenneth E. Jansen token = strtok ( text_header, ":" );
305*59599516SKenneth E. Jansen if( cscompare( phrase , token ) )
306*59599516SKenneth E. Jansen {
307*59599516SKenneth E. Jansen FOUND = 1 ;
308*59599516SKenneth E. Jansen token = strtok( NULL, " ,;<>" );
309*59599516SKenneth E. Jansen skip_size = atoi( token );
310*59599516SKenneth E. Jansen int i;
311*59599516SKenneth E. Jansen for( i=0; i < expect && ( token = strtok( NULL," ,;<>") ); i++)
312*59599516SKenneth E. Jansen {
313*59599516SKenneth E. Jansen params[i] = atoi( token );
314*59599516SKenneth E. Jansen }
315*59599516SKenneth E. Jansen if ( i < expect )
316*59599516SKenneth E. Jansen {
317*59599516SKenneth E. Jansen fprintf(stderr,"Expected # of ints not found for: %s\n",phrase );
318*59599516SKenneth E. Jansen }
319*59599516SKenneth E. Jansen }
320*59599516SKenneth E. Jansen else if ( cscompare(token,"byteorder magic number") )
321*59599516SKenneth E. Jansen {
322*59599516SKenneth E. Jansen if ( binary_format )
323*59599516SKenneth E. Jansen {
324*59599516SKenneth E. Jansen fread((void*)&integer_value,sizeof(int),1,fileObject);
325*59599516SKenneth E. Jansen fread( &junk, sizeof(char), 1 , fileObject );
326*59599516SKenneth E. Jansen if ( 362436 != integer_value )
327*59599516SKenneth E. Jansen {
328*59599516SKenneth E. Jansen Wrong_Endian = 1;
329*59599516SKenneth E. Jansen }
330*59599516SKenneth E. Jansen }
331*59599516SKenneth E. Jansen else
332*59599516SKenneth E. Jansen {
333*59599516SKenneth E. Jansen fscanf(fileObject, "%d\n", &integer_value );
334*59599516SKenneth E. Jansen }
335*59599516SKenneth E. Jansen }
336*59599516SKenneth E. Jansen else
337*59599516SKenneth E. Jansen {
338*59599516SKenneth E. Jansen /* some other header, so just skip over */
339*59599516SKenneth E. Jansen token = strtok( NULL, " ,;<>" );
340*59599516SKenneth E. Jansen skip_size = atoi( token );
341*59599516SKenneth E. Jansen if ( binary_format)
342*59599516SKenneth E. Jansen {
343*59599516SKenneth E. Jansen fseek( fileObject, skip_size, SEEK_CUR );
344*59599516SKenneth E. Jansen }
345*59599516SKenneth E. Jansen else
346*59599516SKenneth E. Jansen {
347*59599516SKenneth E. Jansen for( int gama=0; gama < skip_size; gama++ )
348*59599516SKenneth E. Jansen {
349*59599516SKenneth E. Jansen fgets( Line, 1024, fileObject );
350*59599516SKenneth E. Jansen }
351*59599516SKenneth E. Jansen }
352*59599516SKenneth E. Jansen }
353*59599516SKenneth E. Jansen delete [] text_header;
354*59599516SKenneth E. Jansen }
355*59599516SKenneth E. Jansen
356*59599516SKenneth E. Jansen if ( !FOUND )
357*59599516SKenneth E. Jansen {
358*59599516SKenneth E. Jansen if( !fgets( Line, 1024, fileObject ) && feof( fileObject ) )
359*59599516SKenneth E. Jansen {
360*59599516SKenneth E. Jansen rewind( fileObject );
361*59599516SKenneth E. Jansen clearerr( fileObject );
362*59599516SKenneth E. Jansen rewind_count++;
363*59599516SKenneth E. Jansen fgets( Line, 1024, fileObject );
364*59599516SKenneth E. Jansen }
365*59599516SKenneth E. Jansen }
366*59599516SKenneth E. Jansen }
367*59599516SKenneth E. Jansen
368*59599516SKenneth E. Jansen if ( !FOUND )
369*59599516SKenneth E. Jansen {
370*59599516SKenneth E. Jansen fprintf(stderr, "Error: Cound not find: %s\n", phrase);
371*59599516SKenneth E. Jansen return 1;
372*59599516SKenneth E. Jansen }
373*59599516SKenneth E. Jansen return 0;
374*59599516SKenneth E. Jansen }
375*59599516SKenneth E. Jansen
SwapArrayByteOrder_(void * array,int nbytes,int nItems)376*59599516SKenneth E. Jansen void vtkPhastaReader::SwapArrayByteOrder_( void* array,
377*59599516SKenneth E. Jansen int nbytes,
378*59599516SKenneth E. Jansen int nItems )
379*59599516SKenneth E. Jansen {
380*59599516SKenneth E. Jansen /* This swaps the byte order for the array of nItems each
381*59599516SKenneth E. Jansen of size nbytes , This will be called only locally */
382*59599516SKenneth E. Jansen int i,j;
383*59599516SKenneth E. Jansen unsigned char ucTmp;
384*59599516SKenneth E. Jansen unsigned char* ucDst = (unsigned char*)array;
385*59599516SKenneth E. Jansen
386*59599516SKenneth E. Jansen for(i=0; i < nItems; i++)
387*59599516SKenneth E. Jansen {
388*59599516SKenneth E. Jansen for(j=0; j < (nbytes/2); j++)
389*59599516SKenneth E. Jansen {
390*59599516SKenneth E. Jansen swap_char( ucDst[j] , ucDst[(nbytes - 1) - j] );
391*59599516SKenneth E. Jansen }
392*59599516SKenneth E. Jansen ucDst += nbytes;
393*59599516SKenneth E. Jansen }
394*59599516SKenneth E. Jansen }
395*59599516SKenneth E. Jansen
396*59599516SKenneth E. Jansen //CHANGE///////////////////////////////////////////////////////
397*59599516SKenneth E. Jansen
queryphmpiio_(const char filename[],int * nfields,int * nppf)398*59599516SKenneth E. Jansen void vtkPhastaReader::queryphmpiio_(const char filename[],int *nfields, int *nppf)
399*59599516SKenneth E. Jansen {
400*59599516SKenneth E. Jansen
401*59599516SKenneth E. Jansen FILE * fileHandle;
402*59599516SKenneth E. Jansen char* fname = StringStripper( filename );
403*59599516SKenneth E. Jansen
404*59599516SKenneth E. Jansen fileHandle = fopen (fname,"rb");
405*59599516SKenneth E. Jansen if (fileHandle == NULL ) {
406*59599516SKenneth E. Jansen printf("\n File %s doesn't exist! Please check!\n",fname);
407*59599516SKenneth E. Jansen exit(1);
408*59599516SKenneth E. Jansen }
409*59599516SKenneth E. Jansen else
410*59599516SKenneth E. Jansen {
411*59599516SKenneth E. Jansen SerialFile =(serial_file *)calloc( 1, sizeof( serial_file) );
412*59599516SKenneth E. Jansen
413*59599516SKenneth E. Jansen SerialFile->masterHeader = (char *)malloc(MasterHeaderSize);
414*59599516SKenneth E. Jansen fread(SerialFile->masterHeader,1,MasterHeaderSize,fileHandle);
415*59599516SKenneth E. Jansen
416*59599516SKenneth E. Jansen char read_out_tag[MAX_FIELDS_NAME_LENGTH];
417*59599516SKenneth E. Jansen char * token;
418*59599516SKenneth E. Jansen int magic_number;
419*59599516SKenneth E. Jansen memcpy( read_out_tag,
420*59599516SKenneth E. Jansen SerialFile->masterHeader,
421*59599516SKenneth E. Jansen MAX_FIELDS_NAME_LENGTH-1 );
422*59599516SKenneth E. Jansen
423*59599516SKenneth E. Jansen if ( cscompare ("MPI_IO_Tag",read_out_tag) )
424*59599516SKenneth E. Jansen {
425*59599516SKenneth E. Jansen // Test endianess ...
426*59599516SKenneth E. Jansen memcpy ( &magic_number,
427*59599516SKenneth E. Jansen SerialFile->masterHeader+sizeof("MPI_IO_Tag :"),
428*59599516SKenneth E. Jansen sizeof(int) );
429*59599516SKenneth E. Jansen
430*59599516SKenneth E. Jansen if ( magic_number != ENDIAN_TEST_NUMBER )
431*59599516SKenneth E. Jansen {
432*59599516SKenneth E. Jansen diff_endian = 1;
433*59599516SKenneth E. Jansen }
434*59599516SKenneth E. Jansen
435*59599516SKenneth E. Jansen char version[MAX_FIELDS_NAME_LENGTH/4];
436*59599516SKenneth E. Jansen int mhsize;
437*59599516SKenneth E. Jansen
438*59599516SKenneth E. Jansen memcpy(version,
439*59599516SKenneth E. Jansen SerialFile->masterHeader + MAX_FIELDS_NAME_LENGTH/2,
440*59599516SKenneth E. Jansen MAX_FIELDS_NAME_LENGTH/4 - 1); //TODO: why -1?
441*59599516SKenneth E. Jansen
442*59599516SKenneth E. Jansen if( cscompare ("version",version) )
443*59599516SKenneth E. Jansen {
444*59599516SKenneth E. Jansen // if there is "version" tag in the file, then it is newer format
445*59599516SKenneth E. Jansen // read master header size from here, otherwise use default
446*59599516SKenneth E. Jansen // TODO: if version is "1", we know mhsize is at 3/4 place...
447*59599516SKenneth E. Jansen
448*59599516SKenneth E. Jansen token = strtok(version, ":");
449*59599516SKenneth E. Jansen token = strtok(NULL, " ,;<>" );
450*59599516SKenneth E. Jansen int iversion = atoi(token);
451*59599516SKenneth E. Jansen
452*59599516SKenneth E. Jansen if( iversion == 1) {
453*59599516SKenneth E. Jansen memcpy( &mhsize,
454*59599516SKenneth E. Jansen SerialFile->masterHeader + MAX_FIELDS_NAME_LENGTH/4*3 + sizeof("mhsize : ")-1,
455*59599516SKenneth E. Jansen sizeof(int));
456*59599516SKenneth E. Jansen if ( diff_endian)
457*59599516SKenneth E. Jansen SwapArrayByteOrder_(&mhsize, sizeof(int), 1);
458*59599516SKenneth E. Jansen free(SerialFile->masterHeader);
459*59599516SKenneth E. Jansen SerialFile->masterHeader = (char *)malloc(mhsize);
460*59599516SKenneth E. Jansen fseek(fileHandle, 0, SEEK_SET);
461*59599516SKenneth E. Jansen fread(SerialFile->masterHeader,1,mhsize,fileHandle);
462*59599516SKenneth E. Jansen }
463*59599516SKenneth E. Jansen //TODO: check if this is a valid int??
464*59599516SKenneth E. Jansen MasterHeaderSize = mhsize;
465*59599516SKenneth E. Jansen }
466*59599516SKenneth E. Jansen else { // else it's version 0's format w/o version tag, implicating MHSize=4M
467*59599516SKenneth E. Jansen MasterHeaderSize = DefaultMHSize;
468*59599516SKenneth E. Jansen //printf("-----> version = 0; mhsize = %d\n", MasterHeaderSize);
469*59599516SKenneth E. Jansen }
470*59599516SKenneth E. Jansen
471*59599516SKenneth E. Jansen // END OF CHANGE FOR VERSION
472*59599516SKenneth E. Jansen //
473*59599516SKenneth E. Jansen memcpy( read_out_tag,
474*59599516SKenneth E. Jansen SerialFile->masterHeader+MAX_FIELDS_NAME_LENGTH+1,
475*59599516SKenneth E. Jansen MAX_FIELDS_NAME_LENGTH );
476*59599516SKenneth E. Jansen
477*59599516SKenneth E. Jansen // Read in # fields ...
478*59599516SKenneth E. Jansen token = strtok ( read_out_tag, ":" );
479*59599516SKenneth E. Jansen token = strtok( NULL," ,;<>" );
480*59599516SKenneth E. Jansen *nfields = atoi( token );
481*59599516SKenneth E. Jansen SerialFile->nfields=*nfields;
482*59599516SKenneth E. Jansen
483*59599516SKenneth E. Jansen memcpy( read_out_tag,
484*59599516SKenneth E. Jansen SerialFile->masterHeader+
485*59599516SKenneth E. Jansen *nfields * MAX_FIELDS_NAME_LENGTH +
486*59599516SKenneth E. Jansen MAX_FIELDS_NAME_LENGTH * 2,
487*59599516SKenneth E. Jansen MAX_FIELDS_NAME_LENGTH);
488*59599516SKenneth E. Jansen
489*59599516SKenneth E. Jansen token = strtok ( read_out_tag, ":" );
490*59599516SKenneth E. Jansen token = strtok( NULL," ,;<>" );
491*59599516SKenneth E. Jansen *nppf = atoi( token );
492*59599516SKenneth E. Jansen SerialFile->nppf=*nppf;
493*59599516SKenneth E. Jansen }
494*59599516SKenneth E. Jansen else
495*59599516SKenneth E. Jansen {
496*59599516SKenneth E. Jansen printf("The file you opened is not new format, please check!\n");
497*59599516SKenneth E. Jansen }
498*59599516SKenneth E. Jansen
499*59599516SKenneth E. Jansen fclose(fileHandle);
500*59599516SKenneth E. Jansen }
501*59599516SKenneth E. Jansen delete [] fname;
502*59599516SKenneth E. Jansen
503*59599516SKenneth E. Jansen }
504*59599516SKenneth E. Jansen
finalizephmpiio_(int * fileDescriptor)505*59599516SKenneth E. Jansen void vtkPhastaReader::finalizephmpiio_( int *fileDescriptor )
506*59599516SKenneth E. Jansen {
507*59599516SKenneth E. Jansen //printf("total open time is %lf\n", opentime_total);
508*59599516SKenneth E. Jansen // free master header, offset table [][], and serial file struc
509*59599516SKenneth E. Jansen free( SerialFile->masterHeader);
510*59599516SKenneth E. Jansen int j;
511*59599516SKenneth E. Jansen for ( j = 0; j < SerialFile->nfields; j++ )
512*59599516SKenneth E. Jansen {
513*59599516SKenneth E. Jansen free( SerialFile->offset_table[j] );
514*59599516SKenneth E. Jansen }
515*59599516SKenneth E. Jansen free( SerialFile->offset_table);
516*59599516SKenneth E. Jansen free( SerialFile );
517*59599516SKenneth E. Jansen }
518*59599516SKenneth E. Jansen
StrReverse(char * str)519*59599516SKenneth E. Jansen char* StrReverse(char* str)
520*59599516SKenneth E. Jansen {
521*59599516SKenneth E. Jansen char *temp, *ptr;
522*59599516SKenneth E. Jansen int len, i;
523*59599516SKenneth E. Jansen
524*59599516SKenneth E. Jansen temp=str;
525*59599516SKenneth E. Jansen for(len=0; *temp !='\0';temp++, len++);
526*59599516SKenneth E. Jansen
527*59599516SKenneth E. Jansen ptr=(char*)malloc(sizeof(char)*(len+1));
528*59599516SKenneth E. Jansen
529*59599516SKenneth E. Jansen for(i=len-1; i>=0; i--)
530*59599516SKenneth E. Jansen ptr[len-i-1]=str[i];
531*59599516SKenneth E. Jansen
532*59599516SKenneth E. Jansen ptr[len]='\0';
533*59599516SKenneth E. Jansen return ptr;
534*59599516SKenneth E. Jansen }
535*59599516SKenneth E. Jansen
536*59599516SKenneth E. Jansen
537*59599516SKenneth E. Jansen //CHANGE END//////////////////////////////////////////////////
538*59599516SKenneth E. Jansen
openfile(const char filename[],const char mode[],int * fileDescriptor)539*59599516SKenneth E. Jansen void vtkPhastaReader::openfile( const char filename[],
540*59599516SKenneth E. Jansen const char mode[],
541*59599516SKenneth E. Jansen int* fileDescriptor )
542*59599516SKenneth E. Jansen //CHANGE////////////////////////////////////////////////////
543*59599516SKenneth E. Jansen {
544*59599516SKenneth E. Jansen //printf("in open(): counter = %ld\n", counter++);
545*59599516SKenneth E. Jansen
546*59599516SKenneth E. Jansen FILE* file=NULL ;
547*59599516SKenneth E. Jansen *fileDescriptor = 0;
548*59599516SKenneth E. Jansen char* fname = StringStripper( filename );
549*59599516SKenneth E. Jansen char* imode = StringStripper( mode );
550*59599516SKenneth E. Jansen
551*59599516SKenneth E. Jansen int string_length = strlen( fname );
552*59599516SKenneth E. Jansen char* buffer = (char*) malloc ( string_length+1 );
553*59599516SKenneth E. Jansen strcpy ( buffer, fname );
554*59599516SKenneth E. Jansen buffer[ string_length ] = '\0';
555*59599516SKenneth E. Jansen
556*59599516SKenneth E. Jansen char* tempbuf = StrReverse(buffer);
557*59599516SKenneth E. Jansen free(buffer);
558*59599516SKenneth E. Jansen buffer = tempbuf;
559*59599516SKenneth E. Jansen
560*59599516SKenneth E. Jansen //printf("buffer is %s\n",buffer);
561*59599516SKenneth E. Jansen
562*59599516SKenneth E. Jansen char* st2 = strtok ( buffer, "." );
563*59599516SKenneth E. Jansen //st2 = strtok (NULL, ".");
564*59599516SKenneth E. Jansen
565*59599516SKenneth E. Jansen //printf("st2 is %s\n",st2);
566*59599516SKenneth E. Jansen
567*59599516SKenneth E. Jansen string_length = strlen(st2);
568*59599516SKenneth E. Jansen char* buffer2 = (char*)malloc(string_length+1);
569*59599516SKenneth E. Jansen strcpy(buffer2,st2);
570*59599516SKenneth E. Jansen buffer2[string_length]='\0';
571*59599516SKenneth E. Jansen
572*59599516SKenneth E. Jansen char* tempbuf2 = StrReverse(buffer2);
573*59599516SKenneth E. Jansen free(buffer2);
574*59599516SKenneth E. Jansen buffer2 = tempbuf2;
575*59599516SKenneth E. Jansen //printf("buffer2 is %s\n",buffer2);
576*59599516SKenneth E. Jansen
577*59599516SKenneth E. Jansen SerialFile->fileID = atoi(buffer2);
578*59599516SKenneth E. Jansen if ( char* p = strpbrk(buffer, "@") )
579*59599516SKenneth E. Jansen *p = '\0';
580*59599516SKenneth E. Jansen
581*59599516SKenneth E. Jansen startTimer(&start);
582*59599516SKenneth E. Jansen if ( cscompare( "read", imode ) ) file = fopen(fname, "rb" );
583*59599516SKenneth E. Jansen else if( cscompare( "write", imode ) ) file = fopen(fname, "wb" );
584*59599516SKenneth E. Jansen else if( cscompare( "append", imode ) ) file = fopen(fname, "ab" );
585*59599516SKenneth E. Jansen endTimer(&end);
586*59599516SKenneth E. Jansen computeTime(&start, &end);
587*59599516SKenneth E. Jansen
588*59599516SKenneth E. Jansen
589*59599516SKenneth E. Jansen if ( !file ){
590*59599516SKenneth E. Jansen fprintf(stderr,"unable to open file : %s\n",fname ) ;
591*59599516SKenneth E. Jansen } else {
592*59599516SKenneth E. Jansen fileArray.push_back( file );
593*59599516SKenneth E. Jansen byte_order.push_back( false );
594*59599516SKenneth E. Jansen header_type.push_back( sizeof(int) );
595*59599516SKenneth E. Jansen *fileDescriptor = fileArray.size();
596*59599516SKenneth E. Jansen }
597*59599516SKenneth E. Jansen
598*59599516SKenneth E. Jansen ////////////////////////////////////////////////
599*59599516SKenneth E. Jansen //unsigned long long **header_table;
600*59599516SKenneth E. Jansen SerialFile->offset_table = ( unsigned long long ** )calloc(SerialFile->nfields,
601*59599516SKenneth E. Jansen sizeof(unsigned long long *));
602*59599516SKenneth E. Jansen
603*59599516SKenneth E. Jansen int j;
604*59599516SKenneth E. Jansen for ( j = 0; j < SerialFile->nfields; j++ )
605*59599516SKenneth E. Jansen {
606*59599516SKenneth E. Jansen SerialFile->offset_table[j]=( unsigned long long * ) calloc( SerialFile->nppf ,
607*59599516SKenneth E. Jansen sizeof( unsigned long long));
608*59599516SKenneth E. Jansen }
609*59599516SKenneth E. Jansen
610*59599516SKenneth E. Jansen // Read in the offset table ...
611*59599516SKenneth E. Jansen for ( j = 0; j < SerialFile->nfields; j++ )
612*59599516SKenneth E. Jansen {
613*59599516SKenneth E. Jansen
614*59599516SKenneth E. Jansen memcpy( SerialFile->offset_table[j],
615*59599516SKenneth E. Jansen SerialFile->masterHeader +
616*59599516SKenneth E. Jansen VERSION_INFO_HEADER_SIZE +
617*59599516SKenneth E. Jansen j * SerialFile->nppf * sizeof(unsigned long long),
618*59599516SKenneth E. Jansen SerialFile->nppf * sizeof(unsigned long long) );
619*59599516SKenneth E. Jansen
620*59599516SKenneth E. Jansen if(diff_endian) {
621*59599516SKenneth E. Jansen SwapArrayByteOrder_( SerialFile->offset_table[j],
622*59599516SKenneth E. Jansen sizeof(unsigned long long int),
623*59599516SKenneth E. Jansen SerialFile->nppf);
624*59599516SKenneth E. Jansen }
625*59599516SKenneth E. Jansen // Swap byte order if endianess is different ...
626*59599516SKenneth E. Jansen /*if ( PhastaIOActiveFiles[i]->Wrong_Endian )
627*59599516SKenneth E. Jansen {
628*59599516SKenneth E. Jansen SwapArrayByteOrder_( PhastaIOActiveFiles[i]->my_read_table[j],
629*59599516SKenneth E. Jansen sizeof(long long int),
630*59599516SKenneth E. Jansen PhastaIOActiveFiles[i]->nppp );
631*59599516SKenneth E. Jansen }
632*59599516SKenneth E. Jansen */
633*59599516SKenneth E. Jansen }
634*59599516SKenneth E. Jansen
635*59599516SKenneth E. Jansen ////////////////////////////////////////////////
636*59599516SKenneth E. Jansen delete [] fname;
637*59599516SKenneth E. Jansen delete [] imode;
638*59599516SKenneth E. Jansen //free(fname);
639*59599516SKenneth E. Jansen //free(imode);
640*59599516SKenneth E. Jansen free(buffer);
641*59599516SKenneth E. Jansen free(buffer2);
642*59599516SKenneth E. Jansen }
643*59599516SKenneth E. Jansen
644*59599516SKenneth E. Jansen //CHANGE END////////////////////////////////////////////////
closefile(int * fileDescriptor,const char mode[])645*59599516SKenneth E. Jansen void vtkPhastaReader::closefile( int* fileDescriptor,
646*59599516SKenneth E. Jansen const char mode[] )
647*59599516SKenneth E. Jansen //CHANGE///////////////////////////////////////////////
648*59599516SKenneth E. Jansen {
649*59599516SKenneth E. Jansen char* imode = StringStripper( mode );
650*59599516SKenneth E. Jansen
651*59599516SKenneth E. Jansen if( cscompare( "write", imode )
652*59599516SKenneth E. Jansen || cscompare( "append", imode ) ) {
653*59599516SKenneth E. Jansen fflush( fileArray[ *fileDescriptor - 1 ] );
654*59599516SKenneth E. Jansen }
655*59599516SKenneth E. Jansen
656*59599516SKenneth E. Jansen fclose( fileArray[ *fileDescriptor - 1 ] );
657*59599516SKenneth E. Jansen delete [] imode;
658*59599516SKenneth E. Jansen }
659*59599516SKenneth E. Jansen
660*59599516SKenneth E. Jansen
661*59599516SKenneth E. Jansen //CHANGE END///////////////////////////////////////////
662*59599516SKenneth E. Jansen
663*59599516SKenneth E. Jansen
readheader(int * fileDescriptor,const char keyphrase[],void * valueArray,int * nItems,const char datatype[],const char iotype[])664*59599516SKenneth E. Jansen void vtkPhastaReader::readheader( int* fileDescriptor,
665*59599516SKenneth E. Jansen const char keyphrase[],
666*59599516SKenneth E. Jansen void* valueArray,
667*59599516SKenneth E. Jansen int* nItems,
668*59599516SKenneth E. Jansen const char datatype[],
669*59599516SKenneth E. Jansen const char iotype[] )
670*59599516SKenneth E. Jansen //CHANGE////////////////////////////////////////////////////
671*59599516SKenneth E. Jansen {
672*59599516SKenneth E. Jansen int filePtr = *fileDescriptor - 1;
673*59599516SKenneth E. Jansen FILE* fileObject;
674*59599516SKenneth E. Jansen int* valueListInt;
675*59599516SKenneth E. Jansen
676*59599516SKenneth E. Jansen if ( *fileDescriptor < 1 || *fileDescriptor > (int)fileArray.size() ) {
677*59599516SKenneth E. Jansen fprintf(stderr,"No file associated with Descriptor %d\n",*fileDescriptor);
678*59599516SKenneth E. Jansen fprintf(stderr,"openfile_ function has to be called before \n") ;
679*59599516SKenneth E. Jansen fprintf(stderr,"acessing the file\n ") ;
680*59599516SKenneth E. Jansen fprintf(stderr,"fatal error: cannot continue, returning out of call\n");
681*59599516SKenneth E. Jansen return;
682*59599516SKenneth E. Jansen }
683*59599516SKenneth E. Jansen
684*59599516SKenneth E. Jansen LastHeaderKey[ filePtr ] = const_cast< char* >( keyphrase );
685*59599516SKenneth E. Jansen LastHeaderNotFound = false;
686*59599516SKenneth E. Jansen
687*59599516SKenneth E. Jansen fileObject = fileArray[ filePtr ] ;
688*59599516SKenneth E. Jansen Wrong_Endian = byte_order[ filePtr ];
689*59599516SKenneth E. Jansen
690*59599516SKenneth E. Jansen isBinary( iotype );
691*59599516SKenneth E. Jansen typeSize( datatype ); //redundant call, just avoid a compiler warning.
692*59599516SKenneth E. Jansen
693*59599516SKenneth E. Jansen // right now we are making the assumption that we will only write integers
694*59599516SKenneth E. Jansen // on the header line.
695*59599516SKenneth E. Jansen
696*59599516SKenneth E. Jansen valueListInt = static_cast< int* >( valueArray );
697*59599516SKenneth E. Jansen
698*59599516SKenneth E. Jansen /////////////////////////////////////////////////////////
699*59599516SKenneth E. Jansen int j;
700*59599516SKenneth E. Jansen bool FOUND = false ;
701*59599516SKenneth E. Jansen unsigned int skip_size;
702*59599516SKenneth E. Jansen char * token;
703*59599516SKenneth E. Jansen char readouttag[MAX_FIELDS_NUMBER][MAX_FIELDS_NAME_LENGTH];
704*59599516SKenneth E. Jansen
705*59599516SKenneth E. Jansen int string_length = strlen( keyphrase );
706*59599516SKenneth E. Jansen char* buffer = (char*) malloc ( string_length+1 );
707*59599516SKenneth E. Jansen strcpy ( buffer, keyphrase );
708*59599516SKenneth E. Jansen buffer[ string_length ] = '\0';
709*59599516SKenneth E. Jansen
710*59599516SKenneth E. Jansen char* st2 = strtok ( buffer, "@" );
711*59599516SKenneth E. Jansen st2 = strtok (NULL, "@");
712*59599516SKenneth E. Jansen SerialFile->GPid = atoi(st2);
713*59599516SKenneth E. Jansen if ( char* p = strpbrk(buffer, "@") )
714*59599516SKenneth E. Jansen *p = '\0';
715*59599516SKenneth E. Jansen
716*59599516SKenneth E. Jansen //printf("field is %s and nfields is %d\n",keyphrase,SerialFile->nfields);
717*59599516SKenneth E. Jansen
718*59599516SKenneth E. Jansen for ( j = 0; j<SerialFile->nfields; j++ )
719*59599516SKenneth E. Jansen {
720*59599516SKenneth E. Jansen memcpy( readouttag[j],
721*59599516SKenneth E. Jansen SerialFile->masterHeader + j*MAX_FIELDS_NAME_LENGTH+MAX_FIELDS_NAME_LENGTH*2+1,
722*59599516SKenneth E. Jansen MAX_FIELDS_NAME_LENGTH-1 );
723*59599516SKenneth E. Jansen }
724*59599516SKenneth E. Jansen
725*59599516SKenneth E. Jansen for ( j = 0; j<SerialFile->nfields; j++ )
726*59599516SKenneth E. Jansen {
727*59599516SKenneth E. Jansen token = strtok ( readouttag[j], ":" );
728*59599516SKenneth E. Jansen
729*59599516SKenneth E. Jansen if ( cscompare( buffer, token ) )
730*59599516SKenneth E. Jansen {
731*59599516SKenneth E. Jansen SerialFile->read_field_count = j;
732*59599516SKenneth E. Jansen FOUND = true;
733*59599516SKenneth E. Jansen break;
734*59599516SKenneth E. Jansen }
735*59599516SKenneth E. Jansen }
736*59599516SKenneth E. Jansen if (!FOUND)
737*59599516SKenneth E. Jansen {
738*59599516SKenneth E. Jansen printf("Not found %s \n",keyphrase);
739*59599516SKenneth E. Jansen return;
740*59599516SKenneth E. Jansen }
741*59599516SKenneth E. Jansen
742*59599516SKenneth E. Jansen int read_part_count = SerialFile->GPid - ( SerialFile->fileID - 1 ) * SerialFile->nppf - 1;
743*59599516SKenneth E. Jansen SerialFile->my_offset = SerialFile->offset_table[SerialFile->read_field_count][read_part_count];
744*59599516SKenneth E. Jansen
745*59599516SKenneth E. Jansen
746*59599516SKenneth E. Jansen //printf("GP id is %d and fileID is %d and nppf is %d; ",SerialFile->GPid,SerialFile->fileID,SerialFile->nppf);
747*59599516SKenneth E. Jansen //printf("read field count is %d and read part count is %d; ",SerialFile->read_field_count,read_part_count);
748*59599516SKenneth E. Jansen
749*59599516SKenneth E. Jansen char read_out_header[MAX_FIELDS_NAME_LENGTH];
750*59599516SKenneth E. Jansen fseek(fileObject, SerialFile->my_offset+1, SEEK_SET);
751*59599516SKenneth E. Jansen fread( read_out_header, 1, MAX_FIELDS_NAME_LENGTH-1, fileObject );
752*59599516SKenneth E. Jansen
753*59599516SKenneth E. Jansen
754*59599516SKenneth E. Jansen token = strtok ( read_out_header, ":" );
755*59599516SKenneth E. Jansen
756*59599516SKenneth E. Jansen if( cscompare( keyphrase , token ) )
757*59599516SKenneth E. Jansen {
758*59599516SKenneth E. Jansen FOUND = true ;
759*59599516SKenneth E. Jansen token = strtok( NULL, " ,;<>" );
760*59599516SKenneth E. Jansen skip_size = atoi( token );
761*59599516SKenneth E. Jansen for( j=0; j < *nItems && ( token = strtok( NULL," ,;<>") ); j++ )
762*59599516SKenneth E. Jansen valueListInt[j] = atoi( token );
763*59599516SKenneth E. Jansen //printf("$$Keyphrase is %s Value list [0] is %d \n",keyphrase,valueListInt[0] );
764*59599516SKenneth E. Jansen if ( j < *nItems )
765*59599516SKenneth E. Jansen {
766*59599516SKenneth E. Jansen fprintf( stderr, "Expected # of ints not found for: %s\n", keyphrase );
767*59599516SKenneth E. Jansen }
768*59599516SKenneth E. Jansen }
769*59599516SKenneth E. Jansen
770*59599516SKenneth E. Jansen /////////////////////////////////////////////////////////
771*59599516SKenneth E. Jansen
772*59599516SKenneth E. Jansen byte_order[ filePtr ] = Wrong_Endian ;
773*59599516SKenneth E. Jansen
774*59599516SKenneth E. Jansen //if ( ierr ) LastHeaderNotFound = true;
775*59599516SKenneth E. Jansen
776*59599516SKenneth E. Jansen free(buffer);
777*59599516SKenneth E. Jansen
778*59599516SKenneth E. Jansen return;
779*59599516SKenneth E. Jansen }
780*59599516SKenneth E. Jansen
781*59599516SKenneth E. Jansen //CHANGE END////////////////////////////////////////////////
782*59599516SKenneth E. Jansen
readdatablock(int * fileDescriptor,const char keyphrase[],void * valueArray,int * nItems,const char datatype[],const char iotype[])783*59599516SKenneth E. Jansen void vtkPhastaReader::readdatablock( int* fileDescriptor,
784*59599516SKenneth E. Jansen const char keyphrase[],
785*59599516SKenneth E. Jansen void* valueArray,
786*59599516SKenneth E. Jansen int* nItems,
787*59599516SKenneth E. Jansen const char datatype[],
788*59599516SKenneth E. Jansen const char iotype[] )
789*59599516SKenneth E. Jansen //CHANGE//////////////////////////////////////////////////////
790*59599516SKenneth E. Jansen {
791*59599516SKenneth E. Jansen
792*59599516SKenneth E. Jansen int filePtr = *fileDescriptor - 1;
793*59599516SKenneth E. Jansen FILE* fileObject;
794*59599516SKenneth E. Jansen char junk;
795*59599516SKenneth E. Jansen
796*59599516SKenneth E. Jansen if ( *fileDescriptor < 1 || *fileDescriptor > (int)fileArray.size() ) {
797*59599516SKenneth E. Jansen fprintf(stderr,"No file associated with Descriptor %d\n",*fileDescriptor);
798*59599516SKenneth E. Jansen fprintf(stderr,"openfile_ function has to be called before \n") ;
799*59599516SKenneth E. Jansen fprintf(stderr,"acessing the file\n ") ;
800*59599516SKenneth E. Jansen fprintf(stderr,"fatal error: cannot continue, returning out of call\n");
801*59599516SKenneth E. Jansen return;
802*59599516SKenneth E. Jansen }
803*59599516SKenneth E. Jansen
804*59599516SKenneth E. Jansen // error check..
805*59599516SKenneth E. Jansen // since we require that a consistant header always preceed the data block
806*59599516SKenneth E. Jansen // let us check to see that it is actually the case.
807*59599516SKenneth E. Jansen
808*59599516SKenneth E. Jansen if ( ! cscompare( LastHeaderKey[ filePtr ], keyphrase ) ) {
809*59599516SKenneth E. Jansen fprintf(stderr, "Header not consistant with data block\n");
810*59599516SKenneth E. Jansen fprintf(stderr, "Header: %s\n", LastHeaderKey[ filePtr ] );
811*59599516SKenneth E. Jansen fprintf(stderr, "DataBlock: %s\n ", keyphrase );
812*59599516SKenneth E. Jansen fprintf(stderr, "Please recheck read sequence \n");
813*59599516SKenneth E. Jansen if( Strict_Error ) {
814*59599516SKenneth E. Jansen fprintf(stderr, "fatal error: cannot continue, returning out of call\n");
815*59599516SKenneth E. Jansen return;
816*59599516SKenneth E. Jansen }
817*59599516SKenneth E. Jansen }
818*59599516SKenneth E. Jansen
819*59599516SKenneth E. Jansen if ( LastHeaderNotFound ) return;
820*59599516SKenneth E. Jansen
821*59599516SKenneth E. Jansen fileObject = fileArray[ filePtr ];
822*59599516SKenneth E. Jansen Wrong_Endian = byte_order[ filePtr ];
823*59599516SKenneth E. Jansen //printf("in readdatablock(): wrong_endian = %d\n", Wrong_Endian);
824*59599516SKenneth E. Jansen
825*59599516SKenneth E. Jansen size_t type_size = typeSize( datatype );
826*59599516SKenneth E. Jansen int nUnits = *nItems;
827*59599516SKenneth E. Jansen isBinary( iotype );
828*59599516SKenneth E. Jansen
829*59599516SKenneth E. Jansen if ( binary_format ) {
830*59599516SKenneth E. Jansen fseek(fileObject, SerialFile->my_offset+DB_HEADER_SIZE, SEEK_SET);
831*59599516SKenneth E. Jansen
832*59599516SKenneth E. Jansen fread( valueArray, type_size, nUnits, fileObject );
833*59599516SKenneth E. Jansen //fread( &junk, sizeof(char), 1 , fileObject );
834*59599516SKenneth E. Jansen //if ( Wrong_Endian ) SwapArrayByteOrder_( valueArray, type_size, nUnits );
835*59599516SKenneth E. Jansen if ( diff_endian )
836*59599516SKenneth E. Jansen SwapArrayByteOrder_( valueArray, type_size, nUnits ); // fj
837*59599516SKenneth E. Jansen } else {
838*59599516SKenneth E. Jansen
839*59599516SKenneth E. Jansen char* ts1 = StringStripper( datatype );
840*59599516SKenneth E. Jansen if ( cscompare( "integer", ts1 ) ) {
841*59599516SKenneth E. Jansen for( int n=0; n < nUnits ; n++ )
842*59599516SKenneth E. Jansen fscanf(fileObject, "%d\n",(int*)((int*)valueArray+n) );
843*59599516SKenneth E. Jansen } else if ( cscompare( "double", ts1 ) ) {
844*59599516SKenneth E. Jansen for( int n=0; n < nUnits ; n++ )
845*59599516SKenneth E. Jansen fscanf(fileObject, "%lf\n",(double*)((double*)valueArray+n) );
846*59599516SKenneth E. Jansen }
847*59599516SKenneth E. Jansen delete [] ts1;
848*59599516SKenneth E. Jansen }
849*59599516SKenneth E. Jansen return;
850*59599516SKenneth E. Jansen }
851*59599516SKenneth E. Jansen
852*59599516SKenneth E. Jansen // End of copy from phastaIO
853*59599516SKenneth E. Jansen
854*59599516SKenneth E. Jansen
vtkPhastaReader()855*59599516SKenneth E. Jansen vtkPhastaReader::vtkPhastaReader()
856*59599516SKenneth E. Jansen {
857*59599516SKenneth E. Jansen //this->DebugOn(); // TODO: comment out this line to turn off debug
858*59599516SKenneth E. Jansen this->GeometryFileName = NULL;
859*59599516SKenneth E. Jansen this->FieldFileName = NULL;
860*59599516SKenneth E. Jansen this->SetNumberOfInputPorts(0);
861*59599516SKenneth E. Jansen this->Internal = new vtkPhastaReaderInternal;
862*59599516SKenneth E. Jansen
863*59599516SKenneth E. Jansen //////////
864*59599516SKenneth E. Jansen this->Parser = 0;
865*59599516SKenneth E. Jansen this->FileName = 0;
866*59599516SKenneth E. Jansen //////////
867*59599516SKenneth E. Jansen
868*59599516SKenneth E. Jansen }
869*59599516SKenneth E. Jansen
~vtkPhastaReader()870*59599516SKenneth E. Jansen vtkPhastaReader::~vtkPhastaReader()
871*59599516SKenneth E. Jansen {
872*59599516SKenneth E. Jansen if (this->GeometryFileName)
873*59599516SKenneth E. Jansen {
874*59599516SKenneth E. Jansen delete [] this->GeometryFileName;
875*59599516SKenneth E. Jansen }
876*59599516SKenneth E. Jansen if (this->FieldFileName)
877*59599516SKenneth E. Jansen {
878*59599516SKenneth E. Jansen delete [] this->FieldFileName;
879*59599516SKenneth E. Jansen }
880*59599516SKenneth E. Jansen delete this->Internal;
881*59599516SKenneth E. Jansen
882*59599516SKenneth E. Jansen ////////////////////
883*59599516SKenneth E. Jansen if (this->Parser)
884*59599516SKenneth E. Jansen this->Parser->Delete();
885*59599516SKenneth E. Jansen ////////////////////
886*59599516SKenneth E. Jansen
887*59599516SKenneth E. Jansen }
888*59599516SKenneth E. Jansen
ClearFieldInfo()889*59599516SKenneth E. Jansen void vtkPhastaReader::ClearFieldInfo()
890*59599516SKenneth E. Jansen {
891*59599516SKenneth E. Jansen this->Internal->FieldInfoMap.clear();
892*59599516SKenneth E. Jansen }
893*59599516SKenneth E. Jansen
SetFieldInfo(const char * paraviewFieldTag,const char * phastaFieldTag,int index,int numOfComps,int dataDependency,const char * dataType)894*59599516SKenneth E. Jansen void vtkPhastaReader::SetFieldInfo(const char* paraviewFieldTag,
895*59599516SKenneth E. Jansen const char* phastaFieldTag,
896*59599516SKenneth E. Jansen int index,
897*59599516SKenneth E. Jansen int numOfComps,
898*59599516SKenneth E. Jansen int dataDependency,
899*59599516SKenneth E. Jansen const char* dataType)
900*59599516SKenneth E. Jansen {
901*59599516SKenneth E. Jansen //printf("In P setfino\n");
902*59599516SKenneth E. Jansen
903*59599516SKenneth E. Jansen //CHANGE/////////////////////////
904*59599516SKenneth E. Jansen partID_counter=0;
905*59599516SKenneth E. Jansen
906*59599516SKenneth E. Jansen //CHANGE END/////////////////////
907*59599516SKenneth E. Jansen
908*59599516SKenneth E. Jansen vtkPhastaReaderInternal::FieldInfo &info =
909*59599516SKenneth E. Jansen this->Internal->FieldInfoMap[paraviewFieldTag];
910*59599516SKenneth E. Jansen
911*59599516SKenneth E. Jansen info.PhastaFieldTag = phastaFieldTag;
912*59599516SKenneth E. Jansen info.StartIndexInPhastaArray = index;
913*59599516SKenneth E. Jansen info.NumberOfComponents = numOfComps;
914*59599516SKenneth E. Jansen info.DataDependency = dataDependency;
915*59599516SKenneth E. Jansen info.DataType = dataType;
916*59599516SKenneth E. Jansen }
917*59599516SKenneth E. Jansen
RequestData(vtkInformation *,vtkInformationVector **,vtkInformationVector * outputVector)918*59599516SKenneth E. Jansen int vtkPhastaReader::RequestData(vtkInformation*,
919*59599516SKenneth E. Jansen vtkInformationVector**,
920*59599516SKenneth E. Jansen vtkInformationVector* outputVector)
921*59599516SKenneth E. Jansen {
922*59599516SKenneth E. Jansen vtkDebugMacro("In P RequestData");
923*59599516SKenneth E. Jansen
924*59599516SKenneth E. Jansen int firstVertexNo = 0;
925*59599516SKenneth E. Jansen int fvn = 0;
926*59599516SKenneth E. Jansen int noOfNodes, noOfCells, noOfDatas;
927*59599516SKenneth E. Jansen
928*59599516SKenneth E. Jansen
929*59599516SKenneth E. Jansen // get the data object
930*59599516SKenneth E. Jansen //TODO Just Testing
931*59599516SKenneth E. Jansen vtkSmartPointer<vtkInformation> outInfo =
932*59599516SKenneth E. Jansen outputVector->GetInformationObject(0);
933*59599516SKenneth E. Jansen
934*59599516SKenneth E. Jansen //change/////// This part not working
935*59599516SKenneth E. Jansen // get the current piece being requested
936*59599516SKenneth E. Jansen int piece =
937*59599516SKenneth E. Jansen outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_PIECE_NUMBER());
938*59599516SKenneth E. Jansen
939*59599516SKenneth E. Jansen //printf("piece is %d\n",piece);
940*59599516SKenneth E. Jansen
941*59599516SKenneth E. Jansen //partID_counter++;
942*59599516SKenneth E. Jansen partID_counter=PART_ID;
943*59599516SKenneth E. Jansen //change end////////////////
944*59599516SKenneth E. Jansen
945*59599516SKenneth E. Jansen vtkUnstructuredGrid *output = vtkUnstructuredGrid::SafeDownCast(
946*59599516SKenneth E. Jansen outInfo->Get(vtkDataObject::DATA_OBJECT()));
947*59599516SKenneth E. Jansen
948*59599516SKenneth E. Jansen //printf("This geom file is %s\n",this->GeometryFileName);
949*59599516SKenneth E. Jansen
950*59599516SKenneth E. Jansen
951*59599516SKenneth E. Jansen int numPieces=NUM_PIECES, numFiles=NUM_FILES, timeStep=TIME_STEP;
952*59599516SKenneth E. Jansen //int numPieces=8, numFiles=4, timeStep=50400;
953*59599516SKenneth E. Jansen
954*59599516SKenneth E. Jansen int numPiecesPerFile = numPieces/numFiles;
955*59599516SKenneth E. Jansen int fileID;
956*59599516SKenneth E. Jansen fileID = int((partID_counter-1)/numPiecesPerFile)+1;
957*59599516SKenneth E. Jansen
958*59599516SKenneth E. Jansen vtkDebugMacro(<< "FILE_PATH: " << FILE_PATH);
959*59599516SKenneth E. Jansen // FILE_PATH is set to be the path of .pht file ?
960*59599516SKenneth E. Jansen //sprintf(this->FieldFileName,"%s%s.%d.%d",FILE_PATH,"/restart-dat",timeStep,fileID); // this is Ning's version
961*59599516SKenneth E. Jansen
962*59599516SKenneth E. Jansen // the file id of fieldfilename need to be changed to file id now
963*59599516SKenneth E. Jansen char* str = this->FieldFileName;
964*59599516SKenneth E. Jansen for (int i = strlen(this->FieldFileName); i >= 0; i--) {
965*59599516SKenneth E. Jansen if(str[i] != '.')
966*59599516SKenneth E. Jansen str[i] = 0;
967*59599516SKenneth E. Jansen else
968*59599516SKenneth E. Jansen break;
969*59599516SKenneth E. Jansen }
970*59599516SKenneth E. Jansen sprintf(str, "%s%d", str, FILE_ID);
971*59599516SKenneth E. Jansen vtkDebugMacro(<<"tweaked FieldFileName="<<this->FieldFileName);
972*59599516SKenneth E. Jansen ///////////////////////////////////////////////////////////
973*59599516SKenneth E. Jansen
974*59599516SKenneth E. Jansen vtkPoints *points;
975*59599516SKenneth E. Jansen
976*59599516SKenneth E. Jansen output->Allocate(10000, 2100);
977*59599516SKenneth E. Jansen
978*59599516SKenneth E. Jansen points = vtkPoints::New();
979*59599516SKenneth E. Jansen
980*59599516SKenneth E. Jansen vtkDebugMacro(<<"Reading Phasta file...");
981*59599516SKenneth E. Jansen
982*59599516SKenneth E. Jansen if(!this->GeometryFileName || !this->FieldFileName )
983*59599516SKenneth E. Jansen {
984*59599516SKenneth E. Jansen vtkErrorMacro(<<"All input parameters not set.");
985*59599516SKenneth E. Jansen return 0;
986*59599516SKenneth E. Jansen }
987*59599516SKenneth E. Jansen vtkDebugMacro(<< "Updating ensa with ....");
988*59599516SKenneth E. Jansen vtkDebugMacro(<< "Geom File : " << this->GeometryFileName);
989*59599516SKenneth E. Jansen vtkDebugMacro(<< "Field File : " << this->FieldFileName);
990*59599516SKenneth E. Jansen
991*59599516SKenneth E. Jansen fvn = firstVertexNo;
992*59599516SKenneth E. Jansen this->ReadGeomFile(this->GeometryFileName, firstVertexNo, points, noOfNodes, noOfCells);
993*59599516SKenneth E. Jansen /* set the points over here, this is because vtkUnStructuredGrid
994*59599516SKenneth E. Jansen only insert points once, next insertion overwrites the previous one */
995*59599516SKenneth E. Jansen // acbauer is not sure why the above comment is about...
996*59599516SKenneth E. Jansen output->SetPoints(points);
997*59599516SKenneth E. Jansen points->Delete();
998*59599516SKenneth E. Jansen
999*59599516SKenneth E. Jansen if (!this->Internal->FieldInfoMap.size())
1000*59599516SKenneth E. Jansen {
1001*59599516SKenneth E. Jansen vtkDataSetAttributes* field = output->GetPointData();
1002*59599516SKenneth E. Jansen this->ReadFieldFile(this->FieldFileName, fvn, field, noOfNodes);
1003*59599516SKenneth E. Jansen }
1004*59599516SKenneth E. Jansen else
1005*59599516SKenneth E. Jansen {
1006*59599516SKenneth E. Jansen this->ReadFieldFile(this->FieldFileName, fvn, output, noOfDatas);
1007*59599516SKenneth E. Jansen }
1008*59599516SKenneth E. Jansen
1009*59599516SKenneth E. Jansen // if there exists point arrays called coordsX, coordsY and coordsZ,
1010*59599516SKenneth E. Jansen // create another array of point data and set the output to use this
1011*59599516SKenneth E. Jansen vtkPointData* pointData = output->GetPointData();
1012*59599516SKenneth E. Jansen vtkDoubleArray* coordsX = vtkDoubleArray::SafeDownCast(
1013*59599516SKenneth E. Jansen pointData->GetArray("coordsX"));
1014*59599516SKenneth E. Jansen vtkDoubleArray* coordsY = vtkDoubleArray::SafeDownCast(
1015*59599516SKenneth E. Jansen pointData->GetArray("coordsY"));
1016*59599516SKenneth E. Jansen vtkDoubleArray* coordsZ = vtkDoubleArray::SafeDownCast(
1017*59599516SKenneth E. Jansen pointData->GetArray("coordsZ"));
1018*59599516SKenneth E. Jansen if(coordsX && coordsY && coordsZ)
1019*59599516SKenneth E. Jansen {
1020*59599516SKenneth E. Jansen vtkIdType numPoints = output->GetPoints()->GetNumberOfPoints();
1021*59599516SKenneth E. Jansen if(numPoints != coordsX->GetNumberOfTuples() ||
1022*59599516SKenneth E. Jansen numPoints != coordsY->GetNumberOfTuples() ||
1023*59599516SKenneth E. Jansen numPoints != coordsZ->GetNumberOfTuples() )
1024*59599516SKenneth E. Jansen {
1025*59599516SKenneth E. Jansen vtkWarningMacro("Wrong number of points for moving mesh. Using original points.");
1026*59599516SKenneth E. Jansen return 0;
1027*59599516SKenneth E. Jansen }
1028*59599516SKenneth E. Jansen vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
1029*59599516SKenneth E. Jansen points->DeepCopy(output->GetPoints());
1030*59599516SKenneth E. Jansen for(vtkIdType i=0;i<numPoints;i++)
1031*59599516SKenneth E. Jansen {
1032*59599516SKenneth E. Jansen points->SetPoint(i, coordsX->GetValue(i), coordsY->GetValue(i),
1033*59599516SKenneth E. Jansen coordsZ->GetValue(i));
1034*59599516SKenneth E. Jansen }
1035*59599516SKenneth E. Jansen output->SetPoints(points);
1036*59599516SKenneth E. Jansen }
1037*59599516SKenneth E. Jansen
1038*59599516SKenneth E. Jansen //printf("end of RequestData():");
1039*59599516SKenneth E. Jansen //printf("counter = %ld\n", counter++);
1040*59599516SKenneth E. Jansen
1041*59599516SKenneth E. Jansen vtkDebugMacro("end of P RequestData() # of pieces is "<<numPieces << ", partID_counter = "<< partID_counter);
1042*59599516SKenneth E. Jansen vtkDebugMacro("-------> total open time is "<< opentime_total);
1043*59599516SKenneth E. Jansen
1044*59599516SKenneth E. Jansen return 1;
1045*59599516SKenneth E. Jansen }
1046*59599516SKenneth E. Jansen
1047*59599516SKenneth E. Jansen /* firstVertexNo is useful when reading multiple geom files and coalescing
1048*59599516SKenneth E. Jansen them into one, ReadGeomfile can then be called repeatedly from Execute with
1049*59599516SKenneth E. Jansen firstVertexNo forming consecutive series of vertex numbers */
1050*59599516SKenneth E. Jansen
ReadGeomFile(char * geomFileName,int & firstVertexNo,vtkPoints * points,int & num_nodes,int & num_cells)1051*59599516SKenneth E. Jansen void vtkPhastaReader::ReadGeomFile(char* geomFileName,
1052*59599516SKenneth E. Jansen int &firstVertexNo,
1053*59599516SKenneth E. Jansen vtkPoints *points,
1054*59599516SKenneth E. Jansen int &num_nodes,
1055*59599516SKenneth E. Jansen int &num_cells)
1056*59599516SKenneth E. Jansen {
1057*59599516SKenneth E. Jansen vtkDebugMacro("in P ReadGeomFile(): partID="<<partID_counter);
1058*59599516SKenneth E. Jansen
1059*59599516SKenneth E. Jansen /* variables for vtk */
1060*59599516SKenneth E. Jansen vtkUnstructuredGrid *output = this->GetOutput();
1061*59599516SKenneth E. Jansen double *coordinates;
1062*59599516SKenneth E. Jansen vtkIdType *nodes;
1063*59599516SKenneth E. Jansen int cell_type;
1064*59599516SKenneth E. Jansen
1065*59599516SKenneth E. Jansen // int num_tpblocks;
1066*59599516SKenneth E. Jansen /* variables for the geom data file */
1067*59599516SKenneth E. Jansen /* nodal information */
1068*59599516SKenneth E. Jansen // int byte_order;
1069*59599516SKenneth E. Jansen //int data[11], data1[7];
1070*59599516SKenneth E. Jansen int dim;
1071*59599516SKenneth E. Jansen int num_int_blocks;
1072*59599516SKenneth E. Jansen double *pos;
1073*59599516SKenneth E. Jansen //int *nlworkdata;
1074*59599516SKenneth E. Jansen /* element information */
1075*59599516SKenneth E. Jansen int num_elems,num_vertices,num_per_line;
1076*59599516SKenneth E. Jansen int *connectivity = NULL;
1077*59599516SKenneth E. Jansen
1078*59599516SKenneth E. Jansen
1079*59599516SKenneth E. Jansen /* misc variables*/
1080*59599516SKenneth E. Jansen int i, j,k,item;
1081*59599516SKenneth E. Jansen int geomfile;
1082*59599516SKenneth E. Jansen
1083*59599516SKenneth E. Jansen //CHANGE///////////////////////////////////////
1084*59599516SKenneth E. Jansen int getNfiles, getNPPF;
1085*59599516SKenneth E. Jansen queryphmpiio_(geomFileName,&getNfiles,&getNPPF);
1086*59599516SKenneth E. Jansen char fieldName[255];
1087*59599516SKenneth E. Jansen
1088*59599516SKenneth E. Jansen
1089*59599516SKenneth E. Jansen //CHANGE END///////////////////////////////////
1090*59599516SKenneth E. Jansen
1091*59599516SKenneth E. Jansen openfile(geomFileName,"read",&geomfile);
1092*59599516SKenneth E. Jansen //geomfile = fopen(GeometryFileName,"rb");
1093*59599516SKenneth E. Jansen
1094*59599516SKenneth E. Jansen if(!geomfile)
1095*59599516SKenneth E. Jansen {
1096*59599516SKenneth E. Jansen vtkErrorMacro(<<"Cannot open file " << geomFileName);
1097*59599516SKenneth E. Jansen //return;
1098*59599516SKenneth E. Jansen }
1099*59599516SKenneth E. Jansen
1100*59599516SKenneth E. Jansen int expect;
1101*59599516SKenneth E. Jansen int array[10];
1102*59599516SKenneth E. Jansen expect = 1;
1103*59599516SKenneth E. Jansen
1104*59599516SKenneth E. Jansen /* read number of nodes */
1105*59599516SKenneth E. Jansen
1106*59599516SKenneth E. Jansen ///CHANGE/////////////////////////////////////////////////////
1107*59599516SKenneth E. Jansen bzero((void*)fieldName,255);
1108*59599516SKenneth E. Jansen sprintf(fieldName,"%s@%d","number of nodes",partID_counter);
1109*59599516SKenneth E. Jansen ///CHANGE END//////////////////////////////////////////////////
1110*59599516SKenneth E. Jansen readheader(&geomfile,fieldName,array,&expect,"integer","binary");
1111*59599516SKenneth E. Jansen //readheader(&geomfile,"number of nodes",array,&expect,"integer","binary");
1112*59599516SKenneth E. Jansen vtkDebugMacro("after readheader(), fieldName=" << fieldName << ", geomfile (file desc) = " << geomfile);
1113*59599516SKenneth E. Jansen num_nodes = array[0];
1114*59599516SKenneth E. Jansen
1115*59599516SKenneth E. Jansen /* read number of elements */
1116*59599516SKenneth E. Jansen
1117*59599516SKenneth E. Jansen ///CHANGE/////////////////////////////////////////////////////
1118*59599516SKenneth E. Jansen bzero((void*)fieldName,255);
1119*59599516SKenneth E. Jansen sprintf(fieldName,"%s@%d","number of interior elements",partID_counter);
1120*59599516SKenneth E. Jansen ///CHANGE END//////////////////////////////////////////////////
1121*59599516SKenneth E. Jansen readheader(&geomfile,fieldName,array,&expect,"integer","binary");
1122*59599516SKenneth E. Jansen
1123*59599516SKenneth E. Jansen /*readheader(&geomfile,
1124*59599516SKenneth E. Jansen "number of interior elements",
1125*59599516SKenneth E. Jansen array,
1126*59599516SKenneth E. Jansen &expect,
1127*59599516SKenneth E. Jansen "integer",
1128*59599516SKenneth E. Jansen "binary");
1129*59599516SKenneth E. Jansen */
1130*59599516SKenneth E. Jansen num_elems = array[0];
1131*59599516SKenneth E. Jansen num_cells = array[0];
1132*59599516SKenneth E. Jansen
1133*59599516SKenneth E. Jansen /* read number of interior */
1134*59599516SKenneth E. Jansen
1135*59599516SKenneth E. Jansen ///CHANGE/////////////////////////////////////////////////////
1136*59599516SKenneth E. Jansen bzero((void*)fieldName,255);
1137*59599516SKenneth E. Jansen sprintf(fieldName,"%s@%d","number of interior tpblocks",partID_counter);
1138*59599516SKenneth E. Jansen ///CHANGE END//////////////////////////////////////////////////
1139*59599516SKenneth E. Jansen readheader(&geomfile,fieldName,array,&expect,"integer","binary");
1140*59599516SKenneth E. Jansen
1141*59599516SKenneth E. Jansen
1142*59599516SKenneth E. Jansen /*readheader(&geomfile,
1143*59599516SKenneth E. Jansen "number of interior tpblocks",
1144*59599516SKenneth E. Jansen array,
1145*59599516SKenneth E. Jansen &expect,
1146*59599516SKenneth E. Jansen "integer",
1147*59599516SKenneth E. Jansen "binary");
1148*59599516SKenneth E. Jansen */
1149*59599516SKenneth E. Jansen num_int_blocks = array[0];
1150*59599516SKenneth E. Jansen
1151*59599516SKenneth E. Jansen vtkDebugMacro ( << "Nodes: " << num_nodes
1152*59599516SKenneth E. Jansen << "Elements: " << num_elems
1153*59599516SKenneth E. Jansen << "tpblocks: " << num_int_blocks );
1154*59599516SKenneth E. Jansen
1155*59599516SKenneth E. Jansen /* read coordinates */
1156*59599516SKenneth E. Jansen expect = 2;
1157*59599516SKenneth E. Jansen
1158*59599516SKenneth E. Jansen ///CHANGE/////////////////////////////////////////////////////
1159*59599516SKenneth E. Jansen bzero((void*)fieldName,255);
1160*59599516SKenneth E. Jansen sprintf(fieldName,"%s@%d","co-ordinates",partID_counter);
1161*59599516SKenneth E. Jansen ///CHANGE END//////////////////////////////////////////////////
1162*59599516SKenneth E. Jansen readheader(&geomfile,fieldName,array,&expect,"double","binary");
1163*59599516SKenneth E. Jansen
1164*59599516SKenneth E. Jansen
1165*59599516SKenneth E. Jansen //readheader(&geomfile,"co-ordinates",array,&expect,"double","binary");
1166*59599516SKenneth E. Jansen // TEST *******************
1167*59599516SKenneth E. Jansen num_nodes=array[0];
1168*59599516SKenneth E. Jansen // TEST *******************
1169*59599516SKenneth E. Jansen if(num_nodes !=array[0])
1170*59599516SKenneth E. Jansen {
1171*59599516SKenneth E. Jansen vtkErrorMacro(<<"Ambigous information in geom.data file, number of nodes does not match the co-ordinates size. Nodes: " << num_nodes << " Coordinates: " << array[0]);
1172*59599516SKenneth E. Jansen return;
1173*59599516SKenneth E. Jansen }
1174*59599516SKenneth E. Jansen dim = array[1];
1175*59599516SKenneth E. Jansen
1176*59599516SKenneth E. Jansen
1177*59599516SKenneth E. Jansen /* read the coordinates */
1178*59599516SKenneth E. Jansen
1179*59599516SKenneth E. Jansen coordinates = new double [dim];
1180*59599516SKenneth E. Jansen if(coordinates == NULL)
1181*59599516SKenneth E. Jansen {
1182*59599516SKenneth E. Jansen vtkErrorMacro(<<"Unable to allocate memory for nodal info");
1183*59599516SKenneth E. Jansen return;
1184*59599516SKenneth E. Jansen }
1185*59599516SKenneth E. Jansen
1186*59599516SKenneth E. Jansen pos = new double [num_nodes*dim];
1187*59599516SKenneth E. Jansen if(pos == NULL)
1188*59599516SKenneth E. Jansen {
1189*59599516SKenneth E. Jansen vtkErrorMacro(<<"Unable to allocate memory for nodal info");
1190*59599516SKenneth E. Jansen return;
1191*59599516SKenneth E. Jansen }
1192*59599516SKenneth E. Jansen
1193*59599516SKenneth E. Jansen item = num_nodes*dim;
1194*59599516SKenneth E. Jansen
1195*59599516SKenneth E. Jansen //CHANGE
1196*59599516SKenneth E. Jansen //readdatablock(&geomfile,"co-ordinates",pos,&item,"double","binary");
1197*59599516SKenneth E. Jansen //CHANGE END
1198*59599516SKenneth E. Jansen readdatablock(&geomfile,fieldName,pos,&item,"double","binary");
1199*59599516SKenneth E. Jansen
1200*59599516SKenneth E. Jansen for(i=0;i<num_nodes;i++)
1201*59599516SKenneth E. Jansen {
1202*59599516SKenneth E. Jansen for(j=0;j<dim;j++)
1203*59599516SKenneth E. Jansen {
1204*59599516SKenneth E. Jansen coordinates[j] = pos[j*num_nodes + i];
1205*59599516SKenneth E. Jansen }
1206*59599516SKenneth E. Jansen switch(dim)
1207*59599516SKenneth E. Jansen {
1208*59599516SKenneth E. Jansen case 1:
1209*59599516SKenneth E. Jansen points->InsertPoint(i+firstVertexNo,coordinates[0],0,0);
1210*59599516SKenneth E. Jansen break;
1211*59599516SKenneth E. Jansen case 2:
1212*59599516SKenneth E. Jansen points->InsertPoint(i+firstVertexNo,coordinates[0],coordinates[1],0);
1213*59599516SKenneth E. Jansen break;
1214*59599516SKenneth E. Jansen case 3:
1215*59599516SKenneth E. Jansen points->InsertNextPoint(coordinates);
1216*59599516SKenneth E. Jansen break;
1217*59599516SKenneth E. Jansen default:
1218*59599516SKenneth E. Jansen vtkErrorMacro(<<"Unrecognized dimension in "<< geomFileName)
1219*59599516SKenneth E. Jansen return;
1220*59599516SKenneth E. Jansen }
1221*59599516SKenneth E. Jansen }
1222*59599516SKenneth E. Jansen
1223*59599516SKenneth E. Jansen /* read the connectivity information */
1224*59599516SKenneth E. Jansen expect = 7;
1225*59599516SKenneth E. Jansen
1226*59599516SKenneth E. Jansen for(k=0;k<num_int_blocks;k++)
1227*59599516SKenneth E. Jansen {
1228*59599516SKenneth E. Jansen
1229*59599516SKenneth E. Jansen ///CHANGE/////////////////////////////////////////////////////
1230*59599516SKenneth E. Jansen bzero((void*)fieldName,255);
1231*59599516SKenneth E. Jansen sprintf(fieldName,"%s%d@%d","connectivity interior",k+1,partID_counter);
1232*59599516SKenneth E. Jansen ///CHANGE END//////////////////////////////////////////////////
1233*59599516SKenneth E. Jansen
1234*59599516SKenneth E. Jansen readheader(&geomfile,
1235*59599516SKenneth E. Jansen fieldName,
1236*59599516SKenneth E. Jansen array,
1237*59599516SKenneth E. Jansen &expect,
1238*59599516SKenneth E. Jansen "integer",
1239*59599516SKenneth E. Jansen "binary");
1240*59599516SKenneth E. Jansen
1241*59599516SKenneth E. Jansen /*readheader(&geomfile,
1242*59599516SKenneth E. Jansen "connectivity interior",
1243*59599516SKenneth E. Jansen array,
1244*59599516SKenneth E. Jansen &expect,
1245*59599516SKenneth E. Jansen "integer",
1246*59599516SKenneth E. Jansen "binary");
1247*59599516SKenneth E. Jansen */
1248*59599516SKenneth E. Jansen
1249*59599516SKenneth E. Jansen /* read information about the block*/
1250*59599516SKenneth E. Jansen num_elems = array[0];
1251*59599516SKenneth E. Jansen num_vertices = array[1];
1252*59599516SKenneth E. Jansen num_per_line = array[3];
1253*59599516SKenneth E. Jansen connectivity = new int [num_elems*num_per_line];
1254*59599516SKenneth E. Jansen
1255*59599516SKenneth E. Jansen if(connectivity == NULL)
1256*59599516SKenneth E. Jansen {
1257*59599516SKenneth E. Jansen vtkErrorMacro(<<"Unable to allocate memory for connectivity info");
1258*59599516SKenneth E. Jansen return;
1259*59599516SKenneth E. Jansen }
1260*59599516SKenneth E. Jansen
1261*59599516SKenneth E. Jansen item = num_elems*num_per_line;
1262*59599516SKenneth E. Jansen /*readdatablock(&geomfile,
1263*59599516SKenneth E. Jansen "connectivity interior",
1264*59599516SKenneth E. Jansen connectivity,
1265*59599516SKenneth E. Jansen &item,
1266*59599516SKenneth E. Jansen "integer",
1267*59599516SKenneth E. Jansen "binary");
1268*59599516SKenneth E. Jansen */
1269*59599516SKenneth E. Jansen
1270*59599516SKenneth E. Jansen readdatablock(&geomfile,
1271*59599516SKenneth E. Jansen fieldName,
1272*59599516SKenneth E. Jansen connectivity,
1273*59599516SKenneth E. Jansen &item,
1274*59599516SKenneth E. Jansen "integer",
1275*59599516SKenneth E. Jansen "binary");
1276*59599516SKenneth E. Jansen
1277*59599516SKenneth E. Jansen /* insert cells */
1278*59599516SKenneth E. Jansen for(i=0;i<num_elems;i++)
1279*59599516SKenneth E. Jansen {
1280*59599516SKenneth E. Jansen nodes = new vtkIdType[num_vertices];
1281*59599516SKenneth E. Jansen
1282*59599516SKenneth E. Jansen //connectivity starts from 1 so node[j] will never be -ve
1283*59599516SKenneth E. Jansen for(j=0;j<num_vertices;j++)
1284*59599516SKenneth E. Jansen {
1285*59599516SKenneth E. Jansen nodes[j] = connectivity[i+num_elems*j] + firstVertexNo - 1;
1286*59599516SKenneth E. Jansen }
1287*59599516SKenneth E. Jansen
1288*59599516SKenneth E. Jansen /* 1 is subtracted from the connectivity info to reflect that in vtk
1289*59599516SKenneth E. Jansen vertex numbering start from 0 as opposed to 1 in geomfile */
1290*59599516SKenneth E. Jansen
1291*59599516SKenneth E. Jansen // find out element type
1292*59599516SKenneth E. Jansen switch(num_vertices)
1293*59599516SKenneth E. Jansen {
1294*59599516SKenneth E. Jansen case 4:
1295*59599516SKenneth E. Jansen cell_type = VTK_TETRA;
1296*59599516SKenneth E. Jansen break;
1297*59599516SKenneth E. Jansen case 5:
1298*59599516SKenneth E. Jansen cell_type = VTK_PYRAMID;
1299*59599516SKenneth E. Jansen break;
1300*59599516SKenneth E. Jansen case 6:
1301*59599516SKenneth E. Jansen cell_type = VTK_WEDGE;
1302*59599516SKenneth E. Jansen break;
1303*59599516SKenneth E. Jansen case 8:
1304*59599516SKenneth E. Jansen cell_type = VTK_HEXAHEDRON;
1305*59599516SKenneth E. Jansen
1306*59599516SKenneth E. Jansen break;
1307*59599516SKenneth E. Jansen default:
1308*59599516SKenneth E. Jansen vtkErrorMacro(<<"Unrecognized CELL_TYPE in "<< geomFileName)
1309*59599516SKenneth E. Jansen return;
1310*59599516SKenneth E. Jansen }
1311*59599516SKenneth E. Jansen
1312*59599516SKenneth E. Jansen /* insert the element */
1313*59599516SKenneth E. Jansen output->InsertNextCell(cell_type,num_vertices,nodes);
1314*59599516SKenneth E. Jansen delete [] nodes;
1315*59599516SKenneth E. Jansen }
1316*59599516SKenneth E. Jansen }
1317*59599516SKenneth E. Jansen // update the firstVertexNo so that next slice/partition can be read
1318*59599516SKenneth E. Jansen firstVertexNo = firstVertexNo + num_nodes;
1319*59599516SKenneth E. Jansen
1320*59599516SKenneth E. Jansen // clean up
1321*59599516SKenneth E. Jansen closefile(&geomfile,"read");
1322*59599516SKenneth E. Jansen finalizephmpiio_(&geomfile);
1323*59599516SKenneth E. Jansen delete [] coordinates;
1324*59599516SKenneth E. Jansen delete [] pos;
1325*59599516SKenneth E. Jansen delete [] connectivity;
1326*59599516SKenneth E. Jansen
1327*59599516SKenneth E. Jansen } // end of ReadGeomFile
1328*59599516SKenneth E. Jansen
ReadFieldFile(char * fieldFileName,int,vtkDataSetAttributes * field,int & noOfNodes)1329*59599516SKenneth E. Jansen void vtkPhastaReader::ReadFieldFile(char* fieldFileName,
1330*59599516SKenneth E. Jansen int,
1331*59599516SKenneth E. Jansen vtkDataSetAttributes *field,
1332*59599516SKenneth E. Jansen int &noOfNodes)
1333*59599516SKenneth E. Jansen {
1334*59599516SKenneth E. Jansen
1335*59599516SKenneth E. Jansen vtkDebugMacro("In P ReadFieldFile (vtkDataSetAttr), readheader etc calls need to be updated..");
1336*59599516SKenneth E. Jansen
1337*59599516SKenneth E. Jansen int i, j;
1338*59599516SKenneth E. Jansen int item;
1339*59599516SKenneth E. Jansen double *data;
1340*59599516SKenneth E. Jansen int fieldfile;
1341*59599516SKenneth E. Jansen
1342*59599516SKenneth E. Jansen int getNfiles, getNPPF;
1343*59599516SKenneth E. Jansen queryphmpiio_(fieldFileName,&getNfiles,&getNPPF);
1344*59599516SKenneth E. Jansen
1345*59599516SKenneth E. Jansen openfile(fieldFileName,"read",&fieldfile);
1346*59599516SKenneth E. Jansen //fieldfile = fopen(FieldFileName,"rb");
1347*59599516SKenneth E. Jansen
1348*59599516SKenneth E. Jansen if(!fieldfile)
1349*59599516SKenneth E. Jansen {
1350*59599516SKenneth E. Jansen vtkErrorMacro(<<"Cannot open file " << FieldFileName)
1351*59599516SKenneth E. Jansen return;
1352*59599516SKenneth E. Jansen }
1353*59599516SKenneth E. Jansen int array[10], expect;
1354*59599516SKenneth E. Jansen
1355*59599516SKenneth E. Jansen /* read the solution */
1356*59599516SKenneth E. Jansen vtkDoubleArray* pressure = vtkDoubleArray::New();
1357*59599516SKenneth E. Jansen pressure->SetName("pressure");
1358*59599516SKenneth E. Jansen vtkDoubleArray* velocity = vtkDoubleArray::New();
1359*59599516SKenneth E. Jansen velocity->SetName("velocity");
1360*59599516SKenneth E. Jansen velocity->SetNumberOfComponents(3);
1361*59599516SKenneth E. Jansen vtkDoubleArray* temperature = vtkDoubleArray::New();
1362*59599516SKenneth E. Jansen temperature->SetName("temperature");
1363*59599516SKenneth E. Jansen
1364*59599516SKenneth E. Jansen expect = 3;
1365*59599516SKenneth E. Jansen readheader(&fieldfile,"solution",array,&expect,"double","binary");
1366*59599516SKenneth E. Jansen noOfNodes = array[0];
1367*59599516SKenneth E. Jansen this->NumberOfVariables = array[1];
1368*59599516SKenneth E. Jansen
1369*59599516SKenneth E. Jansen vtkDoubleArray* sArrays[4];
1370*59599516SKenneth E. Jansen for (i=0; i<4; i++)
1371*59599516SKenneth E. Jansen {
1372*59599516SKenneth E. Jansen sArrays[i] = 0;
1373*59599516SKenneth E. Jansen }
1374*59599516SKenneth E. Jansen item = noOfNodes*this->NumberOfVariables;
1375*59599516SKenneth E. Jansen data = new double[item];
1376*59599516SKenneth E. Jansen if(data == NULL)
1377*59599516SKenneth E. Jansen {
1378*59599516SKenneth E. Jansen vtkErrorMacro(<<"Unable to allocate memory for field info");
1379*59599516SKenneth E. Jansen return;
1380*59599516SKenneth E. Jansen }
1381*59599516SKenneth E. Jansen
1382*59599516SKenneth E. Jansen readdatablock(&fieldfile,"solution",data,&item,"double","binary");
1383*59599516SKenneth E. Jansen
1384*59599516SKenneth E. Jansen for (i=5; i<this->NumberOfVariables; i++)
1385*59599516SKenneth E. Jansen {
1386*59599516SKenneth E. Jansen int idx=i-5;
1387*59599516SKenneth E. Jansen sArrays[idx] = vtkDoubleArray::New();
1388*59599516SKenneth E. Jansen vtksys_ios::ostringstream aName;
1389*59599516SKenneth E. Jansen aName << "s" << idx+1 << ends;
1390*59599516SKenneth E. Jansen sArrays[idx]->SetName(aName.str().c_str());
1391*59599516SKenneth E. Jansen sArrays[idx]->SetNumberOfTuples(noOfNodes);
1392*59599516SKenneth E. Jansen }
1393*59599516SKenneth E. Jansen
1394*59599516SKenneth E. Jansen pressure->SetNumberOfTuples(noOfNodes);
1395*59599516SKenneth E. Jansen velocity->SetNumberOfTuples(noOfNodes);
1396*59599516SKenneth E. Jansen temperature->SetNumberOfTuples(noOfNodes);
1397*59599516SKenneth E. Jansen for(i=0;i<noOfNodes;i++)
1398*59599516SKenneth E. Jansen {
1399*59599516SKenneth E. Jansen pressure->SetTuple1(i, data[i]);
1400*59599516SKenneth E. Jansen velocity->SetTuple3(i,
1401*59599516SKenneth E. Jansen data[noOfNodes + i],
1402*59599516SKenneth E. Jansen data[2*noOfNodes + i],
1403*59599516SKenneth E. Jansen data[3*noOfNodes + i]);
1404*59599516SKenneth E. Jansen temperature->SetTuple1(i, data[4*noOfNodes + i]);
1405*59599516SKenneth E. Jansen for(j=5; j<this->NumberOfVariables; j++)
1406*59599516SKenneth E. Jansen {
1407*59599516SKenneth E. Jansen sArrays[j-5]->SetTuple1(i, data[j*noOfNodes + i]);
1408*59599516SKenneth E. Jansen }
1409*59599516SKenneth E. Jansen }
1410*59599516SKenneth E. Jansen
1411*59599516SKenneth E. Jansen field->AddArray(pressure);
1412*59599516SKenneth E. Jansen field->SetActiveScalars("pressure");
1413*59599516SKenneth E. Jansen pressure->Delete();
1414*59599516SKenneth E. Jansen field->AddArray(velocity);
1415*59599516SKenneth E. Jansen field->SetActiveVectors("velocity");
1416*59599516SKenneth E. Jansen velocity->Delete();
1417*59599516SKenneth E. Jansen field->AddArray(temperature);
1418*59599516SKenneth E. Jansen temperature->Delete();
1419*59599516SKenneth E. Jansen
1420*59599516SKenneth E. Jansen for (i=5; i<this->NumberOfVariables; i++)
1421*59599516SKenneth E. Jansen {
1422*59599516SKenneth E. Jansen int idx=i-5;
1423*59599516SKenneth E. Jansen field->AddArray(sArrays[idx]);
1424*59599516SKenneth E. Jansen sArrays[idx]->Delete();
1425*59599516SKenneth E. Jansen }
1426*59599516SKenneth E. Jansen
1427*59599516SKenneth E. Jansen // clean up
1428*59599516SKenneth E. Jansen closefile(&fieldfile,"read");
1429*59599516SKenneth E. Jansen finalizephmpiio_(&fieldfile);
1430*59599516SKenneth E. Jansen delete [] data;
1431*59599516SKenneth E. Jansen
1432*59599516SKenneth E. Jansen } //closes ReadFieldFile (vtkDataSetAttr)
1433*59599516SKenneth E. Jansen
1434*59599516SKenneth E. Jansen
ReadFieldFile(char * fieldFileName,int,vtkUnstructuredGrid * output,int & noOfDatas)1435*59599516SKenneth E. Jansen void vtkPhastaReader::ReadFieldFile(char* fieldFileName,
1436*59599516SKenneth E. Jansen int,
1437*59599516SKenneth E. Jansen vtkUnstructuredGrid *output,
1438*59599516SKenneth E. Jansen int &noOfDatas)
1439*59599516SKenneth E. Jansen {
1440*59599516SKenneth E. Jansen
1441*59599516SKenneth E. Jansen vtkDebugMacro("In P ReadFieldFile (vtkUnstructuredGrid): fieldFileName="<<fieldFileName << ", partID_counter=" << partID_counter);
1442*59599516SKenneth E. Jansen
1443*59599516SKenneth E. Jansen int i, j, numOfVars;
1444*59599516SKenneth E. Jansen int item;
1445*59599516SKenneth E. Jansen int fieldfile;
1446*59599516SKenneth E. Jansen
1447*59599516SKenneth E. Jansen //printf("In P readfieldfile 2 and %d\n",partID_counter);
1448*59599516SKenneth E. Jansen //printf("read filed file name is %s\n",fieldFileName);
1449*59599516SKenneth E. Jansen
1450*59599516SKenneth E. Jansen //CHANGE///////////////////////////////////////
1451*59599516SKenneth E. Jansen int getNfiles, getNPPF;
1452*59599516SKenneth E. Jansen queryphmpiio_(fieldFileName,&getNfiles,&getNPPF);
1453*59599516SKenneth E. Jansen char fieldName[255];
1454*59599516SKenneth E. Jansen
1455*59599516SKenneth E. Jansen //CHANGE END///////////////////////////////////
1456*59599516SKenneth E. Jansen
1457*59599516SKenneth E. Jansen openfile(fieldFileName,"read",&fieldfile);
1458*59599516SKenneth E. Jansen //fieldfile = fopen(FieldFileName,"rb");
1459*59599516SKenneth E. Jansen
1460*59599516SKenneth E. Jansen //printf("open handle is %d\n",fieldfile);
1461*59599516SKenneth E. Jansen
1462*59599516SKenneth E. Jansen if(!fieldfile)
1463*59599516SKenneth E. Jansen {
1464*59599516SKenneth E. Jansen vtkErrorMacro(<<"Cannot open file " << FieldFileName)
1465*59599516SKenneth E. Jansen //return;
1466*59599516SKenneth E. Jansen }
1467*59599516SKenneth E. Jansen int array[10], expect;
1468*59599516SKenneth E. Jansen
1469*59599516SKenneth E. Jansen int activeScalars = 0, activeTensors = 0;
1470*59599516SKenneth E. Jansen
1471*59599516SKenneth E. Jansen vtkPhastaReaderInternal::FieldInfoMapType::iterator it = this->Internal->FieldInfoMap.begin();
1472*59599516SKenneth E. Jansen vtkPhastaReaderInternal::FieldInfoMapType::iterator itend = this->Internal->FieldInfoMap.end();
1473*59599516SKenneth E. Jansen for(; it!=itend; it++)
1474*59599516SKenneth E. Jansen {
1475*59599516SKenneth E. Jansen const char* paraviewFieldTag = it->first.c_str();
1476*59599516SKenneth E. Jansen const char* phastaFieldTag = it->second.PhastaFieldTag.c_str();
1477*59599516SKenneth E. Jansen int index = it->second.StartIndexInPhastaArray;
1478*59599516SKenneth E. Jansen int numOfComps = it->second.NumberOfComponents;
1479*59599516SKenneth E. Jansen int dataDependency = it->second.DataDependency;
1480*59599516SKenneth E. Jansen const char* dataType = it->second.DataType.c_str();
1481*59599516SKenneth E. Jansen
1482*59599516SKenneth E. Jansen
1483*59599516SKenneth E. Jansen vtkDataSetAttributes* field;
1484*59599516SKenneth E. Jansen if(dataDependency)
1485*59599516SKenneth E. Jansen field = output->GetCellData();
1486*59599516SKenneth E. Jansen else
1487*59599516SKenneth E. Jansen field = output->GetPointData();
1488*59599516SKenneth E. Jansen
1489*59599516SKenneth E. Jansen // void *data;
1490*59599516SKenneth E. Jansen int dtype; // (0=double, 1=float)
1491*59599516SKenneth E. Jansen vtkDataArray *dataArray;
1492*59599516SKenneth E. Jansen /* read the field data */
1493*59599516SKenneth E. Jansen if(strcmp(dataType,"double")==0)
1494*59599516SKenneth E. Jansen {
1495*59599516SKenneth E. Jansen dataArray = vtkDoubleArray::New();
1496*59599516SKenneth E. Jansen dtype = 0;
1497*59599516SKenneth E. Jansen }
1498*59599516SKenneth E. Jansen else if(strcmp(dataType,"float")==0)
1499*59599516SKenneth E. Jansen {
1500*59599516SKenneth E. Jansen dataArray = vtkFloatArray::New();
1501*59599516SKenneth E. Jansen dtype=1;
1502*59599516SKenneth E. Jansen }
1503*59599516SKenneth E. Jansen else
1504*59599516SKenneth E. Jansen {
1505*59599516SKenneth E. Jansen vtkErrorMacro("Data type [" << dataType <<"] NOT supported");
1506*59599516SKenneth E. Jansen continue;
1507*59599516SKenneth E. Jansen }
1508*59599516SKenneth E. Jansen
1509*59599516SKenneth E. Jansen dataArray->SetName(paraviewFieldTag);
1510*59599516SKenneth E. Jansen dataArray->SetNumberOfComponents(numOfComps);
1511*59599516SKenneth E. Jansen
1512*59599516SKenneth E. Jansen expect = 3;
1513*59599516SKenneth E. Jansen
1514*59599516SKenneth E. Jansen //printf("version 1: hello 3 in P\n");
1515*59599516SKenneth E. Jansen
1516*59599516SKenneth E. Jansen ///CHANGE/////////////////////////////////////////////////////
1517*59599516SKenneth E. Jansen bzero((void*)fieldName,255);
1518*59599516SKenneth E. Jansen sprintf(fieldName,"%s@%d",phastaFieldTag,partID_counter);
1519*59599516SKenneth E. Jansen ///CHANGE END//////////////////////////////////////////////////
1520*59599516SKenneth E. Jansen readheader(&fieldfile,fieldName,array,&expect,dataType,"binary");
1521*59599516SKenneth E. Jansen
1522*59599516SKenneth E. Jansen //printf("fieldfile is %d expect is %d and datatype is %s\n",fieldfile,expect,dataType);
1523*59599516SKenneth E. Jansen
1524*59599516SKenneth E. Jansen //printf("original fieldname is %s and fieldname is %s\n",phastaFieldTag,fieldName);
1525*59599516SKenneth E. Jansen //printf("array 0 is %d and array 1 is %d\n",array[0],array[1]);
1526*59599516SKenneth E. Jansen
1527*59599516SKenneth E. Jansen //readheader(&fieldfile,phastaFieldTag,array,&expect,dataType,"binary");
1528*59599516SKenneth E. Jansen noOfDatas = array[0];
1529*59599516SKenneth E. Jansen this->NumberOfVariables = array[1];
1530*59599516SKenneth E. Jansen numOfVars = array[1];
1531*59599516SKenneth E. Jansen dataArray->SetNumberOfTuples(noOfDatas);
1532*59599516SKenneth E. Jansen
1533*59599516SKenneth E. Jansen //printf("hello 4 in P\n");
1534*59599516SKenneth E. Jansen
1535*59599516SKenneth E. Jansen if(index<0 || index>numOfVars-1)
1536*59599516SKenneth E. Jansen {
1537*59599516SKenneth E. Jansen vtkErrorMacro("index ["<<index<<"] is out of range [num. of vars.:"<<numOfVars<<"] for field [paraview field tag:"<<paraviewFieldTag<<", phasta field tag:"<<phastaFieldTag<<"]");
1538*59599516SKenneth E. Jansen
1539*59599516SKenneth E. Jansen dataArray->Delete();
1540*59599516SKenneth E. Jansen continue;
1541*59599516SKenneth E. Jansen }
1542*59599516SKenneth E. Jansen
1543*59599516SKenneth E. Jansen //printf("hello 5 in P\n");
1544*59599516SKenneth E. Jansen
1545*59599516SKenneth E. Jansen if(numOfComps<0 || index+numOfComps>numOfVars)
1546*59599516SKenneth E. Jansen {
1547*59599516SKenneth E. Jansen vtkErrorMacro("index ["<<index<<"] with num. of comps. ["<<numOfComps<<"] is out of range [num. of vars.:"<<numOfVars<<"] for field [paraview field tag:"<<paraviewFieldTag<<", phasta field tag:"<<phastaFieldTag<<"]");
1548*59599516SKenneth E. Jansen
1549*59599516SKenneth E. Jansen dataArray->Delete();
1550*59599516SKenneth E. Jansen continue;
1551*59599516SKenneth E. Jansen }
1552*59599516SKenneth E. Jansen
1553*59599516SKenneth E. Jansen //printf("hello 6 in P\n");
1554*59599516SKenneth E. Jansen
1555*59599516SKenneth E. Jansen item = numOfVars*noOfDatas;
1556*59599516SKenneth E. Jansen
1557*59599516SKenneth E. Jansen //printf("item is %d and dtype is %d and numofvars is %d num of data is %d\n",item,dtype,numOfVars,noOfDatas);
1558*59599516SKenneth E. Jansen
1559*59599516SKenneth E. Jansen if (dtype==0)
1560*59599516SKenneth E. Jansen { //data is type double
1561*59599516SKenneth E. Jansen
1562*59599516SKenneth E. Jansen double *data;
1563*59599516SKenneth E. Jansen data = new double[item];
1564*59599516SKenneth E. Jansen
1565*59599516SKenneth E. Jansen if(data == NULL)
1566*59599516SKenneth E. Jansen {
1567*59599516SKenneth E. Jansen vtkErrorMacro(<<"Unable to allocate memory for field info");
1568*59599516SKenneth E. Jansen
1569*59599516SKenneth E. Jansen dataArray->Delete();
1570*59599516SKenneth E. Jansen continue;
1571*59599516SKenneth E. Jansen }
1572*59599516SKenneth E. Jansen
1573*59599516SKenneth E. Jansen //printf("hello 8 in P\n");
1574*59599516SKenneth E. Jansen
1575*59599516SKenneth E. Jansen //////////CHANGE/////////////////////
1576*59599516SKenneth E. Jansen readdatablock(&fieldfile,fieldName,data,&item,dataType,"binary");
1577*59599516SKenneth E. Jansen ///////////CHANGE END///////////////
1578*59599516SKenneth E. Jansen
1579*59599516SKenneth E. Jansen //readdatablock(&fieldfile,phastaFieldTag,data,&item,dataType,"binary");
1580*59599516SKenneth E. Jansen
1581*59599516SKenneth E. Jansen //printf("hello 9 in P\n");
1582*59599516SKenneth E. Jansen
1583*59599516SKenneth E. Jansen switch(numOfComps)
1584*59599516SKenneth E. Jansen {
1585*59599516SKenneth E. Jansen case 1 :
1586*59599516SKenneth E. Jansen {
1587*59599516SKenneth E. Jansen int offset = index*noOfDatas;
1588*59599516SKenneth E. Jansen
1589*59599516SKenneth E. Jansen if(!activeScalars)
1590*59599516SKenneth E. Jansen field->SetActiveScalars(paraviewFieldTag);
1591*59599516SKenneth E. Jansen else
1592*59599516SKenneth E. Jansen activeScalars = 1;
1593*59599516SKenneth E. Jansen for(i=0;i<noOfDatas;i++)
1594*59599516SKenneth E. Jansen {
1595*59599516SKenneth E. Jansen dataArray->SetTuple1(i, data[offset+i]);
1596*59599516SKenneth E. Jansen }
1597*59599516SKenneth E. Jansen }
1598*59599516SKenneth E. Jansen break;
1599*59599516SKenneth E. Jansen case 3 :
1600*59599516SKenneth E. Jansen {
1601*59599516SKenneth E. Jansen int offset[3];
1602*59599516SKenneth E. Jansen for(j=0;j<3;j++)
1603*59599516SKenneth E. Jansen offset[j] = (index+j)*noOfDatas;
1604*59599516SKenneth E. Jansen
1605*59599516SKenneth E. Jansen if(!activeScalars)
1606*59599516SKenneth E. Jansen field->SetActiveVectors(paraviewFieldTag);
1607*59599516SKenneth E. Jansen else
1608*59599516SKenneth E. Jansen activeScalars = 1;
1609*59599516SKenneth E. Jansen for(i=0;i<noOfDatas;i++)
1610*59599516SKenneth E. Jansen {
1611*59599516SKenneth E. Jansen dataArray->SetTuple3(i,
1612*59599516SKenneth E. Jansen data[offset[0]+i],
1613*59599516SKenneth E. Jansen data[offset[1]+i],
1614*59599516SKenneth E. Jansen data[offset[2]+i]);
1615*59599516SKenneth E. Jansen }
1616*59599516SKenneth E. Jansen }
1617*59599516SKenneth E. Jansen break;
1618*59599516SKenneth E. Jansen case 9 :
1619*59599516SKenneth E. Jansen {
1620*59599516SKenneth E. Jansen int offset[9];
1621*59599516SKenneth E. Jansen for(j=0;j<9;j++)
1622*59599516SKenneth E. Jansen offset[j] = (index+j)*noOfDatas;
1623*59599516SKenneth E. Jansen
1624*59599516SKenneth E. Jansen if(!activeTensors)
1625*59599516SKenneth E. Jansen field->SetActiveTensors(paraviewFieldTag);
1626*59599516SKenneth E. Jansen else
1627*59599516SKenneth E. Jansen activeTensors = 1;
1628*59599516SKenneth E. Jansen for(i=0;i<noOfDatas;i++)
1629*59599516SKenneth E. Jansen {
1630*59599516SKenneth E. Jansen dataArray->SetTuple9(i,
1631*59599516SKenneth E. Jansen data[offset[0]+i],
1632*59599516SKenneth E. Jansen data[offset[1]+i],
1633*59599516SKenneth E. Jansen data[offset[2]+i],
1634*59599516SKenneth E. Jansen data[offset[3]+i],
1635*59599516SKenneth E. Jansen data[offset[4]+i],
1636*59599516SKenneth E. Jansen data[offset[5]+i],
1637*59599516SKenneth E. Jansen data[offset[6]+i],
1638*59599516SKenneth E. Jansen data[offset[7]+i],
1639*59599516SKenneth E. Jansen data[offset[8]+i]);
1640*59599516SKenneth E. Jansen }
1641*59599516SKenneth E. Jansen }
1642*59599516SKenneth E. Jansen break;
1643*59599516SKenneth E. Jansen default:
1644*59599516SKenneth E. Jansen vtkErrorMacro("number of components [" << numOfComps <<"] NOT supported");
1645*59599516SKenneth E. Jansen
1646*59599516SKenneth E. Jansen dataArray->Delete();
1647*59599516SKenneth E. Jansen delete [] data;
1648*59599516SKenneth E. Jansen continue;
1649*59599516SKenneth E. Jansen }
1650*59599516SKenneth E. Jansen
1651*59599516SKenneth E. Jansen // clean up
1652*59599516SKenneth E. Jansen delete [] data;
1653*59599516SKenneth E. Jansen
1654*59599516SKenneth E. Jansen }
1655*59599516SKenneth E. Jansen else if(dtype==1)
1656*59599516SKenneth E. Jansen { // data is type float
1657*59599516SKenneth E. Jansen
1658*59599516SKenneth E. Jansen float *data;
1659*59599516SKenneth E. Jansen data = new float[item];
1660*59599516SKenneth E. Jansen
1661*59599516SKenneth E. Jansen if(data == NULL)
1662*59599516SKenneth E. Jansen {
1663*59599516SKenneth E. Jansen vtkErrorMacro(<<"Unable to allocate memory for field info");
1664*59599516SKenneth E. Jansen
1665*59599516SKenneth E. Jansen dataArray->Delete();
1666*59599516SKenneth E. Jansen continue;
1667*59599516SKenneth E. Jansen }
1668*59599516SKenneth E. Jansen
1669*59599516SKenneth E. Jansen //////////CHANGE/////////////////////
1670*59599516SKenneth E. Jansen readdatablock(&fieldfile,fieldName,data,&item,dataType,"binary");
1671*59599516SKenneth E. Jansen //////////CHANGE END/////////////////
1672*59599516SKenneth E. Jansen
1673*59599516SKenneth E. Jansen //readdatablock(&fieldfile,phastaFieldTag,data,&item,dataType,"binary");
1674*59599516SKenneth E. Jansen
1675*59599516SKenneth E. Jansen switch(numOfComps)
1676*59599516SKenneth E. Jansen {
1677*59599516SKenneth E. Jansen case 1 :
1678*59599516SKenneth E. Jansen {
1679*59599516SKenneth E. Jansen int offset = index*noOfDatas;
1680*59599516SKenneth E. Jansen
1681*59599516SKenneth E. Jansen if(!activeScalars)
1682*59599516SKenneth E. Jansen field->SetActiveScalars(paraviewFieldTag);
1683*59599516SKenneth E. Jansen else
1684*59599516SKenneth E. Jansen activeScalars = 1;
1685*59599516SKenneth E. Jansen for(i=0;i<noOfDatas;i++)
1686*59599516SKenneth E. Jansen {
1687*59599516SKenneth E. Jansen //double tmpval = (double) data[offset+i];
1688*59599516SKenneth E. Jansen //dataArray->SetTuple1(i, tmpval);
1689*59599516SKenneth E. Jansen dataArray->SetTuple1(i, data[offset+i]);
1690*59599516SKenneth E. Jansen }
1691*59599516SKenneth E. Jansen }
1692*59599516SKenneth E. Jansen break;
1693*59599516SKenneth E. Jansen case 3 :
1694*59599516SKenneth E. Jansen {
1695*59599516SKenneth E. Jansen int offset[3];
1696*59599516SKenneth E. Jansen for(j=0;j<3;j++)
1697*59599516SKenneth E. Jansen offset[j] = (index+j)*noOfDatas;
1698*59599516SKenneth E. Jansen
1699*59599516SKenneth E. Jansen if(!activeScalars)
1700*59599516SKenneth E. Jansen field->SetActiveVectors(paraviewFieldTag);
1701*59599516SKenneth E. Jansen else
1702*59599516SKenneth E. Jansen activeScalars = 1;
1703*59599516SKenneth E. Jansen for(i=0;i<noOfDatas;i++)
1704*59599516SKenneth E. Jansen {
1705*59599516SKenneth E. Jansen //double tmpval[3];
1706*59599516SKenneth E. Jansen //for(j=0;j<3;j++)
1707*59599516SKenneth E. Jansen // tmpval[j] = (double) data[offset[j]+i];
1708*59599516SKenneth E. Jansen //dataArray->SetTuple3(i,
1709*59599516SKenneth E. Jansen // tmpval[0], tmpval[1], tmpval[3]);
1710*59599516SKenneth E. Jansen dataArray->SetTuple3(i,
1711*59599516SKenneth E. Jansen data[offset[0]+i],
1712*59599516SKenneth E. Jansen data[offset[1]+i],
1713*59599516SKenneth E. Jansen data[offset[2]+i]);
1714*59599516SKenneth E. Jansen }
1715*59599516SKenneth E. Jansen }
1716*59599516SKenneth E. Jansen break;
1717*59599516SKenneth E. Jansen case 9 :
1718*59599516SKenneth E. Jansen {
1719*59599516SKenneth E. Jansen int offset[9];
1720*59599516SKenneth E. Jansen for(j=0;j<9;j++)
1721*59599516SKenneth E. Jansen offset[j] = (index+j)*noOfDatas;
1722*59599516SKenneth E. Jansen
1723*59599516SKenneth E. Jansen if(!activeTensors)
1724*59599516SKenneth E. Jansen field->SetActiveTensors(paraviewFieldTag);
1725*59599516SKenneth E. Jansen else
1726*59599516SKenneth E. Jansen activeTensors = 1;
1727*59599516SKenneth E. Jansen for(i=0;i<noOfDatas;i++)
1728*59599516SKenneth E. Jansen {
1729*59599516SKenneth E. Jansen //double tmpval[9];
1730*59599516SKenneth E. Jansen //for(j=0;j<9;j++)
1731*59599516SKenneth E. Jansen // tmpval[j] = (double) data[offset[j]+i];
1732*59599516SKenneth E. Jansen //dataArray->SetTuple9(i,
1733*59599516SKenneth E. Jansen // tmpval[0],
1734*59599516SKenneth E. Jansen // tmpval[1],
1735*59599516SKenneth E. Jansen // tmpval[2],
1736*59599516SKenneth E. Jansen // tmpval[3],
1737*59599516SKenneth E. Jansen // tmpval[4],
1738*59599516SKenneth E. Jansen // tmpval[5],
1739*59599516SKenneth E. Jansen // tmpval[6],
1740*59599516SKenneth E. Jansen // tmpval[7],
1741*59599516SKenneth E. Jansen // tmpval[8]);
1742*59599516SKenneth E. Jansen dataArray->SetTuple9(i,
1743*59599516SKenneth E. Jansen data[offset[0]+i],
1744*59599516SKenneth E. Jansen data[offset[1]+i],
1745*59599516SKenneth E. Jansen data[offset[2]+i],
1746*59599516SKenneth E. Jansen data[offset[3]+i],
1747*59599516SKenneth E. Jansen data[offset[4]+i],
1748*59599516SKenneth E. Jansen data[offset[5]+i],
1749*59599516SKenneth E. Jansen data[offset[6]+i],
1750*59599516SKenneth E. Jansen data[offset[7]+i],
1751*59599516SKenneth E. Jansen data[offset[8]+i]);
1752*59599516SKenneth E. Jansen }
1753*59599516SKenneth E. Jansen }
1754*59599516SKenneth E. Jansen break;
1755*59599516SKenneth E. Jansen default:
1756*59599516SKenneth E. Jansen vtkErrorMacro("number of components [" << numOfComps <<"] NOT supported");
1757*59599516SKenneth E. Jansen
1758*59599516SKenneth E. Jansen dataArray->Delete();
1759*59599516SKenneth E. Jansen delete [] data;
1760*59599516SKenneth E. Jansen continue;
1761*59599516SKenneth E. Jansen }
1762*59599516SKenneth E. Jansen
1763*59599516SKenneth E. Jansen // clean up
1764*59599516SKenneth E. Jansen delete [] data;
1765*59599516SKenneth E. Jansen
1766*59599516SKenneth E. Jansen }
1767*59599516SKenneth E. Jansen else
1768*59599516SKenneth E. Jansen {
1769*59599516SKenneth E. Jansen vtkErrorMacro("Data type [" << dataType <<"] NOT supported");
1770*59599516SKenneth E. Jansen continue;
1771*59599516SKenneth E. Jansen }
1772*59599516SKenneth E. Jansen
1773*59599516SKenneth E. Jansen
1774*59599516SKenneth E. Jansen field->AddArray(dataArray);
1775*59599516SKenneth E. Jansen
1776*59599516SKenneth E. Jansen // clean up
1777*59599516SKenneth E. Jansen dataArray->Delete();
1778*59599516SKenneth E. Jansen //delete [] data;
1779*59599516SKenneth E. Jansen }
1780*59599516SKenneth E. Jansen
1781*59599516SKenneth E. Jansen // close up
1782*59599516SKenneth E. Jansen closefile(&fieldfile,"read");
1783*59599516SKenneth E. Jansen finalizephmpiio_(&fieldfile);
1784*59599516SKenneth E. Jansen
1785*59599516SKenneth E. Jansen }//closes ReadFieldFile (vtkUnstructuredGrid)
1786*59599516SKenneth E. Jansen
PrintSelf(ostream & os,vtkIndent indent)1787*59599516SKenneth E. Jansen void vtkPhastaReader::PrintSelf(ostream& os, vtkIndent indent)
1788*59599516SKenneth E. Jansen {
1789*59599516SKenneth E. Jansen this->Superclass::PrintSelf(os,indent);
1790*59599516SKenneth E. Jansen
1791*59599516SKenneth E. Jansen os << indent << "GeometryFileName: "
1792*59599516SKenneth E. Jansen << (this->GeometryFileName?this->GeometryFileName:"(none)")
1793*59599516SKenneth E. Jansen << endl;
1794*59599516SKenneth E. Jansen os << indent << "FieldFileName: "
1795*59599516SKenneth E. Jansen << (this->FieldFileName?this->FieldFileName:"(none)")
1796*59599516SKenneth E. Jansen << endl;
1797*59599516SKenneth E. Jansen }
1798