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