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" 10*9071d3baSCameron 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" 1559599516SKenneth E. Jansen 1659599516SKenneth E. Jansen void 1759599516SKenneth E. Jansen read_d2wall( int* pid, 1859599516SKenneth E. Jansen int* numnp, 1959599516SKenneth E. Jansen double* array1, 2059599516SKenneth E. Jansen int* foundd2wall ) { 2159599516SKenneth E. Jansen int isize, nitems; 2259599516SKenneth E. Jansen int iarray[10]; 2359599516SKenneth E. Jansen int j; 2459599516SKenneth E. Jansen for ( j = 0; j < 10; j++) { 2508d2ac07SCameron Smith /*Initialize iarray to 0 so that we can assess the result of readheader*/ 2659599516SKenneth E. Jansen iarray[j] = 0; 2759599516SKenneth E. Jansen } 2859599516SKenneth E. Jansen 2959599516SKenneth E. Jansen int nfields; 3059599516SKenneth E. Jansen int numparts; 3159599516SKenneth E. Jansen int irank; 3259599516SKenneth E. Jansen int nprocs; 3359599516SKenneth E. Jansen 3408d2ac07SCameron Smith /* Retrieve and compute the parameters required for SyncIO */ 3559599516SKenneth E. Jansen numparts = workfc.numpe; 3608d2ac07SCameron Smith irank = *pid; /* workfc.myrank; */ 3759599516SKenneth E. Jansen nprocs = workfc.numpe; 3859599516SKenneth E. Jansen 3908d2ac07SCameron Smith /* Calculate number of parts each proc deal with and where it start and end ... */ 4008d2ac07SCameron Smith int nppp = numparts/nprocs;/* nppp : Number of parts per proc ... */ 41d0f7e5e6SCameron Smith assert(nppp==1); 4208d2ac07SCameron Smith int startpart = irank * nppp +1;/* Part id from which I (myrank) start ... */ 4308d2ac07SCameron Smith int endpart = startpart + nppp - 1;/* Part id to which I (myrank) end ... */ 4459599516SKenneth E. Jansen 452be6dc50SCameron Smith phio_fp handle; 4660ca4d1eSCameron Smith char filename[255],path[255]; 477d6b7e55SCameron Smith memset((void*)filename,0,255); 4859599516SKenneth E. Jansen *foundd2wall = 0; 4908d2ac07SCameron Smith /* First we try to read dwal from the restart files. */ 5059599516SKenneth E. Jansen 51dbb3615dSCameron Smith if( outpar.input_mode == -1 ) 52a486e66cSCameron Smith streamio_setup_read(&handle, streamio_get_gr()); 53dbb3615dSCameron Smith else if( outpar.input_mode == 0 ) 54d7abaf6cSCameron Smith posixio_setup(&handle, 'r'); 55dbb3615dSCameron Smith else if( outpar.input_mode > 0 ) 569f4aafb6SCameron Smith syncio_setup_read(outpar.nsynciofiles, &handle); 57a93de25bSCameron Smith phio_constructName(handle,"restart",filename); 58*9071d3baSCameron Smith phstr_appendInt(filename, timdat.lstep); 59*9071d3baSCameron Smith phstr_appendStr(filename, "."); 60d7abaf6cSCameron Smith phio_openfile(filename, handle); 6159599516SKenneth E. Jansen 6259599516SKenneth E. Jansen int i; 6308d2ac07SCameron Smith for ( i = 0; i < nppp; i++) { /*This loop is useful only if several parts per processor*/ 6459599516SKenneth E. Jansen nitems = 2; 652be6dc50SCameron Smith phio_readheader(handle, "dwal", (void*)iarray, &nitems, "double", phasta_iotype); 6659599516SKenneth E. Jansen 6759599516SKenneth E. Jansen if (iarray[0] == (*numnp)) { 6859599516SKenneth E. Jansen if (irank==0) { 6959599516SKenneth E. Jansen printf("d2wall field found in %s\n",filename); 7059599516SKenneth E. Jansen } 7159599516SKenneth E. Jansen *foundd2wall = 1; 7259599516SKenneth E. Jansen isize = (*numnp); 732be6dc50SCameron Smith phio_readdatablock(handle, "dwal", (void*)(array1), &isize, "double", phasta_iotype ); 7459599516SKenneth E. Jansen } 7508d2ac07SCameron Smith else { /*d2wall fields was not found in the restart file*/ 7659599516SKenneth E. Jansen *foundd2wall = 0; 7759599516SKenneth E. Jansen if (irank==0) { 7859599516SKenneth E. Jansen printf("d2wall field not found in %s - trying d2wall files now\n",filename); 7959599516SKenneth E. Jansen } 8059599516SKenneth E. Jansen } 8159599516SKenneth E. Jansen } 82d7abaf6cSCameron Smith phio_closefile(handle); 8359599516SKenneth E. Jansen 8459599516SKenneth E. Jansen if (irank==0) { 8559599516SKenneth E. Jansen printf("\n"); 8659599516SKenneth E. Jansen } 8759599516SKenneth E. Jansen } 88