159599516SKenneth E. Jansen #include <stdlib.h> 259599516SKenneth E. Jansen #include <FCMangle.h> 359599516SKenneth E. Jansen #include <new_interface.h> 459599516SKenneth E. Jansen #include <stdio.h> 508d2ac07SCameron Smith #include <string.h> /*memset*/ 6d0f7e5e6SCameron Smith #include <assert.h> 759599516SKenneth E. Jansen #include "common_c.h" 859599516SKenneth E. Jansen #include "phastaIO.h" 9d1293ce9SCameron Smith #include "phIO.h" 109071d3baSCameron Smith #include "phString.h" 11d7abaf6cSCameron Smith #include "syncio.h" 12d7abaf6cSCameron Smith #include "posixio.h" 13d7abaf6cSCameron Smith #include "streamio.h" 1459599516SKenneth E. Jansen #include "setsyncioparam.h" 15*b7264451SCameron Smith #include "tmrc.h" 1659599516SKenneth E. Jansen 1759599516SKenneth E. Jansen void 1859599516SKenneth E. Jansen read_d2wall( int* pid, 1959599516SKenneth E. Jansen int* numnp, 2059599516SKenneth E. Jansen double* array1, 2159599516SKenneth E. Jansen int* foundd2wall ) { 2259599516SKenneth E. Jansen int isize, nitems; 2359599516SKenneth E. Jansen int iarray[10]; 2459599516SKenneth E. Jansen int j; 25*b7264451SCameron Smith double iotime = 0; 2659599516SKenneth E. Jansen for ( j = 0; j < 10; j++) { 2708d2ac07SCameron Smith /*Initialize iarray to 0 so that we can assess the result of readheader*/ 2859599516SKenneth E. Jansen iarray[j] = 0; 2959599516SKenneth E. Jansen } 3059599516SKenneth E. Jansen 3159599516SKenneth E. Jansen int nfields; 3259599516SKenneth E. Jansen int numparts; 3359599516SKenneth E. Jansen int irank; 3459599516SKenneth E. Jansen int nprocs; 3559599516SKenneth E. Jansen 3608d2ac07SCameron Smith /* Retrieve and compute the parameters required for SyncIO */ 3759599516SKenneth E. Jansen numparts = workfc.numpe; 3808d2ac07SCameron Smith irank = *pid; /* workfc.myrank; */ 3959599516SKenneth E. Jansen nprocs = workfc.numpe; 4059599516SKenneth E. Jansen 4108d2ac07SCameron Smith /* Calculate number of parts each proc deal with and where it start and end ... */ 4208d2ac07SCameron Smith int nppp = numparts/nprocs;/* nppp : Number of parts per proc ... */ 43d0f7e5e6SCameron Smith assert(nppp==1); 4408d2ac07SCameron Smith int startpart = irank * nppp +1;/* Part id from which I (myrank) start ... */ 4508d2ac07SCameron Smith int endpart = startpart + nppp - 1;/* Part id to which I (myrank) end ... */ 4659599516SKenneth E. Jansen 472be6dc50SCameron Smith phio_fp handle; 4860ca4d1eSCameron Smith char filename[255],path[255]; 497d6b7e55SCameron Smith memset((void*)filename,0,255); 5059599516SKenneth E. Jansen *foundd2wall = 0; 5108d2ac07SCameron Smith /* First we try to read dwal from the restart files. */ 5259599516SKenneth E. Jansen 53*b7264451SCameron Smith iotime = TMRC(); 54dbb3615dSCameron Smith if( outpar.input_mode == -1 ) 55a486e66cSCameron Smith streamio_setup_read(&handle, streamio_get_gr()); 56dbb3615dSCameron Smith else if( outpar.input_mode == 0 ) 57d7abaf6cSCameron Smith posixio_setup(&handle, 'r'); 58dbb3615dSCameron Smith else if( outpar.input_mode > 0 ) 599f4aafb6SCameron Smith syncio_setup_read(outpar.nsynciofiles, &handle); 60a93de25bSCameron Smith phio_constructName(handle,"restart",filename); 619071d3baSCameron Smith phstr_appendInt(filename, timdat.lstep); 629071d3baSCameron Smith phstr_appendStr(filename, "."); 63d7abaf6cSCameron Smith phio_openfile(filename, handle); 6459599516SKenneth E. Jansen 6559599516SKenneth E. Jansen int i; 6608d2ac07SCameron Smith for ( i = 0; i < nppp; i++) { /*This loop is useful only if several parts per processor*/ 6759599516SKenneth E. Jansen nitems = 2; 682be6dc50SCameron Smith phio_readheader(handle, "dwal", (void*)iarray, &nitems, "double", phasta_iotype); 6959599516SKenneth E. Jansen 7059599516SKenneth E. Jansen if (iarray[0] == (*numnp)) { 7159599516SKenneth E. Jansen if (irank==0) { 7259599516SKenneth E. Jansen printf("d2wall field found in %s\n",filename); 7359599516SKenneth E. Jansen } 7459599516SKenneth E. Jansen *foundd2wall = 1; 7559599516SKenneth E. Jansen isize = (*numnp); 762be6dc50SCameron Smith phio_readdatablock(handle, "dwal", (void*)(array1), &isize, "double", phasta_iotype ); 7759599516SKenneth E. Jansen } 7808d2ac07SCameron Smith else { /*d2wall fields was not found in the restart file*/ 7959599516SKenneth E. Jansen *foundd2wall = 0; 8059599516SKenneth E. Jansen if (irank==0) { 8159599516SKenneth E. Jansen printf("d2wall field not found in %s - trying d2wall files now\n",filename); 8259599516SKenneth E. Jansen } 8359599516SKenneth E. Jansen } 8459599516SKenneth E. Jansen } 85d7abaf6cSCameron Smith phio_closefile(handle); 86*b7264451SCameron Smith iotime = TMRC() - iotime; 8759599516SKenneth E. Jansen if (irank==0) { 88*b7264451SCameron Smith printf("time to read d2wall (seconds) %f\n",iotime); 8959599516SKenneth E. Jansen printf("\n"); 9059599516SKenneth E. Jansen } 9159599516SKenneth E. Jansen } 92