xref: /phasta/converterIO/converterN2O.cc (revision 8746ab438bbda91291f8cdd62b94f8385f2d26f1) !
159599516SKenneth E. Jansen #include <stdio.h>
259599516SKenneth E. Jansen #include <iostream>
359599516SKenneth E. Jansen #include <string.h>
459599516SKenneth E. Jansen #include <stdlib.h>
559599516SKenneth E. Jansen //#define OMPI_SKIP_MPICXX 1 //Added in the CMakeList.txt file
659599516SKenneth E. Jansen #include <mpi.h>
759599516SKenneth E. Jansen #include <math.h>
859599516SKenneth E. Jansen #include <sys/stat.h>
959599516SKenneth E. Jansen #include <sys/types.h>
1059599516SKenneth E. Jansen #include "phastaIO.h"
1159599516SKenneth E. Jansen 
1259599516SKenneth E. Jansen inline int
cscompare(const char teststring[],const char targetstring[])1359599516SKenneth E. Jansen cscompare( const char teststring[],
1459599516SKenneth E. Jansen 	   const char targetstring[] )
1559599516SKenneth E. Jansen {
1659599516SKenneth E. Jansen   char* s1 = const_cast<char*>(teststring);
1759599516SKenneth E. Jansen   char* s2 = const_cast<char*>(targetstring);
1859599516SKenneth E. Jansen 
1959599516SKenneth E. Jansen   while( *s1 == ' ') s1++;
2059599516SKenneth E. Jansen   while( *s2 == ' ') s2++;
2159599516SKenneth E. Jansen   while( ( *s1 )
2259599516SKenneth E. Jansen 	 && ( *s2 )
2359599516SKenneth E. Jansen 	 && ( *s2 != '?')
2459599516SKenneth E. Jansen 	 && ( tolower( *s1 )==tolower( *s2 ) ) ) {
2559599516SKenneth E. Jansen     s1++;
2659599516SKenneth E. Jansen     s2++;
2759599516SKenneth E. Jansen     while( *s1 == ' ') s1++;
2859599516SKenneth E. Jansen     while( *s2 == ' ') s2++;
2959599516SKenneth E. Jansen   }
3059599516SKenneth E. Jansen   if ( !( *s1 ) || ( *s1 == '?') ) return 1;
3159599516SKenneth E. Jansen   else return 0;
3259599516SKenneth E. Jansen }
3359599516SKenneth E. Jansen 
main(int argc,char * argv[])3459599516SKenneth E. Jansen int main(int argc, char *argv[]) {
3559599516SKenneth E. Jansen 
3659599516SKenneth E. Jansen   MPI_Init(&argc,&argv);
3759599516SKenneth E. Jansen 
3859599516SKenneth E. Jansen   int myrank, N_procs;
3959599516SKenneth E. Jansen   MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
4059599516SKenneth E. Jansen   MPI_Comm_size(MPI_COMM_WORLD, &N_procs);
4159599516SKenneth E. Jansen 
4259599516SKenneth E. Jansen   FILE * pFile;
4359599516SKenneth E. Jansen   char target[1024], pool[256];
4459599516SKenneth E. Jansen   char * temp, * token;
4559599516SKenneth E. Jansen   int i, j, k, N_restart_integer, N_restart_double;
4659599516SKenneth E. Jansen   int N_geombc_double, N_geombc_integer;
4759599516SKenneth E. Jansen   int N_steps, N_parts, N_files;
4859599516SKenneth E. Jansen 
4959599516SKenneth E. Jansen   pFile = fopen("./IO.N2O.input","r");
5059599516SKenneth E. Jansen   if (pFile == NULL)
5159599516SKenneth E. Jansen     printf("Error openning\n");
5259599516SKenneth E. Jansen 
5359599516SKenneth E. Jansen   fgets( target, 1024, pFile );
5459599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
5559599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
5659599516SKenneth E. Jansen   N_geombc_double = atoi(temp);
5759599516SKenneth E. Jansen 
5859599516SKenneth E. Jansen   fgets( target, 1024, pFile );
5959599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
6059599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
6159599516SKenneth E. Jansen   N_geombc_integer = atoi(temp);
6259599516SKenneth E. Jansen 
6359599516SKenneth E. Jansen   fgets( target, 1024, pFile );
6459599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
6559599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
6659599516SKenneth E. Jansen   N_restart_double = atoi(temp);
6759599516SKenneth E. Jansen 
6859599516SKenneth E. Jansen   fgets( target, 1024, pFile );
6959599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
7059599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
7159599516SKenneth E. Jansen   N_restart_integer = atoi(temp);
7259599516SKenneth E. Jansen 
7359599516SKenneth E. Jansen   fgets( target, 1024, pFile );
7459599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
7559599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
7659599516SKenneth E. Jansen   N_steps = atoi(temp);
7759599516SKenneth E. Jansen 
7859599516SKenneth E. Jansen   fgets( target, 1024, pFile );
7959599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
8059599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
8159599516SKenneth E. Jansen   N_parts = atoi(temp);
8259599516SKenneth E. Jansen 
8359599516SKenneth E. Jansen   if(myrank==0){
8459599516SKenneth E. Jansen     printf("numpe is %d and start is %d\n",N_parts,N_steps);
8559599516SKenneth E. Jansen   }
8659599516SKenneth E. Jansen 
8759599516SKenneth E. Jansen   fgets( target, 1024, pFile );
8859599516SKenneth E. Jansen   token = strtok ( target, ";" );strcpy(pool,token);
8959599516SKenneth E. Jansen   temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" );
9059599516SKenneth E. Jansen   N_files = atoi(temp);
9159599516SKenneth E. Jansen 
9259599516SKenneth E. Jansen   double ***Dfield; int ***Ifield;
9359599516SKenneth E. Jansen   int ***paraD, ***paraI, *expectD, *expectI;
9459599516SKenneth E. Jansen   char **fieldNameD, **fileTypeD, **dataTypeD, **headerTypeD;
9559599516SKenneth E. Jansen   char **fieldNameI, **fileTypeI, **dataTypeI, **headerTypeI;
9659599516SKenneth E. Jansen 
97*9fdca21dSCameron Smith   int* WriteLockD = new int[N_restart_double];
98*9fdca21dSCameron Smith   int* WriteLockI = new int[N_restart_integer];
9959599516SKenneth E. Jansen 
10059599516SKenneth E. Jansen   int nppp = N_parts/N_procs;
10159599516SKenneth E. Jansen   int startpart = myrank * nppp +1;
10259599516SKenneth E. Jansen   int endpart = startpart + nppp - 1;
10359599516SKenneth E. Jansen   char gfname[64], numTemp[128];
104f32d06b0SKenneth E. Jansen   int iarray[10], igeom, isize;
10559599516SKenneth E. Jansen 
10659599516SKenneth E. Jansen 
10759599516SKenneth E. Jansen   if (N_parts != N_procs) {
10859599516SKenneth E. Jansen       printf("Input error: number of parts should be equal to the number of procs!\n");
10959599516SKenneth E. Jansen       printf("Please modify the IO.O2N.input file!\n");
11059599516SKenneth E. Jansen       return 0;
11159599516SKenneth E. Jansen   }
11259599516SKenneth E. Jansen 
11359599516SKenneth E. Jansen 
11459599516SKenneth E. Jansen 
11559599516SKenneth E. Jansen   ///////////////////// reading ///////////////////////////////
11659599516SKenneth E. Jansen 
11759599516SKenneth E. Jansen   int nppf = N_parts/N_files;
11859599516SKenneth E. Jansen   int N_geombc = N_geombc_double + N_geombc_integer;
11959599516SKenneth E. Jansen   int readHandle, GPID;
12059599516SKenneth E. Jansen   char fname[255],fieldtag[255];
12159599516SKenneth E. Jansen 
12259599516SKenneth E. Jansen   int irestart;
12359599516SKenneth E. Jansen 
12459599516SKenneth E. Jansen   Dfield = new double**[N_restart_double];
12559599516SKenneth E. Jansen   Ifield = new int**[N_restart_integer];
12659599516SKenneth E. Jansen 
12759599516SKenneth E. Jansen   paraD = new int**[N_restart_double];
12859599516SKenneth E. Jansen   paraI = new int**[N_restart_integer];
12959599516SKenneth E. Jansen 
13059599516SKenneth E. Jansen   expectD = new int[N_restart_double];
13159599516SKenneth E. Jansen   expectI = new int[N_restart_integer];
13259599516SKenneth E. Jansen 
13359599516SKenneth E. Jansen   fieldNameD = new char*[N_restart_double];
13459599516SKenneth E. Jansen   fileTypeD = new char*[N_restart_double];
13559599516SKenneth E. Jansen   dataTypeD = new char*[N_restart_double];
13659599516SKenneth E. Jansen   headerTypeD = new char*[N_restart_double];
13759599516SKenneth E. Jansen 
13859599516SKenneth E. Jansen   fieldNameI = new char*[N_restart_integer];
13959599516SKenneth E. Jansen   fileTypeI = new char*[N_restart_integer];
14059599516SKenneth E. Jansen   dataTypeI = new char*[N_restart_integer];
14159599516SKenneth E. Jansen   headerTypeI = new char*[N_restart_integer];
14259599516SKenneth E. Jansen 
14359599516SKenneth E. Jansen   if (N_restart_double>0)
14459599516SKenneth E. Jansen     for ( i = 0; i < N_restart_double; i++ )
14559599516SKenneth E. Jansen       {
14659599516SKenneth E. Jansen 	WriteLockD[i]=0;
14759599516SKenneth E. Jansen 	Dfield[i] = new double*[nppp];
14859599516SKenneth E. Jansen 
14959599516SKenneth E. Jansen 	paraD[i] = new int*[nppp];
15059599516SKenneth E. Jansen 
15159599516SKenneth E. Jansen 	fieldNameD[i] = new char[128];
15259599516SKenneth E. Jansen 	fileTypeD[i] = new char[128];
15359599516SKenneth E. Jansen 	dataTypeD[i] = new char[128];
15459599516SKenneth E. Jansen 	headerTypeD[i] = new char[128];
15559599516SKenneth E. Jansen       }
15659599516SKenneth E. Jansen 
15759599516SKenneth E. Jansen   if (N_restart_integer>0)
15859599516SKenneth E. Jansen     for ( i = 0; i < N_restart_integer; i++ )
15959599516SKenneth E. Jansen       {
16059599516SKenneth E. Jansen 	WriteLockI[i]=0;
16159599516SKenneth E. Jansen 	Ifield[i] = new int*[nppp];
16259599516SKenneth E. Jansen 
16359599516SKenneth E. Jansen 	paraI[i] = new int*[nppp];
16459599516SKenneth E. Jansen 
16559599516SKenneth E. Jansen 	fieldNameI[i] = new char[128];
16659599516SKenneth E. Jansen 	fileTypeI[i] = new char[128];
16759599516SKenneth E. Jansen 	dataTypeI[i] = new char[128];
16859599516SKenneth E. Jansen 	headerTypeI[i] = new char[128];
16959599516SKenneth E. Jansen       }
17059599516SKenneth E. Jansen 
17159599516SKenneth E. Jansen 
17259599516SKenneth E. Jansen   ///////////////////// reading ///////////////////////////////
17359599516SKenneth E. Jansen 
17459599516SKenneth E. Jansen   int N_restart = N_restart_double + N_restart_integer;
17559599516SKenneth E. Jansen   int readHandle1;
17659599516SKenneth E. Jansen 
17759599516SKenneth E. Jansen   bzero((void*)fname,255);
17859599516SKenneth E. Jansen   sprintf(fname,"./%d-procs_case/restart-dat.%d.%d",N_parts,N_steps,((int)(myrank/(N_procs/N_files))+1));
17959599516SKenneth E. Jansen 
18059599516SKenneth E. Jansen   //if(myrank==0){
18159599516SKenneth E. Jansen   //  printf("Myrank is %d - Filename is %s \n",myrank,fname);
18259599516SKenneth E. Jansen   //}
18359599516SKenneth E. Jansen 
18459599516SKenneth E. Jansen   int nfields;
18559599516SKenneth E. Jansen   queryphmpiio(fname, &nfields, &nppf);
18659599516SKenneth E. Jansen   //initphmpiio(&N_restart, &nppf, &N_files,&readHandle1, "write") ;//WRONG
18759599516SKenneth E. Jansen   initphmpiio(&nfields, &nppf, &N_files, &readHandle1, "read");
18859599516SKenneth E. Jansen   openfile(fname, "read", &readHandle1);
18959599516SKenneth E. Jansen 
19059599516SKenneth E. Jansen   for ( i = 0; i < N_restart_double; i++ )
19159599516SKenneth E. Jansen     {
19259599516SKenneth E. Jansen       fgets( target, 1024, pFile );
19359599516SKenneth E. Jansen       temp = strtok( target, ";" );
19459599516SKenneth E. Jansen       token = strtok( temp, "," );
19559599516SKenneth E. Jansen       strcpy( fileTypeD[i], token );
19659599516SKenneth E. Jansen       token = strtok ( NULL, "," );
19759599516SKenneth E. Jansen       strcpy( fieldNameD[i], token );
19859599516SKenneth E. Jansen       token = strtok ( NULL, "," );
19959599516SKenneth E. Jansen       strcpy( dataTypeD[i], token );
20059599516SKenneth E. Jansen       token = strtok ( NULL, "," );
20159599516SKenneth E. Jansen       strcpy( headerTypeD[i], token );
20259599516SKenneth E. Jansen       token = strtok ( NULL, "," );
20359599516SKenneth E. Jansen       strcpy( numTemp, token );
20459599516SKenneth E. Jansen       expectD[i] = atoi (numTemp);
20559599516SKenneth E. Jansen 
20659599516SKenneth E. Jansen       for (  j = 0; j < nppp; j++  )
20759599516SKenneth E. Jansen 	{
20859599516SKenneth E. Jansen 	  paraD[i][j] = new int[expectD[i]];
20959599516SKenneth E. Jansen 
21059599516SKenneth E. Jansen 	  for ( k = 0; k < 10; k++ )
21159599516SKenneth E. Jansen 	    iarray[k]=0;
21259599516SKenneth E. Jansen 
21359599516SKenneth E. Jansen 	  GPID = startpart + j;
21459599516SKenneth E. Jansen 	  bzero((void*)fieldtag,255);
21559599516SKenneth E. Jansen 	  sprintf(fieldtag,"%s@%d",fieldNameD[i],GPID);
21659599516SKenneth E. Jansen 
21759599516SKenneth E. Jansen           //printf("myrank %d - filedtag %s\n",myrank,fieldtag);
21859599516SKenneth E. Jansen 
21959599516SKenneth E. Jansen 	  iarray[0]=-1;
22059599516SKenneth E. Jansen 	  readheader( &readHandle1,
22159599516SKenneth E. Jansen 		       fieldtag,
22259599516SKenneth E. Jansen 		       (void*)iarray,
22359599516SKenneth E. Jansen 		       &expectD[i],
22459599516SKenneth E. Jansen 		       "double",
22559599516SKenneth E. Jansen 		       "binary" );
22659599516SKenneth E. Jansen 
22759599516SKenneth E. Jansen 	  if ( iarray[0]==-1 )
22859599516SKenneth E. Jansen 	      WriteLockD[i]=1;
22959599516SKenneth E. Jansen 	  if ( WriteLockD[i]==0 )
23059599516SKenneth E. Jansen 	    {
23159599516SKenneth E. Jansen 	      for ( k = 0; k < expectD[i]; k++ )
23259599516SKenneth E. Jansen 		paraD[i][j][k] = iarray[k];
23359599516SKenneth E. Jansen 
23459599516SKenneth E. Jansen 	      if ( cscompare("block",headerTypeD[i]) )
23559599516SKenneth E. Jansen 		{
23659599516SKenneth E. Jansen 		  if ( expectD[i]==1)
23759599516SKenneth E. Jansen 		    isize = paraD[i][j][0];
23859599516SKenneth E. Jansen 		  else
23959599516SKenneth E. Jansen 		    isize = paraD[i][j][0] * paraD[i][j][1];
24059599516SKenneth E. Jansen 
24159599516SKenneth E. Jansen 		  Dfield[i][j] = new double[isize];
24259599516SKenneth E. Jansen 		  readdatablock( &readHandle1,
24359599516SKenneth E. Jansen 				  fieldtag,
24459599516SKenneth E. Jansen 				  (void*)Dfield[i][j],
24559599516SKenneth E. Jansen 				  &isize,
24659599516SKenneth E. Jansen 				  "double",
24759599516SKenneth E. Jansen 				  "binary" );
24859599516SKenneth E. Jansen 		}
24959599516SKenneth E. Jansen 
25059599516SKenneth E. Jansen 	    }
25159599516SKenneth E. Jansen 	}
25259599516SKenneth E. Jansen     }
25359599516SKenneth E. Jansen 
25459599516SKenneth E. Jansen   for ( i = 0; i < N_restart_integer; i++ )
25559599516SKenneth E. Jansen     {
25659599516SKenneth E. Jansen       fgets( target, 1024, pFile );
25759599516SKenneth E. Jansen       temp = strtok( target, ";" );
25859599516SKenneth E. Jansen       token = strtok( temp, "," );
25959599516SKenneth E. Jansen       strcpy( fileTypeI[i], token );
26059599516SKenneth E. Jansen       token = strtok ( NULL, "," );
26159599516SKenneth E. Jansen       strcpy( fieldNameI[i], token );
26259599516SKenneth E. Jansen       token = strtok ( NULL, "," );
26359599516SKenneth E. Jansen       strcpy( dataTypeI[i], token );
26459599516SKenneth E. Jansen       token = strtok ( NULL, "," );
26559599516SKenneth E. Jansen       strcpy( headerTypeI[i], token );
26659599516SKenneth E. Jansen       token = strtok ( NULL, "," );
26759599516SKenneth E. Jansen       strcpy( numTemp, token );
26859599516SKenneth E. Jansen       expectI[i] = atoi (numTemp);
26959599516SKenneth E. Jansen 
27059599516SKenneth E. Jansen       for ( j = 0; j < nppp; j++ )
27159599516SKenneth E. Jansen 	{
27259599516SKenneth E. Jansen 	  paraI[i][j] = new int[expectI[i]];
27359599516SKenneth E. Jansen 
27459599516SKenneth E. Jansen 	  for ( k = 0; k < 10; k++ )
27559599516SKenneth E. Jansen 	    iarray[k]=0;
27659599516SKenneth E. Jansen 
27759599516SKenneth E. Jansen 	  GPID = startpart + j;
27859599516SKenneth E. Jansen 	  bzero((void*)fieldtag,255);
27959599516SKenneth E. Jansen 	  sprintf(fieldtag,"%s@%d",fieldNameI[i],GPID);
28059599516SKenneth E. Jansen 	  iarray[0]=-1;
28159599516SKenneth E. Jansen 
28259599516SKenneth E. Jansen 	  //printf("Rank %d, fieldname is %s \n",myrank,fieldtag);
28359599516SKenneth E. Jansen 
28459599516SKenneth E. Jansen 	  readheader( &readHandle1,
28559599516SKenneth E. Jansen 		       fieldtag,
28659599516SKenneth E. Jansen 		       (void*)iarray,
28759599516SKenneth E. Jansen 		       &expectI[i],
28859599516SKenneth E. Jansen 		       "integer",
28959599516SKenneth E. Jansen 		       "binary" );
29059599516SKenneth E. Jansen 
29159599516SKenneth E. Jansen 	  if ( iarray[0]==-1)
29259599516SKenneth E. Jansen 	      WriteLockI[i]=1;
29359599516SKenneth E. Jansen 	  if ( WriteLockI[i]==0 )
29459599516SKenneth E. Jansen 	    {
29559599516SKenneth E. Jansen 	      for ( k = 0; k < expectI[i]; k++ )
29659599516SKenneth E. Jansen 		paraI[i][j][k] = iarray[k];
29759599516SKenneth E. Jansen 
29859599516SKenneth E. Jansen 	      if ( cscompare("block",headerTypeI[i]) )
29959599516SKenneth E. Jansen 		{
30059599516SKenneth E. Jansen 		  if ( expectI[i]==1)
30159599516SKenneth E. Jansen 		    isize = paraI[i][j][0];
30259599516SKenneth E. Jansen 		  else
30359599516SKenneth E. Jansen 		    isize = paraI[i][j][0] * paraI[i][j][1];
30459599516SKenneth E. Jansen 
30559599516SKenneth E. Jansen 		  Ifield[i][j] = new int[isize];
30659599516SKenneth E. Jansen 		  readdatablock( &readHandle1,
30759599516SKenneth E. Jansen 				  fieldtag,
30859599516SKenneth E. Jansen 				  (void*)Ifield[i][j],
30959599516SKenneth E. Jansen 				  &isize,
31059599516SKenneth E. Jansen 				  "integer",
31159599516SKenneth E. Jansen 				  "binary" );
31259599516SKenneth E. Jansen 		}
31359599516SKenneth E. Jansen 	    }
31459599516SKenneth E. Jansen 	}
31559599516SKenneth E. Jansen 
31659599516SKenneth E. Jansen     }
31759599516SKenneth E. Jansen 
31859599516SKenneth E. Jansen   closefile(&readHandle1, "write");
31959599516SKenneth E. Jansen   finalizephmpiio(&readHandle1);
32059599516SKenneth E. Jansen 
32159599516SKenneth E. Jansen   //////////////////////////writing////////////////////////////
32259599516SKenneth E. Jansen 
32359599516SKenneth E. Jansen   int irstou;
32459599516SKenneth E. Jansen   int magic_number = 362436;
32559599516SKenneth E. Jansen   int* mptr = &magic_number;
32659599516SKenneth E. Jansen   int nitems = 1;
32759599516SKenneth E. Jansen 
32859599516SKenneth E. Jansen //MR CHANGE
32959599516SKenneth E. Jansen   bzero((void*)fname,255);
33059599516SKenneth E. Jansen   sprintf(fname,"./%d-procs_case-1PPP",N_parts);
33159599516SKenneth E. Jansen   if(0<mkdir(fname,0777)) { printf("ERROR - Could not create procs_case-1PPP directory\n"); return 1; }
33259599516SKenneth E. Jansen //MR CHANGE END
33359599516SKenneth E. Jansen 
33459599516SKenneth E. Jansen   bzero((void*)fname,255);
33559599516SKenneth E. Jansen   sprintf(fname,"./%d-procs_case-1PPP/restart.%d.%d",N_parts,N_steps,myrank+1);
33659599516SKenneth E. Jansen   openfile(fname,"write", &irstou);
33759599516SKenneth E. Jansen 
33859599516SKenneth E. Jansen   /* writing the top ascii header for the restart file */
33959599516SKenneth E. Jansen 
34059599516SKenneth E. Jansen   writestring( &irstou,"# PHASTA Input File Version 2.0\n");
34159599516SKenneth E. Jansen   writestring( &irstou,
34259599516SKenneth E. Jansen 		"# format \"keyphrase : sizeofnextblock usual headers\"\n");
34359599516SKenneth E. Jansen 
34459599516SKenneth E. Jansen   bzero( (void*)fname, 255 );
34559599516SKenneth E. Jansen   writestring( &irstou, fname );
34659599516SKenneth E. Jansen 
34759599516SKenneth E. Jansen   writestring( &irstou, fname );
34859599516SKenneth E. Jansen   writestring( &irstou,"\n");
34959599516SKenneth E. Jansen 
35059599516SKenneth E. Jansen 
35159599516SKenneth E. Jansen   isize = 1;
35259599516SKenneth E. Jansen   nitems = 1;
35359599516SKenneth E. Jansen   iarray[ 0 ] = 1;
35459599516SKenneth E. Jansen   writeheader( &irstou, "byteorder magic number ",
35559599516SKenneth E. Jansen 		(void*)iarray, &nitems, &isize, "integer", "binary" );
35659599516SKenneth E. Jansen 
35759599516SKenneth E. Jansen   nitems = 1;
35859599516SKenneth E. Jansen   writedatablock( &irstou, "byteorder magic number ",
35959599516SKenneth E. Jansen 		   (void*)mptr, &nitems, "integer", "binary" );
36059599516SKenneth E. Jansen 
36159599516SKenneth E. Jansen   for ( i = 0; i < N_restart_double; i++ )
36259599516SKenneth E. Jansen     {
36359599516SKenneth E. Jansen       for ( j = 0; j < nppp; j++ )
36459599516SKenneth E. Jansen 	{
36559599516SKenneth E. Jansen 	  if ( WriteLockD[i] == 0 )
36659599516SKenneth E. Jansen 	    {
36759599516SKenneth E. Jansen 	      if ( cscompare("header",headerTypeD[i]) )
36859599516SKenneth E. Jansen 		{
36959599516SKenneth E. Jansen 		  bzero( (void*)fname, 255 );
37059599516SKenneth E. Jansen 		  sprintf(fname,"%s : < 0 > %d\n", fieldNameD[i],paraD[i][j][0]);
37159599516SKenneth E. Jansen 		  writestring( &irstou, fname );
37259599516SKenneth E. Jansen 		}
37359599516SKenneth E. Jansen 
37459599516SKenneth E. Jansen 	      if ( cscompare("block",headerTypeD[i]) )
37559599516SKenneth E. Jansen 		{
37659599516SKenneth E. Jansen 		  if ( expectD[i]==1 )
37759599516SKenneth E. Jansen 		    isize = paraD[i][j][0];
37859599516SKenneth E. Jansen 		  else
37959599516SKenneth E. Jansen 		    isize = paraD[i][j][0] * paraD[i][j][1];
38059599516SKenneth E. Jansen 
38159599516SKenneth E. Jansen 		  for ( k = 0; k < expectD[i]; k++ )
38259599516SKenneth E. Jansen 		    iarray[k] = paraD[i][j][k];
38359599516SKenneth E. Jansen 
38459599516SKenneth E. Jansen 		  if ( cscompare("header",headerTypeD[i]) )
38559599516SKenneth E. Jansen 		    isize = 0;
38659599516SKenneth E. Jansen 
38759599516SKenneth E. Jansen 		  writeheader( &irstou,
38859599516SKenneth E. Jansen 				fieldNameD[i],
38959599516SKenneth E. Jansen 				(void*)iarray,
39059599516SKenneth E. Jansen 				&expectD[i],
39159599516SKenneth E. Jansen 				&isize,
39259599516SKenneth E. Jansen 				"double",
39359599516SKenneth E. Jansen 				"binary");
39459599516SKenneth E. Jansen 		  writedatablock( &irstou,
39559599516SKenneth E. Jansen 				   fieldNameD[i],
39659599516SKenneth E. Jansen 				   (void*)Dfield[i][j],
39759599516SKenneth E. Jansen 				   &isize,
39859599516SKenneth E. Jansen 				   "double",
39959599516SKenneth E. Jansen 				   "binary");
40059599516SKenneth E. Jansen 		}
40159599516SKenneth E. Jansen 
40259599516SKenneth E. Jansen 
40359599516SKenneth E. Jansen               if ( cscompare("block",headerTypeD[i]) )
40459599516SKenneth E. Jansen                 delete [] Dfield[i][j];
40559599516SKenneth E. Jansen 	    }
40659599516SKenneth E. Jansen 	  delete [] paraD[i][j];
40759599516SKenneth E. Jansen 	}
40859599516SKenneth E. Jansen     }
40959599516SKenneth E. Jansen 
41059599516SKenneth E. Jansen   for ( i = 0; i < N_restart_integer; i++ )
41159599516SKenneth E. Jansen     {
41259599516SKenneth E. Jansen       for ( j = 0; j < nppp; j++ )
41359599516SKenneth E. Jansen 	{
41459599516SKenneth E. Jansen 
41559599516SKenneth E. Jansen 	  if ( WriteLockI[i] == 0 )
41659599516SKenneth E. Jansen 	    {
41759599516SKenneth E. Jansen 
41859599516SKenneth E. Jansen 	      if ( cscompare("header",headerTypeI[i]) )
41959599516SKenneth E. Jansen 		{
42059599516SKenneth E. Jansen 		  bzero( (void*)fname, 255 );
42159599516SKenneth E. Jansen 		  sprintf(fname,"%s : < 0 > %d\n", fieldNameI[i],paraI[i][j][0]);
42259599516SKenneth E. Jansen 		  writestring( &irstou, fname );
42359599516SKenneth E. Jansen 		}
42459599516SKenneth E. Jansen 
42559599516SKenneth E. Jansen 	      if ( cscompare("block",headerTypeI[i]) )
42659599516SKenneth E. Jansen 		{
42759599516SKenneth E. Jansen 		  if ( expectI[i]==1 )
42859599516SKenneth E. Jansen 		    isize = paraI[i][j][0];
42959599516SKenneth E. Jansen 		  else
43059599516SKenneth E. Jansen 		    isize = paraI[i][j][0] * paraI[i][j][1];
43159599516SKenneth E. Jansen 
43259599516SKenneth E. Jansen 		  for ( k = 0; k < expectI[i]; k++ )
43359599516SKenneth E. Jansen 		    iarray[k] = paraI[i][j][k];
43459599516SKenneth E. Jansen 
43559599516SKenneth E. Jansen 		  writeheader( &irstou,
43659599516SKenneth E. Jansen 				fieldNameI[i],
43759599516SKenneth E. Jansen 				(void*)iarray,
43859599516SKenneth E. Jansen 				&expectI[i],
43959599516SKenneth E. Jansen 				&isize,
44059599516SKenneth E. Jansen 				"integer",
44159599516SKenneth E. Jansen 				"binary");
44259599516SKenneth E. Jansen 		  writedatablock( &irstou,
44359599516SKenneth E. Jansen 				   fieldNameI[i],
44459599516SKenneth E. Jansen 				   (void*)Ifield[i][j],
44559599516SKenneth E. Jansen 				   &isize,
44659599516SKenneth E. Jansen 				   "integer",
44759599516SKenneth E. Jansen 				   "binary");
44859599516SKenneth E. Jansen 		}
44959599516SKenneth E. Jansen 
45059599516SKenneth E. Jansen               if ( cscompare("block",headerTypeI[i]) )
45159599516SKenneth E. Jansen                 delete [] Ifield[i][j];
45259599516SKenneth E. Jansen 	    }
45359599516SKenneth E. Jansen 	  delete [] paraI[i][j];
45459599516SKenneth E. Jansen 	}
45559599516SKenneth E. Jansen     }
45659599516SKenneth E. Jansen 
45759599516SKenneth E. Jansen 
45859599516SKenneth E. Jansen   closefile( &irstou, "write" );
45959599516SKenneth E. Jansen   MPI_Barrier(MPI_COMM_WORLD);
46059599516SKenneth E. Jansen 
46159599516SKenneth E. Jansen 
46259599516SKenneth E. Jansen   if (N_restart_double>0)
46359599516SKenneth E. Jansen     for ( i = 0; i < N_restart_double; i++ )
46459599516SKenneth E. Jansen       {
46559599516SKenneth E. Jansen 	delete [] Dfield[i];
46659599516SKenneth E. Jansen 	delete [] paraD[i];
46759599516SKenneth E. Jansen 
46859599516SKenneth E. Jansen 	delete [] fieldNameD[i];
46959599516SKenneth E. Jansen 	delete [] fileTypeD[i];
47059599516SKenneth E. Jansen 	delete [] dataTypeD[i];
47159599516SKenneth E. Jansen 	delete [] headerTypeD[i];
47259599516SKenneth E. Jansen       }
47359599516SKenneth E. Jansen 
47459599516SKenneth E. Jansen   if (N_restart_integer>0)
47559599516SKenneth E. Jansen     for ( i = 0; i < N_restart_integer; i++ )
47659599516SKenneth E. Jansen       {
47759599516SKenneth E. Jansen 	delete [] Ifield[i];
47859599516SKenneth E. Jansen 	delete [] paraI[i];
47959599516SKenneth E. Jansen 
48059599516SKenneth E. Jansen 	delete [] fieldNameI[i];
48159599516SKenneth E. Jansen 	delete [] fileTypeI[i];
48259599516SKenneth E. Jansen 	delete [] dataTypeI[i];
48359599516SKenneth E. Jansen 	delete [] headerTypeI[i];
48459599516SKenneth E. Jansen       }
48559599516SKenneth E. Jansen 
48659599516SKenneth E. Jansen   delete [] Dfield;
48759599516SKenneth E. Jansen   delete [] Ifield;
48859599516SKenneth E. Jansen 
48959599516SKenneth E. Jansen   delete [] paraD;
49059599516SKenneth E. Jansen   delete [] paraI;
49159599516SKenneth E. Jansen 
49259599516SKenneth E. Jansen   delete [] expectD;
49359599516SKenneth E. Jansen   delete [] expectI;
49459599516SKenneth E. Jansen 
49559599516SKenneth E. Jansen   delete [] fieldNameD;
49659599516SKenneth E. Jansen   delete [] fileTypeD;
49759599516SKenneth E. Jansen   delete [] dataTypeD;
49859599516SKenneth E. Jansen   delete [] headerTypeD;
49959599516SKenneth E. Jansen 
50059599516SKenneth E. Jansen   delete [] fieldNameI;
50159599516SKenneth E. Jansen   delete [] fileTypeI;
50259599516SKenneth E. Jansen   delete [] dataTypeI;
50359599516SKenneth E. Jansen   delete [] headerTypeI;
50459599516SKenneth E. Jansen 
505*9fdca21dSCameron Smith   delete [] WriteLockD;
506*9fdca21dSCameron Smith   delete [] WriteLockI;
507*9fdca21dSCameron Smith 
50859599516SKenneth E. Jansen   fclose(pFile);
50959599516SKenneth E. Jansen 
51059599516SKenneth E. Jansen   if (myrank==0)
51159599516SKenneth E. Jansen     {
51259599516SKenneth E. Jansen       printf("\nFinished transfer, please check data using:\n");
51359599516SKenneth E. Jansen       printf(" grep -a ': <' filename \n\n");
51459599516SKenneth E. Jansen     }
51559599516SKenneth E. Jansen 
51659599516SKenneth E. Jansen   MPI_Finalize();
51759599516SKenneth E. Jansen 
51859599516SKenneth E. Jansen }
51959599516SKenneth E. Jansen 
52059599516SKenneth E. Jansen 
521