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 "phastaIO.h" 959599516SKenneth E. Jansen #include <sys/stat.h> 1059599516SKenneth E. Jansen #include <sys/types.h> 1159599516SKenneth E. Jansen 1259599516SKenneth E. Jansen enum { 1359599516SKenneth E. Jansen DIR_FANOUT = 2048 1459599516SKenneth E. Jansen }; 1559599516SKenneth E. Jansen 1659599516SKenneth E. Jansen inline int 1759599516SKenneth E. Jansen cscompare( const char teststring[], 1859599516SKenneth E. Jansen const char targetstring[] ) 1959599516SKenneth E. Jansen { 2059599516SKenneth E. Jansen char* s1 = const_cast<char*>(teststring); 2159599516SKenneth E. Jansen char* s2 = const_cast<char*>(targetstring); 2259599516SKenneth E. Jansen 2359599516SKenneth E. Jansen while( *s1 == ' ') s1++; 2459599516SKenneth E. Jansen while( *s2 == ' ') s2++; 2559599516SKenneth E. Jansen while( ( *s1 ) 2659599516SKenneth E. Jansen && ( *s2 ) 2759599516SKenneth E. Jansen && ( *s2 != '?') 2859599516SKenneth E. Jansen && ( tolower( *s1 )==tolower( *s2 ) ) ) { 2959599516SKenneth E. Jansen s1++; 3059599516SKenneth E. Jansen s2++; 3159599516SKenneth E. Jansen while( *s1 == ' ') s1++; 3259599516SKenneth E. Jansen while( *s2 == ' ') s2++; 3359599516SKenneth E. Jansen } 3459599516SKenneth E. Jansen if ( !( *s1 ) || ( *s1 == '?') ) return 1; 3559599516SKenneth E. Jansen else return 0; 3659599516SKenneth E. Jansen } 3759599516SKenneth E. Jansen 3859599516SKenneth E. Jansen inline int 3959599516SKenneth E. Jansen computenitems(const int localpartid, const int fieldid, const int myrank, const char *fieldName, int ***para, const int intHeader, const int numVariables) { 4059599516SKenneth E. Jansen // This routine computes the number of items in the data block based on 4159599516SKenneth E. Jansen // - the name of the fields 4259599516SKenneth E. Jansen // - the integers read from the header 4359599516SKenneth E. Jansen 4459599516SKenneth E. Jansen int nItems = -1; 4559599516SKenneth E. Jansen 4659599516SKenneth E. Jansen if (cscompare("nbc values",fieldName)) 4759599516SKenneth E. Jansen nItems = para[localpartid][fieldid][0] * (numVariables+1); 4859599516SKenneth E. Jansen else if (cscompare("nbc codes",fieldName)) 4959599516SKenneth E. Jansen nItems = para[localpartid][fieldid][0] * 2; 5059599516SKenneth E. Jansen else if ( intHeader==1) 5159599516SKenneth E. Jansen nItems = para[localpartid][fieldid][0]; 5259599516SKenneth E. Jansen else 5359599516SKenneth E. Jansen nItems = para[localpartid][fieldid][0] * para[localpartid][fieldid][1]; 5459599516SKenneth E. Jansen return nItems; 5559599516SKenneth E. Jansen } 5659599516SKenneth E. Jansen 5759599516SKenneth E. Jansen 5859599516SKenneth E. Jansen int main(int argc, char *argv[]) { 5959599516SKenneth E. Jansen 6059599516SKenneth E. Jansen MPI_Init(&argc,&argv); 6159599516SKenneth E. Jansen 6259599516SKenneth E. Jansen int myrank, N_procs; 6359599516SKenneth E. Jansen MPI_Comm_rank(MPI_COMM_WORLD, &myrank); 6459599516SKenneth E. Jansen MPI_Comm_size(MPI_COMM_WORLD, &N_procs); 6559599516SKenneth E. Jansen 6659599516SKenneth E. Jansen FILE * pFile,* AccessoryFileHandle; 6759599516SKenneth E. Jansen char target[1024], pool[256], tempString[128],numpe[8],numstart[8]; 6859599516SKenneth E. Jansen char * temp, * token; 6959599516SKenneth E. Jansen int fieldCompareMark; 7059599516SKenneth E. Jansen bool readField; 7159599516SKenneth E. Jansen int i, j, k, N_geombc_double, N_geombc_integer, N_restart_double; 7259599516SKenneth E. Jansen int N_restart_integer, N_steps, N_parts, N_files; 7359599516SKenneth E. Jansen 7459599516SKenneth E. Jansen pFile = fopen("./IO.O2N.input","r"); 7559599516SKenneth E. Jansen if (pFile == NULL) 7659599516SKenneth E. Jansen printf("Error openning\n"); 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_geombc_double = atoi(temp); 8259599516SKenneth E. Jansen 8359599516SKenneth E. Jansen fgets( target, 1024, pFile ); 8459599516SKenneth E. Jansen token = strtok ( target, ";" );strcpy(pool,token); 8559599516SKenneth E. Jansen temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" ); 8659599516SKenneth E. Jansen N_geombc_integer = atoi(temp); 8759599516SKenneth E. Jansen 8859599516SKenneth E. Jansen fgets( target, 1024, pFile ); 8959599516SKenneth E. Jansen token = strtok ( target, ";" );strcpy(pool,token); 9059599516SKenneth E. Jansen temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" ); 9159599516SKenneth E. Jansen N_restart_double = atoi(temp); 9259599516SKenneth E. Jansen 9359599516SKenneth E. Jansen fgets( target, 1024, pFile ); 9459599516SKenneth E. Jansen token = strtok ( target, ";" );strcpy(pool,token); 9559599516SKenneth E. Jansen temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" ); 9659599516SKenneth E. Jansen N_restart_integer = atoi(temp); 9759599516SKenneth E. Jansen 9859599516SKenneth E. Jansen fgets( target, 1024, pFile ); 9959599516SKenneth E. Jansen token = strtok ( target, ";" );strcpy(pool,token); 10059599516SKenneth E. Jansen temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" ); 10159599516SKenneth E. Jansen strncpy(numstart,temp,1); 10259599516SKenneth E. Jansen N_steps = atoi(temp); 10359599516SKenneth E. Jansen 10459599516SKenneth E. Jansen fgets( target, 1024, pFile ); 10559599516SKenneth E. Jansen token = strtok ( target, ";" );strcpy(pool,token); 10659599516SKenneth E. Jansen temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" ); 10759599516SKenneth E. Jansen strncpy(numpe,temp,1); 10859599516SKenneth E. Jansen N_parts = atoi(temp); 10959599516SKenneth E. Jansen 11059599516SKenneth E. Jansen if(myrank==0){ 11159599516SKenneth E. Jansen printf("numpe is %d and start is %d\n",N_parts,N_steps); 11259599516SKenneth E. Jansen } 11359599516SKenneth E. Jansen 11459599516SKenneth E. Jansen fgets( target, 1024, pFile ); 11559599516SKenneth E. Jansen token = strtok ( target, ";" );strcpy(pool,token); 11659599516SKenneth E. Jansen temp = strtok ( pool, ":" );temp = strtok ( NULL, ":" ); 11759599516SKenneth E. Jansen N_files = atoi(temp); 11859599516SKenneth E. Jansen 11959599516SKenneth E. Jansen double ***Dfield; int ***Ifield; 12059599516SKenneth E. Jansen int ***paraD, ***paraI, *expectD, *expectI; 12159599516SKenneth E. Jansen char **fieldNameD, **fileTypeD, **dataTypeD, **headerTypeD; 12259599516SKenneth E. Jansen char **fieldNameI, **fileTypeI, **dataTypeI, **headerTypeI; 12359599516SKenneth E. Jansen 124*13c09bf6SCameron Smith int* WriteLockD = new int[N_geombc_double]; 125*13c09bf6SCameron Smith int* WriteLockI = new int[N_geombc_integer]; 12659599516SKenneth E. Jansen 12759599516SKenneth E. Jansen int nppp = N_parts/N_procs; 12859599516SKenneth E. Jansen int startpart = myrank * nppp +1; 12959599516SKenneth E. Jansen int endpart = startpart + nppp - 1; 13059599516SKenneth E. Jansen char gfname[64], numTemp[128]; 13159599516SKenneth E. Jansen int iarray[10], igeom, isize,TempFileHandle; 13259599516SKenneth E. Jansen 13359599516SKenneth E. Jansen //////////////////////////////////////// 13459599516SKenneth E. Jansen // Test if the user has given the right parameters related to the number of parts, procs and SyncIO files 13559599516SKenneth E. Jansen //////////////////////////////////////// 13659599516SKenneth E. Jansen 13759599516SKenneth E. Jansen if (N_parts%N_files!=0) 13859599516SKenneth E. Jansen { 13959599516SKenneth E. Jansen printf("Input error: number of parts should be a multiple of number of files!\n"); 14059599516SKenneth E. Jansen printf("Please modify the IO.O2N.input file!\n"); 14159599516SKenneth E. Jansen return 0; 14259599516SKenneth E. Jansen } 14359599516SKenneth E. Jansen if (N_procs%N_files!=0) 14459599516SKenneth E. Jansen { 14559599516SKenneth E. Jansen printf("Input error: number of procs should be a multiple of number of files!\n"); 14659599516SKenneth E. Jansen printf("Please modify the IO.O2N.input file!\n"); 14759599516SKenneth E. Jansen return 0; 14859599516SKenneth E. Jansen } 14959599516SKenneth E. Jansen if (N_parts%N_procs!=0) 15059599516SKenneth E. Jansen { 15159599516SKenneth E. Jansen printf("Input error: number of parts should be a multiple of number of procs!\n"); 15259599516SKenneth E. Jansen printf("Please modify the IO.O2N.input file!\n"); 15359599516SKenneth E. Jansen return 0; 15459599516SKenneth E. Jansen } 15559599516SKenneth E. Jansen 15659599516SKenneth E. Jansen ///////////////////////////////////// 15759599516SKenneth E. Jansen // Create numpe.in and numstart.dat 15859599516SKenneth E. Jansen //////////////////////////////////////// 15959599516SKenneth E. Jansen 16059599516SKenneth E. Jansen if (myrank==0) 16159599516SKenneth E. Jansen { 16259599516SKenneth E. Jansen 16359599516SKenneth E. Jansen //MR CHANGE 16459599516SKenneth E. Jansen bzero((void*)gfname,64); 16559599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case-SyncIO-%d",N_parts,N_files); 16659599516SKenneth E. Jansen if(0<mkdir(gfname,0777)) { printf("ERROR - Could not create procs_case-SyncIO directory\n"); return 1; } 16759599516SKenneth E. Jansen //MR CHANGE END 16859599516SKenneth E. Jansen 16959599516SKenneth E. Jansen bzero((void*)gfname,64); 17059599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case-SyncIO-%d/numstart.dat",N_parts,N_files); 17159599516SKenneth E. Jansen AccessoryFileHandle=fopen(gfname,"w"); 17259599516SKenneth E. Jansen fprintf(AccessoryFileHandle,"%d",N_steps); 17359599516SKenneth E. Jansen fclose(AccessoryFileHandle); 17459599516SKenneth E. Jansen 17559599516SKenneth E. Jansen bzero((void*)gfname,64); 17659599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case-SyncIO-%d/numpe.in",N_parts,N_files); 17759599516SKenneth E. Jansen AccessoryFileHandle=fopen(gfname,"w"); 17859599516SKenneth E. Jansen fprintf(AccessoryFileHandle,"%d",N_parts); 17959599516SKenneth E. Jansen fclose(AccessoryFileHandle); 18059599516SKenneth E. Jansen } 18159599516SKenneth E. Jansen 18259599516SKenneth E. Jansen /////////////////////////////////////// 18359599516SKenneth E. Jansen Dfield = new double**[nppp]; 18459599516SKenneth E. Jansen Ifield = new int**[nppp]; 18559599516SKenneth E. Jansen 18659599516SKenneth E. Jansen paraD = new int**[nppp]; 18759599516SKenneth E. Jansen paraI = new int**[nppp]; 18859599516SKenneth E. Jansen ///////////////////////////////////// 18959599516SKenneth E. Jansen 190*13c09bf6SCameron Smith int* interiorMark = new int[nppp]; 191*13c09bf6SCameron Smith int* boundaryMark = new int[nppp]; 192*13c09bf6SCameron Smith int* codesMark = new int[nppp]; 193*13c09bf6SCameron Smith int* valuesMark = new int[nppp]; 194*13c09bf6SCameron Smith int* numVariables = new int[nppp]; 19559599516SKenneth E. Jansen // int numBoundaryFields[nppp], numInteriorFields[nppp]; 19659599516SKenneth E. Jansen 19759599516SKenneth E. Jansen if(myrank==0){ 19859599516SKenneth E. Jansen printf("Starting to read some headers in the restart.##.## and geombc.dat.## files\n"); 19959599516SKenneth E. Jansen } 20059599516SKenneth E. Jansen 20159599516SKenneth E. Jansen // The number of variables does not vary from one part to another. Do not read this info from every part. 20259599516SKenneth E. Jansen // The ideal would be to ask only rank 0 to read only part 0 and broadcast the information to the other ranks. It saves a lot of time for very big meshes. 20359599516SKenneth E. Jansen // Right now, every rank will read the number of variables from the solution field of one part only, which is already better than reading this info from every part. 20459599516SKenneth E. Jansen int ithree = 3; 20559599516SKenneth E. Jansen j = 0; 20659599516SKenneth E. Jansen 20759599516SKenneth E. Jansen // Test if file exist in the procs_case directory 20859599516SKenneth E. Jansen bzero((void*)gfname,64); 20959599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case/restart.%d.%d", N_parts, N_steps, startpart+j); 21059599516SKenneth E. Jansen int subdir = -1; 21159599516SKenneth E. Jansen bool existsubdir = false; 21259599516SKenneth E. Jansen FILE *pfiletest; 21359599516SKenneth E. Jansen pfiletest = fopen(gfname, "r"); 21459599516SKenneth E. Jansen if (pfiletest == NULL ) { 21559599516SKenneth E. Jansen // Test if file exist in the procs_case/subdir directory 21659599516SKenneth E. Jansen subdir = (startpart+j-1) / DIR_FANOUT; 21759599516SKenneth E. Jansen bzero((void*)gfname,64); 21859599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case/%d/restart.%d.%d",N_parts, subdir, N_steps, startpart+j); 21959599516SKenneth E. Jansen pfiletest = fopen(gfname, "r"); 22059599516SKenneth E. Jansen if (pfiletest == NULL ) { 22159599516SKenneth E. Jansen printf("[%d] File %s does not exit - abort\n",myrank, gfname); 22259599516SKenneth E. Jansen abort(); 22359599516SKenneth E. Jansen } 22459599516SKenneth E. Jansen else{ 22559599516SKenneth E. Jansen existsubdir = true; 22659599516SKenneth E. Jansen fclose(pfiletest); 22759599516SKenneth E. Jansen } 22859599516SKenneth E. Jansen } 22959599516SKenneth E. Jansen else { 23059599516SKenneth E. Jansen fclose(pfiletest); 23159599516SKenneth E. Jansen } 23259599516SKenneth E. Jansen 23359599516SKenneth E. Jansen // Debug 23459599516SKenneth E. Jansen //printf("Rank: %d - subdir: %d - path: %s\n",myrank, subdir, gfname); 23559599516SKenneth E. Jansen 23659599516SKenneth E. Jansen openfile(gfname,"read",&TempFileHandle); 23759599516SKenneth E. Jansen readheader( &TempFileHandle, 23859599516SKenneth E. Jansen "solution", 23959599516SKenneth E. Jansen (void*)iarray, 24059599516SKenneth E. Jansen &ithree, 24159599516SKenneth E. Jansen "double", 24259599516SKenneth E. Jansen "binary" ); 24359599516SKenneth E. Jansen closefile(&TempFileHandle, "read"); 24459599516SKenneth E. Jansen for ( j = 0; j < nppp; j++ ) 24559599516SKenneth E. Jansen numVariables[j] = iarray[1]; //iarray[i] contains the number of variables from the header of the solution field 24659599516SKenneth E. Jansen 24759599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); //added by MR 24859599516SKenneth E. Jansen 24959599516SKenneth E. Jansen 25059599516SKenneth E. Jansen ///////////////////////// 25159599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) 25259599516SKenneth E. Jansen { 25359599516SKenneth E. Jansen Dfield[i] = new double*[N_geombc_double]; // Space for the datablock of double format 25459599516SKenneth E. Jansen paraD[i] = new int*[N_geombc_double]; // Integers in the header of each field of double format 25559599516SKenneth E. Jansen Ifield[i] = new int*[N_geombc_integer]; // Space for the datablock of integer format 25659599516SKenneth E. Jansen paraI[i] = new int*[N_geombc_integer]; // Integers in the header of each field of integer format 25759599516SKenneth E. Jansen 25859599516SKenneth E. Jansen } 25959599516SKenneth E. Jansen 26059599516SKenneth E. Jansen expectD = new int[N_geombc_double]; // Expected number of integers in the header for each field of double format 26159599516SKenneth E. Jansen expectI = new int[N_geombc_integer]; // Expected number of integers in the header for each field of integer format 26259599516SKenneth E. Jansen 26359599516SKenneth E. Jansen fieldNameD = new char*[N_geombc_double]; // Name of the field in double format 26459599516SKenneth E. Jansen fileTypeD = new char*[N_geombc_double]; // geombc or restart (useless if associated with geombc file but read) 26559599516SKenneth E. Jansen dataTypeD = new char*[N_geombc_double]; // Integer or double (useless if associated with double data but read) 26659599516SKenneth E. Jansen headerTypeD = new char*[N_geombc_double]; // block (means with data block) or header (just a header with no block) 26759599516SKenneth E. Jansen 26859599516SKenneth E. Jansen fieldNameI = new char*[N_geombc_integer]; 26959599516SKenneth E. Jansen fileTypeI = new char*[N_geombc_integer]; 27059599516SKenneth E. Jansen dataTypeI = new char*[N_geombc_integer]; 27159599516SKenneth E. Jansen headerTypeI = new char*[N_geombc_integer]; 27259599516SKenneth E. Jansen 27359599516SKenneth E. Jansen ///////////////////////// 27459599516SKenneth E. Jansen 27559599516SKenneth E. Jansen for ( i = 0; i < N_geombc_double; i++ ) 27659599516SKenneth E. Jansen { 27759599516SKenneth E. Jansen WriteLockD[i]=0; 27859599516SKenneth E. Jansen 27959599516SKenneth E. Jansen fieldNameD[i] = new char[128]; 28059599516SKenneth E. Jansen fileTypeD[i] = new char[128]; 28159599516SKenneth E. Jansen dataTypeD[i] = new char[128]; 28259599516SKenneth E. Jansen headerTypeD[i] = new char[128]; 28359599516SKenneth E. Jansen } 28459599516SKenneth E. Jansen 28559599516SKenneth E. Jansen for ( i = 0; i < N_geombc_integer; i++ ) 28659599516SKenneth E. Jansen { 28759599516SKenneth E. Jansen WriteLockI[i]=0; //This take value 1 if the field requested in IO.input is not found (typically for tpblocks) 28859599516SKenneth E. Jansen 28959599516SKenneth E. Jansen fieldNameI[i] = new char[128]; 29059599516SKenneth E. Jansen fileTypeI[i] = new char[128]; 29159599516SKenneth E. Jansen dataTypeI[i] = new char[128]; 29259599516SKenneth E. Jansen headerTypeI[i] = new char[128]; 29359599516SKenneth E. Jansen } 29459599516SKenneth E. Jansen 29559599516SKenneth E. Jansen //////////////////////////////////////////////////////////////// 29659599516SKenneth E. Jansen // Reading IO.input 29759599516SKenneth E. Jansen // temporary fix: in the new version the double and integer 29859599516SKenneth E. Jansen // can mix and match to avoid the order confusion 29959599516SKenneth E. Jansen //////////////////////////////////////////////////////////////// 30059599516SKenneth E. Jansen 30159599516SKenneth E. Jansen char S1[128],S2[128],S3[128],S4[128],S5[128]; 30259599516SKenneth E. Jansen int double_counter=0,int_counter=0; 30359599516SKenneth E. Jansen 30459599516SKenneth E. Jansen for ( i = 0; i < N_geombc_double+N_geombc_integer; i++ ) 30559599516SKenneth E. Jansen { 30659599516SKenneth E. Jansen fgets( target, 1024, pFile ); 30759599516SKenneth E. Jansen temp = strtok( target, ";" ); 30859599516SKenneth E. Jansen token = strtok( temp, "," ); 30959599516SKenneth E. Jansen strcpy( S1, token ); 31059599516SKenneth E. Jansen token = strtok ( NULL, "," ); 31159599516SKenneth E. Jansen strcpy( S2, token ); 31259599516SKenneth E. Jansen token = strtok ( NULL, "," ); 31359599516SKenneth E. Jansen strcpy( S3, token ); 31459599516SKenneth E. Jansen token = strtok ( NULL, "," ); 31559599516SKenneth E. Jansen strcpy( S4, token ); 31659599516SKenneth E. Jansen token = strtok ( NULL, "," ); 31759599516SKenneth E. Jansen strcpy( S5, token ); 31859599516SKenneth E. Jansen 31959599516SKenneth E. Jansen //if (cscompare(S3,"double")) 32059599516SKenneth E. Jansen if (cscompare("double",S3)) 32159599516SKenneth E. Jansen { 32259599516SKenneth E. Jansen strcpy( fileTypeD[double_counter], S1 ); 32359599516SKenneth E. Jansen strcpy( fieldNameD[double_counter], S2 ); 32459599516SKenneth E. Jansen strcpy( dataTypeD[double_counter], S3 ); 32559599516SKenneth E. Jansen strcpy( headerTypeD[double_counter], S4 ); 32659599516SKenneth E. Jansen strcpy( numTemp, S5 ); 32759599516SKenneth E. Jansen expectD[double_counter] = atoi (numTemp); 32859599516SKenneth E. Jansen double_counter++; 32959599516SKenneth E. Jansen } 33059599516SKenneth E. Jansen 33159599516SKenneth E. Jansen //if (cscompare(S3,"integer")) 33259599516SKenneth E. Jansen if (cscompare("integer",S3)) 33359599516SKenneth E. Jansen { 33459599516SKenneth E. Jansen strcpy( fileTypeI[int_counter], S1 ); 33559599516SKenneth E. Jansen strcpy( fieldNameI[int_counter], S2 ); 33659599516SKenneth E. Jansen strcpy( dataTypeI[int_counter], S3 ); 33759599516SKenneth E. Jansen strcpy( headerTypeI[int_counter], S4 ); 33859599516SKenneth E. Jansen strcpy( numTemp, S5 ); 33959599516SKenneth E. Jansen expectI[int_counter] = atoi (numTemp); 34059599516SKenneth E. Jansen int_counter++; 34159599516SKenneth E. Jansen } 34259599516SKenneth E. Jansen } 34359599516SKenneth E. Jansen 34459599516SKenneth E. Jansen ////////////////////////////////////////////////////////////// 34559599516SKenneth E. Jansen 34659599516SKenneth E. Jansen //for ( i = 0; i < N_geombc_double; i++) { 34759599516SKenneth E. Jansen //printf("%d %s %s %s %s %d\n", myrank, fileTypeD[i], fieldNameD[i], dataTypeD[i], headerTypeD[i], expectD[i]); 34859599516SKenneth E. Jansen //} 34959599516SKenneth E. Jansen 35059599516SKenneth E. Jansen 35159599516SKenneth E. Jansen // printf("rank %d is waiting\n",myrank); 35259599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); //already there 35359599516SKenneth E. Jansen 35459599516SKenneth E. Jansen if(myrank==0){ 35559599516SKenneth E. Jansen printf("Starting to read some blocks (doubles) in the geombc.dat.## files\n"); 35659599516SKenneth E. Jansen } 35759599516SKenneth E. Jansen 35859599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) 35959599516SKenneth E. Jansen { 36059599516SKenneth E. Jansen if(existsubdir) { 36159599516SKenneth E. Jansen subdir = (startpart+i-1) / DIR_FANOUT; 36259599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case/%d/geombc.dat.%d",N_parts, subdir, startpart+i); 36359599516SKenneth E. Jansen } 36459599516SKenneth E. Jansen else 36559599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case/geombc.dat.%d",N_parts,startpart+i); 36659599516SKenneth E. Jansen 36759599516SKenneth E. Jansen openfile(gfname,"read",&igeom); 36859599516SKenneth E. Jansen 36959599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 37059599516SKenneth E. Jansen 37159599516SKenneth E. Jansen for ( j = 0; j < N_geombc_double; j++ ) 37259599516SKenneth E. Jansen { 37359599516SKenneth E. Jansen 37459599516SKenneth E. Jansen // printf("rank: %d - read double: %s\n",myrank,fieldNameD[j]); 37559599516SKenneth E. Jansen paraD[i][j] = new int[expectD[j]]; 37659599516SKenneth E. Jansen 37759599516SKenneth E. Jansen for ( k = 0; k < 10; k++ ) 37859599516SKenneth E. Jansen iarray[k]=0; 37959599516SKenneth E. Jansen 38059599516SKenneth E. Jansen iarray[0]=-1; 38159599516SKenneth E. Jansen WriteLockD[j]=0; 38259599516SKenneth E. Jansen readheader( &igeom, 38359599516SKenneth E. Jansen fieldNameD[j], 38459599516SKenneth E. Jansen (void*)iarray, 38559599516SKenneth E. Jansen &expectD[j], 38659599516SKenneth E. Jansen "double", 38759599516SKenneth E. Jansen "binary" ); 38859599516SKenneth E. Jansen if ( iarray[0]==-1 ) // The field requested in IO.O2N.input has not been found (should be a tpblocks) 38959599516SKenneth E. Jansen WriteLockD[j]=1; 39059599516SKenneth E. Jansen 39159599516SKenneth E. Jansen // printf("rank: %d - part: %d - field: %s - iarray: %d\n",myrank,startpart+i,fieldNameD[j],iarray[0]); 39259599516SKenneth E. Jansen 39359599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 39459599516SKenneth E. Jansen 39559599516SKenneth E. Jansen // get the parameter list in data header ... 39659599516SKenneth E. Jansen // different fields have different ways to get this list ... 39759599516SKenneth E. Jansen for ( k = 0; k < expectD[j]; k++ ) 39859599516SKenneth E. Jansen paraD[i][j][k] = iarray[k]; 39959599516SKenneth E. Jansen 40059599516SKenneth E. Jansen if ( WriteLockD[j]==1) // Put the value of the expected integers in the header to 0 when field not present 40159599516SKenneth E. Jansen for ( k = 0; k < expectD[j]; k++ ) 40259599516SKenneth E. Jansen paraD[i][j][k] = 0; 40359599516SKenneth E. Jansen 40459599516SKenneth E. Jansen /* int iproc; 40559599516SKenneth E. Jansen for(iproc=0; iproc<N_procs; iproc++){ 40659599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 40759599516SKenneth E. Jansen if(iproc == myrank){ 40859599516SKenneth E. Jansen printf(" iproc: %d ", iproc); 40959599516SKenneth E. Jansen printf("part: %d myrank: %d field: %s header: ",startpart+i,myrank,fieldNameD[j]); 41059599516SKenneth E. Jansen for ( k = 0; k < expectD[j]; k++ ) 41159599516SKenneth E. Jansen printf(" %d ",iarray[k]); 41259599516SKenneth E. Jansen printf("\n"); 41359599516SKenneth E. Jansen } 41459599516SKenneth E. Jansen usleep(100); 41559599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 41659599516SKenneth E. Jansen }*/ 41759599516SKenneth E. Jansen 41859599516SKenneth E. Jansen 41959599516SKenneth E. Jansen if ( cscompare("block",headerTypeD[j]) ) 42059599516SKenneth E. Jansen { 42159599516SKenneth E. Jansen /* if ( expectD[j]==1) 42259599516SKenneth E. Jansen isize = paraD[i][j][0]; 42359599516SKenneth E. Jansen else 42459599516SKenneth E. Jansen isize = paraD[i][j][0] * paraD[i][j][1]; 42559599516SKenneth E. Jansen 42659599516SKenneth E. Jansen if (cscompare("nbc values",fieldNameD[j])) 42759599516SKenneth E. Jansen isize = paraD[i][j][0] * (numVariables[i]+1); 42859599516SKenneth E. Jansen */ 42959599516SKenneth E. Jansen 43059599516SKenneth E. Jansen // int test; 43159599516SKenneth E. Jansen // test = computenitems(i,j,myrank,fieldNameD[j],paraD,expectD[j],numVariables[i]); 43259599516SKenneth E. Jansen // printf("irank: %d fieldname: %s ParaD: %d\n",myrank,fieldNameD[j], paraD[0][0][0], numVariables[i]); 43359599516SKenneth E. Jansen // if(test != isize) 43459599516SKenneth E. Jansen // printf("PROBLEM fieldname: %s part: %d isize: %d test: %d\n",fieldNameD[j],startpart+i,isize,test); 43559599516SKenneth E. Jansen // else 43659599516SKenneth E. Jansen // printf("fieldname: %s part: %d isize: %d test: %d\n",fieldNameD[j],startpart+i,isize,test); 43759599516SKenneth E. Jansen 43859599516SKenneth E. Jansen isize = computenitems(i,j,myrank,fieldNameD[j],paraD,expectD[j],numVariables[i]); 43959599516SKenneth E. Jansen //printf("fieldname: %s part: %d isize: %d\n",fieldNameD[j],startpart+i,isize); 44059599516SKenneth E. Jansen 44159599516SKenneth E. Jansen Dfield[i][j] = new double[isize]; 44259599516SKenneth E. Jansen readdatablock( &igeom, 44359599516SKenneth E. Jansen fieldNameD[j], 44459599516SKenneth E. Jansen (void*)Dfield[i][j], 44559599516SKenneth E. Jansen &isize, 44659599516SKenneth E. Jansen "double", 44759599516SKenneth E. Jansen "binary" ); 44859599516SKenneth E. Jansen } 44959599516SKenneth E. Jansen } 45059599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 45159599516SKenneth E. Jansen closefile(&igeom, "read"); 45259599516SKenneth E. Jansen } 45359599516SKenneth E. Jansen 45459599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 45559599516SKenneth E. Jansen if(myrank==0){ 45659599516SKenneth E. Jansen printf("Starting to read some blocks (integers) in the geombc.dat.## files\n"); 45759599516SKenneth E. Jansen } 45859599516SKenneth E. Jansen 45959599516SKenneth E. Jansen // Count the number of interior and boundary tpblocks for 2 new headers named 46059599516SKenneth E. Jansen // 'total number of different interior tpblocks' and 46159599516SKenneth E. Jansen // 'total number of different boundary tpblocks' 46259599516SKenneth E. Jansen int interiorCounter, boundaryCounter; 46359599516SKenneth E. Jansen interiorCounter=0; 46459599516SKenneth E. Jansen boundaryCounter=0; 46559599516SKenneth E. Jansen for ( j = 0; j < N_geombc_integer; j++ ) 46659599516SKenneth E. Jansen { 46759599516SKenneth E. Jansen if (cscompare("connectivity interior",fieldNameI[j])) 46859599516SKenneth E. Jansen { 46959599516SKenneth E. Jansen //printf("part: %d, fieldNameI[j]: %s\n",GPID,fieldNameI[j]); 47059599516SKenneth E. Jansen interiorCounter++; 47159599516SKenneth E. Jansen } 47259599516SKenneth E. Jansen else if (cscompare("connectivity boundary",fieldNameI[j])) 47359599516SKenneth E. Jansen { 47459599516SKenneth E. Jansen //printf("part: %d, fieldNameI[j]: %s\n",GPID,fieldNameI[j]); 47559599516SKenneth E. Jansen boundaryCounter++; 47659599516SKenneth E. Jansen } 47759599516SKenneth E. Jansen } 47859599516SKenneth E. Jansen 47959599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 48059599516SKenneth E. Jansen if(myrank==0){ 48159599516SKenneth E. Jansen printf("There are %d total connectivity interior and %d total connectivity boundary\n", interiorCounter, boundaryCounter); 48259599516SKenneth E. Jansen } 48359599516SKenneth E. Jansen 48459599516SKenneth E. Jansen 48559599516SKenneth E. Jansen 48659599516SKenneth E. Jansen // Now, start to read the integer fields 48759599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) 48859599516SKenneth E. Jansen { 48959599516SKenneth E. Jansen if(existsubdir) { 49059599516SKenneth E. Jansen subdir = (startpart+i-1) / DIR_FANOUT; 49159599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case/%d/geombc.dat.%d",N_parts, subdir, startpart+i); 49259599516SKenneth E. Jansen } 49359599516SKenneth E. Jansen else 49459599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case/geombc.dat.%d", N_parts, startpart+i); 49559599516SKenneth E. Jansen 49659599516SKenneth E. Jansen openfile(gfname,"read",&igeom); 49759599516SKenneth E. Jansen 49859599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 49959599516SKenneth E. Jansen 50059599516SKenneth E. Jansen // printf("gfname is %s and nppp is %d myrank %d\n",gfname,i,myrank); 50159599516SKenneth E. Jansen 50259599516SKenneth E. Jansen for ( j = 0; j < N_geombc_integer; j++ ) 50359599516SKenneth E. Jansen { 50459599516SKenneth E. Jansen 50559599516SKenneth E. Jansen // printf("Writing integer ... %s\n",fieldNameI[j]); 50659599516SKenneth E. Jansen paraI[i][j] = new int[expectI[j]]; 50759599516SKenneth E. Jansen 50859599516SKenneth E. Jansen for ( k = 0; k < 10; k++ ) 50959599516SKenneth E. Jansen iarray[k]=0; 51059599516SKenneth E. Jansen 51159599516SKenneth E. Jansen // printf("myrank %d and i %d j %d numBou is %d\n",myrank,i,j,numBoundaryFields[i]); 51259599516SKenneth E. Jansen 51359599516SKenneth E. Jansen WriteLockI[j]=0; 51459599516SKenneth E. Jansen iarray[0]=-1; 51559599516SKenneth E. Jansen 51659599516SKenneth E. Jansen if ( cscompare("total number of interior tpblocks",fieldNameI[j] ) ) 51759599516SKenneth E. Jansen { 51859599516SKenneth E. Jansen iarray[0] = interiorCounter; //New header that does not exist in the posix file 51959599516SKenneth E. Jansen } 52059599516SKenneth E. Jansen else if ( cscompare("total number of boundary tpblocks",fieldNameI[j] ) ) 52159599516SKenneth E. Jansen { 52259599516SKenneth E. Jansen iarray[0] = boundaryCounter; //New header that does not exist in the posix file 52359599516SKenneth E. Jansen } 52459599516SKenneth E. Jansen else 52559599516SKenneth E. Jansen { 52659599516SKenneth E. Jansen readheader( &igeom, 52759599516SKenneth E. Jansen fieldNameI[j], 52859599516SKenneth E. Jansen (void*)iarray, 52959599516SKenneth E. Jansen &expectI[j], 53059599516SKenneth E. Jansen "integer", 53159599516SKenneth E. Jansen "binary" ); 53259599516SKenneth E. Jansen if ( iarray[0]==-1) 53359599516SKenneth E. Jansen WriteLockI[j]=1; // The field was not found in the posix geombc file 53459599516SKenneth E. Jansen } 53559599516SKenneth E. Jansen 53659599516SKenneth E. Jansen //MPI_Barrier(MPI_COMM_WORLD); 53759599516SKenneth E. Jansen 53859599516SKenneth E. Jansen /* int iproc; 53959599516SKenneth E. Jansen for(iproc=0; iproc<N_procs; iproc++){ 54059599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 54159599516SKenneth E. Jansen if(iproc == myrank){ 54259599516SKenneth E. Jansen printf(" iproc: %d ", iproc); 54359599516SKenneth E. Jansen printf("part: %d myrank: %d field: %s header: ",startpart+i,myrank,fieldNameI[j]); 54459599516SKenneth E. Jansen for ( k = 0; k < expectI[j]; k++ ) 54559599516SKenneth E. Jansen printf(" %d ",iarray[k]); 54659599516SKenneth E. Jansen printf("\n"); 54759599516SKenneth E. Jansen } 54859599516SKenneth E. Jansen usleep(100); 54959599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 55059599516SKenneth E. Jansen }*/ 55159599516SKenneth E. Jansen 55259599516SKenneth E. Jansen for ( k = 0; k < expectI[j]; k++ ) 55359599516SKenneth E. Jansen paraI[i][j][k] = iarray[k]; 55459599516SKenneth E. Jansen 55559599516SKenneth E. Jansen if ( WriteLockI[j]==1) //The field is not present but SyncIO needs it to read collectively. Put 0. 55659599516SKenneth E. Jansen for ( k = 0; k < expectI[j]; k++ ) 55759599516SKenneth E. Jansen paraI[i][j][k] = 0; 55859599516SKenneth E. Jansen 55959599516SKenneth E. Jansen if ( cscompare("block",headerTypeI[j]) ) 56059599516SKenneth E. Jansen { 56159599516SKenneth E. Jansen /* if ( expectI[j]==1) 56259599516SKenneth E. Jansen isize = paraI[i][j][0]; 56359599516SKenneth E. Jansen else 56459599516SKenneth E. Jansen isize = paraI[i][j][0] * paraI[i][j][1]; 56559599516SKenneth E. Jansen 56659599516SKenneth E. Jansen if (cscompare("nbc codes",fieldNameI[j])) 56759599516SKenneth E. Jansen isize = paraI[i][j][0] * 2; 56859599516SKenneth E. Jansen */ 56959599516SKenneth E. Jansen // int test; 57059599516SKenneth E. Jansen // test = computenitems(i,j,myrank,fieldNameI[j],paraI,expectI[j],numVariables[i]); 57159599516SKenneth E. Jansen // printf("irank: %d fieldname: %s ParaI: %d\n",myrank,fieldNameI[j], parapI[0][0][0], numVariables[i]); 57259599516SKenneth E. Jansen // if(test != isize) 57359599516SKenneth E. Jansen // printf("PROBLEM fieldname: %s part: %d isize: %d test: %d\n",fieldNameI[j],startpart+i,isize,test); 57459599516SKenneth E. Jansen // else 57559599516SKenneth E. Jansen // printf("fieldname: %s part: %d isize: %d test: %d\n",fieldNameI[j],startpart+i,isize,test); 57659599516SKenneth E. Jansen 57759599516SKenneth E. Jansen isize = computenitems(i,j,myrank,fieldNameI[j],paraI,expectI[j],numVariables[i]); 57859599516SKenneth E. Jansen //printf("fieldname: %s part: %d isize: %d\n",fieldNameI[j],startpart+i,isize); 57959599516SKenneth E. Jansen 58059599516SKenneth E. Jansen Ifield[i][j] = new int[isize]; 58159599516SKenneth E. Jansen readdatablock( &igeom, 58259599516SKenneth E. Jansen fieldNameI[j], 58359599516SKenneth E. Jansen (void*)Ifield[i][j], 58459599516SKenneth E. Jansen &isize, 58559599516SKenneth E. Jansen "integer", 58659599516SKenneth E. Jansen "binary" ); 58759599516SKenneth E. Jansen } 58859599516SKenneth E. Jansen } 58959599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 59059599516SKenneth E. Jansen closefile(&igeom, "read"); 59159599516SKenneth E. Jansen } 59259599516SKenneth E. Jansen 59359599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); //added by MR 59459599516SKenneth E. Jansen 59559599516SKenneth E. Jansen ///////////////////// Writing /////////////////////////////// 59659599516SKenneth E. Jansen 59759599516SKenneth E. Jansen int nppf = N_parts/N_files; 59859599516SKenneth E. Jansen int N_geombc = N_geombc_double + N_geombc_integer; 59959599516SKenneth E. Jansen int writeHandle, GPID; 60059599516SKenneth E. Jansen char fname[255],fieldtag[255]; 60159599516SKenneth E. Jansen 60259599516SKenneth E. Jansen bzero((void*)fname,255); 60359599516SKenneth E. Jansen //MR CHANGE 60459599516SKenneth E. Jansen // sprintf(fname,"./%d-procs_case-SyncIO",N_parts); 60559599516SKenneth E. Jansen // if(0<mkdir(fname,0777)) { printf("ERROR - Could not create procs_case-SyncIO directory\n"); return 1; } 60659599516SKenneth E. Jansen //MR CHANGE END 60759599516SKenneth E. Jansen sprintf(fname,"./%d-procs_case-SyncIO-%d/geombc-dat.%d",N_parts,N_files,((int)(myrank/(N_procs/N_files))+1)); 60859599516SKenneth E. Jansen 60959599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 61059599516SKenneth E. Jansen if(myrank==0){ 61159599516SKenneth E. Jansen printf("Starting to write some blocks (doubles) in the geombc.dat-## files\n"); 61259599516SKenneth E. Jansen } 61359599516SKenneth E. Jansen 61459599516SKenneth E. Jansen initphmpiio(&N_geombc, &nppf, &N_files,&writeHandle, "write"); 61559599516SKenneth E. Jansen // initphmpiio(&N_geombc, &nppf, &N_files,&writeHandle); 61659599516SKenneth E. Jansen openfile(fname, "write", &writeHandle); 61759599516SKenneth E. Jansen 61859599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) 61959599516SKenneth E. Jansen { 62059599516SKenneth E. Jansen valuesMark[i]=0; 62159599516SKenneth E. Jansen } 62259599516SKenneth E. Jansen 62359599516SKenneth E. Jansen for ( j = 0; j < N_geombc_double; j++ ) 62459599516SKenneth E. Jansen { 62559599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) 62659599516SKenneth E. Jansen { 62759599516SKenneth E. Jansen 62859599516SKenneth E. Jansen //if ( WriteLockD[i] == 0 ) 62959599516SKenneth E. Jansen { 63059599516SKenneth E. Jansen GPID = startpart + i; 63159599516SKenneth E. Jansen bzero((void*)fieldtag,255); 63259599516SKenneth E. Jansen 63359599516SKenneth E. Jansen fieldCompareMark=0; 63459599516SKenneth E. Jansen if (cscompare("nbc values",fieldNameD[j])) 63559599516SKenneth E. Jansen { 63659599516SKenneth E. Jansen fieldCompareMark = 1; 63759599516SKenneth E. Jansen valuesMark[i]++; 63859599516SKenneth E. Jansen bzero((void*)fieldNameD[j],128); 63959599516SKenneth E. Jansen sprintf(fieldNameD[j],"nbc values%d",valuesMark[i]); 64059599516SKenneth E. Jansen 64159599516SKenneth E. Jansen // if ( valuesMark[i]>numBoundaryFields[i] ) 64259599516SKenneth E. Jansen // for ( k = 0; k < expectD[j]; k++ ) 64359599516SKenneth E. Jansen // paraD[i][j][k] = 0; 64459599516SKenneth E. Jansen } 64559599516SKenneth E. Jansen 64659599516SKenneth E. Jansen sprintf(fieldtag,"%s@%d",fieldNameD[j],GPID); 64759599516SKenneth E. Jansen 64859599516SKenneth E. Jansen 64959599516SKenneth E. Jansen /* if ( expectD[j]==1 ) 65059599516SKenneth E. Jansen isize = paraD[i][j][0]; 65159599516SKenneth E. Jansen else 65259599516SKenneth E. Jansen isize = paraD[i][j][0] * paraD[i][j][1]; 65359599516SKenneth E. Jansen 65459599516SKenneth E. Jansen //specially designed for nbc values fields 65559599516SKenneth E. Jansen //check the size in presolver codes 65659599516SKenneth E. Jansen //Yeah, you have to open restart to get the size 65759599516SKenneth E. Jansen if ( fieldCompareMark==1 ) 65859599516SKenneth E. Jansen isize = paraD[i][j][0] * (numVariables[i]+1); 65959599516SKenneth E. Jansen */ 66059599516SKenneth E. Jansen if ( cscompare("header",headerTypeD[j]) ) 66159599516SKenneth E. Jansen isize = 0; 66259599516SKenneth E. Jansen else // block 66359599516SKenneth E. Jansen isize = computenitems(i,j,myrank,fieldNameD[j],paraD,expectD[j],numVariables[i]); 66459599516SKenneth E. Jansen 66559599516SKenneth E. Jansen for ( k = 0; k < expectD[j]; k++ ) 66659599516SKenneth E. Jansen iarray[k] = paraD[i][j][k]; 66759599516SKenneth E. Jansen 66859599516SKenneth E. Jansen //printf("write fieldname: %s part: %d isize: %d iarray: %d\n",fieldNameD[j],startpart+i,isize, iarray[0]); 66959599516SKenneth E. Jansen 67059599516SKenneth E. Jansen writeheader( &writeHandle, 67159599516SKenneth E. Jansen fieldtag, 67259599516SKenneth E. Jansen (void*)iarray, 67359599516SKenneth E. Jansen &expectD[j], 67459599516SKenneth E. Jansen &isize, 67559599516SKenneth E. Jansen "double", 67659599516SKenneth E. Jansen "binary"); 67759599516SKenneth E. Jansen writedatablock( &writeHandle, 67859599516SKenneth E. Jansen fieldtag, 67959599516SKenneth E. Jansen (void*)Dfield[i][j], 68059599516SKenneth E. Jansen &isize, 68159599516SKenneth E. Jansen "double", 68259599516SKenneth E. Jansen "binary"); 68359599516SKenneth E. Jansen 68459599516SKenneth E. Jansen if ( cscompare("block",headerTypeD[j]) ) 68559599516SKenneth E. Jansen delete [] Dfield[i][j]; 68659599516SKenneth E. Jansen } 68759599516SKenneth E. Jansen delete [] paraD[i][j]; 68859599516SKenneth E. Jansen } 68959599516SKenneth E. Jansen } 69059599516SKenneth E. Jansen 69159599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) 69259599516SKenneth E. Jansen { 69359599516SKenneth E. Jansen interiorMark[i]=0; 69459599516SKenneth E. Jansen boundaryMark[i]=0; 69559599516SKenneth E. Jansen codesMark[i]=0; 69659599516SKenneth E. Jansen } 69759599516SKenneth E. Jansen 69859599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 69959599516SKenneth E. Jansen if(myrank==0){ 70059599516SKenneth E. Jansen printf("Starting to write some blocks (integers) in the geombc.dat-## files\n"); 70159599516SKenneth E. Jansen } 70259599516SKenneth E. Jansen 70359599516SKenneth E. Jansen // Now the other fields listed in IO.O2N.input 70459599516SKenneth E. Jansen for ( j = 0; j < N_geombc_integer; j++ ) 70559599516SKenneth E. Jansen { 70659599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) 70759599516SKenneth E. Jansen { 70859599516SKenneth E. Jansen //if ( WriteLockI[i] == 0 ) 70959599516SKenneth E. Jansen { 71059599516SKenneth E. Jansen GPID = startpart + i; 71159599516SKenneth E. Jansen bzero((void*)fieldtag,255); 71259599516SKenneth E. Jansen 71359599516SKenneth E. Jansen if (cscompare("connectivity interior",fieldNameI[j])) 71459599516SKenneth E. Jansen { 71559599516SKenneth E. Jansen interiorMark[i]++; 71659599516SKenneth E. Jansen bzero((void*)fieldNameI[j],128); 71759599516SKenneth E. Jansen sprintf(fieldNameI[j],"connectivity interior%d",interiorMark[i]); 71859599516SKenneth E. Jansen 71959599516SKenneth E. Jansen // if ( interiorMark[i]>numInteriorFields[i] ) 72059599516SKenneth E. Jansen // for ( k = 0; k < expectI[j]; k++ ) 72159599516SKenneth E. Jansen // paraI[i][j][k] = 0; 72259599516SKenneth E. Jansen 72359599516SKenneth E. Jansen } 72459599516SKenneth E. Jansen 72559599516SKenneth E. Jansen if (cscompare("connectivity boundary",fieldNameI[j])) 72659599516SKenneth E. Jansen { 72759599516SKenneth E. Jansen boundaryMark[i]++; 72859599516SKenneth E. Jansen bzero((void*)fieldNameI[j],128); 72959599516SKenneth E. Jansen sprintf(fieldNameI[j],"connectivity boundary%d",boundaryMark[i]); 73059599516SKenneth E. Jansen 73159599516SKenneth E. Jansen // if ( boundaryMark[i]>numBoundaryFields[i] ) 73259599516SKenneth E. Jansen // for ( k = 0; k < expectI[j]; k++ ) 73359599516SKenneth E. Jansen // paraI[i][j][k] = 0; 73459599516SKenneth E. Jansen } 73559599516SKenneth E. Jansen 73659599516SKenneth E. Jansen fieldCompareMark=0; 73759599516SKenneth E. Jansen if (cscompare("nbc codes",fieldNameI[j])) 73859599516SKenneth E. Jansen { 73959599516SKenneth E. Jansen fieldCompareMark=1; 74059599516SKenneth E. Jansen codesMark[i]++; 74159599516SKenneth E. Jansen bzero((void*)fieldNameI[j],128); 74259599516SKenneth E. Jansen sprintf(fieldNameI[j],"nbc codes%d",codesMark[i]); 74359599516SKenneth E. Jansen 74459599516SKenneth E. Jansen // if ( codesMark[i]>numBoundaryFields[i] ) 74559599516SKenneth E. Jansen // for ( k = 0; k < expectI[j]; k++ ) 74659599516SKenneth E. Jansen // paraI[i][j][k] = 0; 74759599516SKenneth E. Jansen } 74859599516SKenneth E. Jansen 74959599516SKenneth E. Jansen sprintf(fieldtag,"%s@%d",fieldNameI[j],GPID); 75059599516SKenneth E. Jansen 75159599516SKenneth E. Jansen // if ( expectI[j]==1) 75259599516SKenneth E. Jansen // isize = paraI[i][j][0]; 75359599516SKenneth E. Jansen // else 75459599516SKenneth E. Jansen // isize = paraI[i][j][0] * paraI[i][j][1]; 75559599516SKenneth E. Jansen 75659599516SKenneth E. Jansen //MR CHANGE 75759599516SKenneth E. Jansen // printf("rank,j,i,isize %d %d %d %d\n",myrank,j,i,isize); 75859599516SKenneth E. Jansen 75959599516SKenneth E. Jansen 76059599516SKenneth E. Jansen //specially designed for nbc codes fields 76159599516SKenneth E. Jansen //check the size in presolver codes 76259599516SKenneth E. Jansen // if (fieldCompareMark==1) 76359599516SKenneth E. Jansen // isize = paraI[i][j][0] * 2; 76459599516SKenneth E. Jansen 76559599516SKenneth E. Jansen if ( cscompare("header",headerTypeI[j]) ) 76659599516SKenneth E. Jansen isize = 0; 76759599516SKenneth E. Jansen else 76859599516SKenneth E. Jansen isize = computenitems(i,j,myrank,fieldNameI[j],paraI,expectI[j],numVariables[i]); 76959599516SKenneth E. Jansen 77059599516SKenneth E. Jansen for ( k = 0; k < expectI[j]; k++ ) 77159599516SKenneth E. Jansen iarray[k] = paraI[i][j][k]; 77259599516SKenneth E. Jansen 77359599516SKenneth E. Jansen // printf("write fieldname: %s part: %d isize: %d iarray: %d\n",fieldNameI[j],startpart+i,isize, iarray[0]); 77459599516SKenneth E. Jansen 77559599516SKenneth E. Jansen writeheader( &writeHandle, 77659599516SKenneth E. Jansen fieldtag, 77759599516SKenneth E. Jansen (void*)iarray, 77859599516SKenneth E. Jansen &expectI[j], 77959599516SKenneth E. Jansen &isize, 78059599516SKenneth E. Jansen "integer", 78159599516SKenneth E. Jansen "binary"); 78259599516SKenneth E. Jansen writedatablock( &writeHandle, 78359599516SKenneth E. Jansen fieldtag, 78459599516SKenneth E. Jansen (void*)Ifield[i][j], 78559599516SKenneth E. Jansen &isize, 78659599516SKenneth E. Jansen "integer", 78759599516SKenneth E. Jansen "binary" ); 78859599516SKenneth E. Jansen 78959599516SKenneth E. Jansen if ( cscompare("block",headerTypeI[j]) ){ 79059599516SKenneth E. Jansen // printf("rank %d - deleting Ifield %d %d\n",myrank,i,j); 79159599516SKenneth E. Jansen delete [] Ifield[i][j]; 79259599516SKenneth E. Jansen // printf("rank %d - Ifield deleted %d %d\n",myrank,i,j); 79359599516SKenneth E. Jansen } 79459599516SKenneth E. Jansen } 79559599516SKenneth E. Jansen // printf("rank %d - deleting paraI %d %d\n",myrank,i,j); 79659599516SKenneth E. Jansen delete [] paraI[i][j]; 79759599516SKenneth E. Jansen // printf("rank %d - paraI deleted %d %d\n",myrank,i,j); 79859599516SKenneth E. Jansen } 79959599516SKenneth E. Jansen 80059599516SKenneth E. Jansen } 80159599516SKenneth E. Jansen 80259599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 80359599516SKenneth E. Jansen if(myrank==0){ 80459599516SKenneth E. Jansen printf("Closing geombc-dat.##.## files\n"); 80559599516SKenneth E. Jansen } 80659599516SKenneth E. Jansen 80759599516SKenneth E. Jansen closefile(&writeHandle, "write"); 80859599516SKenneth E. Jansen finalizephmpiio(&writeHandle); 80959599516SKenneth E. Jansen 81059599516SKenneth E. Jansen if(myrank==0){ 81159599516SKenneth E. Jansen printf("Free memory related to geombc-dat.##.## files\n"); 81259599516SKenneth E. Jansen } 81359599516SKenneth E. Jansen 81459599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) 81559599516SKenneth E. Jansen { 81659599516SKenneth E. Jansen delete [] Dfield[i]; 81759599516SKenneth E. Jansen delete [] paraD[i]; 81859599516SKenneth E. Jansen 81959599516SKenneth E. Jansen delete [] Ifield[i]; 82059599516SKenneth E. Jansen delete [] paraI[i]; 82159599516SKenneth E. Jansen 82259599516SKenneth E. Jansen } 82359599516SKenneth E. Jansen 82459599516SKenneth E. Jansen for ( i = 0; i < N_geombc_double; i++ ) 82559599516SKenneth E. Jansen { 82659599516SKenneth E. Jansen delete [] fieldNameD[i]; 82759599516SKenneth E. Jansen delete [] fileTypeD[i]; 82859599516SKenneth E. Jansen delete [] dataTypeD[i]; 82959599516SKenneth E. Jansen delete [] headerTypeD[i]; 83059599516SKenneth E. Jansen } 83159599516SKenneth E. Jansen 83259599516SKenneth E. Jansen for ( i = 0; i < N_geombc_integer; i++ ) 83359599516SKenneth E. Jansen { 83459599516SKenneth E. Jansen 83559599516SKenneth E. Jansen delete [] fieldNameI[i]; 83659599516SKenneth E. Jansen delete [] fileTypeI[i]; 83759599516SKenneth E. Jansen delete [] dataTypeI[i]; 83859599516SKenneth E. Jansen delete [] headerTypeI[i]; 83959599516SKenneth E. Jansen } 84059599516SKenneth E. Jansen 84159599516SKenneth E. Jansen delete [] Dfield; 84259599516SKenneth E. Jansen delete [] Ifield; 84359599516SKenneth E. Jansen 84459599516SKenneth E. Jansen delete [] paraD; 84559599516SKenneth E. Jansen delete [] paraI; 84659599516SKenneth E. Jansen 84759599516SKenneth E. Jansen delete [] expectD; 84859599516SKenneth E. Jansen delete [] expectI; 84959599516SKenneth E. Jansen 85059599516SKenneth E. Jansen delete [] fieldNameD; 85159599516SKenneth E. Jansen delete [] fileTypeD; 85259599516SKenneth E. Jansen delete [] dataTypeD; 85359599516SKenneth E. Jansen delete [] headerTypeD; 85459599516SKenneth E. Jansen 85559599516SKenneth E. Jansen delete [] fieldNameI; 85659599516SKenneth E. Jansen delete [] fileTypeI; 85759599516SKenneth E. Jansen delete [] dataTypeI; 85859599516SKenneth E. Jansen delete [] headerTypeI; 85959599516SKenneth E. Jansen 86059599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 86159599516SKenneth E. Jansen if(myrank==0){ 86259599516SKenneth E. Jansen printf("Done with geombc-dat.##.## files\n"); 86359599516SKenneth E. Jansen } 86459599516SKenneth E. Jansen 86559599516SKenneth E. Jansen /////////////////////// restart data //////////////////////////// 86659599516SKenneth E. Jansen 86759599516SKenneth E. Jansen int irestart; 86859599516SKenneth E. Jansen 86959599516SKenneth E. Jansen Dfield = new double**[N_restart_double]; 87059599516SKenneth E. Jansen Ifield = new int**[N_restart_integer]; 87159599516SKenneth E. Jansen 87259599516SKenneth E. Jansen paraD = new int**[N_restart_double]; 87359599516SKenneth E. Jansen paraI = new int**[N_restart_integer]; 87459599516SKenneth E. Jansen 87559599516SKenneth E. Jansen expectD = new int[N_restart_double]; 87659599516SKenneth E. Jansen expectI = new int[N_restart_integer]; 87759599516SKenneth E. Jansen 87859599516SKenneth E. Jansen fieldNameD = new char*[N_restart_double]; 87959599516SKenneth E. Jansen fileTypeD = new char*[N_restart_double]; 88059599516SKenneth E. Jansen dataTypeD = new char*[N_restart_double]; 88159599516SKenneth E. Jansen headerTypeD = new char*[N_restart_double]; 88259599516SKenneth E. Jansen 88359599516SKenneth E. Jansen fieldNameI = new char*[N_restart_integer]; 88459599516SKenneth E. Jansen fileTypeI = new char*[N_restart_integer]; 88559599516SKenneth E. Jansen dataTypeI = new char*[N_restart_integer]; 88659599516SKenneth E. Jansen headerTypeI = new char*[N_restart_integer]; 88759599516SKenneth E. Jansen 88859599516SKenneth E. Jansen if (N_restart_double>0) 88959599516SKenneth E. Jansen for ( i = 0; i < N_restart_double; i++ ) 89059599516SKenneth E. Jansen { 89159599516SKenneth E. Jansen WriteLockD[i]=0; 89259599516SKenneth E. Jansen Dfield[i] = new double*[nppp]; 89359599516SKenneth E. Jansen 89459599516SKenneth E. Jansen paraD[i] = new int*[nppp]; 89559599516SKenneth E. Jansen 89659599516SKenneth E. Jansen fieldNameD[i] = new char[128]; 89759599516SKenneth E. Jansen fileTypeD[i] = new char[128]; 89859599516SKenneth E. Jansen dataTypeD[i] = new char[128]; 89959599516SKenneth E. Jansen headerTypeD[i] = new char[128]; 90059599516SKenneth E. Jansen } 90159599516SKenneth E. Jansen 90259599516SKenneth E. Jansen if (N_restart_integer>0) 90359599516SKenneth E. Jansen for ( i = 0; i < N_restart_integer; i++ ) 90459599516SKenneth E. Jansen { 90559599516SKenneth E. Jansen WriteLockI[i]=0; 90659599516SKenneth E. Jansen Ifield[i] = new int*[nppp]; 90759599516SKenneth E. Jansen 90859599516SKenneth E. Jansen paraI[i] = new int*[nppp]; 90959599516SKenneth E. Jansen 91059599516SKenneth E. Jansen fieldNameI[i] = new char[128]; 91159599516SKenneth E. Jansen fileTypeI[i] = new char[128]; 91259599516SKenneth E. Jansen dataTypeI[i] = new char[128]; 91359599516SKenneth E. Jansen headerTypeI[i] = new char[128]; 91459599516SKenneth E. Jansen } 91559599516SKenneth E. Jansen 91659599516SKenneth E. Jansen //////////////////////////////////////////////////////////////// 91759599516SKenneth E. Jansen // temporary fix: in the new version the double and integer 91859599516SKenneth E. Jansen // can mix and match to avoid the order confusion 91959599516SKenneth E. Jansen //////////////////////////////////////////////////////////////// 92059599516SKenneth E. Jansen 92159599516SKenneth E. Jansen double_counter=0,int_counter=0; 92259599516SKenneth E. Jansen 92359599516SKenneth E. Jansen for ( i = 0; i < N_restart_double+N_restart_integer; i++ ) 92459599516SKenneth E. Jansen { 92559599516SKenneth E. Jansen fgets( target, 1024, pFile ); 92659599516SKenneth E. Jansen temp = strtok( target, ";" ); 92759599516SKenneth E. Jansen token = strtok( temp, "," ); 92859599516SKenneth E. Jansen strcpy( S1, token ); 92959599516SKenneth E. Jansen token = strtok ( NULL, "," ); 93059599516SKenneth E. Jansen strcpy( S2, token ); 93159599516SKenneth E. Jansen token = strtok ( NULL, "," ); 93259599516SKenneth E. Jansen strcpy( S3, token ); 93359599516SKenneth E. Jansen token = strtok ( NULL, "," ); 93459599516SKenneth E. Jansen strcpy( S4, token ); 93559599516SKenneth E. Jansen token = strtok ( NULL, "," ); 93659599516SKenneth E. Jansen strcpy( S5, token ); 93759599516SKenneth E. Jansen 93859599516SKenneth E. Jansen if (cscompare(S3,"double")) 93959599516SKenneth E. Jansen { 94059599516SKenneth E. Jansen strcpy( fileTypeD[double_counter], S1 ); 94159599516SKenneth E. Jansen strcpy( fieldNameD[double_counter], S2 ); 94259599516SKenneth E. Jansen strcpy( dataTypeD[double_counter], S3 ); 94359599516SKenneth E. Jansen strcpy( headerTypeD[double_counter], S4 ); 94459599516SKenneth E. Jansen strcpy( numTemp, S5 ); 94559599516SKenneth E. Jansen expectD[double_counter] = atoi (numTemp); 94659599516SKenneth E. Jansen double_counter++; 94759599516SKenneth E. Jansen } 94859599516SKenneth E. Jansen 94959599516SKenneth E. Jansen if (cscompare(S3,"integer")) 95059599516SKenneth E. Jansen { 95159599516SKenneth E. Jansen strcpy( fileTypeI[int_counter], S1 ); 95259599516SKenneth E. Jansen strcpy( fieldNameI[int_counter], S2 ); 95359599516SKenneth E. Jansen strcpy( dataTypeI[int_counter], S3 ); 95459599516SKenneth E. Jansen strcpy( headerTypeI[int_counter], S4 ); 95559599516SKenneth E. Jansen strcpy( numTemp, S5 ); 95659599516SKenneth E. Jansen expectI[int_counter] = atoi (numTemp); 95759599516SKenneth E. Jansen int_counter++; 95859599516SKenneth E. Jansen } 95959599516SKenneth E. Jansen } 96059599516SKenneth E. Jansen 96159599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 96259599516SKenneth E. Jansen if(myrank==0){ 96359599516SKenneth E. Jansen printf("Starting to read some blocks (doubles) in the restart.dat.##.## files\n"); 96459599516SKenneth E. Jansen } 96559599516SKenneth E. Jansen 96659599516SKenneth E. Jansen for ( i = 0; i < N_restart_double; i++ ) 96759599516SKenneth E. Jansen { 96859599516SKenneth E. Jansen for ( j = 0; j < nppp; j++ ) 96959599516SKenneth E. Jansen { 97059599516SKenneth E. Jansen 97159599516SKenneth E. Jansen if(existsubdir) { 97259599516SKenneth E. Jansen subdir = (startpart+j-1) / DIR_FANOUT; 97359599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case/%d/restart.%d.%d",N_parts, subdir, N_steps,startpart+j); 97459599516SKenneth E. Jansen } 97559599516SKenneth E. Jansen else 97659599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case/restart.%d.%d",N_parts, N_steps, startpart+j); 97759599516SKenneth E. Jansen 97859599516SKenneth E. Jansen openfile(gfname,"read",&irestart); 97959599516SKenneth E. Jansen 98059599516SKenneth E. Jansen for ( k = 0; k < 10; k++ ) 98159599516SKenneth E. Jansen iarray[k]=0; 98259599516SKenneth E. Jansen 98359599516SKenneth E. Jansen paraD[i][j] = new int[expectD[i]]; 98459599516SKenneth E. Jansen 98559599516SKenneth E. Jansen iarray[0]=-1; 98659599516SKenneth E. Jansen readheader( &irestart, 98759599516SKenneth E. Jansen fieldNameD[i], 98859599516SKenneth E. Jansen (void*)iarray, 98959599516SKenneth E. Jansen &expectD[i], 99059599516SKenneth E. Jansen "double", 99159599516SKenneth E. Jansen "binary" ); 99259599516SKenneth E. Jansen 99359599516SKenneth E. Jansen for ( k = 0; k < expectD[i]; k++ ) 99459599516SKenneth E. Jansen paraD[i][j][k] = iarray[k]; 99559599516SKenneth E. Jansen 99659599516SKenneth E. Jansen if ( iarray[0]==-1 ) 99759599516SKenneth E. Jansen WriteLockD[i]=1; 99859599516SKenneth E. Jansen if ( WriteLockD[i]==0 ) 99959599516SKenneth E. Jansen { 100059599516SKenneth E. Jansen if ( cscompare("block",headerTypeD[i]) ) 100159599516SKenneth E. Jansen { 100259599516SKenneth E. Jansen if ( expectD[i]==1) 100359599516SKenneth E. Jansen isize = paraD[i][j][0]; 100459599516SKenneth E. Jansen else 100559599516SKenneth E. Jansen isize = paraD[i][j][0] * paraD[i][j][1]; 100659599516SKenneth E. Jansen 100759599516SKenneth E. Jansen Dfield[i][j] = new double[isize]; 100859599516SKenneth E. Jansen readdatablock( &irestart, 100959599516SKenneth E. Jansen fieldNameD[i], 101059599516SKenneth E. Jansen (void*)Dfield[i][j], 101159599516SKenneth E. Jansen &isize, 101259599516SKenneth E. Jansen "double", 101359599516SKenneth E. Jansen "binary" ); 101459599516SKenneth E. Jansen 101559599516SKenneth E. Jansen } 101659599516SKenneth E. Jansen } 101759599516SKenneth E. Jansen closefile(&irestart, "read"); 101859599516SKenneth E. Jansen } 101959599516SKenneth E. Jansen } 102059599516SKenneth E. Jansen 102159599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 102259599516SKenneth E. Jansen if(myrank==0){ 102359599516SKenneth E. Jansen printf("Starting to read some blocks (integers) in the restart.dat.##.## files\n"); 102459599516SKenneth E. Jansen } 102559599516SKenneth E. Jansen 102659599516SKenneth E. Jansen 102759599516SKenneth E. Jansen for ( i = 0; i < N_restart_integer; i++ ) 102859599516SKenneth E. Jansen { 102959599516SKenneth E. Jansen for ( j = 0; j < nppp; j++ ) 103059599516SKenneth E. Jansen { 103159599516SKenneth E. Jansen 103259599516SKenneth E. Jansen if(existsubdir) { 103359599516SKenneth E. Jansen subdir = (startpart+j-1) / DIR_FANOUT; 103459599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case/%d/restart.%d.%d",N_parts, subdir, N_steps, startpart+j); 103559599516SKenneth E. Jansen } 103659599516SKenneth E. Jansen else 103759599516SKenneth E. Jansen sprintf(gfname,"./%d-procs_case/restart.%d.%d",N_parts, N_steps, startpart+j); 103859599516SKenneth E. Jansen 103959599516SKenneth E. Jansen openfile(gfname,"read",&irestart); 104059599516SKenneth E. Jansen 104159599516SKenneth E. Jansen for ( k = 0; k < 10; k++ ) 104259599516SKenneth E. Jansen iarray[k]=0; 104359599516SKenneth E. Jansen 104459599516SKenneth E. Jansen paraI[i][j] = new int[expectI[i]]; 104559599516SKenneth E. Jansen 104659599516SKenneth E. Jansen iarray[0]=-1; 104759599516SKenneth E. Jansen readheader( &irestart, 104859599516SKenneth E. Jansen fieldNameI[i], 104959599516SKenneth E. Jansen (void*)iarray, 105059599516SKenneth E. Jansen &expectI[i], 105159599516SKenneth E. Jansen "integer", 105259599516SKenneth E. Jansen "binary" ); 105359599516SKenneth E. Jansen 105459599516SKenneth E. Jansen for ( k = 0; k < expectI[i]; k++ ) 105559599516SKenneth E. Jansen paraI[i][j][k] = iarray[k]; 105659599516SKenneth E. Jansen 105759599516SKenneth E. Jansen if ( iarray[0]==-1 ) 105859599516SKenneth E. Jansen WriteLockI[i]=1; 105959599516SKenneth E. Jansen if ( WriteLockI[i]==0 ) 106059599516SKenneth E. Jansen { 106159599516SKenneth E. Jansen 106259599516SKenneth E. Jansen if ( cscompare("block",headerTypeI[i]) ) 106359599516SKenneth E. Jansen { 106459599516SKenneth E. Jansen if ( expectI[i]==1) 106559599516SKenneth E. Jansen isize = paraI[i][j][0]; 106659599516SKenneth E. Jansen else 106759599516SKenneth E. Jansen isize = paraI[i][j][0] * paraI[i][j][1]; 106859599516SKenneth E. Jansen 106959599516SKenneth E. Jansen Ifield[i][j] = new int[isize]; 107059599516SKenneth E. Jansen readdatablock( &irestart, 107159599516SKenneth E. Jansen fieldNameI[i], 107259599516SKenneth E. Jansen (void*)Ifield[i][j], 107359599516SKenneth E. Jansen &isize, 107459599516SKenneth E. Jansen "integer", 107559599516SKenneth E. Jansen "binary" ); 107659599516SKenneth E. Jansen } 107759599516SKenneth E. Jansen } 107859599516SKenneth E. Jansen closefile(&irestart, "read"); 107959599516SKenneth E. Jansen } 108059599516SKenneth E. Jansen } 108159599516SKenneth E. Jansen 108259599516SKenneth E. Jansen fclose(pFile); 108359599516SKenneth E. Jansen 108459599516SKenneth E. Jansen ///////////////////// Writing /////////////////////////////// 108559599516SKenneth E. Jansen 108659599516SKenneth E. Jansen int N_restart = N_restart_double + N_restart_integer; 108759599516SKenneth E. Jansen 108859599516SKenneth E. Jansen bzero((void*)fname,255); 108959599516SKenneth E. Jansen //MR CHANGE 109059599516SKenneth E. Jansen // sprintf(fname,"./%d-procs_case/restart-dat.%d.%d",N_parts,N_steps,((int)(myrank/(N_procs/N_files))+1)); 109159599516SKenneth E. Jansen sprintf(fname,"./%d-procs_case-SyncIO-%d/restart-dat.%d.%d",N_parts,N_files,N_steps,((int)(myrank/(N_procs/N_files))+1)); 109259599516SKenneth E. Jansen //MR CHANGE END 109359599516SKenneth E. Jansen initphmpiio(&N_restart, &nppf, &N_files,&writeHandle, "write"); 109459599516SKenneth E. Jansen // initphmpiio(&N_restart, &nppf, &N_files,&writeHandle); 109559599516SKenneth E. Jansen openfile(fname, "write", &writeHandle); 109659599516SKenneth E. Jansen 109759599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 109859599516SKenneth E. Jansen if(myrank==0){ 109959599516SKenneth E. Jansen printf("Starting to write some blocks (doubles) in the restart-dat.##.## files\n"); 110059599516SKenneth E. Jansen } 110159599516SKenneth E. Jansen 110259599516SKenneth E. Jansen for ( i = 0; i < N_restart_double; i++ ) 110359599516SKenneth E. Jansen { 110459599516SKenneth E. Jansen for ( j = 0; j < nppp; j++ ) 110559599516SKenneth E. Jansen { 110659599516SKenneth E. Jansen 110759599516SKenneth E. Jansen if (WriteLockD[i]==0) 110859599516SKenneth E. Jansen { 110959599516SKenneth E. Jansen GPID = startpart + j; 111059599516SKenneth E. Jansen bzero((void*)fieldtag,255); 111159599516SKenneth E. Jansen sprintf(fieldtag,"%s@%d",fieldNameD[i],GPID); 111259599516SKenneth E. Jansen 111359599516SKenneth E. Jansen if ( expectD[i]==1) 111459599516SKenneth E. Jansen isize = paraD[i][j][0]; 111559599516SKenneth E. Jansen else 111659599516SKenneth E. Jansen isize = paraD[i][j][0] * paraD[i][j][1]; 111759599516SKenneth E. Jansen 111859599516SKenneth E. Jansen for ( k = 0; k < expectD[i]; k++ ) 111959599516SKenneth E. Jansen iarray[k] = paraD[i][j][k]; 112059599516SKenneth E. Jansen 112159599516SKenneth E. Jansen if ( cscompare("header",headerTypeD[i]) ) 112259599516SKenneth E. Jansen isize = 0; 112359599516SKenneth E. Jansen 112459599516SKenneth E. Jansen writeheader( &writeHandle, 112559599516SKenneth E. Jansen fieldtag, 112659599516SKenneth E. Jansen (void*)iarray, 112759599516SKenneth E. Jansen &expectD[i], 112859599516SKenneth E. Jansen &isize, 112959599516SKenneth E. Jansen "double", 113059599516SKenneth E. Jansen "binary"); 113159599516SKenneth E. Jansen 113259599516SKenneth E. Jansen writedatablock( &writeHandle, 113359599516SKenneth E. Jansen fieldtag, 113459599516SKenneth E. Jansen (void*)Dfield[i][j], 113559599516SKenneth E. Jansen &isize, 113659599516SKenneth E. Jansen "double", 113759599516SKenneth E. Jansen "binary" ); 113859599516SKenneth E. Jansen if ( cscompare("block",headerTypeD[i]) ) 113959599516SKenneth E. Jansen delete [] Dfield[i][j]; 114059599516SKenneth E. Jansen } 114159599516SKenneth E. Jansen delete [] paraD[i][j]; 114259599516SKenneth E. Jansen } 114359599516SKenneth E. Jansen } 114459599516SKenneth E. Jansen 114559599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 114659599516SKenneth E. Jansen if(myrank==0){ 114759599516SKenneth E. Jansen printf("Starting to write some blocks (integers) in the restart.dat.##.## files\n"); 114859599516SKenneth E. Jansen } 114959599516SKenneth E. Jansen 115059599516SKenneth E. Jansen for ( i = 0; i < N_restart_integer; i++ ) 115159599516SKenneth E. Jansen { 115259599516SKenneth E. Jansen for ( j = 0; j < nppp; j++ ) 115359599516SKenneth E. Jansen { 115459599516SKenneth E. Jansen 115559599516SKenneth E. Jansen if (WriteLockI[i]==0) 115659599516SKenneth E. Jansen { 115759599516SKenneth E. Jansen GPID = startpart + j; 115859599516SKenneth E. Jansen bzero((void*)fieldtag,255); 115959599516SKenneth E. Jansen sprintf(fieldtag,"%s@%d",fieldNameI[i],GPID); 116059599516SKenneth E. Jansen 116159599516SKenneth E. Jansen if ( expectI[i]==1) 116259599516SKenneth E. Jansen isize = paraI[i][j][0]; 116359599516SKenneth E. Jansen else 116459599516SKenneth E. Jansen isize = paraI[i][j][0] * paraI[i][j][1]; 116559599516SKenneth E. Jansen 116659599516SKenneth E. Jansen for ( k = 0; k < expectI[i]; k++ ) 116759599516SKenneth E. Jansen iarray[k] = paraI[i][j][k]; 116859599516SKenneth E. Jansen 116959599516SKenneth E. Jansen if ( cscompare("header",headerTypeI[i]) ) 117059599516SKenneth E. Jansen isize = 0; 117159599516SKenneth E. Jansen 117259599516SKenneth E. Jansen writeheader( &writeHandle, 117359599516SKenneth E. Jansen fieldtag, 117459599516SKenneth E. Jansen (void*)iarray, 117559599516SKenneth E. Jansen &expectI[i], 117659599516SKenneth E. Jansen &isize, 117759599516SKenneth E. Jansen "integer", 117859599516SKenneth E. Jansen "binary"); 117959599516SKenneth E. Jansen 118059599516SKenneth E. Jansen writedatablock( &writeHandle, 118159599516SKenneth E. Jansen fieldtag, 118259599516SKenneth E. Jansen (void*)Ifield[i][j], 118359599516SKenneth E. Jansen &isize, 118459599516SKenneth E. Jansen "integer", 118559599516SKenneth E. Jansen "binary" ); 118659599516SKenneth E. Jansen 118759599516SKenneth E. Jansen if ( cscompare("block",headerTypeI[i]) ) 118859599516SKenneth E. Jansen delete [] Ifield[i][j]; 118959599516SKenneth E. Jansen } 119059599516SKenneth E. Jansen delete [] paraI[i][j]; 119159599516SKenneth E. Jansen } 119259599516SKenneth E. Jansen 119359599516SKenneth E. Jansen } 119459599516SKenneth E. Jansen 119559599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 119659599516SKenneth E. Jansen if(myrank==0){ 119759599516SKenneth E. Jansen printf("Closing restart-dat.##.## files\n"); 119859599516SKenneth E. Jansen } 119959599516SKenneth E. Jansen 120059599516SKenneth E. Jansen closefile(&writeHandle, "write"); 120159599516SKenneth E. Jansen finalizephmpiio(&writeHandle); 120259599516SKenneth E. Jansen 120359599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 120459599516SKenneth E. Jansen if(myrank==0){ 120559599516SKenneth E. Jansen printf("Free memory related to restart-dat.##.## files\n"); 120659599516SKenneth E. Jansen } 120759599516SKenneth E. Jansen 120859599516SKenneth E. Jansen 120959599516SKenneth E. Jansen for ( i = 0; i < N_restart_double; i++ ) 121059599516SKenneth E. Jansen { 121159599516SKenneth E. Jansen delete [] Dfield[i]; 121259599516SKenneth E. Jansen delete [] paraD[i]; 121359599516SKenneth E. Jansen 121459599516SKenneth E. Jansen delete [] fieldNameD[i]; 121559599516SKenneth E. Jansen delete [] fileTypeD[i]; 121659599516SKenneth E. Jansen delete [] dataTypeD[i]; 121759599516SKenneth E. Jansen delete [] headerTypeD[i]; 121859599516SKenneth E. Jansen } 121959599516SKenneth E. Jansen 122059599516SKenneth E. Jansen for ( i = 0; i < N_restart_integer; i++ ) 122159599516SKenneth E. Jansen { 122259599516SKenneth E. Jansen delete [] Ifield[i]; 122359599516SKenneth E. Jansen delete [] paraI[i]; 122459599516SKenneth E. Jansen 122559599516SKenneth E. Jansen delete [] fieldNameI[i]; 122659599516SKenneth E. Jansen delete [] fileTypeI[i]; 122759599516SKenneth E. Jansen delete [] dataTypeI[i]; 122859599516SKenneth E. Jansen delete [] headerTypeI[i]; 122959599516SKenneth E. Jansen } 123059599516SKenneth E. Jansen 123159599516SKenneth E. Jansen delete [] Dfield; 123259599516SKenneth E. Jansen delete [] Ifield; 123359599516SKenneth E. Jansen 123459599516SKenneth E. Jansen delete [] paraD; 123559599516SKenneth E. Jansen delete [] paraI; 123659599516SKenneth E. Jansen 123759599516SKenneth E. Jansen delete [] expectD; 123859599516SKenneth E. Jansen delete [] expectI; 123959599516SKenneth E. Jansen 124059599516SKenneth E. Jansen delete [] fieldNameD; 124159599516SKenneth E. Jansen delete [] fileTypeD; 124259599516SKenneth E. Jansen delete [] dataTypeD; 124359599516SKenneth E. Jansen delete [] headerTypeD; 124459599516SKenneth E. Jansen 124559599516SKenneth E. Jansen delete [] fieldNameI; 124659599516SKenneth E. Jansen delete [] fileTypeI; 124759599516SKenneth E. Jansen delete [] dataTypeI; 124859599516SKenneth E. Jansen delete [] headerTypeI; 124959599516SKenneth E. Jansen 1250*13c09bf6SCameron Smith delete [] WriteLockD; 1251*13c09bf6SCameron Smith delete [] WriteLockI; 1252*13c09bf6SCameron Smith 1253*13c09bf6SCameron Smith delete [] interiorMark; 1254*13c09bf6SCameron Smith delete [] boundaryMark; 1255*13c09bf6SCameron Smith delete [] codesMark; 1256*13c09bf6SCameron Smith delete [] valuesMark; 1257*13c09bf6SCameron Smith delete [] numVariables; 125859599516SKenneth E. Jansen 125959599516SKenneth E. Jansen if (myrank==0) 126059599516SKenneth E. Jansen { 126159599516SKenneth E. Jansen printf("\nFinished transfer, please check data using:\n"); 126259599516SKenneth E. Jansen printf(" grep -a ': <' filename \n\n"); 126359599516SKenneth E. Jansen printf("Note that the size of the fields is computed based on previous geombc files\n"); 126459599516SKenneth E. Jansen printf("Check the routine 'computenitems' if you have any reason to think it has changes for the fields you are interested in\n\n"); 126559599516SKenneth E. Jansen } 126659599516SKenneth E. Jansen 126759599516SKenneth E. Jansen MPI_Finalize(); 126859599516SKenneth E. Jansen 126959599516SKenneth E. Jansen } 127059599516SKenneth E. Jansen 127159599516SKenneth E. Jansen 1272