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> 5*08d2ac07SCameron 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++) { 24*08d2ac07SCameron Smith /*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 34*08d2ac07SCameron Smith /* Retrieve and compute the parameters required for SyncIO */ 3559599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 3659599516SKenneth E. Jansen numparts = workfc.numpe; 37*08d2ac07SCameron Smith irank = *pid; /* workfc.myrank; */ 3859599516SKenneth E. Jansen nprocs = workfc.numpe; 3959599516SKenneth E. Jansen 40*08d2ac07SCameron Smith /* Calculate number of parts each proc deal with and where it start and end ... */ 41*08d2ac07SCameron Smith int nppp = numparts/nprocs;/* nppp : Number of parts per proc ... */ 42d0f7e5e6SCameron Smith assert(nppp==1); 43*08d2ac07SCameron Smith int startpart = irank * nppp +1;/* Part id from which I (myrank) start ... */ 44*08d2ac07SCameron Smith 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; 50*08d2ac07SCameron Smith /* First we try to read dwal from the restart files. */ 5159599516SKenneth E. Jansen 52d7abaf6cSCameron Smith stream* grstream; 53a93de25bSCameron Smith if( nfiles == -1 ) 54d7abaf6cSCameron Smith streamio_setup(grstream, &handle); 55a93de25bSCameron Smith else if( nfiles == 0 ) 56d7abaf6cSCameron Smith posixio_setup(&handle, 'r'); 57a93de25bSCameron Smith else if( nfiles > 0 ) 58d7abaf6cSCameron Smith syncio_setup_read(nfiles, &handle); 59a93de25bSCameron Smith phio_constructName(handle,"restart",filename); 60e81a6dc1SCameron Smith phio_appendInt(filename, timdat.lstep); 61d7abaf6cSCameron Smith phio_openfile(filename, handle); 6259599516SKenneth E. Jansen 6359599516SKenneth E. Jansen int i; 64*08d2ac07SCameron Smith for ( i = 0; i < nppp; i++) { /*This loop is useful only if several parts per processor*/ 6559599516SKenneth E. Jansen nitems = 2; 662be6dc50SCameron Smith phio_readheader(handle, "dwal", (void*)iarray, &nitems, "double", phasta_iotype); 6759599516SKenneth E. Jansen 6859599516SKenneth E. Jansen if (iarray[0] == (*numnp)) { 6959599516SKenneth E. Jansen if (irank==0) { 7059599516SKenneth E. Jansen printf("d2wall field found in %s\n",filename); 7159599516SKenneth E. Jansen } 7259599516SKenneth E. Jansen *foundd2wall = 1; 7359599516SKenneth E. Jansen isize = (*numnp); 742be6dc50SCameron Smith phio_readdatablock(handle, "dwal", (void*)(array1), &isize, "double", phasta_iotype ); 7559599516SKenneth E. Jansen } 76*08d2ac07SCameron Smith else { /*d2wall fields was not found in the restart file*/ 7759599516SKenneth E. Jansen *foundd2wall = 0; 7859599516SKenneth E. Jansen if (irank==0) { 7959599516SKenneth E. Jansen printf("d2wall field not found in %s - trying d2wall files now\n",filename); 8059599516SKenneth E. Jansen } 8159599516SKenneth E. Jansen } 8259599516SKenneth E. Jansen } 83d7abaf6cSCameron Smith phio_closefile(handle); 8459599516SKenneth E. Jansen 8559599516SKenneth E. Jansen if (irank==0) { 8659599516SKenneth E. Jansen printf("\n"); 8759599516SKenneth E. Jansen } 8859599516SKenneth E. Jansen } 89