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