159599516SKenneth E. Jansen /* This file provides interface functions for 'partial ' random 259599516SKenneth E. Jansen access into the PHASTA input files 359599516SKenneth E. Jansen 459599516SKenneth E. Jansen Anil Karanam March 2001 */ 559599516SKenneth E. Jansen 659599516SKenneth E. Jansen #include <stdio.h> 759599516SKenneth E. Jansen #include <string.h> 859599516SKenneth E. Jansen #include <ctype.h> 959599516SKenneth E. Jansen #include <stdlib.h> 1059599516SKenneth E. Jansen #include <time.h> 1159599516SKenneth E. Jansen #include <math.h> 1259599516SKenneth E. Jansen #include <mpi.h> 1359599516SKenneth E. Jansen #include "phastaIO.h" 1459599516SKenneth E. Jansen #include <FCMangle.h> 1559599516SKenneth E. Jansen #include "new_interfaceM2NFixBnd.h" 1659599516SKenneth E. Jansen 1759599516SKenneth E. Jansen //MR CHANGE 1859599516SKenneth E. Jansen #include "commonM2NFixBnd_c.h" 1959599516SKenneth E. Jansen //MR CHANGE END 2059599516SKenneth E. Jansen 2159599516SKenneth E. Jansen #ifdef intel 2259599516SKenneth E. Jansen #include <winsock2.h> 2359599516SKenneth E. Jansen #else 2459599516SKenneth E. Jansen #include <unistd.h> 2559599516SKenneth E. Jansen #include <strings.h> 2659599516SKenneth E. Jansen #endif 2759599516SKenneth E. Jansen 2859599516SKenneth E. Jansen 2959599516SKenneth E. Jansen void 3059599516SKenneth E. Jansen Write_M2NFixBnd(int* pid, 3159599516SKenneth E. Jansen int* stepno, 3259599516SKenneth E. Jansen int* nshg, 3359599516SKenneth E. Jansen int* numVars, 3459599516SKenneth E. Jansen int* ndofybar, 3559599516SKenneth E. Jansen int* ndoferrors, 3659599516SKenneth E. Jansen double* array1, 3759599516SKenneth E. Jansen double* array2, 3859599516SKenneth E. Jansen double* array3, 3959599516SKenneth E. Jansen double* array4 ) { 4059599516SKenneth E. Jansen 4159599516SKenneth E. Jansen char fname[255]; 4259599516SKenneth E. Jansen char rfile[60]; 4359599516SKenneth E. Jansen char existingfile[30], linkfile[30]; 4459599516SKenneth E. Jansen int irstou; 4559599516SKenneth E. Jansen int magic_number = 362436; 4659599516SKenneth E. Jansen int* mptr = &magic_number; 4759599516SKenneth E. Jansen double version=0.0; 4859599516SKenneth E. Jansen int isize, nitems; 4959599516SKenneth E. Jansen int iarray[10]; 5059599516SKenneth E. Jansen int nfiles; 5159599516SKenneth E. Jansen int nfields; 5259599516SKenneth E. Jansen int numparts; 5359599516SKenneth E. Jansen int irank; 5459599516SKenneth E. Jansen int nprocs; 5559599516SKenneth E. Jansen 5659599516SKenneth E. Jansen 5759599516SKenneth E. Jansen irank = *pid; 5859599516SKenneth E. Jansen 5959599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO 6059599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; //We use the same number of files as before 6159599516SKenneth E. Jansen nfields = 4; 6259599516SKenneth E. Jansen numparts = workfc.numpe; 6359599516SKenneth E. Jansen nprocs= workfc.numpe; 6459599516SKenneth E. Jansen 6559599516SKenneth E. Jansen int nppf = numparts/nfiles; 6659599516SKenneth E. Jansen int GPID; 6759599516SKenneth E. Jansen 6859599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 6959599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 7059599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 7159599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 7259599516SKenneth E. Jansen 7359599516SKenneth E. Jansen int descriptor; 7459599516SKenneth E. Jansen char filename[255],fieldtag_s[255]; 7559599516SKenneth E. Jansen bzero((void*)filename,255); 7659599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 7759599516SKenneth E. Jansen 7859599516SKenneth E. Jansen sprintf(filename,"restartRed-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1)); 7959599516SKenneth E. Jansen if (*pid==0) { 8059599516SKenneth E. Jansen printf("Filename is %s \n",filename); 8159599516SKenneth E. Jansen } 8259599516SKenneth E. Jansen 8359599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write"); 8459599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor); 8559599516SKenneth E. Jansen 8659599516SKenneth E. Jansen // solution 8759599516SKenneth E. Jansen int i; 8859599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 8959599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 9059599516SKenneth E. Jansen // e.g : (in this example) 9159599516SKenneth E. Jansen // proc 0 : 1--4 9259599516SKenneth E. Jansen // proc 1 : 5--8 ... 9359599516SKenneth E. Jansen GPID = startpart + i; 9459599516SKenneth E. Jansen 9559599516SKenneth E. Jansen // Write solution field ... 9659599516SKenneth E. Jansen sprintf(fieldtag_s,"solution@%d",GPID); 9759599516SKenneth E. Jansen 9859599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 9959599516SKenneth E. Jansen nitems = 3; 10059599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 10159599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 10259599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 10359599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 10459599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype ); 10559599516SKenneth E. Jansen } 10659599516SKenneth E. Jansen 10759599516SKenneth E. Jansen // ybar 10859599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 10959599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 11059599516SKenneth E. Jansen // e.g : (in this example) 11159599516SKenneth E. Jansen // proc 0 : 1--4 11259599516SKenneth E. Jansen // proc 1 : 5--8 ... 11359599516SKenneth E. Jansen GPID = startpart + i; 11459599516SKenneth E. Jansen 11559599516SKenneth E. Jansen // Write solution field ... 11659599516SKenneth E. Jansen sprintf(fieldtag_s,"ybar@%d",GPID); 11759599516SKenneth E. Jansen 11859599516SKenneth E. Jansen isize = (*nshg)*(*ndofybar); 11959599516SKenneth E. Jansen nitems = 3; 12059599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 12159599516SKenneth E. Jansen iarray[ 1 ] = (*ndofybar); 12259599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 12359599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 12459599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array2), &isize, "double", phasta_iotype ); 12559599516SKenneth E. Jansen } 12659599516SKenneth E. Jansen 12759599516SKenneth E. Jansen // errors 12859599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 12959599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 13059599516SKenneth E. Jansen // e.g : (in this example) 13159599516SKenneth E. Jansen // proc 0 : 1--4 13259599516SKenneth E. Jansen // proc 1 : 5--8 ... 13359599516SKenneth E. Jansen GPID = startpart + i; 13459599516SKenneth E. Jansen 13559599516SKenneth E. Jansen // Write solution field ... 13659599516SKenneth E. Jansen sprintf(fieldtag_s,"errors@%d",GPID); 13759599516SKenneth E. Jansen 13859599516SKenneth E. Jansen isize = (*nshg)*(*ndoferrors); 13959599516SKenneth E. Jansen nitems = 3; 14059599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 14159599516SKenneth E. Jansen iarray[ 1 ] = (*ndoferrors); 14259599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 14359599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 14459599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array3), &isize, "double", phasta_iotype ); 14559599516SKenneth E. Jansen } 14659599516SKenneth E. Jansen 14759599516SKenneth E. Jansen // dwal 14859599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 14959599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 15059599516SKenneth E. Jansen // e.g : (in this example) 15159599516SKenneth E. Jansen // proc 0 : 1--4 15259599516SKenneth E. Jansen // proc 1 : 5--8 ... 15359599516SKenneth E. Jansen GPID = startpart + i; 15459599516SKenneth E. Jansen 15559599516SKenneth E. Jansen // Write solution field ... 15659599516SKenneth E. Jansen sprintf(fieldtag_s,"dwal@%d",GPID); 15759599516SKenneth E. Jansen 15859599516SKenneth E. Jansen isize = (*nshg)*1; 15959599516SKenneth E. Jansen nitems = 3; 16059599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 16159599516SKenneth E. Jansen iarray[ 1 ] = 1; 16259599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 16359599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 16459599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array4), &isize, "double", phasta_iotype ); 16559599516SKenneth E. Jansen } 16659599516SKenneth E. Jansen 16759599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 16859599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 16959599516SKenneth E. Jansen 17059599516SKenneth E. Jansen return; 17159599516SKenneth E. Jansen } 17259599516SKenneth E. Jansen 17359599516SKenneth E. Jansen void 17459599516SKenneth E. Jansen Write_M2NFixBnd_SolOnly(int* pid, 17559599516SKenneth E. Jansen int* stepno, 17659599516SKenneth E. Jansen int* nshg, 17759599516SKenneth E. Jansen int* numVars, 17859599516SKenneth E. Jansen double* array1 ) { 17959599516SKenneth E. Jansen 18059599516SKenneth E. Jansen char fname[255]; 18159599516SKenneth E. Jansen char rfile[60]; 18259599516SKenneth E. Jansen char existingfile[30], linkfile[30]; 18359599516SKenneth E. Jansen int irstou; 18459599516SKenneth E. Jansen int magic_number = 362436; 18559599516SKenneth E. Jansen int* mptr = &magic_number; 18659599516SKenneth E. Jansen double version=0.0; 18759599516SKenneth E. Jansen int isize, nitems; 18859599516SKenneth E. Jansen int iarray[10]; 18959599516SKenneth E. Jansen int nfiles; 19059599516SKenneth E. Jansen int nfields; 19159599516SKenneth E. Jansen int numparts; 19259599516SKenneth E. Jansen int irank; 19359599516SKenneth E. Jansen int nprocs; 19459599516SKenneth E. Jansen 19559599516SKenneth E. Jansen // First, count the number of fields to write and store the result in 19659599516SKenneth E. Jansen //countfieldstowriterestart(); 19759599516SKenneth E. Jansen 19859599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO 19959599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 20059599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 20159599516SKenneth E. Jansen numparts = workfc.numpe; 20259599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 20359599516SKenneth E. Jansen nprocs = workfc.numpe; 20459599516SKenneth E. Jansen int nppf = numparts/nfiles; 20559599516SKenneth E. Jansen int GPID; 20659599516SKenneth E. Jansen 20759599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 20859599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 20959599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 21059599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 21159599516SKenneth E. Jansen 21259599516SKenneth E. Jansen int descriptor; 21359599516SKenneth E. Jansen char filename[255],fieldtag_s[255]; 21459599516SKenneth E. Jansen bzero((void*)filename,255); 21559599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 21659599516SKenneth E. Jansen 21759599516SKenneth E. Jansen sprintf(filename,"restartRed-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1)); 21859599516SKenneth E. Jansen 21959599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write"); 22059599516SKenneth E. Jansen 22159599516SKenneth E. Jansen if (*pid==0) { 22259599516SKenneth E. Jansen printf("Filename is %s \n",filename); 22359599516SKenneth E. Jansen } 22459599516SKenneth E. Jansen 22559599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor); 22659599516SKenneth E. Jansen 22759599516SKenneth E. Jansen field_flag=0; 22859599516SKenneth E. Jansen 22959599516SKenneth E. Jansen int i; 23059599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 23159599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 23259599516SKenneth E. Jansen // e.g : (in this example) 23359599516SKenneth E. Jansen // proc 0 : 1--4 23459599516SKenneth E. Jansen // proc 1 : 5--8 ... 23559599516SKenneth E. Jansen GPID = startpart + i; 23659599516SKenneth E. Jansen 23759599516SKenneth E. Jansen // Write solution field ... 23859599516SKenneth E. Jansen sprintf(fieldtag_s,"solution@%d",GPID); 23959599516SKenneth E. Jansen 24059599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 24159599516SKenneth E. Jansen nitems = 3; 24259599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 24359599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 24459599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 24559599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 24659599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype ); 24759599516SKenneth E. Jansen 24859599516SKenneth E. Jansen } 24959599516SKenneth E. Jansen field_flag++; 25059599516SKenneth E. Jansen 25159599516SKenneth E. Jansen if (field_flag==nfields){ 25259599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 25359599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 25459599516SKenneth E. Jansen if (*pid==0) { 25559599516SKenneth E. Jansen printf("\n"); 25659599516SKenneth E. Jansen } 25759599516SKenneth E. Jansen } 25859599516SKenneth E. Jansen } 25959599516SKenneth E. Jansen 26059599516SKenneth E. Jansen 26159599516SKenneth E. Jansen 26259599516SKenneth E. Jansen void 26359599516SKenneth E. Jansen Write_Restart( int* pid, 26459599516SKenneth E. Jansen int* stepno, 26559599516SKenneth E. Jansen int* nshg, 26659599516SKenneth E. Jansen int* numVars, 26759599516SKenneth E. Jansen double* array1, 26859599516SKenneth E. Jansen double* array2 ) { 26959599516SKenneth E. Jansen 27059599516SKenneth E. Jansen char fname[255]; 27159599516SKenneth E. Jansen char rfile[60]; 27259599516SKenneth E. Jansen char existingfile[30], linkfile[30]; 27359599516SKenneth E. Jansen int irstou; 27459599516SKenneth E. Jansen int magic_number = 362436; 27559599516SKenneth E. Jansen int* mptr = &magic_number; 27659599516SKenneth E. Jansen double version=0.0; 27759599516SKenneth E. Jansen int isize, nitems; 27859599516SKenneth E. Jansen int iarray[10]; 27959599516SKenneth E. Jansen int nfiles; 28059599516SKenneth E. Jansen int nfields; 28159599516SKenneth E. Jansen int numparts; 28259599516SKenneth E. Jansen int irank; 28359599516SKenneth E. Jansen int nprocs; 28459599516SKenneth E. Jansen 28559599516SKenneth E. Jansen // First, count the number of fields to write and store the result in 28659599516SKenneth E. Jansen //countfieldstowriterestart(); 28759599516SKenneth E. Jansen 28859599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO 28959599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 29059599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 29159599516SKenneth E. Jansen numparts = workfc.numpe; 29259599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 29359599516SKenneth E. Jansen nprocs = workfc.numpe; 29459599516SKenneth E. Jansen int nppf = numparts/nfiles; 29559599516SKenneth E. Jansen int GPID; 29659599516SKenneth E. Jansen 29759599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 29859599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 29959599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 30059599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 30159599516SKenneth E. Jansen 30259599516SKenneth E. Jansen int descriptor; 30359599516SKenneth E. Jansen char filename[255],fieldtag_s[255]; 30459599516SKenneth E. Jansen bzero((void*)filename,255); 30559599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 30659599516SKenneth E. Jansen 30759599516SKenneth E. Jansen sprintf(filename,"restart-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1)); 30859599516SKenneth E. Jansen 30959599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write"); 31059599516SKenneth E. Jansen 31159599516SKenneth E. Jansen if (*pid==0) { 31259599516SKenneth E. Jansen printf("Filename is %s \n",filename); 31359599516SKenneth E. Jansen } 31459599516SKenneth E. Jansen 31559599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor); 31659599516SKenneth E. Jansen 31759599516SKenneth E. Jansen field_flag=0; 31859599516SKenneth E. Jansen 31959599516SKenneth E. Jansen int i; 32059599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 32159599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 32259599516SKenneth E. Jansen // e.g : (in this example) 32359599516SKenneth E. Jansen // proc 0 : 1--4 32459599516SKenneth E. Jansen // proc 1 : 5--8 ... 32559599516SKenneth E. Jansen GPID = startpart + i; 32659599516SKenneth E. Jansen 32759599516SKenneth E. Jansen // Write solution field ... 32859599516SKenneth E. Jansen sprintf(fieldtag_s,"solution@%d",GPID); 32959599516SKenneth E. Jansen 33059599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 33159599516SKenneth E. Jansen nitems = 3; 33259599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 33359599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 33459599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 33559599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 33659599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype ); 33759599516SKenneth E. Jansen } 33859599516SKenneth E. Jansen field_flag++; 33959599516SKenneth E. Jansen 34059599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { 34159599516SKenneth E. Jansen 34259599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 34359599516SKenneth E. Jansen // e.g : (in this example) 34459599516SKenneth E. Jansen // proc 0 : 1--4 34559599516SKenneth E. Jansen // proc 1 : 5--8 ... 34659599516SKenneth E. Jansen GPID = startpart + i; 34759599516SKenneth E. Jansen 34859599516SKenneth E. Jansen // Write solution field ... 34959599516SKenneth E. Jansen sprintf(fieldtag_s,"time derivative of solution@%d",GPID); 35059599516SKenneth E. Jansen 35159599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 35259599516SKenneth E. Jansen nitems = 3; 35359599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 35459599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 35559599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 35659599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 35759599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array2), &isize, "double", phasta_iotype ); 35859599516SKenneth E. Jansen } 35959599516SKenneth E. Jansen field_flag++; 36059599516SKenneth E. Jansen 36159599516SKenneth E. Jansen if (field_flag==nfields){ 36259599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 36359599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 36459599516SKenneth E. Jansen if (*pid==0) { 36559599516SKenneth E. Jansen printf("\n"); 36659599516SKenneth E. Jansen } 36759599516SKenneth E. Jansen } 36859599516SKenneth E. Jansen } 36959599516SKenneth E. Jansen 37059599516SKenneth E. Jansen 37159599516SKenneth E. Jansen void 37259599516SKenneth E. Jansen Write_Error( int* pid, 37359599516SKenneth E. Jansen int* stepno, 37459599516SKenneth E. Jansen int* nshg, 37559599516SKenneth E. Jansen int* numVars, 37659599516SKenneth E. Jansen double* array1 ) { 37759599516SKenneth E. Jansen 37859599516SKenneth E. Jansen 37959599516SKenneth E. Jansen char fname[255]; 38059599516SKenneth E. Jansen char rfile[60]; 38159599516SKenneth E. Jansen int irstou; 38259599516SKenneth E. Jansen int magic_number = 362436; 38359599516SKenneth E. Jansen int* mptr = &magic_number; 38459599516SKenneth E. Jansen double version=0.0; 38559599516SKenneth E. Jansen int isize, nitems; 38659599516SKenneth E. Jansen int iarray[10]; 38759599516SKenneth E. Jansen 38859599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 38959599516SKenneth E. Jansen 39059599516SKenneth E. Jansen int nfiles; 39159599516SKenneth E. Jansen int nfields; 39259599516SKenneth E. Jansen int numparts; 39359599516SKenneth E. Jansen int irank; 39459599516SKenneth E. Jansen int nprocs; 39559599516SKenneth E. Jansen 39659599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 39759599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 39859599516SKenneth E. Jansen numparts = workfc.numpe; 39959599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 40059599516SKenneth E. Jansen nprocs = workfc.numpe; 40159599516SKenneth E. Jansen 40259599516SKenneth E. Jansen int nppf = numparts/nfiles; 40359599516SKenneth E. Jansen int GPID; 40459599516SKenneth E. Jansen 40559599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 40659599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 40759599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 40859599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 40959599516SKenneth E. Jansen 41059599516SKenneth E. Jansen field_flag++; 41159599516SKenneth E. Jansen 41259599516SKenneth E. Jansen char fieldtag[255]; 41359599516SKenneth E. Jansen 41459599516SKenneth E. Jansen int i; 41559599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) { 41659599516SKenneth E. Jansen GPID = startpart + i; 41759599516SKenneth E. Jansen sprintf(fieldtag,"errors@%d",GPID); 41859599516SKenneth E. Jansen 41959599516SKenneth E. Jansen if(*pid==0) { 42059599516SKenneth E. Jansen printf("\n"); 42159599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldtag); 42259599516SKenneth E. Jansen } 42359599516SKenneth E. Jansen 42459599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 42559599516SKenneth E. Jansen nitems = 3; 42659599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 42759599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 42859599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 42959599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 43059599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag, (void*)array1, &isize, "double", phasta_iotype ); 43159599516SKenneth E. Jansen } 43259599516SKenneth E. Jansen 43359599516SKenneth E. Jansen if (field_flag==nfields){ 43459599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 43559599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 43659599516SKenneth E. Jansen if (*pid==0) { 43759599516SKenneth E. Jansen printf("Last field %d '%s' finished! \n",nfields, fieldtag); 43859599516SKenneth E. Jansen printf("\n"); 43959599516SKenneth E. Jansen } 44059599516SKenneth E. Jansen } 44159599516SKenneth E. Jansen 44259599516SKenneth E. Jansen } 44359599516SKenneth E. Jansen 44459599516SKenneth E. Jansen void 44559599516SKenneth E. Jansen Write_Displ( int* pid, 44659599516SKenneth E. Jansen int* stepno, 44759599516SKenneth E. Jansen int* nshg, 44859599516SKenneth E. Jansen int* numVars, 44959599516SKenneth E. Jansen double* array1 ) { //TO BE UPDATED FOR SYNCIO 45059599516SKenneth E. Jansen 45159599516SKenneth E. Jansen 45259599516SKenneth E. Jansen char fname[255]; 45359599516SKenneth E. Jansen char rfile[60]; 45459599516SKenneth E. Jansen int irstou; 45559599516SKenneth E. Jansen int magic_number = 362436; 45659599516SKenneth E. Jansen int* mptr = &magic_number; 45759599516SKenneth E. Jansen time_t timenow = time ( &timenow); 45859599516SKenneth E. Jansen double version=0.0; 45959599516SKenneth E. Jansen int isize, nitems; 46059599516SKenneth E. Jansen int iarray[10]; 46159599516SKenneth E. Jansen 46259599516SKenneth E. Jansen sprintf(rfile,"restart.%d.%d",*stepno,*pid+1); 46359599516SKenneth E. Jansen openfile(rfile,"append", &irstou); 46459599516SKenneth E. Jansen 46559599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 46659599516SKenneth E. Jansen nitems = 3; 46759599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 46859599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 46959599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 47059599516SKenneth E. Jansen writeheader( &irstou, "displacement", (void*)iarray, &nitems, &isize, "double", phasta_iotype ); 47159599516SKenneth E. Jansen writedatablock( &irstou, "displacement", (void*)(array1), &isize, "double", phasta_iotype ); 47259599516SKenneth E. Jansen 47359599516SKenneth E. Jansen closefile( &irstou, "append" ); 47459599516SKenneth E. Jansen } 47559599516SKenneth E. Jansen 47659599516SKenneth E. Jansen void 47759599516SKenneth E. Jansen Write_Field( int *pid, 47859599516SKenneth E. Jansen char* filemode, 47959599516SKenneth E. Jansen char* fieldtag, 48059599516SKenneth E. Jansen int* tagsize, 48159599516SKenneth E. Jansen void* array, 48259599516SKenneth E. Jansen char* arraytype, 48359599516SKenneth E. Jansen int* nshg, 48459599516SKenneth E. Jansen int* numvars, 48559599516SKenneth E. Jansen int* stepno) { 48659599516SKenneth E. Jansen 48759599516SKenneth E. Jansen //printf("Rank is %d, field is %s, tagsize is %d, nshg is %d, numvars is %d\n",*pid,fieldtag,*tagsize,*nshg,*numvars); 48859599516SKenneth E. Jansen 48959599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((*tagsize+1)*sizeof(char)); 49059599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 49159599516SKenneth E. Jansen fieldlabel[*tagsize] = '\0'; 49259599516SKenneth E. Jansen 49359599516SKenneth E. Jansen int irstou; 49459599516SKenneth E. Jansen int magic_number = 362436; 49559599516SKenneth E. Jansen int* mptr = &magic_number; 49659599516SKenneth E. Jansen double version=0.0; 49759599516SKenneth E. Jansen int isize, nitems; 49859599516SKenneth E. Jansen int iarray[10]; 49959599516SKenneth E. Jansen 50059599516SKenneth E. Jansen char fmode[10]; 50159599516SKenneth E. Jansen if(!strncmp(filemode,"w",1)) 50259599516SKenneth E. Jansen strcpy(fmode,"write"); 50359599516SKenneth E. Jansen else // default is append 50459599516SKenneth E. Jansen strcpy(fmode,"append"); 50559599516SKenneth E. Jansen 50659599516SKenneth E. Jansen char datatype[10]; 50759599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1)) 50859599516SKenneth E. Jansen strcpy(datatype,"int"); 50959599516SKenneth E. Jansen else // default is double 51059599516SKenneth E. Jansen strcpy(datatype,"double"); 51159599516SKenneth E. Jansen 51259599516SKenneth E. Jansen // Old posix format 51359599516SKenneth E. Jansen /* openfile_(rfile, fmode, &irstou); 51459599516SKenneth E. Jansen 51559599516SKenneth E. Jansen nitems = 3; // assuming field will write 3 items in iarray 51659599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 51759599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 51859599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 51959599516SKenneth E. Jansen 52059599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 52159599516SKenneth E. Jansen writeheader_( &irstou, fieldlabel, (void*)iarray, &nitems, &isize, datatype, phasta_iotype ); 52259599516SKenneth E. Jansen 52359599516SKenneth E. Jansen nitems = (*nshg)*(*numvars); 52459599516SKenneth E. Jansen writedatablock_( &irstou, fieldlabel, array, &nitems, datatype, phasta_iotype ); 52559599516SKenneth E. Jansen closefile_( &irstou, fmode); 52659599516SKenneth E. Jansen */ 52759599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 52859599516SKenneth E. Jansen 52959599516SKenneth E. Jansen int nfiles; 53059599516SKenneth E. Jansen int nfields; 53159599516SKenneth E. Jansen int numparts; 53259599516SKenneth E. Jansen int irank; 53359599516SKenneth E. Jansen int nprocs; 53459599516SKenneth E. Jansen 53559599516SKenneth E. Jansen // unsigned long long timer_start; 53659599516SKenneth E. Jansen // unsigned long long timer_end; 53759599516SKenneth E. Jansen // double time_span; 53859599516SKenneth E. Jansen 53959599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 54059599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 54159599516SKenneth E. Jansen numparts = workfc.numpe; 54259599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 54359599516SKenneth E. Jansen nprocs = workfc.numpe; 54459599516SKenneth E. Jansen 54559599516SKenneth E. Jansen int nppf = numparts/nfiles; 54659599516SKenneth E. Jansen int GPID; 54759599516SKenneth E. Jansen 54859599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 54959599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 55059599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 55159599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 55259599516SKenneth E. Jansen 55359599516SKenneth E. Jansen char fieldtag_s[255]; 55459599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 55559599516SKenneth E. Jansen 55659599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 55759599516SKenneth E. Jansen 55859599516SKenneth E. Jansen field_flag++; 55959599516SKenneth E. Jansen if(*pid==0) { 56059599516SKenneth E. Jansen printf("\n"); 56159599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldlabel); 56259599516SKenneth E. Jansen } 56359599516SKenneth E. Jansen 56459599516SKenneth E. Jansen int i; 56559599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) { 56659599516SKenneth E. Jansen GPID = startpart + i; 56759599516SKenneth E. Jansen 56859599516SKenneth E. Jansen // Write solution field ... 56959599516SKenneth E. Jansen sprintf(fieldtag_s,"%s@%d",fieldlabel,GPID); 57059599516SKenneth E. Jansen 57159599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 57259599516SKenneth E. Jansen nitems = 3; 57359599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 57459599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 57559599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 57659599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, datatype, phasta_iotype); 57759599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, array, &isize, datatype, phasta_iotype ); 57859599516SKenneth E. Jansen } 57959599516SKenneth E. Jansen 58059599516SKenneth E. Jansen if (field_flag==nfields){ 58159599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 58259599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 58359599516SKenneth E. Jansen if (*pid==0) { 58459599516SKenneth E. Jansen printf("Last field %d '%s' finished! \n",nfields, fieldtag); 58559599516SKenneth E. Jansen printf("\n"); 58659599516SKenneth E. Jansen } 58759599516SKenneth E. Jansen } 58859599516SKenneth E. Jansen 58959599516SKenneth E. Jansen free(fieldlabel); 59059599516SKenneth E. Jansen } 59159599516SKenneth E. Jansen 59259599516SKenneth E. Jansen void 59359599516SKenneth E. Jansen Write_PhAvg( int* pid, 59459599516SKenneth E. Jansen char* filemode, 59559599516SKenneth E. Jansen char* fieldtag, 59659599516SKenneth E. Jansen int* tagsize, 59759599516SKenneth E. Jansen int* iphase, 59859599516SKenneth E. Jansen void* array, 59959599516SKenneth E. Jansen char* arraytype, 60059599516SKenneth E. Jansen int* nshg, 60159599516SKenneth E. Jansen int* numvars, 60259599516SKenneth E. Jansen int* stepno) { 60359599516SKenneth E. Jansen 60459599516SKenneth E. Jansen char rfile[32]; 60559599516SKenneth E. Jansen // assuming restart_phase_avg_<sn>.<iphase>.<pid+1> 60659599516SKenneth E. Jansen sprintf(rfile,"restart_phase_avg_%d.%d.%d",*stepno,*iphase,*pid+1); 60759599516SKenneth E. Jansen 60859599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((*tagsize+1)*sizeof(char)); 60959599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 61059599516SKenneth E. Jansen fieldlabel[*tagsize] = '\0'; 61159599516SKenneth E. Jansen 61259599516SKenneth E. Jansen int irstou; 61359599516SKenneth E. Jansen int isize, nitems; 61459599516SKenneth E. Jansen int iarray[10]; 61559599516SKenneth E. Jansen 61659599516SKenneth E. Jansen char fmode[10]; 61759599516SKenneth E. Jansen if(!strncmp(filemode,"w",1)) 61859599516SKenneth E. Jansen strcpy(fmode,"write"); 61959599516SKenneth E. Jansen else // default is append 62059599516SKenneth E. Jansen strcpy(fmode,"append"); 62159599516SKenneth E. Jansen 62259599516SKenneth E. Jansen char datatype[10]; 62359599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1)) 62459599516SKenneth E. Jansen strcpy(datatype,"int"); 62559599516SKenneth E. Jansen else // default is double 62659599516SKenneth E. Jansen strcpy(datatype,"double"); 62759599516SKenneth E. Jansen 62859599516SKenneth E. Jansen openfile(rfile, fmode, &irstou); 62959599516SKenneth E. Jansen 63059599516SKenneth E. Jansen if(!strcmp(fmode,"write")) { 63159599516SKenneth E. Jansen // may be create a routine for 'top' portion under write mode 63259599516SKenneth E. Jansen int magic_number = 362436; 63359599516SKenneth E. Jansen int* mptr = &magic_number; 63459599516SKenneth E. Jansen time_t timenow = time ( &timenow); 63559599516SKenneth E. Jansen double version=0.0; 63659599516SKenneth E. Jansen 63759599516SKenneth E. Jansen /* writing the top ascii header for the restart file */ 63859599516SKenneth E. Jansen 63959599516SKenneth E. Jansen writestring( &irstou,"# PHASTA Input File Version 2.0\n"); 64059599516SKenneth E. Jansen writestring( &irstou, 64159599516SKenneth E. Jansen "# format \"keyphrase : sizeofnextblock usual headers\"\n"); 64259599516SKenneth E. Jansen 64359599516SKenneth E. Jansen char fname[255]; 64459599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 64559599516SKenneth E. Jansen sprintf(fname,"# Output generated by phasta version (NOT YET CURRENT): %lf \n", version); 64659599516SKenneth E. Jansen writestring( &irstou, fname ); 64759599516SKenneth E. Jansen 64859599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 64959599516SKenneth E. Jansen gethostname(fname,255); 65059599516SKenneth E. Jansen writestring( &irstou,"# This result was produced on: "); 65159599516SKenneth E. Jansen writestring( &irstou, fname ); 65259599516SKenneth E. Jansen writestring( &irstou,"\n"); 65359599516SKenneth E. Jansen 65459599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 65559599516SKenneth E. Jansen sprintf(fname,"# %s\n", ctime( &timenow )); 65659599516SKenneth E. Jansen writestring( &irstou, fname ); 65759599516SKenneth E. Jansen 65859599516SKenneth E. Jansen isize = 1; 65959599516SKenneth E. Jansen nitems = 1; 66059599516SKenneth E. Jansen iarray[ 0 ] = 1; 66159599516SKenneth E. Jansen writeheader( &irstou, "byteorder magic number ", 66259599516SKenneth E. Jansen (void*)iarray, &nitems, &isize, "integer", phasta_iotype ); 66359599516SKenneth E. Jansen writedatablock( &irstou, "byteorder magic number ", 66459599516SKenneth E. Jansen (void*)mptr, &isize, "integer", phasta_iotype ); 66559599516SKenneth E. Jansen } 66659599516SKenneth E. Jansen 66759599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 66859599516SKenneth E. Jansen nitems = 3; // assuming field will write 3 items in iarray 66959599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 67059599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 67159599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 67259599516SKenneth E. Jansen writeheader( &irstou, fieldlabel, (void*)iarray, &nitems, &isize, datatype, phasta_iotype ); 67359599516SKenneth E. Jansen writedatablock( &irstou, fieldlabel, array, &isize, datatype, phasta_iotype ); 67459599516SKenneth E. Jansen 67559599516SKenneth E. Jansen closefile( &irstou, fmode); 67659599516SKenneth E. Jansen 67759599516SKenneth E. Jansen free(fieldlabel); 67859599516SKenneth E. Jansen } 67959599516SKenneth E. Jansen 68059599516SKenneth E. Jansen void 68159599516SKenneth E. Jansen Write_PhAvg2( int* pid, 68259599516SKenneth E. Jansen char* filemode, 68359599516SKenneth E. Jansen char* fieldtag, 68459599516SKenneth E. Jansen int* tagsize, 68559599516SKenneth E. Jansen int* iphase, 68659599516SKenneth E. Jansen int* nphasesincycle, 68759599516SKenneth E. Jansen void* array, 68859599516SKenneth E. Jansen char* arraytype, 68959599516SKenneth E. Jansen int* nshg, 69059599516SKenneth E. Jansen int* numvars, 69159599516SKenneth E. Jansen int* stepno) { 69259599516SKenneth E. Jansen 693*3de22adcSCameron Smith int addtagsize=0; // phase number is added to the name of the field 69459599516SKenneth E. Jansen if(*iphase<10) 69559599516SKenneth E. Jansen addtagsize=1; 69659599516SKenneth E. Jansen else if(*iphase<100) 69759599516SKenneth E. Jansen addtagsize=2; 69859599516SKenneth E. Jansen else if(*iphase<1000) 69959599516SKenneth E. Jansen addtagsize=3; 70059599516SKenneth E. Jansen 70159599516SKenneth E. Jansen int tagsize2; 70259599516SKenneth E. Jansen tagsize2=*tagsize+addtagsize; 70359599516SKenneth E. Jansen 70459599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((tagsize2+1)*sizeof(char)); 70559599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 70659599516SKenneth E. Jansen fieldlabel[tagsize2] = '\0'; 70759599516SKenneth E. Jansen 70859599516SKenneth E. Jansen char straddtagsize[10]; 70959599516SKenneth E. Jansen sprintf(straddtagsize,"%d",*iphase); 71059599516SKenneth E. Jansen 71159599516SKenneth E. Jansen if(*iphase<10) { 71259599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[0]; 71359599516SKenneth E. Jansen } 71459599516SKenneth E. Jansen else if(*iphase<100) { 71559599516SKenneth E. Jansen fieldlabel[tagsize2-2]=straddtagsize[0]; 71659599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[1]; 71759599516SKenneth E. Jansen } 71859599516SKenneth E. Jansen else if(*iphase<1000) { 71959599516SKenneth E. Jansen fieldlabel[tagsize2-3]=straddtagsize[0]; 72059599516SKenneth E. Jansen fieldlabel[tagsize2-2]=straddtagsize[1]; 72159599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[2]; 72259599516SKenneth E. Jansen } 72359599516SKenneth E. Jansen 72459599516SKenneth E. Jansen int irstou; 72559599516SKenneth E. Jansen int magic_number = 362436; 72659599516SKenneth E. Jansen int* mptr = &magic_number; 72759599516SKenneth E. Jansen double version=0.0; 72859599516SKenneth E. Jansen int isize, nitems; 72959599516SKenneth E. Jansen int iarray[10]; 73059599516SKenneth E. Jansen 73159599516SKenneth E. Jansen char fmode[10]; 73259599516SKenneth E. Jansen if(!strncmp(filemode,"w",1)) 73359599516SKenneth E. Jansen strcpy(fmode,"write"); 73459599516SKenneth E. Jansen else // default is append 73559599516SKenneth E. Jansen strcpy(fmode,"append"); 73659599516SKenneth E. Jansen 73759599516SKenneth E. Jansen char datatype[10]; 73859599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1)) 73959599516SKenneth E. Jansen strcpy(datatype,"int"); 74059599516SKenneth E. Jansen else // default is double 74159599516SKenneth E. Jansen strcpy(datatype,"double"); 74259599516SKenneth E. Jansen 74359599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 74459599516SKenneth E. Jansen 74559599516SKenneth E. Jansen int nfiles; 74659599516SKenneth E. Jansen int nfields; 74759599516SKenneth E. Jansen int numparts; 74859599516SKenneth E. Jansen int irank; 74959599516SKenneth E. Jansen int nprocs; 75059599516SKenneth E. Jansen 75159599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 75259599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 75359599516SKenneth E. Jansen numparts = workfc.numpe; 75459599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 75559599516SKenneth E. Jansen nprocs = workfc.numpe; 75659599516SKenneth E. Jansen 75759599516SKenneth E. Jansen int nppf = numparts/nfiles; 75859599516SKenneth E. Jansen int GPID; 75959599516SKenneth E. Jansen 76059599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 76159599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 76259599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 76359599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 76459599516SKenneth E. Jansen 76559599516SKenneth E. Jansen char fieldtag_s[255]; 76659599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 76759599516SKenneth E. Jansen 76859599516SKenneth E. Jansen field_flag++; 76959599516SKenneth E. Jansen if(*pid==0) { 77059599516SKenneth E. Jansen printf("\n"); 77159599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldlabel); 77259599516SKenneth E. Jansen } 77359599516SKenneth E. Jansen 77459599516SKenneth E. Jansen int i; 77559599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) { 77659599516SKenneth E. Jansen GPID = startpart + i; 77759599516SKenneth E. Jansen 77859599516SKenneth E. Jansen // Write solution field ... 77959599516SKenneth E. Jansen sprintf(fieldtag_s,"%s@%d",fieldlabel,GPID); 78059599516SKenneth E. Jansen 78159599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 78259599516SKenneth E. Jansen nitems = 3; 78359599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 78459599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 78559599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 78659599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 78759599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, array, &isize, "double", phasta_iotype ); 78859599516SKenneth E. Jansen } 78959599516SKenneth E. Jansen 79059599516SKenneth E. Jansen if (field_flag==nfields){ 79159599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 79259599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 79359599516SKenneth E. Jansen if (*pid==0) { 79459599516SKenneth E. Jansen printf("\n"); 79559599516SKenneth E. Jansen } 79659599516SKenneth E. Jansen } 79759599516SKenneth E. Jansen 79859599516SKenneth E. Jansen free(fieldlabel); 79959599516SKenneth E. Jansen } 80059599516SKenneth E. Jansen 80159599516SKenneth E. Jansen 80259599516SKenneth E. Jansen void 80359599516SKenneth E. Jansen Write_d2wall( int* pid, 80459599516SKenneth E. Jansen int* numnp, 80559599516SKenneth E. Jansen double* array1 ) { 80659599516SKenneth E. Jansen 80759599516SKenneth E. Jansen int isize, nitems; 80859599516SKenneth E. Jansen int iarray[10]; 80959599516SKenneth E. Jansen 81059599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 81159599516SKenneth E. Jansen 81259599516SKenneth E. Jansen int nfiles; 81359599516SKenneth E. Jansen int nfields; 81459599516SKenneth E. Jansen int numparts; 81559599516SKenneth E. Jansen int irank; 81659599516SKenneth E. Jansen int nprocs; 81759599516SKenneth E. Jansen 81859599516SKenneth E. Jansen // First, count the number of fields to write and store the result in 81959599516SKenneth E. Jansen //countfieldstowriterestart(); 82059599516SKenneth E. Jansen 82159599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO 82259599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 82359599516SKenneth E. Jansen nfields = 1; //outpar.nsynciofieldswriterestart; // Only the distance to the walls in d2wall 82459599516SKenneth E. Jansen numparts = workfc.numpe; 82559599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 82659599516SKenneth E. Jansen nprocs = workfc.numpe; 82759599516SKenneth E. Jansen int nppf = numparts/nfiles; 82859599516SKenneth E. Jansen int GPID; 82959599516SKenneth E. Jansen 83059599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 83159599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 83259599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 83359599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 83459599516SKenneth E. Jansen 83559599516SKenneth E. Jansen int descriptor; 83659599516SKenneth E. Jansen char filename[255],fieldtag_s[255]; 83759599516SKenneth E. Jansen bzero((void*)filename,255); 83859599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 83959599516SKenneth E. Jansen 84059599516SKenneth E. Jansen sprintf(filename,"d2wall.%d",((int)(irank/(nprocs/nfiles))+1)); 84159599516SKenneth E. Jansen 84259599516SKenneth E. Jansen if (irank==0) { 84359599516SKenneth E. Jansen printf("Filename is %s \n",filename); 84459599516SKenneth E. Jansen } 84559599516SKenneth E. Jansen 84659599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write"); 84759599516SKenneth E. Jansen 84859599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor); 84959599516SKenneth E. Jansen 85059599516SKenneth E. Jansen field_flag=0; 85159599516SKenneth E. Jansen 85259599516SKenneth E. Jansen int i; 85359599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 85459599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 85559599516SKenneth E. Jansen // e.g : (in this example) 85659599516SKenneth E. Jansen // proc 0 : 1--4 85759599516SKenneth E. Jansen // proc 1 : 5--8 ... 85859599516SKenneth E. Jansen GPID = startpart + i; 85959599516SKenneth E. Jansen 86059599516SKenneth E. Jansen // Write solution field ... 86159599516SKenneth E. Jansen sprintf(fieldtag_s,"d2wall@%d",GPID); 86259599516SKenneth E. Jansen 86359599516SKenneth E. Jansen isize = (*numnp); 86459599516SKenneth E. Jansen nitems = 2; 86559599516SKenneth E. Jansen iarray[ 0 ] = (*numnp); 86659599516SKenneth E. Jansen iarray[ 1 ] = 1; //numVars = 1 86759599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 86859599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype ); 86959599516SKenneth E. Jansen } 87059599516SKenneth E. Jansen field_flag++; 87159599516SKenneth E. Jansen 87259599516SKenneth E. Jansen if (field_flag==nfields){ 87359599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 87459599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 87559599516SKenneth E. Jansen if (irank==0) { 87659599516SKenneth E. Jansen printf("\n"); 87759599516SKenneth E. Jansen } 87859599516SKenneth E. Jansen } 87959599516SKenneth E. Jansen } 88059599516SKenneth E. Jansen 881