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
read_d2wall(int * pid,int * numnp,double * array1,int * foundd2wall)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