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