xref: /phasta/converterIO/converterN2O.cc (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen #include <stdio.h>
2*59599516SKenneth E. Jansen #include <iostream>
3*59599516SKenneth E. Jansen #include <string.h>
4*59599516SKenneth E. Jansen #include <stdlib.h>
5*59599516SKenneth E. Jansen //#define OMPI_SKIP_MPICXX 1 //Added in the CMakeList.txt file
6*59599516SKenneth E. Jansen #include <mpi.h>
7*59599516SKenneth E. Jansen #include <math.h>
8*59599516SKenneth E. Jansen #include <sys/stat.h>
9*59599516SKenneth E. Jansen #include <sys/types.h>
10*59599516SKenneth E. Jansen #include "phastaIO.h"
11*59599516SKenneth E. Jansen 
12*59599516SKenneth E. Jansen inline int
13*59599516SKenneth E. Jansen cscompare( const char teststring[],
14*59599516SKenneth E. Jansen 	   const char targetstring[] )
15*59599516SKenneth E. Jansen {
16*59599516SKenneth E. Jansen   char* s1 = const_cast<char*>(teststring);
17*59599516SKenneth E. Jansen   char* s2 = const_cast<char*>(targetstring);
18*59599516SKenneth E. Jansen 
19*59599516SKenneth E. Jansen   while( *s1 == ' ') s1++;
20*59599516SKenneth E. Jansen   while( *s2 == ' ') s2++;
21*59599516SKenneth E. Jansen   while( ( *s1 )
22*59599516SKenneth E. Jansen 	 && ( *s2 )
23*59599516SKenneth E. Jansen 	 && ( *s2 != '?')
24*59599516SKenneth E. Jansen 	 && ( tolower( *s1 )==tolower( *s2 ) ) ) {
25*59599516SKenneth E. Jansen     s1++;
26*59599516SKenneth E. Jansen     s2++;
27*59599516SKenneth E. Jansen     while( *s1 == ' ') s1++;
28*59599516SKenneth E. Jansen     while( *s2 == ' ') s2++;
29*59599516SKenneth E. Jansen   }
30*59599516SKenneth E. Jansen   if ( !( *s1 ) || ( *s1 == '?') ) return 1;
31*59599516SKenneth E. Jansen   else return 0;
32*59599516SKenneth E. Jansen }
33*59599516SKenneth E. Jansen 
34*59599516SKenneth E. Jansen int main(int argc, char *argv[]) {
35*59599516SKenneth E. Jansen 
36*59599516SKenneth E. Jansen   MPI_Init(&argc,&argv);
37*59599516SKenneth E. Jansen 
38*59599516SKenneth E. Jansen   int myrank, N_procs;
39*59599516SKenneth E. Jansen   MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
40*59599516SKenneth E. Jansen   MPI_Comm_size(MPI_COMM_WORLD, &N_procs);
41*59599516SKenneth E. Jansen 
42*59599516SKenneth E. Jansen   FILE * pFile;
43*59599516SKenneth E. Jansen   char target[1024], pool[256];
44*59599516SKenneth E. Jansen   char * temp, * token;
45*59599516SKenneth E. Jansen   int i, j, k, N_restart_integer, N_restart_double;
46*59599516SKenneth E. Jansen   int N_geombc_double, N_geombc_integer;
47*59599516SKenneth E. Jansen   int N_steps, N_parts, N_files;
48*59599516SKenneth E. Jansen 
49*59599516SKenneth E. Jansen   pFile = fopen("./IO.N2O.input","r");
50*59599516SKenneth E. Jansen   if (pFile == NULL)
51*59599516SKenneth E. Jansen     printf("Error openning\n");
52*59599516SKenneth E. Jansen 
53*59599516SKenneth E. Jansen   fgets( target, 1024, pFile );
54*59599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
55*59599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
56*59599516SKenneth E. Jansen   N_geombc_double = atoi(temp);
57*59599516SKenneth E. Jansen 
58*59599516SKenneth E. Jansen   fgets( target, 1024, pFile );
59*59599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
60*59599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
61*59599516SKenneth E. Jansen   N_geombc_integer = atoi(temp);
62*59599516SKenneth E. Jansen 
63*59599516SKenneth E. Jansen   fgets( target, 1024, pFile );
64*59599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
65*59599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
66*59599516SKenneth E. Jansen   N_restart_double = atoi(temp);
67*59599516SKenneth E. Jansen 
68*59599516SKenneth E. Jansen   fgets( target, 1024, pFile );
69*59599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
70*59599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
71*59599516SKenneth E. Jansen   N_restart_integer = atoi(temp);
72*59599516SKenneth E. Jansen 
73*59599516SKenneth E. Jansen   fgets( target, 1024, pFile );
74*59599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
75*59599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
76*59599516SKenneth E. Jansen   N_steps = atoi(temp);
77*59599516SKenneth E. Jansen 
78*59599516SKenneth E. Jansen   fgets( target, 1024, pFile );
79*59599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
80*59599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
81*59599516SKenneth E. Jansen   N_parts = atoi(temp);
82*59599516SKenneth E. Jansen 
83*59599516SKenneth E. Jansen   if(myrank==0){
84*59599516SKenneth E. Jansen     printf("numpe is %d and start is %d\n",N_parts,N_steps);
85*59599516SKenneth E. Jansen   }
86*59599516SKenneth E. Jansen 
87*59599516SKenneth E. Jansen   fgets( target, 1024, pFile );
88*59599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
89*59599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
90*59599516SKenneth E. Jansen   N_files = atoi(temp);
91*59599516SKenneth E. Jansen 
92*59599516SKenneth E. Jansen   double ***Dfield; int ***Ifield;
93*59599516SKenneth E. Jansen   int ***paraD, ***paraI, *expectD, *expectI;
94*59599516SKenneth E. Jansen   char **fieldNameD, **fileTypeD, **dataTypeD, **headerTypeD;
95*59599516SKenneth E. Jansen   char **fieldNameI, **fileTypeI, **dataTypeI, **headerTypeI;
96*59599516SKenneth E. Jansen 
97*59599516SKenneth E. Jansen   int WriteLockD[N_restart_double];
98*59599516SKenneth E. Jansen   int WriteLockI[N_restart_integer];
99*59599516SKenneth E. Jansen 
100*59599516SKenneth E. Jansen   int nppp = N_parts/N_procs;
101*59599516SKenneth E. Jansen   int startpart = myrank * nppp +1;
102*59599516SKenneth E. Jansen   int endpart = startpart + nppp - 1;
103*59599516SKenneth E. Jansen   char gfname[64], numTemp[128];
104*59599516SKenneth E. Jansen   int iarray[10], igeom, isize;
105*59599516SKenneth E. Jansen 
106*59599516SKenneth E. Jansen 
107*59599516SKenneth E. Jansen   if (N_parts != N_procs) {
108*59599516SKenneth E. Jansen       printf("Input error: number of parts should be equal to the number of procs!\n");
109*59599516SKenneth E. Jansen       printf("Please modify the IO.O2N.input file!\n");
110*59599516SKenneth E. Jansen       return 0;
111*59599516SKenneth E. Jansen   }
112*59599516SKenneth E. Jansen 
113*59599516SKenneth E. Jansen 
114*59599516SKenneth E. Jansen 
115*59599516SKenneth E. Jansen   ///////////////////// reading ///////////////////////////////
116*59599516SKenneth E. Jansen 
117*59599516SKenneth E. Jansen   int nppf = N_parts/N_files;
118*59599516SKenneth E. Jansen   int N_geombc = N_geombc_double + N_geombc_integer;
119*59599516SKenneth E. Jansen   int readHandle, GPID;
120*59599516SKenneth E. Jansen   char fname[255],fieldtag[255];
121*59599516SKenneth E. Jansen 
122*59599516SKenneth E. Jansen   int irestart;
123*59599516SKenneth E. Jansen 
124*59599516SKenneth E. Jansen   Dfield = new double**[N_restart_double];
125*59599516SKenneth E. Jansen   Ifield = new int**[N_restart_integer];
126*59599516SKenneth E. Jansen 
127*59599516SKenneth E. Jansen   paraD = new int**[N_restart_double];
128*59599516SKenneth E. Jansen   paraI = new int**[N_restart_integer];
129*59599516SKenneth E. Jansen 
130*59599516SKenneth E. Jansen   expectD = new int[N_restart_double];
131*59599516SKenneth E. Jansen   expectI = new int[N_restart_integer];
132*59599516SKenneth E. Jansen 
133*59599516SKenneth E. Jansen   fieldNameD = new char*[N_restart_double];
134*59599516SKenneth E. Jansen   fileTypeD = new char*[N_restart_double];
135*59599516SKenneth E. Jansen   dataTypeD = new char*[N_restart_double];
136*59599516SKenneth E. Jansen   headerTypeD = new char*[N_restart_double];
137*59599516SKenneth E. Jansen 
138*59599516SKenneth E. Jansen   fieldNameI = new char*[N_restart_integer];
139*59599516SKenneth E. Jansen   fileTypeI = new char*[N_restart_integer];
140*59599516SKenneth E. Jansen   dataTypeI = new char*[N_restart_integer];
141*59599516SKenneth E. Jansen   headerTypeI = new char*[N_restart_integer];
142*59599516SKenneth E. Jansen 
143*59599516SKenneth E. Jansen   if (N_restart_double>0)
144*59599516SKenneth E. Jansen     for ( i = 0; i < N_restart_double; i++ )
145*59599516SKenneth E. Jansen       {
146*59599516SKenneth E. Jansen 	WriteLockD[i]=0;
147*59599516SKenneth E. Jansen 	Dfield[i] = new double*[nppp];
148*59599516SKenneth E. Jansen 
149*59599516SKenneth E. Jansen 	paraD[i] = new int*[nppp];
150*59599516SKenneth E. Jansen 
151*59599516SKenneth E. Jansen 	fieldNameD[i] = new char[128];
152*59599516SKenneth E. Jansen 	fileTypeD[i] = new char[128];
153*59599516SKenneth E. Jansen 	dataTypeD[i] = new char[128];
154*59599516SKenneth E. Jansen 	headerTypeD[i] = new char[128];
155*59599516SKenneth E. Jansen       }
156*59599516SKenneth E. Jansen 
157*59599516SKenneth E. Jansen   if (N_restart_integer>0)
158*59599516SKenneth E. Jansen     for ( i = 0; i < N_restart_integer; i++ )
159*59599516SKenneth E. Jansen       {
160*59599516SKenneth E. Jansen 	WriteLockI[i]=0;
161*59599516SKenneth E. Jansen 	Ifield[i] = new int*[nppp];
162*59599516SKenneth E. Jansen 
163*59599516SKenneth E. Jansen 	paraI[i] = new int*[nppp];
164*59599516SKenneth E. Jansen 
165*59599516SKenneth E. Jansen 	fieldNameI[i] = new char[128];
166*59599516SKenneth E. Jansen 	fileTypeI[i] = new char[128];
167*59599516SKenneth E. Jansen 	dataTypeI[i] = new char[128];
168*59599516SKenneth E. Jansen 	headerTypeI[i] = new char[128];
169*59599516SKenneth E. Jansen       }
170*59599516SKenneth E. Jansen 
171*59599516SKenneth E. Jansen 
172*59599516SKenneth E. Jansen   ///////////////////// reading ///////////////////////////////
173*59599516SKenneth E. Jansen 
174*59599516SKenneth E. Jansen   int N_restart = N_restart_double + N_restart_integer;
175*59599516SKenneth E. Jansen   int readHandle1;
176*59599516SKenneth E. Jansen 
177*59599516SKenneth E. Jansen   bzero((void*)fname,255);
178*59599516SKenneth E. Jansen   sprintf(fname,"./%d-procs_case/restart-dat.%d.%d",N_parts,N_steps,((int)(myrank/(N_procs/N_files))+1));
179*59599516SKenneth E. Jansen 
180*59599516SKenneth E. Jansen   //if(myrank==0){
181*59599516SKenneth E. Jansen   //  printf("Myrank is %d - Filename is %s \n",myrank,fname);
182*59599516SKenneth E. Jansen   //}
183*59599516SKenneth E. Jansen 
184*59599516SKenneth E. Jansen   int nfields;
185*59599516SKenneth E. Jansen   queryphmpiio(fname, &nfields, &nppf);
186*59599516SKenneth E. Jansen   //initphmpiio(&N_restart, &nppf, &N_files,&readHandle1, "write") ;//WRONG
187*59599516SKenneth E. Jansen   initphmpiio(&nfields, &nppf, &N_files, &readHandle1, "read");
188*59599516SKenneth E. Jansen   openfile(fname, "read", &readHandle1);
189*59599516SKenneth E. Jansen 
190*59599516SKenneth E. Jansen   for ( i = 0; i < N_restart_double; i++ )
191*59599516SKenneth E. Jansen     {
192*59599516SKenneth E. Jansen       fgets( target, 1024, pFile );
193*59599516SKenneth E. Jansen       temp = strtok( target, ";" );
194*59599516SKenneth E. Jansen       token = strtok( temp, "," );
195*59599516SKenneth E. Jansen       strcpy( fileTypeD[i], token );
196*59599516SKenneth E. Jansen       token = strtok ( NULL, "," );
197*59599516SKenneth E. Jansen       strcpy( fieldNameD[i], token );
198*59599516SKenneth E. Jansen       token = strtok ( NULL, "," );
199*59599516SKenneth E. Jansen       strcpy( dataTypeD[i], token );
200*59599516SKenneth E. Jansen       token = strtok ( NULL, "," );
201*59599516SKenneth E. Jansen       strcpy( headerTypeD[i], token );
202*59599516SKenneth E. Jansen       token = strtok ( NULL, "," );
203*59599516SKenneth E. Jansen       strcpy( numTemp, token );
204*59599516SKenneth E. Jansen       expectD[i] = atoi (numTemp);
205*59599516SKenneth E. Jansen 
206*59599516SKenneth E. Jansen       for (  j = 0; j < nppp; j++  )
207*59599516SKenneth E. Jansen 	{
208*59599516SKenneth E. Jansen 	  paraD[i][j] = new int[expectD[i]];
209*59599516SKenneth E. Jansen 
210*59599516SKenneth E. Jansen 	  for ( k = 0; k < 10; k++ )
211*59599516SKenneth E. Jansen 	    iarray[k]=0;
212*59599516SKenneth E. Jansen 
213*59599516SKenneth E. Jansen 	  GPID = startpart + j;
214*59599516SKenneth E. Jansen 	  bzero((void*)fieldtag,255);
215*59599516SKenneth E. Jansen 	  sprintf(fieldtag,"%s@%d",fieldNameD[i],GPID);
216*59599516SKenneth E. Jansen 
217*59599516SKenneth E. Jansen           //printf("myrank %d - filedtag %s\n",myrank,fieldtag);
218*59599516SKenneth E. Jansen 
219*59599516SKenneth E. Jansen 	  iarray[0]=-1;
220*59599516SKenneth E. Jansen 	  readheader( &readHandle1,
221*59599516SKenneth E. Jansen 		       fieldtag,
222*59599516SKenneth E. Jansen 		       (void*)iarray,
223*59599516SKenneth E. Jansen 		       &expectD[i],
224*59599516SKenneth E. Jansen 		       "double",
225*59599516SKenneth E. Jansen 		       "binary" );
226*59599516SKenneth E. Jansen 
227*59599516SKenneth E. Jansen 	  if ( iarray[0]==-1 )
228*59599516SKenneth E. Jansen 	      WriteLockD[i]=1;
229*59599516SKenneth E. Jansen 	  if ( WriteLockD[i]==0 )
230*59599516SKenneth E. Jansen 	    {
231*59599516SKenneth E. Jansen 	      for ( k = 0; k < expectD[i]; k++ )
232*59599516SKenneth E. Jansen 		paraD[i][j][k] = iarray[k];
233*59599516SKenneth E. Jansen 
234*59599516SKenneth E. Jansen 	      if ( cscompare("block",headerTypeD[i]) )
235*59599516SKenneth E. Jansen 		{
236*59599516SKenneth E. Jansen 		  if ( expectD[i]==1)
237*59599516SKenneth E. Jansen 		    isize = paraD[i][j][0];
238*59599516SKenneth E. Jansen 		  else
239*59599516SKenneth E. Jansen 		    isize = paraD[i][j][0] * paraD[i][j][1];
240*59599516SKenneth E. Jansen 
241*59599516SKenneth E. Jansen 		  Dfield[i][j] = new double[isize];
242*59599516SKenneth E. Jansen 		  readdatablock( &readHandle1,
243*59599516SKenneth E. Jansen 				  fieldtag,
244*59599516SKenneth E. Jansen 				  (void*)Dfield[i][j],
245*59599516SKenneth E. Jansen 				  &isize,
246*59599516SKenneth E. Jansen 				  "double",
247*59599516SKenneth E. Jansen 				  "binary" );
248*59599516SKenneth E. Jansen 		}
249*59599516SKenneth E. Jansen 
250*59599516SKenneth E. Jansen 	    }
251*59599516SKenneth E. Jansen 	}
252*59599516SKenneth E. Jansen     }
253*59599516SKenneth E. Jansen 
254*59599516SKenneth E. Jansen   for ( i = 0; i < N_restart_integer; i++ )
255*59599516SKenneth E. Jansen     {
256*59599516SKenneth E. Jansen       fgets( target, 1024, pFile );
257*59599516SKenneth E. Jansen       temp = strtok( target, ";" );
258*59599516SKenneth E. Jansen       token = strtok( temp, "," );
259*59599516SKenneth E. Jansen       strcpy( fileTypeI[i], token );
260*59599516SKenneth E. Jansen       token = strtok ( NULL, "," );
261*59599516SKenneth E. Jansen       strcpy( fieldNameI[i], token );
262*59599516SKenneth E. Jansen       token = strtok ( NULL, "," );
263*59599516SKenneth E. Jansen       strcpy( dataTypeI[i], token );
264*59599516SKenneth E. Jansen       token = strtok ( NULL, "," );
265*59599516SKenneth E. Jansen       strcpy( headerTypeI[i], token );
266*59599516SKenneth E. Jansen       token = strtok ( NULL, "," );
267*59599516SKenneth E. Jansen       strcpy( numTemp, token );
268*59599516SKenneth E. Jansen       expectI[i] = atoi (numTemp);
269*59599516SKenneth E. Jansen 
270*59599516SKenneth E. Jansen       for ( j = 0; j < nppp; j++ )
271*59599516SKenneth E. Jansen 	{
272*59599516SKenneth E. Jansen 	  paraI[i][j] = new int[expectI[i]];
273*59599516SKenneth E. Jansen 
274*59599516SKenneth E. Jansen 	  for ( k = 0; k < 10; k++ )
275*59599516SKenneth E. Jansen 	    iarray[k]=0;
276*59599516SKenneth E. Jansen 
277*59599516SKenneth E. Jansen 	  GPID = startpart + j;
278*59599516SKenneth E. Jansen 	  bzero((void*)fieldtag,255);
279*59599516SKenneth E. Jansen 	  sprintf(fieldtag,"%s@%d",fieldNameI[i],GPID);
280*59599516SKenneth E. Jansen 	  iarray[0]=-1;
281*59599516SKenneth E. Jansen 
282*59599516SKenneth E. Jansen 	  //printf("Rank %d, fieldname is %s \n",myrank,fieldtag);
283*59599516SKenneth E. Jansen 
284*59599516SKenneth E. Jansen 	  readheader( &readHandle1,
285*59599516SKenneth E. Jansen 		       fieldtag,
286*59599516SKenneth E. Jansen 		       (void*)iarray,
287*59599516SKenneth E. Jansen 		       &expectI[i],
288*59599516SKenneth E. Jansen 		       "integer",
289*59599516SKenneth E. Jansen 		       "binary" );
290*59599516SKenneth E. Jansen 
291*59599516SKenneth E. Jansen 	  if ( iarray[0]==-1)
292*59599516SKenneth E. Jansen 	      WriteLockI[i]=1;
293*59599516SKenneth E. Jansen 	  if ( WriteLockI[i]==0 )
294*59599516SKenneth E. Jansen 	    {
295*59599516SKenneth E. Jansen 	      for ( k = 0; k < expectI[i]; k++ )
296*59599516SKenneth E. Jansen 		paraI[i][j][k] = iarray[k];
297*59599516SKenneth E. Jansen 
298*59599516SKenneth E. Jansen 	      if ( cscompare("block",headerTypeI[i]) )
299*59599516SKenneth E. Jansen 		{
300*59599516SKenneth E. Jansen 		  if ( expectI[i]==1)
301*59599516SKenneth E. Jansen 		    isize = paraI[i][j][0];
302*59599516SKenneth E. Jansen 		  else
303*59599516SKenneth E. Jansen 		    isize = paraI[i][j][0] * paraI[i][j][1];
304*59599516SKenneth E. Jansen 
305*59599516SKenneth E. Jansen 		  Ifield[i][j] = new int[isize];
306*59599516SKenneth E. Jansen 		  readdatablock( &readHandle1,
307*59599516SKenneth E. Jansen 				  fieldtag,
308*59599516SKenneth E. Jansen 				  (void*)Ifield[i][j],
309*59599516SKenneth E. Jansen 				  &isize,
310*59599516SKenneth E. Jansen 				  "integer",
311*59599516SKenneth E. Jansen 				  "binary" );
312*59599516SKenneth E. Jansen 		}
313*59599516SKenneth E. Jansen 	    }
314*59599516SKenneth E. Jansen 	}
315*59599516SKenneth E. Jansen 
316*59599516SKenneth E. Jansen     }
317*59599516SKenneth E. Jansen 
318*59599516SKenneth E. Jansen   closefile(&readHandle1, "write");
319*59599516SKenneth E. Jansen   finalizephmpiio(&readHandle1);
320*59599516SKenneth E. Jansen 
321*59599516SKenneth E. Jansen   //////////////////////////writing////////////////////////////
322*59599516SKenneth E. Jansen 
323*59599516SKenneth E. Jansen   int irstou;
324*59599516SKenneth E. Jansen   int magic_number = 362436;
325*59599516SKenneth E. Jansen   int* mptr = &magic_number;
326*59599516SKenneth E. Jansen   int nitems = 1;
327*59599516SKenneth E. Jansen 
328*59599516SKenneth E. Jansen //MR CHANGE
329*59599516SKenneth E. Jansen   bzero((void*)fname,255);
330*59599516SKenneth E. Jansen   sprintf(fname,"./%d-procs_case-1PPP",N_parts);
331*59599516SKenneth E. Jansen   if(0<mkdir(fname,0777)) { printf("ERROR - Could not create procs_case-1PPP directory\n"); return 1; }
332*59599516SKenneth E. Jansen //MR CHANGE END
333*59599516SKenneth E. Jansen 
334*59599516SKenneth E. Jansen   bzero((void*)fname,255);
335*59599516SKenneth E. Jansen   sprintf(fname,"./%d-procs_case-1PPP/restart.%d.%d",N_parts,N_steps,myrank+1);
336*59599516SKenneth E. Jansen   openfile(fname,"write", &irstou);
337*59599516SKenneth E. Jansen 
338*59599516SKenneth E. Jansen   /* writing the top ascii header for the restart file */
339*59599516SKenneth E. Jansen 
340*59599516SKenneth E. Jansen   writestring( &irstou,"# PHASTA Input File Version 2.0\n");
341*59599516SKenneth E. Jansen   writestring( &irstou,
342*59599516SKenneth E. Jansen 		"# format \"keyphrase : sizeofnextblock usual headers\"\n");
343*59599516SKenneth E. Jansen 
344*59599516SKenneth E. Jansen   bzero( (void*)fname, 255 );
345*59599516SKenneth E. Jansen   writestring( &irstou, fname );
346*59599516SKenneth E. Jansen 
347*59599516SKenneth E. Jansen   writestring( &irstou, fname );
348*59599516SKenneth E. Jansen   writestring( &irstou,"\n");
349*59599516SKenneth E. Jansen 
350*59599516SKenneth E. Jansen 
351*59599516SKenneth E. Jansen   isize = 1;
352*59599516SKenneth E. Jansen   nitems = 1;
353*59599516SKenneth E. Jansen   iarray[ 0 ] = 1;
354*59599516SKenneth E. Jansen   writeheader( &irstou, "byteorder magic number ",
355*59599516SKenneth E. Jansen 		(void*)iarray, &nitems, &isize, "integer", "binary" );
356*59599516SKenneth E. Jansen 
357*59599516SKenneth E. Jansen   nitems = 1;
358*59599516SKenneth E. Jansen   writedatablock( &irstou, "byteorder magic number ",
359*59599516SKenneth E. Jansen 		   (void*)mptr, &nitems, "integer", "binary" );
360*59599516SKenneth E. Jansen 
361*59599516SKenneth E. Jansen   for ( i = 0; i < N_restart_double; i++ )
362*59599516SKenneth E. Jansen     {
363*59599516SKenneth E. Jansen       for ( j = 0; j < nppp; j++ )
364*59599516SKenneth E. Jansen 	{
365*59599516SKenneth E. Jansen 	  if ( WriteLockD[i] == 0 )
366*59599516SKenneth E. Jansen 	    {
367*59599516SKenneth E. Jansen 	      if ( cscompare("header",headerTypeD[i]) )
368*59599516SKenneth E. Jansen 		{
369*59599516SKenneth E. Jansen 		  bzero( (void*)fname, 255 );
370*59599516SKenneth E. Jansen 		  sprintf(fname,"%s : < 0 > %d\n", fieldNameD[i],paraD[i][j][0]);
371*59599516SKenneth E. Jansen 		  writestring( &irstou, fname );
372*59599516SKenneth E. Jansen 		}
373*59599516SKenneth E. Jansen 
374*59599516SKenneth E. Jansen 	      if ( cscompare("block",headerTypeD[i]) )
375*59599516SKenneth E. Jansen 		{
376*59599516SKenneth E. Jansen 		  if ( expectD[i]==1 )
377*59599516SKenneth E. Jansen 		    isize = paraD[i][j][0];
378*59599516SKenneth E. Jansen 		  else
379*59599516SKenneth E. Jansen 		    isize = paraD[i][j][0] * paraD[i][j][1];
380*59599516SKenneth E. Jansen 
381*59599516SKenneth E. Jansen 		  for ( k = 0; k < expectD[i]; k++ )
382*59599516SKenneth E. Jansen 		    iarray[k] = paraD[i][j][k];
383*59599516SKenneth E. Jansen 
384*59599516SKenneth E. Jansen 		  if ( cscompare("header",headerTypeD[i]) )
385*59599516SKenneth E. Jansen 		    isize = 0;
386*59599516SKenneth E. Jansen 
387*59599516SKenneth E. Jansen 		  writeheader( &irstou,
388*59599516SKenneth E. Jansen 				fieldNameD[i],
389*59599516SKenneth E. Jansen 				(void*)iarray,
390*59599516SKenneth E. Jansen 				&expectD[i],
391*59599516SKenneth E. Jansen 				&isize,
392*59599516SKenneth E. Jansen 				"double",
393*59599516SKenneth E. Jansen 				"binary");
394*59599516SKenneth E. Jansen 		  writedatablock( &irstou,
395*59599516SKenneth E. Jansen 				   fieldNameD[i],
396*59599516SKenneth E. Jansen 				   (void*)Dfield[i][j],
397*59599516SKenneth E. Jansen 				   &isize,
398*59599516SKenneth E. Jansen 				   "double",
399*59599516SKenneth E. Jansen 				   "binary");
400*59599516SKenneth E. Jansen 		}
401*59599516SKenneth E. Jansen 
402*59599516SKenneth E. Jansen 
403*59599516SKenneth E. Jansen               if ( cscompare("block",headerTypeD[i]) )
404*59599516SKenneth E. Jansen                 delete [] Dfield[i][j];
405*59599516SKenneth E. Jansen 	    }
406*59599516SKenneth E. Jansen 	  delete [] paraD[i][j];
407*59599516SKenneth E. Jansen 	}
408*59599516SKenneth E. Jansen     }
409*59599516SKenneth E. Jansen 
410*59599516SKenneth E. Jansen   for ( i = 0; i < N_restart_integer; i++ )
411*59599516SKenneth E. Jansen     {
412*59599516SKenneth E. Jansen       for ( j = 0; j < nppp; j++ )
413*59599516SKenneth E. Jansen 	{
414*59599516SKenneth E. Jansen 
415*59599516SKenneth E. Jansen 	  if ( WriteLockI[i] == 0 )
416*59599516SKenneth E. Jansen 	    {
417*59599516SKenneth E. Jansen 
418*59599516SKenneth E. Jansen 	      if ( cscompare("header",headerTypeI[i]) )
419*59599516SKenneth E. Jansen 		{
420*59599516SKenneth E. Jansen 		  bzero( (void*)fname, 255 );
421*59599516SKenneth E. Jansen 		  sprintf(fname,"%s : < 0 > %d\n", fieldNameI[i],paraI[i][j][0]);
422*59599516SKenneth E. Jansen 		  writestring( &irstou, fname );
423*59599516SKenneth E. Jansen 		}
424*59599516SKenneth E. Jansen 
425*59599516SKenneth E. Jansen 	      if ( cscompare("block",headerTypeI[i]) )
426*59599516SKenneth E. Jansen 		{
427*59599516SKenneth E. Jansen 		  if ( expectI[i]==1 )
428*59599516SKenneth E. Jansen 		    isize = paraI[i][j][0];
429*59599516SKenneth E. Jansen 		  else
430*59599516SKenneth E. Jansen 		    isize = paraI[i][j][0] * paraI[i][j][1];
431*59599516SKenneth E. Jansen 
432*59599516SKenneth E. Jansen 		  for ( k = 0; k < expectI[i]; k++ )
433*59599516SKenneth E. Jansen 		    iarray[k] = paraI[i][j][k];
434*59599516SKenneth E. Jansen 
435*59599516SKenneth E. Jansen 		  writeheader( &irstou,
436*59599516SKenneth E. Jansen 				fieldNameI[i],
437*59599516SKenneth E. Jansen 				(void*)iarray,
438*59599516SKenneth E. Jansen 				&expectI[i],
439*59599516SKenneth E. Jansen 				&isize,
440*59599516SKenneth E. Jansen 				"integer",
441*59599516SKenneth E. Jansen 				"binary");
442*59599516SKenneth E. Jansen 		  writedatablock( &irstou,
443*59599516SKenneth E. Jansen 				   fieldNameI[i],
444*59599516SKenneth E. Jansen 				   (void*)Ifield[i][j],
445*59599516SKenneth E. Jansen 				   &isize,
446*59599516SKenneth E. Jansen 				   "integer",
447*59599516SKenneth E. Jansen 				   "binary");
448*59599516SKenneth E. Jansen 		}
449*59599516SKenneth E. Jansen 
450*59599516SKenneth E. Jansen               if ( cscompare("block",headerTypeI[i]) )
451*59599516SKenneth E. Jansen                 delete [] Ifield[i][j];
452*59599516SKenneth E. Jansen 	    }
453*59599516SKenneth E. Jansen 	  delete [] paraI[i][j];
454*59599516SKenneth E. Jansen 	}
455*59599516SKenneth E. Jansen     }
456*59599516SKenneth E. Jansen 
457*59599516SKenneth E. Jansen 
458*59599516SKenneth E. Jansen   closefile( &irstou, "write" );
459*59599516SKenneth E. Jansen   MPI_Barrier(MPI_COMM_WORLD);
460*59599516SKenneth E. Jansen 
461*59599516SKenneth E. Jansen 
462*59599516SKenneth E. Jansen   if (N_restart_double>0)
463*59599516SKenneth E. Jansen     for ( i = 0; i < N_restart_double; i++ )
464*59599516SKenneth E. Jansen       {
465*59599516SKenneth E. Jansen 	delete [] Dfield[i];
466*59599516SKenneth E. Jansen 	delete [] paraD[i];
467*59599516SKenneth E. Jansen 
468*59599516SKenneth E. Jansen 	delete [] fieldNameD[i];
469*59599516SKenneth E. Jansen 	delete [] fileTypeD[i];
470*59599516SKenneth E. Jansen 	delete [] dataTypeD[i];
471*59599516SKenneth E. Jansen 	delete [] headerTypeD[i];
472*59599516SKenneth E. Jansen       }
473*59599516SKenneth E. Jansen 
474*59599516SKenneth E. Jansen   if (N_restart_integer>0)
475*59599516SKenneth E. Jansen     for ( i = 0; i < N_restart_integer; i++ )
476*59599516SKenneth E. Jansen       {
477*59599516SKenneth E. Jansen 	delete [] Ifield[i];
478*59599516SKenneth E. Jansen 	delete [] paraI[i];
479*59599516SKenneth E. Jansen 
480*59599516SKenneth E. Jansen 	delete [] fieldNameI[i];
481*59599516SKenneth E. Jansen 	delete [] fileTypeI[i];
482*59599516SKenneth E. Jansen 	delete [] dataTypeI[i];
483*59599516SKenneth E. Jansen 	delete [] headerTypeI[i];
484*59599516SKenneth E. Jansen       }
485*59599516SKenneth E. Jansen 
486*59599516SKenneth E. Jansen   delete [] Dfield;
487*59599516SKenneth E. Jansen   delete [] Ifield;
488*59599516SKenneth E. Jansen 
489*59599516SKenneth E. Jansen   delete [] paraD;
490*59599516SKenneth E. Jansen   delete [] paraI;
491*59599516SKenneth E. Jansen 
492*59599516SKenneth E. Jansen   delete [] expectD;
493*59599516SKenneth E. Jansen   delete [] expectI;
494*59599516SKenneth E. Jansen 
495*59599516SKenneth E. Jansen   delete [] fieldNameD;
496*59599516SKenneth E. Jansen   delete [] fileTypeD;
497*59599516SKenneth E. Jansen   delete [] dataTypeD;
498*59599516SKenneth E. Jansen   delete [] headerTypeD;
499*59599516SKenneth E. Jansen 
500*59599516SKenneth E. Jansen   delete [] fieldNameI;
501*59599516SKenneth E. Jansen   delete [] fileTypeI;
502*59599516SKenneth E. Jansen   delete [] dataTypeI;
503*59599516SKenneth E. Jansen   delete [] headerTypeI;
504*59599516SKenneth E. Jansen 
505*59599516SKenneth E. Jansen   fclose(pFile);
506*59599516SKenneth E. Jansen 
507*59599516SKenneth E. Jansen   if (myrank==0)
508*59599516SKenneth E. Jansen     {
509*59599516SKenneth E. Jansen       printf("\nFinished transfer, please check data using:\n");
510*59599516SKenneth E. Jansen       printf(" grep -a ': <' filename \n\n");
511*59599516SKenneth E. Jansen     }
512*59599516SKenneth E. Jansen 
513*59599516SKenneth E. Jansen   MPI_Finalize();
514*59599516SKenneth E. Jansen 
515*59599516SKenneth E. Jansen }
516*59599516SKenneth E. Jansen 
517*59599516SKenneth E. Jansen 
518