xref: /phasta/phSolver/common/d2wall.c (revision e81a6dc1f924882a3384f8e849eaba3a3575cfa5)
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