xref: /phasta/phastaIO/vtkPhastaReader.cxx (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
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