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> 57d6b7e55SCameron 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" 10d7abaf6cSCameron Smith #include "syncio.h" 11d7abaf6cSCameron Smith #include "posixio.h" 12d7abaf6cSCameron Smith #include "streamio.h" 1359599516SKenneth E. Jansen #include "setsyncioparam.h" 1459599516SKenneth E. Jansen 1559599516SKenneth E. Jansen void 1659599516SKenneth E. Jansen read_d2wall( int* pid, 1759599516SKenneth E. Jansen int* numnp, 1859599516SKenneth E. Jansen double* array1, 1959599516SKenneth E. Jansen int* foundd2wall ) { 2059599516SKenneth E. Jansen int isize, nitems; 2159599516SKenneth E. Jansen int iarray[10]; 2259599516SKenneth E. Jansen int j; 2359599516SKenneth E. Jansen for ( j = 0; j < 10; j++) { 2459599516SKenneth E. Jansen //Initialize iarray to 0 so that we can assess the result of readheader 2559599516SKenneth E. Jansen iarray[j] = 0; 2659599516SKenneth E. Jansen } 2759599516SKenneth E. Jansen 2859599516SKenneth E. Jansen int nfiles; 2959599516SKenneth E. Jansen int nfields; 3059599516SKenneth E. Jansen int numparts; 3159599516SKenneth E. Jansen int irank; 3259599516SKenneth E. Jansen int nprocs; 3359599516SKenneth E. Jansen 3459599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO 3559599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 3659599516SKenneth E. Jansen numparts = workfc.numpe; 3759599516SKenneth E. Jansen irank = *pid; // workfc.myrank; 3859599516SKenneth E. Jansen nprocs = workfc.numpe; 3959599516SKenneth E. Jansen 4059599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 4159599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 42d0f7e5e6SCameron Smith assert(nppp==1); 4359599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 4459599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 4559599516SKenneth E. Jansen 462be6dc50SCameron Smith phio_fp handle; 4760ca4d1eSCameron Smith char filename[255],path[255]; 487d6b7e55SCameron Smith memset((void*)filename,0,255); 4959599516SKenneth E. Jansen *foundd2wall = 0; 5059599516SKenneth E. Jansen //////////////////////////////////////////////////// 5159599516SKenneth E. Jansen // First we try to read dwal from the restart files. 5259599516SKenneth E. Jansen //////////////////////////////////////////////////// 5359599516SKenneth E. Jansen 54d7abaf6cSCameron Smith phio_format fmt = 0; 55d7abaf6cSCameron Smith stream* grstream; 56d7abaf6cSCameron Smith if( nfiles == -1 ) { 57d7abaf6cSCameron Smith fmt = PHIO_STREAM; 58d7abaf6cSCameron Smith streamio_setup(grstream, &handle); 59d7abaf6cSCameron Smith } else if( nfiles == 0 ) { 60d7abaf6cSCameron Smith fmt = PHIO_POSIX; 61d7abaf6cSCameron Smith posixio_setup(&handle, 'r'); 62d7abaf6cSCameron Smith } else if( nfiles == 1 ) { 63d7abaf6cSCameron Smith fmt = PHIO_SYNC; 64d7abaf6cSCameron Smith syncio_setup_read(nfiles, &handle); 652efdc748SKenneth E. Jansen } 66d7abaf6cSCameron Smith phio_constructName(fmt,"restart",filename); 67*e81a6dc1SCameron Smith phio_appendInt(filename, timdat.lstep); 68d7abaf6cSCameron Smith phio_openfile(filename, handle); 6959599516SKenneth E. Jansen 7059599516SKenneth E. Jansen int i; 7159599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 7259599516SKenneth E. Jansen nitems = 2; 732be6dc50SCameron Smith phio_readheader(handle, "dwal", (void*)iarray, &nitems, "double", phasta_iotype); 7459599516SKenneth E. Jansen 7559599516SKenneth E. Jansen if (iarray[0] == (*numnp)) { 7659599516SKenneth E. Jansen if (irank==0) { 7759599516SKenneth E. Jansen printf("d2wall field found in %s\n",filename); 7859599516SKenneth E. Jansen } 7959599516SKenneth E. Jansen *foundd2wall = 1; 8059599516SKenneth E. Jansen isize = (*numnp); 812be6dc50SCameron Smith phio_readdatablock(handle, "dwal", (void*)(array1), &isize, "double", phasta_iotype ); 8259599516SKenneth E. Jansen } 8359599516SKenneth E. Jansen else { //d2wall fields was not found in the restart file 8459599516SKenneth E. Jansen *foundd2wall = 0; 8559599516SKenneth E. Jansen if (irank==0) { 8659599516SKenneth E. Jansen printf("d2wall field not found in %s - trying d2wall files now\n",filename); 8759599516SKenneth E. Jansen } 8859599516SKenneth E. Jansen } 8959599516SKenneth E. Jansen } 90d7abaf6cSCameron Smith phio_closefile(handle); 9159599516SKenneth E. Jansen 9259599516SKenneth E. Jansen if (irank==0) { 9359599516SKenneth E. Jansen printf("\n"); 9459599516SKenneth E. Jansen } 9559599516SKenneth E. Jansen } 96