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 "rdtsc.h" 1559599516SKenneth E. Jansen #include <FCMangle.h> 1659599516SKenneth E. Jansen #include "new_interface.h" 1759599516SKenneth E. Jansen 1859599516SKenneth E. Jansen //MR CHANGE 1959599516SKenneth E. Jansen #include "common_c.h" 2059599516SKenneth E. Jansen //MR CHANGE END 2159599516SKenneth E. Jansen 2259599516SKenneth E. Jansen #ifdef intel 2359599516SKenneth E. Jansen #include <winsock2.h> 2459599516SKenneth E. Jansen #else 2559599516SKenneth E. Jansen #include <unistd.h> 2659599516SKenneth E. Jansen #include <strings.h> 2759599516SKenneth E. Jansen #endif 2859599516SKenneth E. Jansen 2959599516SKenneth E. Jansen //extern double cpu_speed = 2600000000.0; //for Jaguar XT5 3059599516SKenneth E. Jansen //extern double cpu_speed = 2100000000.0; //for Jaguar xt4 3159599516SKenneth E. Jansen //extern double cpu_speed = 850000000.0; //for Intrepid 3259599516SKenneth E. Jansen 3359599516SKenneth E. Jansen void igetMinMaxAvg(int *ivalue, double *stats, int *statRanks) { 3459599516SKenneth E. Jansen int isThisRank; 3559599516SKenneth E. Jansen 3659599516SKenneth E. Jansen double *value = (double*)malloc(sizeof(double)); 3759599516SKenneth E. Jansen *value = 1.0*(*ivalue); 3859599516SKenneth E. Jansen 3959599516SKenneth E. Jansen rgetMinMaxAvg(value,stats,statRanks); 4059599516SKenneth E. Jansen 4159599516SKenneth E. Jansen /* MPI_Allreduce(value,&stats[0],1,MPI_DOUBLE,MPI_MIN,MPI_COMM_WORLD); 4259599516SKenneth E. Jansen isThisRank=workfc.numpe+1; 4359599516SKenneth E. Jansen if(*value==stats[0]) 4459599516SKenneth E. Jansen isThisRank=workfc.myrank; 4559599516SKenneth E. Jansen MPI_Allreduce(&isThisRank,&statRanks[0],1,MPI_INT,MPI_MIN,MPI_COMM_WORLD); 4659599516SKenneth E. Jansen 4759599516SKenneth E. Jansen MPI_Allreduce(value,&stats[1],1,MPI_DOUBLE,MPI_MAX,MPI_COMM_WORLD); 4859599516SKenneth E. Jansen isThisRank=workfc.numpe+1; 4959599516SKenneth E. Jansen if(*value==stats[1]) 5059599516SKenneth E. Jansen isThisRank=workfc.myrank; 5159599516SKenneth E. Jansen MPI_Allreduce(&isThisRank,&statRanks[1],1,MPI_INT,MPI_MIN,MPI_COMM_WORLD); 5259599516SKenneth E. Jansen 5359599516SKenneth E. Jansen MPI_Allreduce(value,&stats[2],1,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD); 5459599516SKenneth E. Jansen stats[2] /= workfc.numpe; */ 5559599516SKenneth E. Jansen 5659599516SKenneth E. Jansen free(value); 5759599516SKenneth E. Jansen } 5859599516SKenneth E. Jansen 5959599516SKenneth E. Jansen void rgetMinMaxAvg(double *value, double *stats, int *statRanks) { 6059599516SKenneth E. Jansen int isThisRank; 6159599516SKenneth E. Jansen 6259599516SKenneth E. Jansen MPI_Allreduce(value,&stats[0],1,MPI_DOUBLE,MPI_MIN,MPI_COMM_WORLD); 6359599516SKenneth E. Jansen isThisRank=workfc.numpe+1; 6459599516SKenneth E. Jansen if(*value==stats[0]) 6559599516SKenneth E. Jansen isThisRank=workfc.myrank; 6659599516SKenneth E. Jansen MPI_Allreduce(&isThisRank,&statRanks[0],1,MPI_INT,MPI_MIN,MPI_COMM_WORLD); 6759599516SKenneth E. Jansen 6859599516SKenneth E. Jansen MPI_Allreduce(value,&stats[1],1,MPI_DOUBLE,MPI_MAX,MPI_COMM_WORLD); 6959599516SKenneth E. Jansen isThisRank=workfc.numpe+1; 7059599516SKenneth E. Jansen if(*value==stats[1]) 7159599516SKenneth E. Jansen isThisRank=workfc.myrank; 7259599516SKenneth E. Jansen MPI_Allreduce(&isThisRank,&statRanks[1],1,MPI_INT,MPI_MIN,MPI_COMM_WORLD); 7359599516SKenneth E. Jansen 7459599516SKenneth E. Jansen MPI_Allreduce(value,&stats[2],1,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD); 7559599516SKenneth E. Jansen stats[2] /= workfc.numpe; 7659599516SKenneth E. Jansen 7759599516SKenneth E. Jansen double sqValue = (*value)*(*value), sqValueAvg = 0.; 7859599516SKenneth E. Jansen MPI_Allreduce(&sqValue,&sqValueAvg,1,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD); 7959599516SKenneth E. Jansen sqValueAvg /= workfc.numpe; 8059599516SKenneth E. Jansen // stats[3] = sqValueAvg; 8159599516SKenneth E. Jansen 8259599516SKenneth E. Jansen stats[3] = sqrt(sqValueAvg-stats[2]*stats[2]); 8359599516SKenneth E. Jansen } 8459599516SKenneth E. Jansen 8559599516SKenneth E. Jansen void print_mesh_stats(void) { 8659599516SKenneth E. Jansen int statRanks[2]; 8759599516SKenneth E. Jansen double iStats[4], rStats[4]; 8859599516SKenneth E. Jansen 8959599516SKenneth E. Jansen igetMinMaxAvg(&conpar.nshg,iStats,statRanks); 9059599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 9159599516SKenneth E. Jansen printf("nshg : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 9259599516SKenneth E. Jansen igetMinMaxAvg(&conpar.numel,iStats,statRanks); 9359599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 9459599516SKenneth E. Jansen printf("numel : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 9559599516SKenneth E. Jansen igetMinMaxAvg(&conpar.numelb,iStats,statRanks); 9659599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 9759599516SKenneth E. Jansen printf("numelb : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 9859599516SKenneth E. Jansen igetMinMaxAvg(&conpar.nnz_tot,iStats,statRanks); 9959599516SKenneth E. Jansen if(workfc.myrank==workfc.master) { 10059599516SKenneth E. Jansen printf("nnz_tot : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 10159599516SKenneth E. Jansen printf("\n"); 10259599516SKenneth E. Jansen } 10359599516SKenneth E. Jansen } 10459599516SKenneth E. Jansen 10559599516SKenneth E. Jansen void print_mpi_stats(void) { 10659599516SKenneth E. Jansen int statRanks[2]; 10759599516SKenneth E. Jansen double iStats[4], rStats[4]; 10859599516SKenneth E. Jansen 10959599516SKenneth E. Jansen // NS equations 11059599516SKenneth E. Jansen igetMinMaxAvg(&mpistats.iISend,iStats,statRanks); 11159599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 11259599516SKenneth E. Jansen printf("iISend : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 11359599516SKenneth E. Jansen igetMinMaxAvg(&mpistats.iIRecv,iStats,statRanks); 11459599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 11559599516SKenneth E. Jansen printf("iIRecv : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 11659599516SKenneth E. Jansen igetMinMaxAvg(&mpistats.iWaitAll,iStats,statRanks); 11759599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 11859599516SKenneth E. Jansen printf("iWtAll : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 11959599516SKenneth E. Jansen igetMinMaxAvg(&mpistats.iAllR,iStats,statRanks); 12059599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 12159599516SKenneth E. Jansen printf("iAllR : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 12259599516SKenneth E. Jansen 12359599516SKenneth E. Jansen rgetMinMaxAvg(&mpistats.rISend,rStats,statRanks); 12459599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 12559599516SKenneth E. Jansen printf("rISend : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 12659599516SKenneth E. Jansen rgetMinMaxAvg(&mpistats.rIRecv,rStats,statRanks); 12759599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 12859599516SKenneth E. Jansen printf("rIRecv : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 12959599516SKenneth E. Jansen rgetMinMaxAvg(&mpistats.rWaitAll,rStats,statRanks); 13059599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 13159599516SKenneth E. Jansen printf("rWtAll : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 13259599516SKenneth E. Jansen rgetMinMaxAvg(&mpistats.rCommu,rStats,statRanks); 13359599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 13459599516SKenneth E. Jansen printf("rCommu : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 13559599516SKenneth E. Jansen rgetMinMaxAvg(&mpistats.rAllR,rStats,statRanks); 13659599516SKenneth E. Jansen if(workfc.myrank==workfc.master) { 13759599516SKenneth E. Jansen printf("rAllR : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 13859599516SKenneth E. Jansen printf("\n"); 13959599516SKenneth E. Jansen } 14059599516SKenneth E. Jansen // Scalars 14159599516SKenneth E. Jansen igetMinMaxAvg(&mpistats.iISendScal,iStats,statRanks); 14259599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 14359599516SKenneth E. Jansen printf("iISendScal : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 14459599516SKenneth E. Jansen igetMinMaxAvg(&mpistats.iIRecvScal,iStats,statRanks); 14559599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 14659599516SKenneth E. Jansen printf("iIRecvScal : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 14759599516SKenneth E. Jansen igetMinMaxAvg(&mpistats.iWaitAllScal,iStats,statRanks); 14859599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 14959599516SKenneth E. Jansen printf("iWtAllScal : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 15059599516SKenneth E. Jansen igetMinMaxAvg(&mpistats.iAllRScal,iStats,statRanks); 15159599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 15259599516SKenneth E. Jansen printf("iAllRScal : min [%d,%d], max[%d,%d] and avg[.,%d] (rms=%d)\n",statRanks[0],(int)iStats[0],statRanks[1],(int)iStats[1],(int)iStats[2],(int)iStats[3]); 15359599516SKenneth E. Jansen 15459599516SKenneth E. Jansen rgetMinMaxAvg(&mpistats.rISendScal,rStats,statRanks); 15559599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 15659599516SKenneth E. Jansen printf("rISendScal : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 15759599516SKenneth E. Jansen rgetMinMaxAvg(&mpistats.rIRecvScal,rStats,statRanks); 15859599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 15959599516SKenneth E. Jansen printf("rIRecvScal : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 16059599516SKenneth E. Jansen rgetMinMaxAvg(&mpistats.rWaitAllScal,rStats,statRanks); 16159599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 16259599516SKenneth E. Jansen printf("rWtAllScal : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 16359599516SKenneth E. Jansen rgetMinMaxAvg(&mpistats.rCommuScal,rStats,statRanks); 16459599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 16559599516SKenneth E. Jansen printf("rCommuScal : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 16659599516SKenneth E. Jansen rgetMinMaxAvg(&mpistats.rAllRScal,rStats,statRanks); 16759599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 16859599516SKenneth E. Jansen printf("rAllRScal : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 16959599516SKenneth E. Jansen 17059599516SKenneth E. Jansen 17159599516SKenneth E. Jansen } 17259599516SKenneth E. Jansen 17359599516SKenneth E. Jansen //void print_system_stats(double tcorecp[2]) { 17459599516SKenneth E. Jansen void print_system_stats(double *tcorecp, double *tcorecpscal) { 17559599516SKenneth E. Jansen int statRanks[2]; 17659599516SKenneth E. Jansen double iStats[4], rStats[4]; 17759599516SKenneth E. Jansen double syst_assembly, syst_solve; 17859599516SKenneth E. Jansen 17959599516SKenneth E. Jansen // NS equations 18059599516SKenneth E. Jansen syst_assembly = tcorecp[0]; 18159599516SKenneth E. Jansen syst_solve = tcorecp[1]; 18259599516SKenneth E. Jansen 18359599516SKenneth E. Jansen rgetMinMaxAvg(&syst_assembly,rStats,statRanks); 18459599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 18559599516SKenneth E. Jansen printf("Elm. form. : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 18659599516SKenneth E. Jansen 18759599516SKenneth E. Jansen rgetMinMaxAvg(&syst_solve,rStats,statRanks); 18859599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 18959599516SKenneth E. Jansen printf("Lin. alg. sol : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 19059599516SKenneth E. Jansen 19159599516SKenneth E. Jansen // Scalars 19259599516SKenneth E. Jansen syst_assembly = tcorecpscal[0]; 19359599516SKenneth E. Jansen syst_solve = tcorecpscal[1]; 19459599516SKenneth E. Jansen 19559599516SKenneth E. Jansen rgetMinMaxAvg(&syst_assembly,rStats,statRanks); 19659599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 19759599516SKenneth E. Jansen printf("Elm. form. Scal. : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 19859599516SKenneth E. Jansen 19959599516SKenneth E. Jansen rgetMinMaxAvg(&syst_solve,rStats,statRanks); 20059599516SKenneth E. Jansen if(workfc.myrank==workfc.master) { 20159599516SKenneth E. Jansen printf("Lin. alg. sol Scal. : min [%d,%2.5f], max[%d,%2.5f] and avg[.,%2.5f] (rms=%2.5f)\n",statRanks[0],rStats[0],statRanks[1],rStats[1],rStats[2],rStats[3]); 20259599516SKenneth E. Jansen printf("\n"); 20359599516SKenneth E. Jansen } 20459599516SKenneth E. Jansen //printf("rank %d - syst_assembly %f - syst_solve %f\n",workfc.myrank,syst_assembly,syst_solve); 20559599516SKenneth E. Jansen } 20659599516SKenneth E. Jansen 20759599516SKenneth E. Jansen 20859599516SKenneth E. Jansen 20959599516SKenneth E. Jansen void countfieldstowriterestart() 21059599516SKenneth E. Jansen { 21159599516SKenneth E. Jansen int nfields; 21259599516SKenneth E. Jansen 21359599516SKenneth E. Jansen // printf("TEST: %d %d %d %d %d\n",timdat.istep,timdat.itseq,inpdat.nstep[0],inpdat.nstep[1],timdat.lstep); 21459599516SKenneth E. Jansen 21559599516SKenneth E. Jansen nfields = 2; //solution, time derivatives 21659599516SKenneth E. Jansen 21759599516SKenneth E. Jansen if(outpar.ivort == 1){ 21859599516SKenneth E. Jansen nfields++; //vorticity 21959599516SKenneth E. Jansen } 22059599516SKenneth E. Jansen 22159599516SKenneth E. Jansen if(abs(turbvar.itwmod) != 1 && outpar.iowflux == 1) { 22259599516SKenneth E. Jansen nfields++; //instantaneous wss in bflux.f 22359599516SKenneth E. Jansen } 22459599516SKenneth E. Jansen 22559599516SKenneth E. Jansen // if(ideformwall.eq.1) not handled yet 22659599516SKenneth E. Jansen 227*32eed141SKenneth E. Jansen // KEJ says save all with this version 228*32eed141SKenneth E. Jansen // BEFORE we do animations, we will want to have a "saveall" frequency flag 229*32eed141SKenneth E. Jansen // if(timdat.istep == inpdat.nstep[timdat.itseq-1]){ //Last time step of the computation 23059599516SKenneth E. Jansen 23159599516SKenneth E. Jansen //projection vectors and pressure projection vectors (call saveLesRestart in itrdrv) 23259599516SKenneth E. Jansen nfields = nfields +2; 23359599516SKenneth E. Jansen 23459599516SKenneth E. Jansen //if Print Error Indicators = true (call write_error in itrdrv) 23559599516SKenneth E. Jansen if(turbvar.ierrcalc == 1){ 23659599516SKenneth E. Jansen nfields++; 23759599516SKenneth E. Jansen } 23859599516SKenneth E. Jansen 23959599516SKenneth E. Jansen //if Print ybar = True (call write_field(myrank,'a','ybar',4,... in itrdrv) 24059599516SKenneth E. Jansen if(outpar.ioybar == 1){ 24159599516SKenneth E. Jansen nfields++; //ybar 24259599516SKenneth E. Jansen 24359599516SKenneth E. Jansen //phase average fields 24459599516SKenneth E. Jansen if(outpar.nphasesincycle >0) { 24559599516SKenneth E. Jansen nfields = nfields + outpar.nphasesincycle; 24659599516SKenneth E. Jansen } 24759599516SKenneth E. Jansen 24859599516SKenneth E. Jansen if(abs(turbvar.itwmod) != 1 && outpar.iowflux == 1) { 24959599516SKenneth E. Jansen nfields++; //wssbar 25059599516SKenneth E. Jansen } 25159599516SKenneth E. Jansen 25259599516SKenneth E. Jansen } 25359599516SKenneth E. Jansen 25459599516SKenneth E. Jansen if(turbvari.irans < 0) { 25559599516SKenneth E. Jansen nfields++; //dwal 25659599516SKenneth E. Jansen } 25759599516SKenneth E. Jansen 258*32eed141SKenneth E. Jansen // } 25959599516SKenneth E. Jansen 26059599516SKenneth E. Jansen outpar.nsynciofieldswriterestart = nfields; 26159599516SKenneth E. Jansen 26259599516SKenneth E. Jansen if(workfc.myrank == 0) { 26359599516SKenneth E. Jansen printf("Number of fields to write in restart files: %d\n", nfields); 26459599516SKenneth E. Jansen } 26559599516SKenneth E. Jansen } 26659599516SKenneth E. Jansen 26759599516SKenneth E. Jansen 26859599516SKenneth E. Jansen void 26959599516SKenneth E. Jansen Write_Restart( int* pid, 27059599516SKenneth E. Jansen int* stepno, 27159599516SKenneth E. Jansen int* nshg, 27259599516SKenneth E. Jansen int* numVars, 27359599516SKenneth E. Jansen double* array1, 27459599516SKenneth E. Jansen double* array2 ) { 27559599516SKenneth E. Jansen 27659599516SKenneth E. Jansen char fname[255]; 27759599516SKenneth E. Jansen char rfile[60]; 27859599516SKenneth E. Jansen char existingfile[30], linkfile[30]; 27959599516SKenneth E. Jansen int irstou; 28059599516SKenneth E. Jansen int magic_number = 362436; 28159599516SKenneth E. Jansen int* mptr = &magic_number; 28259599516SKenneth E. Jansen // time_t timenow = time ( &timenow); 28359599516SKenneth E. Jansen double version=0.0; 28459599516SKenneth E. Jansen int isize, nitems; 28559599516SKenneth E. Jansen int iarray[10]; 28659599516SKenneth E. Jansen 28759599516SKenneth E. Jansen /*sprintf(rfile,"restart.%d.%d",*stepno,*pid+1); 28859599516SKenneth E. Jansen openfile_(rfile,"write", &irstou); 28959599516SKenneth E. Jansen 29059599516SKenneth E. Jansen // writing the top ascii header for the restart file 29159599516SKenneth E. Jansen 29259599516SKenneth E. Jansen writestring_( &irstou,"# PHASTA Input File Version 2.0\n"); 29359599516SKenneth E. Jansen writestring_( &irstou, 29459599516SKenneth E. Jansen "# format \"keyphrase : sizeofnextblock usual headers\"\n"); 29559599516SKenneth E. Jansen 29659599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 29759599516SKenneth E. Jansen sprintf(fname,"# Output generated by phasta version (NOT YET CURRENT): %lf \n", version); 29859599516SKenneth E. Jansen writestring_( &irstou, fname ); 29959599516SKenneth E. Jansen 30059599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 30159599516SKenneth E. Jansen gethostname(fname,255); 30259599516SKenneth E. Jansen writestring_( &irstou,"# This result was produced on: "); 30359599516SKenneth E. Jansen writestring_( &irstou, fname ); 30459599516SKenneth E. Jansen writestring_( &irstou,"\n"); 30559599516SKenneth E. Jansen 30659599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 30759599516SKenneth E. Jansen sprintf(fname,"# %s\n", ctime( &timenow )); 30859599516SKenneth E. Jansen writestring_( &irstou, fname ); 30959599516SKenneth E. Jansen 31059599516SKenneth E. Jansen isize = 1; 31159599516SKenneth E. Jansen nitems = 1; 31259599516SKenneth E. Jansen iarray[ 0 ] = 1; 31359599516SKenneth E. Jansen writeheader_( &irstou, "byteorder magic number ", 31459599516SKenneth E. Jansen (void*)iarray, &nitems, &isize, "integer", phasta_iotype ); 31559599516SKenneth E. Jansen 31659599516SKenneth E. Jansen nitems = 1; 31759599516SKenneth E. Jansen writedatablock_( &irstou, "byteorder magic number ", 31859599516SKenneth E. Jansen (void*)mptr, &nitems, "integer", phasta_iotype ); 31959599516SKenneth E. Jansen 32059599516SKenneth E. Jansen 32159599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 32259599516SKenneth E. Jansen sprintf(fname,"number of modes : < 0 > %d\n", *nshg); 32359599516SKenneth E. Jansen writestring_( &irstou, fname ); 32459599516SKenneth E. Jansen 32559599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 32659599516SKenneth E. Jansen sprintf(fname,"number of variables : < 0 > %d\n", *numVars); 32759599516SKenneth E. Jansen writestring_( &irstou, fname ); 32859599516SKenneth E. Jansen 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_( &irstou, "solution ", 33659599516SKenneth E. Jansen (void*)iarray, &nitems, &isize, "double", phasta_iotype ); 33759599516SKenneth E. Jansen 33859599516SKenneth E. Jansen 33959599516SKenneth E. Jansen nitems = (*nshg)*(*numVars); 34059599516SKenneth E. Jansen writedatablock_( &irstou, "solution ", 34159599516SKenneth E. Jansen (void*)(array1), &nitems, "double", phasta_iotype ); 34259599516SKenneth E. Jansen 34359599516SKenneth E. Jansen 34459599516SKenneth E. Jansen 34559599516SKenneth E. Jansen nitems = 3; 34659599516SKenneth E. Jansen writeheader_( &irstou, "time derivative of solution ", 34759599516SKenneth E. Jansen (void*)iarray, &nitems, &isize, "double", phasta_iotype ); 34859599516SKenneth E. Jansen 34959599516SKenneth E. Jansen 35059599516SKenneth E. Jansen nitems = (*nshg)*(*numVars); 35159599516SKenneth E. Jansen writedatablock_( &irstou, "time derivative of solution ", 35259599516SKenneth E. Jansen (void*)(array2), &nitems, "double", phasta_iotype ); 35359599516SKenneth E. Jansen 35459599516SKenneth E. Jansen 35559599516SKenneth E. Jansen closefile_( &irstou, "write" ); 35659599516SKenneth E. Jansen */ 35759599516SKenneth E. Jansen //MPI_Barrier(MPI_COMM_WORLD); 35859599516SKenneth E. Jansen 35959599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 36059599516SKenneth E. Jansen 36159599516SKenneth E. Jansen //MR CHANGE 36259599516SKenneth E. Jansen int nfiles; 36359599516SKenneth E. Jansen int nfields; 36459599516SKenneth E. Jansen int numparts; 36559599516SKenneth E. Jansen int irank; 36659599516SKenneth E. Jansen int nprocs; 36759599516SKenneth E. Jansen 36859599516SKenneth E. Jansen // First, count the number of fields to write and store the result in 36959599516SKenneth E. Jansen countfieldstowriterestart(); 37059599516SKenneth E. Jansen 37159599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO 37259599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 37359599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 37459599516SKenneth E. Jansen numparts = workfc.numpe; 37559599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 37659599516SKenneth E. Jansen nprocs = workfc.numpe; 37759599516SKenneth E. Jansen //MR CHANGE END 37859599516SKenneth E. Jansen int nppf = numparts/nfiles; 37959599516SKenneth E. Jansen int GPID; 38059599516SKenneth E. Jansen 38159599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 38259599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 38359599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 38459599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 38559599516SKenneth E. Jansen 38659599516SKenneth E. Jansen int descriptor; 38759599516SKenneth E. Jansen char filename[255],path[255],fieldtag_s[255]; 38859599516SKenneth E. Jansen bzero((void*)filename,255); 38959599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 39059599516SKenneth E. Jansen 39159599516SKenneth E. Jansen sprintf(filename,"restart-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1)); 39259599516SKenneth E. Jansen 39359599516SKenneth E. Jansen // unsigned long long timer_start; 39459599516SKenneth E. Jansen // unsigned long long timer_end; 39559599516SKenneth E. Jansen // double time_span; 39659599516SKenneth E. Jansen 39759599516SKenneth E. Jansen //MR CHANGE 39859599516SKenneth E. Jansen // Measure the time - Start the timer 39959599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 40059599516SKenneth E. Jansen // timer_start = rdtsc(); 40159599516SKenneth E. Jansen //MR CHANGE END 40259599516SKenneth E. Jansen 40359599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write"); 40459599516SKenneth E. Jansen 40559599516SKenneth E. Jansen //MR CHANGE 40659599516SKenneth E. Jansen // Measure the time - End of timer 40759599516SKenneth E. Jansen // timer_end = rdtsc(); 40859599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 40959599516SKenneth E. Jansen if (*pid==0) { 41059599516SKenneth E. Jansen // printf("\n*****************************\n"); 41159599516SKenneth E. Jansen // printf("Time: 'initphmpiio' of %s with %d fields and %d files is: %f s\n",filename,nfields,nfiles,time_span); 41259599516SKenneth E. Jansen printf("Filename is %s \n",filename); 41359599516SKenneth E. Jansen } 41459599516SKenneth E. Jansen //MR CHANGE END 41559599516SKenneth E. Jansen 41659599516SKenneth E. Jansen 41759599516SKenneth E. Jansen //MR CHANGE 41859599516SKenneth E. Jansen // Measure the time - Start the timer 41959599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 42059599516SKenneth E. Jansen // timer_start = rdtsc(); 42159599516SKenneth E. Jansen //MR CHANGE END 42259599516SKenneth E. Jansen 42359599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor); 42459599516SKenneth E. Jansen 42559599516SKenneth E. Jansen //MR CHANGE 42659599516SKenneth E. Jansen // Measure the time - End of timer 42759599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 42859599516SKenneth E. Jansen // timer_end = rdtsc(); 42959599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 43059599516SKenneth E. Jansen // if (*pid==0) { 43159599516SKenneth E. Jansen // printf("Time: 'openfile' of %s with %d fields and %d files is: %f s\n",filename,nfields,nfiles,time_span); 43259599516SKenneth E. Jansen // printf("*****************************\n"); 43359599516SKenneth E. Jansen // } 43459599516SKenneth E. Jansen //MR CHANGE END 43559599516SKenneth E. Jansen 43659599516SKenneth E. Jansen field_flag=0; 43759599516SKenneth E. Jansen 43859599516SKenneth E. Jansen int i; 43959599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 44059599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 44159599516SKenneth E. Jansen // e.g : (in this example) 44259599516SKenneth E. Jansen // proc 0 : 1--4 44359599516SKenneth E. Jansen // proc 1 : 5--8 ... 44459599516SKenneth E. Jansen GPID = startpart + i; 44559599516SKenneth E. Jansen 44659599516SKenneth E. Jansen // Write solution field ... 44759599516SKenneth E. Jansen sprintf(fieldtag_s,"solution@%d",GPID); 44859599516SKenneth E. Jansen 44959599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 45059599516SKenneth E. Jansen nitems = 3; 45159599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 45259599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 45359599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 45459599516SKenneth E. Jansen 45559599516SKenneth E. Jansen //MR CHANGE 45659599516SKenneth E. Jansen // Measure the time - Start the timer 45759599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 45859599516SKenneth E. Jansen // timer_start = rdtsc(); 45959599516SKenneth E. Jansen //MR CHANGE END 46059599516SKenneth E. Jansen 46159599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 46259599516SKenneth E. Jansen 46359599516SKenneth E. Jansen //MR CHANGE 46459599516SKenneth E. Jansen // Measure the time - End of timer 46559599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 46659599516SKenneth E. Jansen // timer_end = rdtsc(); 46759599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 46859599516SKenneth E. Jansen // if (*pid==0) { 46959599516SKenneth E. Jansen // printf("\n*****************************\n"); 47059599516SKenneth E. Jansen // printf("Time: header for 'Solution': %f s\n",time_span); 47159599516SKenneth E. Jansen // } 47259599516SKenneth E. Jansen //MR CHANGE END 47359599516SKenneth E. Jansen 47459599516SKenneth E. Jansen nitems = (*nshg)*(*numVars); 47559599516SKenneth E. Jansen 47659599516SKenneth E. Jansen //MR CHANGE 47759599516SKenneth E. Jansen // Measure the time - Start the timer 47859599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 47959599516SKenneth E. Jansen // timer_start = rdtsc(); 48059599516SKenneth E. Jansen //MR CHANGE END 48159599516SKenneth E. Jansen 48259599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype ); 48359599516SKenneth E. Jansen 48459599516SKenneth E. Jansen //MR CHANGE 48559599516SKenneth E. Jansen // Measure the time - End of timer 48659599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 48759599516SKenneth E. Jansen // timer_end = rdtsc(); 48859599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 48959599516SKenneth E. Jansen 49059599516SKenneth E. Jansen // int isizemin,isizemax,isizetot; 49159599516SKenneth E. Jansen // double sizemin,sizemax,sizeavg,sizetot,rate; 49259599516SKenneth E. Jansen 49359599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizemin,1,MPI_INT,MPI_MIN,MPI_COMM_WORLD); 49459599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizemax,1,MPI_INT,MPI_MAX,MPI_COMM_WORLD); 49559599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizetot,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD); 49659599516SKenneth E. Jansen 49759599516SKenneth E. Jansen // sizemin=(double)(8.0*isizemin/1024.0/1024.0); 49859599516SKenneth E. Jansen // sizemax=(double)(8.0*isizemax/1024.0/1024.0); 49959599516SKenneth E. Jansen // sizetot=(double)(8.0*isizetot/1024.0/1024.0); 50059599516SKenneth E. Jansen // sizeavg=(double)(1.0*sizetot/workfc.numpe); 50159599516SKenneth E. Jansen // rate=(double)(1.0*sizetot/time_span); 50259599516SKenneth E. Jansen 50359599516SKenneth E. Jansen // if (*pid==0) { 50459599516SKenneth E. Jansen // printf("Time: block for 'Solution': %f s\n",time_span); 50559599516SKenneth E. Jansen // printf("Time: block: Min= %f MB; Max= %f MB; Avg= %f MB; Tot= %f MB; Rate= %f MB/s; \n",sizemin,sizemax,sizeavg,sizetot,rate); 50659599516SKenneth E. Jansen 50759599516SKenneth E. Jansen // } 50859599516SKenneth E. Jansen //MR CHANGE END 50959599516SKenneth E. Jansen 51059599516SKenneth E. Jansen } 51159599516SKenneth E. Jansen field_flag++; 51259599516SKenneth E. Jansen 51359599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { 51459599516SKenneth E. Jansen 51559599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 51659599516SKenneth E. Jansen // e.g : (in this example) 51759599516SKenneth E. Jansen // proc 0 : 1--4 51859599516SKenneth E. Jansen // proc 1 : 5--8 ... 51959599516SKenneth E. Jansen GPID = startpart + i; 52059599516SKenneth E. Jansen 52159599516SKenneth E. Jansen // Write solution field ... 52259599516SKenneth E. Jansen sprintf(fieldtag_s,"time derivative of solution@%d",GPID); 52359599516SKenneth E. Jansen 52459599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 52559599516SKenneth E. Jansen nitems = 3; 52659599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 52759599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 52859599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 52959599516SKenneth E. Jansen 53059599516SKenneth E. Jansen //MR CHANGE 53159599516SKenneth E. Jansen // Measure the time - Start the timer 53259599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 53359599516SKenneth E. Jansen // timer_start = rdtsc(); 53459599516SKenneth E. Jansen //MR CHANGE END 53559599516SKenneth E. Jansen 53659599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 53759599516SKenneth E. Jansen 53859599516SKenneth E. Jansen //MR CHANGE 53959599516SKenneth E. Jansen // Measure the time - End of timer 54059599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 54159599516SKenneth E. Jansen // timer_end = rdtsc(); 54259599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 54359599516SKenneth E. Jansen // if (*pid==0) { 54459599516SKenneth E. Jansen // printf("Time: header for 'Time Derivative of solution': %f s\n",time_span); 54559599516SKenneth E. Jansen // } 54659599516SKenneth E. Jansen //MR CHANGE END 54759599516SKenneth E. Jansen 54859599516SKenneth E. Jansen nitems = (*nshg)*(*numVars); 54959599516SKenneth E. Jansen 55059599516SKenneth E. Jansen //MR CHANGE 55159599516SKenneth E. Jansen // Measure the time - Start the timer 55259599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 55359599516SKenneth E. Jansen // timer_start = rdtsc(); 55459599516SKenneth E. Jansen //MR CHANGE END 55559599516SKenneth E. Jansen 55659599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array2), &isize, "double", phasta_iotype ); 55759599516SKenneth E. Jansen 55859599516SKenneth E. Jansen //MR CHANGE 55959599516SKenneth E. Jansen // Measure the time - End of timer 56059599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 56159599516SKenneth E. Jansen // timer_end = rdtsc(); 56259599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 56359599516SKenneth E. Jansen 56459599516SKenneth E. Jansen // int isizemin,isizemax,isizetot; 56559599516SKenneth E. Jansen // double sizemin,sizemax,sizeavg,sizetot,rate; 56659599516SKenneth E. Jansen 56759599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizemin,1,MPI_INT,MPI_MIN,MPI_COMM_WORLD); 56859599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizemax,1,MPI_INT,MPI_MAX,MPI_COMM_WORLD); 56959599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizetot,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD); 57059599516SKenneth E. Jansen 57159599516SKenneth E. Jansen // sizemin=(double)(8.0*isizemin/1024.0/1024.0); 57259599516SKenneth E. Jansen // sizemax=(double)(8.0*isizemax/1024.0/1024.0); 57359599516SKenneth E. Jansen // sizetot=(double)(8.0*isizetot/1024.0/1024.0); 57459599516SKenneth E. Jansen // sizeavg=sizetot/workfc.numpe; 57559599516SKenneth E. Jansen // rate=sizetot/time_span; 57659599516SKenneth E. Jansen 57759599516SKenneth E. Jansen // if (*pid==0) { 57859599516SKenneth E. Jansen // printf("Time: block for 'Time Derivative of Solution': %f s\n",time_span); 57959599516SKenneth E. Jansen // printf("Time: block: Min= %f MB; Max= %f MB; Avg= %f MB; Tot= %f MB; Rate= %f MB/s; \n",sizemin,sizemax,sizeavg,sizetot,rate); 58059599516SKenneth E. Jansen // printf("*****************************\n"); 58159599516SKenneth E. Jansen 58259599516SKenneth E. Jansen // } 58359599516SKenneth E. Jansen //MR CHANGE END 58459599516SKenneth E. Jansen 58559599516SKenneth E. Jansen } 58659599516SKenneth E. Jansen field_flag++; 58759599516SKenneth E. Jansen 58859599516SKenneth E. Jansen if (field_flag==nfields){ 58959599516SKenneth E. Jansen 59059599516SKenneth E. Jansen //MR CHANGE 59159599516SKenneth E. Jansen // Measure the time - Start the timer 59259599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 59359599516SKenneth E. Jansen // timer_start = rdtsc(); 59459599516SKenneth E. Jansen //MR CHANGE END 59559599516SKenneth E. Jansen 59659599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 59759599516SKenneth E. Jansen 59859599516SKenneth E. Jansen //MR CHANGE 59959599516SKenneth E. Jansen // Measure the time - End of timer 60059599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 60159599516SKenneth E. Jansen // timer_end = rdtsc(); 60259599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 60359599516SKenneth E. Jansen // if (*pid==0) { 60459599516SKenneth E. Jansen // printf("\n*****************************\n"); 60559599516SKenneth E. Jansen // printf("Time: 'closefile' is: %f s\n",time_span); 60659599516SKenneth E. Jansen // } 60759599516SKenneth E. Jansen //MR CHANGE END 60859599516SKenneth E. Jansen 60959599516SKenneth E. Jansen //MR CHANGE 61059599516SKenneth E. Jansen // Measure the time - Start the timer 61159599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 61259599516SKenneth E. Jansen // timer_start = rdtsc(); 61359599516SKenneth E. Jansen //MR CHANGE END 61459599516SKenneth E. Jansen 61559599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 61659599516SKenneth E. Jansen 61759599516SKenneth E. Jansen //MR CHANGE 61859599516SKenneth E. Jansen // Measure the time - End of timer 61959599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 62059599516SKenneth E. Jansen // timer_end = rdtsc(); 62159599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 62259599516SKenneth E. Jansen if (*pid==0) { 62359599516SKenneth E. Jansen // printf("Time: 'finalizephmpiio' is: %f s\n",time_span); 62459599516SKenneth E. Jansen // printf("Last field %d '%s' finished! \n",nfields, fieldtag_s); 62559599516SKenneth E. Jansen printf("\n"); 62659599516SKenneth E. Jansen // printf("*****************************\n"); 62759599516SKenneth E. Jansen } 62859599516SKenneth E. Jansen } 62959599516SKenneth E. Jansen //MR CHANGE END 63059599516SKenneth E. Jansen 63159599516SKenneth E. Jansen 63259599516SKenneth E. Jansen 63359599516SKenneth E. Jansen /////////////////////////////////////////////////////////////////////////////////////////// 63459599516SKenneth E. Jansen 63559599516SKenneth E. Jansen /* create a soft link of the restart we just wrote to restart.latest 63659599516SKenneth E. Jansen this is the file the next run will always try to start from */ 63759599516SKenneth E. Jansen 63859599516SKenneth E. Jansen /* sprintf( linkfile, "restart.latest.%d", *pid+1 ); 63959599516SKenneth E. Jansen unlink( linkfile ); 64059599516SKenneth E. Jansen sprintf( existingfile, "restart.%d.%d", *stepno, *pid+1 ); 64159599516SKenneth E. Jansen link( existingfile, linkfile ); 64259599516SKenneth E. Jansen */ 64359599516SKenneth E. Jansen } 64459599516SKenneth E. Jansen 64559599516SKenneth E. Jansen void 64659599516SKenneth E. Jansen Write_Error( int* pid, 64759599516SKenneth E. Jansen int* stepno, 64859599516SKenneth E. Jansen int* nshg, 64959599516SKenneth E. Jansen int* numVars, 65059599516SKenneth E. Jansen double* array1 ) { 65159599516SKenneth E. Jansen 65259599516SKenneth E. Jansen 65359599516SKenneth E. Jansen char fname[255]; 65459599516SKenneth E. Jansen char rfile[60]; 65559599516SKenneth E. Jansen int irstou; 65659599516SKenneth E. Jansen int magic_number = 362436; 65759599516SKenneth E. Jansen int* mptr = &magic_number; 65859599516SKenneth E. Jansen //printf("Time is commented\n"); 65959599516SKenneth E. Jansen //time_t timenow = time ( &timenow); 66059599516SKenneth E. Jansen //printf("Yes\n"); 66159599516SKenneth E. Jansen double version=0.0; 66259599516SKenneth E. Jansen int isize, nitems; 66359599516SKenneth E. Jansen int iarray[10]; 66459599516SKenneth E. Jansen 66559599516SKenneth E. Jansen /*sprintf(rfile,"restart.%d.%d",*stepno,*pid+1); 66659599516SKenneth E. Jansen openfile_(rfile,"append", &irstou); 66759599516SKenneth E. Jansen 66859599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 66959599516SKenneth E. Jansen nitems = 3; 67059599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 67159599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 67259599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 67359599516SKenneth E. Jansen writeheader_( &irstou, "errors", (void*)iarray, &nitems, &isize, "double", phasta_iotype ); 67459599516SKenneth E. Jansen 67559599516SKenneth E. Jansen 67659599516SKenneth E. Jansen nitems = (*nshg)*(*numVars); 67759599516SKenneth E. Jansen writedatablock_( &irstou, "errors ", (void*)(array1), &nitems, "double", phasta_iotype ); 67859599516SKenneth E. Jansen 67959599516SKenneth E. Jansen closefile_( &irstou, "append" );*/ 68059599516SKenneth E. Jansen 68159599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 68259599516SKenneth E. Jansen 68359599516SKenneth E. Jansen int nfiles; 68459599516SKenneth E. Jansen int nfields; 68559599516SKenneth E. Jansen int numparts; 68659599516SKenneth E. Jansen int irank; 68759599516SKenneth E. Jansen int nprocs; 68859599516SKenneth E. Jansen 68959599516SKenneth E. Jansen // unsigned long long timer_start; 69059599516SKenneth E. Jansen // unsigned long long timer_end; 69159599516SKenneth E. Jansen // double time_span; 69259599516SKenneth E. Jansen 69359599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 69459599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 69559599516SKenneth E. Jansen numparts = workfc.numpe; 69659599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 69759599516SKenneth E. Jansen nprocs = workfc.numpe; 69859599516SKenneth E. Jansen 69959599516SKenneth E. Jansen int nppf = numparts/nfiles; 70059599516SKenneth E. Jansen int GPID; 70159599516SKenneth E. Jansen 70259599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 70359599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 70459599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 70559599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 70659599516SKenneth E. Jansen 70759599516SKenneth E. Jansen field_flag++; 70859599516SKenneth E. Jansen 70959599516SKenneth E. Jansen char fieldtag[255]; 71059599516SKenneth E. Jansen 71159599516SKenneth E. Jansen int i; 71259599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) { 71359599516SKenneth E. Jansen GPID = startpart + i; 71459599516SKenneth E. Jansen sprintf(fieldtag,"errors@%d",GPID); 71559599516SKenneth E. Jansen 71659599516SKenneth E. Jansen if(*pid==0) { 71759599516SKenneth E. Jansen // printf("\n*****************************\n"); 71859599516SKenneth E. Jansen printf("\n"); 71959599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldtag); 72059599516SKenneth E. Jansen } 72159599516SKenneth E. Jansen 72259599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 72359599516SKenneth E. Jansen nitems = 3; 72459599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 72559599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 72659599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 72759599516SKenneth E. Jansen 72859599516SKenneth E. Jansen //MR CHANGE 72959599516SKenneth E. Jansen // Measure the time - Start the timer 73059599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 73159599516SKenneth E. Jansen // timer_start = rdtsc(); 73259599516SKenneth E. Jansen //MR CHANGE END 73359599516SKenneth E. Jansen 73459599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 73559599516SKenneth E. Jansen 73659599516SKenneth E. Jansen //MR CHANGE 73759599516SKenneth E. Jansen // Measure the time - End of timer 73859599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 73959599516SKenneth E. Jansen // timer_end = rdtsc(); 74059599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 74159599516SKenneth E. Jansen // if (*pid==0) { 74259599516SKenneth E. Jansen // printf("Time: header for 'error': %f s\n",time_span); 74359599516SKenneth E. Jansen // } 74459599516SKenneth E. Jansen //MR CHANGE END 74559599516SKenneth E. Jansen 74659599516SKenneth E. Jansen //MR CHANGE 74759599516SKenneth E. Jansen // Measure the time - Start the timer 74859599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 74959599516SKenneth E. Jansen // timer_start = rdtsc(); 75059599516SKenneth E. Jansen //MR CHANGE END 75159599516SKenneth E. Jansen 75259599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag, (void*)array1, &isize, "double", phasta_iotype ); 75359599516SKenneth E. Jansen 75459599516SKenneth E. Jansen //MR CHANGE 75559599516SKenneth E. Jansen // Measure the time - End of timer 75659599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 75759599516SKenneth E. Jansen // timer_end = rdtsc(); 75859599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 75959599516SKenneth E. Jansen 76059599516SKenneth E. Jansen // int isizemin,isizemax,isizetot; 76159599516SKenneth E. Jansen // double sizemin,sizemax,sizeavg,sizetot,rate; 76259599516SKenneth E. Jansen 76359599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizemin,1,MPI_INT,MPI_MIN,MPI_COMM_WORLD); 76459599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizemax,1,MPI_INT,MPI_MAX,MPI_COMM_WORLD); 76559599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizetot,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD); 76659599516SKenneth E. Jansen 76759599516SKenneth E. Jansen // sizemin=(double)(8.0*isizemin/1024.0/1024.0); 76859599516SKenneth E. Jansen // sizemax=(double)(8.0*isizemax/1024.0/1024.0); 76959599516SKenneth E. Jansen // sizetot=(double)(8.0*isizetot/1024.0/1024.0); 77059599516SKenneth E. Jansen // sizeavg=sizetot/workfc.numpe; 77159599516SKenneth E. Jansen // rate=sizetot/time_span; 77259599516SKenneth E. Jansen 77359599516SKenneth E. Jansen // if (*pid==0) { 77459599516SKenneth E. Jansen // printf("Time: block for 'error': %f s\n",time_span); 77559599516SKenneth E. Jansen // printf("Time: block: Min= %f MB; Max= %f MB; Avg= %f MB; Tot= %f MB; Rate= %f MB/s; \n",sizemin,sizemax,sizeavg,sizetot,rate); 77659599516SKenneth E. Jansen // printf("*****************************\n"); 77759599516SKenneth E. Jansen // } 77859599516SKenneth E. Jansen //MR CHANGE END 77959599516SKenneth E. Jansen 78059599516SKenneth E. Jansen } 78159599516SKenneth E. Jansen 78259599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 78359599516SKenneth E. Jansen // timer_end = rdtsc(); 78459599516SKenneth E. Jansen // time_span=(double)(timer_end-timer_start)/cpu_speed; 78559599516SKenneth E. Jansen 78659599516SKenneth E. Jansen // if (*pid==0) { 78759599516SKenneth E. Jansen // printf("Field 'error' written in: %f s\n",time_span); 78859599516SKenneth E. Jansen // printf("Write field '%s' finished! \n",fieldtag); 78959599516SKenneth E. Jansen // } 79059599516SKenneth E. Jansen 79159599516SKenneth E. Jansen if (field_flag==nfields){ 79259599516SKenneth E. Jansen 79359599516SKenneth E. Jansen //MR CHANGE 79459599516SKenneth E. Jansen // Measure the time - Start the timer 79559599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 79659599516SKenneth E. Jansen // timer_start = rdtsc(); 79759599516SKenneth E. Jansen //MR CHANGE END 79859599516SKenneth E. Jansen 79959599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 80059599516SKenneth E. Jansen 80159599516SKenneth E. Jansen //MR CHANGE 80259599516SKenneth E. Jansen // Measure the time - End of timer 80359599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 80459599516SKenneth E. Jansen // timer_end = rdtsc(); 80559599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 80659599516SKenneth E. Jansen // if (*pid==0) { 80759599516SKenneth E. Jansen // printf("\n*****************************\n"); 80859599516SKenneth E. Jansen // printf("Time: 'closefile' is: %f s\n",time_span); 80959599516SKenneth E. Jansen // } 81059599516SKenneth E. Jansen //MR CHANGE END 81159599516SKenneth E. Jansen 81259599516SKenneth E. Jansen //MR CHANGE 81359599516SKenneth E. Jansen // Measure the time - Start the timer 81459599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 81559599516SKenneth E. Jansen // timer_start = rdtsc(); 81659599516SKenneth E. Jansen //MR CHANGE END 81759599516SKenneth E. Jansen 81859599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 81959599516SKenneth E. Jansen 82059599516SKenneth E. Jansen //MR CHANGE 82159599516SKenneth E. Jansen // Measure the time - End of timer 82259599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 82359599516SKenneth E. Jansen // timer_end = rdtsc(); 82459599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 82559599516SKenneth E. Jansen if (*pid==0) { 82659599516SKenneth E. Jansen // printf("Time: 'finalizephmpiio' is: %f s\n",time_span); 82759599516SKenneth E. Jansen printf("Last field %d '%s' finished! \n",nfields, fieldtag); 82859599516SKenneth E. Jansen printf("\n"); 82959599516SKenneth E. Jansen // printf("*****************************\n"); 83059599516SKenneth E. Jansen } 83159599516SKenneth E. Jansen } 83259599516SKenneth E. Jansen //MR CHANGE END 83359599516SKenneth E. Jansen 83459599516SKenneth E. Jansen /////////////////////////////////////////////////////////////////////////////////////////// 83559599516SKenneth E. Jansen 83659599516SKenneth E. Jansen 83759599516SKenneth E. Jansen } 83859599516SKenneth E. Jansen 83959599516SKenneth E. Jansen 84059599516SKenneth E. Jansen void 84159599516SKenneth E. Jansen Write_Displ( int* pid, 84259599516SKenneth E. Jansen int* stepno, 84359599516SKenneth E. Jansen int* nshg, 84459599516SKenneth E. Jansen int* numVars, 84559599516SKenneth E. Jansen double* array1 ) { 84659599516SKenneth E. Jansen 84759599516SKenneth E. Jansen 84859599516SKenneth E. Jansen char fname[255]; 84959599516SKenneth E. Jansen char rfile[60]; 85059599516SKenneth E. Jansen int irstou; 85159599516SKenneth E. Jansen int magic_number = 362436; 85259599516SKenneth E. Jansen int* mptr = &magic_number; 85359599516SKenneth E. Jansen time_t timenow = time ( &timenow); 85459599516SKenneth E. Jansen double version=0.0; 85559599516SKenneth E. Jansen int isize, nitems; 85659599516SKenneth E. Jansen int iarray[10]; 85759599516SKenneth E. Jansen 85859599516SKenneth E. Jansen sprintf(rfile,"restart.%d.%d",*stepno,*pid+1); 85959599516SKenneth E. Jansen openfile(rfile,"append", &irstou); 86059599516SKenneth E. Jansen 86159599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 86259599516SKenneth E. Jansen nitems = 3; 86359599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 86459599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 86559599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 86659599516SKenneth E. Jansen writeheader( &irstou, "displacement", (void*)iarray, &nitems, &isize, "double", phasta_iotype ); 86759599516SKenneth E. Jansen 86859599516SKenneth E. Jansen nitems = (*nshg)*(*numVars); 86959599516SKenneth E. Jansen writedatablock( &irstou, "displacement", (void*)(array1), &nitems, "double", phasta_iotype ); 87059599516SKenneth E. Jansen 87159599516SKenneth E. Jansen closefile( &irstou, "append" ); 87259599516SKenneth E. Jansen } 87359599516SKenneth E. Jansen 87459599516SKenneth E. Jansen void 87559599516SKenneth E. Jansen Write_Field( int *pid, 87659599516SKenneth E. Jansen char* filemode, 87759599516SKenneth E. Jansen char* fieldtag, 87859599516SKenneth E. Jansen int* tagsize, 87959599516SKenneth E. Jansen void* array, 88059599516SKenneth E. Jansen char* arraytype, 88159599516SKenneth E. Jansen int* nshg, 88259599516SKenneth E. Jansen int* numvars, 88359599516SKenneth E. Jansen int* stepno) { 88459599516SKenneth E. Jansen 88559599516SKenneth E. Jansen //printf("Rank is %d, field is %s, tagsize is %d, nshg is %d, numvars is %d\n",*pid,fieldtag,*tagsize,*nshg,*numvars); 88659599516SKenneth E. Jansen 88759599516SKenneth E. Jansen // char rfile[32]; 88859599516SKenneth E. Jansen // assuming restart.sn.(pid+1) 88959599516SKenneth E. Jansen // sprintf(rfile,"restart.%d.%d",*stepno,*pid+1); 89059599516SKenneth E. Jansen 89159599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((*tagsize+1)*sizeof(char)); 89259599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 89359599516SKenneth E. Jansen fieldlabel[*tagsize] = '\0'; 89459599516SKenneth E. Jansen 89559599516SKenneth E. Jansen int irstou; 89659599516SKenneth E. Jansen int magic_number = 362436; 89759599516SKenneth E. Jansen int* mptr = &magic_number; 89859599516SKenneth E. Jansen double version=0.0; 89959599516SKenneth E. Jansen int isize, nitems; 90059599516SKenneth E. Jansen int iarray[10]; 90159599516SKenneth E. Jansen 90259599516SKenneth E. Jansen char fmode[10]; 90359599516SKenneth E. Jansen if(!strncmp(filemode,"w",1)) 90459599516SKenneth E. Jansen strcpy(fmode,"write"); 90559599516SKenneth E. Jansen else // default is append 90659599516SKenneth E. Jansen strcpy(fmode,"append"); 90759599516SKenneth E. Jansen 90859599516SKenneth E. Jansen char datatype[10]; 90959599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1)) 91059599516SKenneth E. Jansen strcpy(datatype,"int"); 91159599516SKenneth E. Jansen else // default is double 91259599516SKenneth E. Jansen strcpy(datatype,"double"); 91359599516SKenneth E. Jansen 91459599516SKenneth E. Jansen /* openfile_(rfile, fmode, &irstou); 91559599516SKenneth E. Jansen 91659599516SKenneth E. Jansen nitems = 3; // assuming field will write 3 items in iarray 91759599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 91859599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 91959599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 92059599516SKenneth E. Jansen 92159599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 92259599516SKenneth E. Jansen writeheader_( &irstou, fieldlabel, (void*)iarray, &nitems, &isize, datatype, phasta_iotype ); 92359599516SKenneth E. Jansen 92459599516SKenneth E. Jansen nitems = (*nshg)*(*numvars); 92559599516SKenneth E. Jansen writedatablock_( &irstou, fieldlabel, array, &nitems, datatype, phasta_iotype ); 92659599516SKenneth E. Jansen closefile_( &irstou, fmode); 92759599516SKenneth E. Jansen */ 92859599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 92959599516SKenneth E. Jansen 93059599516SKenneth E. Jansen int nfiles; 93159599516SKenneth E. Jansen int nfields; 93259599516SKenneth E. Jansen int numparts; 93359599516SKenneth E. Jansen int irank; 93459599516SKenneth E. Jansen int nprocs; 93559599516SKenneth E. Jansen 93659599516SKenneth E. Jansen // unsigned long long timer_start; 93759599516SKenneth E. Jansen // unsigned long long timer_end; 93859599516SKenneth E. Jansen // double time_span; 93959599516SKenneth E. Jansen 94059599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 94159599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 94259599516SKenneth E. Jansen numparts = workfc.numpe; 94359599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 94459599516SKenneth E. Jansen nprocs = workfc.numpe; 94559599516SKenneth E. Jansen 94659599516SKenneth E. Jansen int nppf = numparts/nfiles; 94759599516SKenneth E. Jansen int GPID; 94859599516SKenneth E. Jansen 94959599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 95059599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 95159599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 95259599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 95359599516SKenneth E. Jansen 95459599516SKenneth E. Jansen char filename[255],path[255],fieldtag_s[255]; 95559599516SKenneth E. Jansen bzero((void*)filename,255); 95659599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 95759599516SKenneth E. Jansen 95859599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 95959599516SKenneth E. Jansen 96059599516SKenneth E. Jansen field_flag++; 96159599516SKenneth E. Jansen if(*pid==0) { 96259599516SKenneth E. Jansen // printf("\n*****************************\n"); 96359599516SKenneth E. Jansen printf("\n"); 96459599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldlabel); 96559599516SKenneth E. Jansen } 96659599516SKenneth E. Jansen 96759599516SKenneth E. Jansen sprintf(filename,"restart-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1)); 96859599516SKenneth E. Jansen 96959599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 97059599516SKenneth E. Jansen // timer_start = rdtsc(); 97159599516SKenneth E. Jansen 97259599516SKenneth E. Jansen int i; 97359599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) { 97459599516SKenneth E. Jansen GPID = startpart + i; 97559599516SKenneth E. Jansen 97659599516SKenneth E. Jansen // Write solution field ... 97759599516SKenneth E. Jansen sprintf(fieldtag_s,"%s@%d",fieldlabel,GPID); 97859599516SKenneth E. Jansen 97959599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 98059599516SKenneth E. Jansen nitems = 3; 98159599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 98259599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 98359599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 98459599516SKenneth E. Jansen 98559599516SKenneth E. Jansen //MR CHANGE 98659599516SKenneth E. Jansen // Measure the time - Start the timer 98759599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 98859599516SKenneth E. Jansen // timer_start = rdtsc(); 98959599516SKenneth E. Jansen //MR CHANGE END 99059599516SKenneth E. Jansen 99159599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, datatype, phasta_iotype); 99259599516SKenneth E. Jansen 99359599516SKenneth E. Jansen //MR CHANGE 99459599516SKenneth E. Jansen // Measure the time - End of timer 99559599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 99659599516SKenneth E. Jansen // timer_end = rdtsc(); 99759599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 99859599516SKenneth E. Jansen // if (*pid==0) { 99959599516SKenneth E. Jansen // printf("Time: header for '%s': %f s\n",fieldtag_s,time_span); 100059599516SKenneth E. Jansen // } 100159599516SKenneth E. Jansen //MR CHANGE END 100259599516SKenneth E. Jansen 100359599516SKenneth E. Jansen nitems = (*nshg)*(*numvars); 100459599516SKenneth E. Jansen 100559599516SKenneth E. Jansen //MR CHANGE 100659599516SKenneth E. Jansen // Measure the time - Start the timer 100759599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 100859599516SKenneth E. Jansen // timer_start = rdtsc(); 100959599516SKenneth E. Jansen //MR CHANGE END 101059599516SKenneth E. Jansen 101159599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, array, &isize, datatype, phasta_iotype ); 101259599516SKenneth E. Jansen 101359599516SKenneth E. Jansen //MR CHANGE 101459599516SKenneth E. Jansen // Measure the time - End of timer 101559599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 101659599516SKenneth E. Jansen // timer_end = rdtsc(); 101759599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 101859599516SKenneth E. Jansen 101959599516SKenneth E. Jansen // int isizemin,isizemax,isizetot; 102059599516SKenneth E. Jansen // double sizemin,sizemax,sizeavg,sizetot,rate; 102159599516SKenneth E. Jansen 102259599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizemin,1,MPI_INT,MPI_MIN,MPI_COMM_WORLD); 102359599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizemax,1,MPI_INT,MPI_MAX,MPI_COMM_WORLD); 102459599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizetot,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD); 102559599516SKenneth E. Jansen 102659599516SKenneth E. Jansen // sizemin=(double)(8.0*isizemin/1024.0/1024.0); 102759599516SKenneth E. Jansen // sizemax=(double)(8.0*isizemax/1024.0/1024.0); 102859599516SKenneth E. Jansen // sizetot=(double)(8.0*isizetot/1024.0/1024.0); 102959599516SKenneth E. Jansen // sizeavg=sizetot/workfc.numpe; 103059599516SKenneth E. Jansen // rate=sizetot/time_span; 103159599516SKenneth E. Jansen 103259599516SKenneth E. Jansen // if (*pid==0) { 103359599516SKenneth E. Jansen // printf("Time: block for '%s': %f s\n",fieldtag_s,time_span); 103459599516SKenneth E. Jansen // printf("Time: block: Min= %f MB; Max= %f MB; Avg= %f MB; Tot= %f MB; Rate= %f MB/s; \n",sizemin,sizemax,sizeavg,sizetot,rate); 103559599516SKenneth E. Jansen // printf("*****************************\n"); 103659599516SKenneth E. Jansen // } 103759599516SKenneth E. Jansen //MR CHANGE END 103859599516SKenneth E. Jansen 103959599516SKenneth E. Jansen } 104059599516SKenneth E. Jansen 104159599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 104259599516SKenneth E. Jansen // timer_end = rdtsc(); 104359599516SKenneth E. Jansen // time_span=(double)(timer_end-timer_start)/cpu_speed; 104459599516SKenneth E. Jansen 104559599516SKenneth E. Jansen // if (*pid==0) { 104659599516SKenneth E. Jansen // printf("Field '%s' written in: %f s\n",fieldtag,time_span); 104759599516SKenneth E. Jansen // printf("Write field '%s' finished! \n",fieldtag_s); 104859599516SKenneth E. Jansen // } 104959599516SKenneth E. Jansen 105059599516SKenneth E. Jansen // if (field_flag==nfields){ 105159599516SKenneth E. Jansen // closefile_(&f_descriptor, "write"); 105259599516SKenneth E. Jansen // finalizephmpiio_(&f_descriptor); 105359599516SKenneth E. Jansen // if(*pid==0) { 105459599516SKenneth E. Jansen // printf("Last field %d '%s' finished! \n",nfields, fieldtag_s); 105559599516SKenneth E. Jansen // printf("\n*****************************\n"); 105659599516SKenneth E. Jansen // } 105759599516SKenneth E. Jansen // } 105859599516SKenneth E. Jansen 105959599516SKenneth E. Jansen if (field_flag==nfields){ 106059599516SKenneth E. Jansen 106159599516SKenneth E. Jansen //MR CHANGE 106259599516SKenneth E. Jansen // Measure the time - Start the timer 106359599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 106459599516SKenneth E. Jansen // timer_start = rdtsc(); 106559599516SKenneth E. Jansen //MR CHANGE END 106659599516SKenneth E. Jansen 106759599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 106859599516SKenneth E. Jansen 106959599516SKenneth E. Jansen //MR CHANGE 107059599516SKenneth E. Jansen // Measure the time - End of timer 107159599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 107259599516SKenneth E. Jansen // timer_end = rdtsc(); 107359599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 107459599516SKenneth E. Jansen // if (*pid==0) { 107559599516SKenneth E. Jansen // printf("\n*****************************\n"); 107659599516SKenneth E. Jansen // printf("Time: 'closefile' is: %f s\n",time_span); 107759599516SKenneth E. Jansen // } 107859599516SKenneth E. Jansen //MR CHANGE END 107959599516SKenneth E. Jansen 108059599516SKenneth E. Jansen //MR CHANGE 108159599516SKenneth E. Jansen // Measure the time - Start the timer 108259599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 108359599516SKenneth E. Jansen // timer_start = rdtsc(); 108459599516SKenneth E. Jansen //MR CHANGE END 108559599516SKenneth E. Jansen 108659599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 108759599516SKenneth E. Jansen 108859599516SKenneth E. Jansen //MR CHANGE 108959599516SKenneth E. Jansen // Measure the time - End of timer 109059599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 109159599516SKenneth E. Jansen // timer_end = rdtsc(); 109259599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 109359599516SKenneth E. Jansen if (*pid==0) { 109459599516SKenneth E. Jansen // printf("Time: 'finalizephmpiio' is: %f s\n",time_span); 109559599516SKenneth E. Jansen printf("Last field %d '%s' finished! \n",nfields, fieldtag); 109659599516SKenneth E. Jansen printf("\n"); 109759599516SKenneth E. Jansen // printf("*****************************\n"); 109859599516SKenneth E. Jansen } 109959599516SKenneth E. Jansen } 110059599516SKenneth E. Jansen //MR CHANGE END 110159599516SKenneth E. Jansen 110259599516SKenneth E. Jansen /////////////////////////////////////////////////////////////////////////////////////////// 110359599516SKenneth E. Jansen 110459599516SKenneth E. Jansen free(fieldlabel); 110559599516SKenneth E. Jansen } 110659599516SKenneth E. Jansen 110759599516SKenneth E. Jansen //MR CHANGE 110859599516SKenneth E. Jansen void 110959599516SKenneth E. Jansen Write_PhAvg( int* pid, 111059599516SKenneth E. Jansen char* filemode, 111159599516SKenneth E. Jansen char* fieldtag, 111259599516SKenneth E. Jansen int* tagsize, 111359599516SKenneth E. Jansen int* iphase, 111459599516SKenneth E. Jansen void* array, 111559599516SKenneth E. Jansen char* arraytype, 111659599516SKenneth E. Jansen int* nshg, 111759599516SKenneth E. Jansen int* numvars, 111859599516SKenneth E. Jansen int* stepno) { 111959599516SKenneth E. Jansen 112059599516SKenneth E. Jansen char rfile[32]; 112159599516SKenneth E. Jansen // assuming restart_phase_avg_<sn>.<iphase>.<pid+1> 112259599516SKenneth E. Jansen sprintf(rfile,"restart_phase_avg_%d.%d.%d",*stepno,*iphase,*pid+1); 112359599516SKenneth E. Jansen 112459599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((*tagsize+1)*sizeof(char)); 112559599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 112659599516SKenneth E. Jansen fieldlabel[*tagsize] = '\0'; 112759599516SKenneth E. Jansen 112859599516SKenneth E. Jansen int irstou; 112959599516SKenneth E. Jansen int isize, nitems; 113059599516SKenneth E. Jansen int iarray[10]; 113159599516SKenneth E. Jansen 113259599516SKenneth E. Jansen char fmode[10]; 113359599516SKenneth E. Jansen if(!strncmp(filemode,"w",1)) 113459599516SKenneth E. Jansen strcpy(fmode,"write"); 113559599516SKenneth E. Jansen else // default is append 113659599516SKenneth E. Jansen strcpy(fmode,"append"); 113759599516SKenneth E. Jansen 113859599516SKenneth E. Jansen char datatype[10]; 113959599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1)) 114059599516SKenneth E. Jansen strcpy(datatype,"int"); 114159599516SKenneth E. Jansen else // default is double 114259599516SKenneth E. Jansen strcpy(datatype,"double"); 114359599516SKenneth E. Jansen 114459599516SKenneth E. Jansen openfile(rfile, fmode, &irstou); 114559599516SKenneth E. Jansen 114659599516SKenneth E. Jansen if(!strcmp(fmode,"write")) { 114759599516SKenneth E. Jansen // may be create a routine for 'top' portion under write mode 114859599516SKenneth E. Jansen int magic_number = 362436; 114959599516SKenneth E. Jansen int* mptr = &magic_number; 115059599516SKenneth E. Jansen time_t timenow = time ( &timenow); 115159599516SKenneth E. Jansen double version=0.0; 115259599516SKenneth E. Jansen 115359599516SKenneth E. Jansen /* writing the top ascii header for the restart file */ 115459599516SKenneth E. Jansen 115559599516SKenneth E. Jansen writestring( &irstou,"# PHASTA Input File Version 2.0\n"); 115659599516SKenneth E. Jansen writestring( &irstou, 115759599516SKenneth E. Jansen "# format \"keyphrase : sizeofnextblock usual headers\"\n"); 115859599516SKenneth E. Jansen 115959599516SKenneth E. Jansen char fname[255]; 116059599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 116159599516SKenneth E. Jansen sprintf(fname,"# Output generated by phasta version (NOT YET CURRENT): %lf \n", version); 116259599516SKenneth E. Jansen writestring( &irstou, fname ); 116359599516SKenneth E. Jansen 116459599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 116559599516SKenneth E. Jansen gethostname(fname,255); 116659599516SKenneth E. Jansen writestring( &irstou,"# This result was produced on: "); 116759599516SKenneth E. Jansen writestring( &irstou, fname ); 116859599516SKenneth E. Jansen writestring( &irstou,"\n"); 116959599516SKenneth E. Jansen 117059599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 117159599516SKenneth E. Jansen sprintf(fname,"# %s\n", ctime( &timenow )); 117259599516SKenneth E. Jansen writestring( &irstou, fname ); 117359599516SKenneth E. Jansen 117459599516SKenneth E. Jansen isize = 1; 117559599516SKenneth E. Jansen nitems = 1; 117659599516SKenneth E. Jansen iarray[ 0 ] = 1; 117759599516SKenneth E. Jansen writeheader( &irstou, "byteorder magic number ", 117859599516SKenneth E. Jansen (void*)iarray, &nitems, &isize, "integer", phasta_iotype ); 117959599516SKenneth E. Jansen nitems = 1; 118059599516SKenneth E. Jansen writedatablock( &irstou, "byteorder magic number ", 118159599516SKenneth E. Jansen (void*)mptr, &nitems, "integer", phasta_iotype ); 118259599516SKenneth E. Jansen } 118359599516SKenneth E. Jansen 118459599516SKenneth E. Jansen nitems = 3; // assuming field will write 3 items in iarray 118559599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 118659599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 118759599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 118859599516SKenneth E. Jansen 118959599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 119059599516SKenneth E. Jansen writeheader( &irstou, fieldlabel, (void*)iarray, &nitems, &isize, datatype, phasta_iotype ); 119159599516SKenneth E. Jansen 119259599516SKenneth E. Jansen nitems = (*nshg)*(*numvars); 119359599516SKenneth E. Jansen writedatablock( &irstou, fieldlabel, array, &nitems, datatype, phasta_iotype ); 119459599516SKenneth E. Jansen 119559599516SKenneth E. Jansen closefile( &irstou, fmode); 119659599516SKenneth E. Jansen 119759599516SKenneth E. Jansen free(fieldlabel); 119859599516SKenneth E. Jansen } 119959599516SKenneth E. Jansen 120059599516SKenneth E. Jansen //MR CHANGE 120159599516SKenneth E. Jansen void 120259599516SKenneth E. Jansen Write_PhAvg2( int* pid, 120359599516SKenneth E. Jansen char* filemode, 120459599516SKenneth E. Jansen char* fieldtag, 120559599516SKenneth E. Jansen int* tagsize, 120659599516SKenneth E. Jansen int* iphase, 120759599516SKenneth E. Jansen int* nphasesincycle, 120859599516SKenneth E. Jansen void* array, 120959599516SKenneth E. Jansen char* arraytype, 121059599516SKenneth E. Jansen int* nshg, 121159599516SKenneth E. Jansen int* numvars, 121259599516SKenneth E. Jansen int* stepno) { 121359599516SKenneth E. Jansen 121459599516SKenneth E. Jansen // char rfile[32]; 121559599516SKenneth E. Jansen // assuming restart.sn.(pid+1) 121659599516SKenneth E. Jansen // sprintf(rfile,"restart.%d.%d",*stepno,*pid+1); 121759599516SKenneth E. Jansen 121859599516SKenneth E. Jansen int addtagsize; // phase number is added to the name of the field 121959599516SKenneth E. Jansen if(*iphase<10) 122059599516SKenneth E. Jansen addtagsize=1; 122159599516SKenneth E. Jansen else if(*iphase<100) 122259599516SKenneth E. Jansen addtagsize=2; 122359599516SKenneth E. Jansen else if(*iphase<1000) 122459599516SKenneth E. Jansen addtagsize=3; 122559599516SKenneth E. Jansen 122659599516SKenneth E. Jansen int tagsize2; 122759599516SKenneth E. Jansen tagsize2=*tagsize+addtagsize; 122859599516SKenneth E. Jansen 122959599516SKenneth E. Jansen // char *fieldlabel = (char *)malloc((*tagsize+1)*sizeof(char)); 123059599516SKenneth E. Jansen // strncpy(fieldlabel, fieldtag, *tagsize); 123159599516SKenneth E. Jansen // fieldlabel[*tagsize] = '\0'; 123259599516SKenneth E. Jansen 123359599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((tagsize2+1)*sizeof(char)); 123459599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 123559599516SKenneth E. Jansen fieldlabel[tagsize2] = '\0'; 123659599516SKenneth E. Jansen 123759599516SKenneth E. Jansen char straddtagsize[10]; 123859599516SKenneth E. Jansen sprintf(straddtagsize,"%d",*iphase); 123959599516SKenneth E. Jansen 124059599516SKenneth E. Jansen if(*iphase<10) { 124159599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[0]; 124259599516SKenneth E. Jansen } 124359599516SKenneth E. Jansen else if(*iphase<100) { 124459599516SKenneth E. Jansen fieldlabel[tagsize2-2]=straddtagsize[0]; 124559599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[1]; 124659599516SKenneth E. Jansen } 124759599516SKenneth E. Jansen else if(*iphase<1000) { 124859599516SKenneth E. Jansen fieldlabel[tagsize2-3]=straddtagsize[0]; 124959599516SKenneth E. Jansen fieldlabel[tagsize2-2]=straddtagsize[1]; 125059599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[2]; 125159599516SKenneth E. Jansen } 125259599516SKenneth E. Jansen 125359599516SKenneth E. Jansen int irstou; 125459599516SKenneth E. Jansen int magic_number = 362436; 125559599516SKenneth E. Jansen int* mptr = &magic_number; 125659599516SKenneth E. Jansen double version=0.0; 125759599516SKenneth E. Jansen int isize, nitems; 125859599516SKenneth E. Jansen int iarray[10]; 125959599516SKenneth E. Jansen 126059599516SKenneth E. Jansen char fmode[10]; 126159599516SKenneth E. Jansen if(!strncmp(filemode,"w",1)) 126259599516SKenneth E. Jansen strcpy(fmode,"write"); 126359599516SKenneth E. Jansen else // default is append 126459599516SKenneth E. Jansen strcpy(fmode,"append"); 126559599516SKenneth E. Jansen 126659599516SKenneth E. Jansen char datatype[10]; 126759599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1)) 126859599516SKenneth E. Jansen strcpy(datatype,"int"); 126959599516SKenneth E. Jansen else // default is double 127059599516SKenneth E. Jansen strcpy(datatype,"double"); 127159599516SKenneth E. Jansen 127259599516SKenneth E. Jansen // 127359599516SKenneth E. Jansen // // if(*iphase==1) //open the file but then keep it open for the remaining cycles 127459599516SKenneth E. Jansen // openfile_(rfile, fmode, &irstou); 127559599516SKenneth E. Jansen // 127659599516SKenneth E. Jansen // // printf("iphase: %d - pid: %d - irstou %d\n",*iphase,*pid,irstou); 127759599516SKenneth E. Jansen // 127859599516SKenneth E. Jansen // 127959599516SKenneth E. Jansen // nitems = 3; // assuming field will write 3 items in iarray 128059599516SKenneth E. Jansen // iarray[ 0 ] = (*nshg); 128159599516SKenneth E. Jansen // iarray[ 1 ] = (*numvars); 128259599516SKenneth E. Jansen // iarray[ 2 ] = (*stepno); 128359599516SKenneth E. Jansen // 128459599516SKenneth E. Jansen // isize = (*nshg)*(*numvars); 128559599516SKenneth E. Jansen // writeheader_( &irstou, fieldlabel, (void*)iarray, &nitems, &isize, datatype, phasta_iotype ); 128659599516SKenneth E. Jansen // 128759599516SKenneth E. Jansen // nitems = (*nshg)*(*numvars); 128859599516SKenneth E. Jansen // writedatablock_( &irstou, fieldlabel, array, &nitems, datatype, phasta_iotype ); 128959599516SKenneth E. Jansen // 129059599516SKenneth E. Jansen // // if(*iphase==*nphasesincycle) //close the file after nphasesincycle 129159599516SKenneth E. Jansen // closefile_( &irstou, fmode); 129259599516SKenneth E. Jansen // 129359599516SKenneth E. Jansen 129459599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 129559599516SKenneth E. Jansen 129659599516SKenneth E. Jansen int nfiles; 129759599516SKenneth E. Jansen int nfields; 129859599516SKenneth E. Jansen int numparts; 129959599516SKenneth E. Jansen int irank; 130059599516SKenneth E. Jansen int nprocs; 130159599516SKenneth E. Jansen // unsigned long long timer_start; 130259599516SKenneth E. Jansen // unsigned long long timer_end; 130359599516SKenneth E. Jansen // double time_span; 130459599516SKenneth E. Jansen 130559599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 130659599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 130759599516SKenneth E. Jansen numparts = workfc.numpe; 130859599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 130959599516SKenneth E. Jansen nprocs = workfc.numpe; 131059599516SKenneth E. Jansen 131159599516SKenneth E. Jansen int nppf = numparts/nfiles; 131259599516SKenneth E. Jansen int GPID; 131359599516SKenneth E. Jansen 131459599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 131559599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 131659599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 131759599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 131859599516SKenneth E. Jansen 131959599516SKenneth E. Jansen //int descriptor; 132059599516SKenneth E. Jansen char filename[255],path[255],fieldtag_s[255]; 132159599516SKenneth E. Jansen bzero((void*)filename,255); 132259599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 132359599516SKenneth E. Jansen 132459599516SKenneth E. Jansen // char * namer; 132559599516SKenneth E. Jansen // namer = strtok(fieldlabel," "); 132659599516SKenneth E. Jansen // strncpy(fieldlabel, fieldtag, *tagsize); 132759599516SKenneth E. Jansen 132859599516SKenneth E. Jansen field_flag++; 132959599516SKenneth E. Jansen if(*pid==0) { 133059599516SKenneth E. Jansen // printf("\n*****************************\n"); 133159599516SKenneth E. Jansen printf("\n"); 133259599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldlabel); 133359599516SKenneth E. Jansen } 133459599516SKenneth E. Jansen 133559599516SKenneth E. Jansen sprintf(filename,"restart-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1)); 133659599516SKenneth E. Jansen 133759599516SKenneth E. Jansen int i; 133859599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) { 133959599516SKenneth E. Jansen GPID = startpart + i; 134059599516SKenneth E. Jansen 134159599516SKenneth E. Jansen // Write solution field ... 134259599516SKenneth E. Jansen sprintf(fieldtag_s,"%s@%d",fieldlabel,GPID); 134359599516SKenneth E. Jansen 134459599516SKenneth E. Jansen //printf("This is %d and fieldtag_s is %s \n",myrank,fieldtag_s); 134559599516SKenneth E. Jansen 134659599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 134759599516SKenneth E. Jansen nitems = 3; 134859599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 134959599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 135059599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 135159599516SKenneth E. Jansen 135259599516SKenneth E. Jansen //MR CHANGE 135359599516SKenneth E. Jansen // Measure the time - Start the timer 135459599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 135559599516SKenneth E. Jansen // timer_start = rdtsc(); 135659599516SKenneth E. Jansen //MR CHANGE END 135759599516SKenneth E. Jansen 135859599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 135959599516SKenneth E. Jansen 136059599516SKenneth E. Jansen //MR CHANGE 136159599516SKenneth E. Jansen // Measure the time - End of timer 136259599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 136359599516SKenneth E. Jansen // timer_end = rdtsc(); 136459599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 136559599516SKenneth E. Jansen // if (*pid==0) { 136659599516SKenneth E. Jansen // printf("Time: header for '%s': %f s\n",fieldtag_s,time_span); 136759599516SKenneth E. Jansen // } 136859599516SKenneth E. Jansen //MR CHANGE END 136959599516SKenneth E. Jansen 137059599516SKenneth E. Jansen nitems = (*nshg)*(*numvars); 137159599516SKenneth E. Jansen 137259599516SKenneth E. Jansen //MR CHANGE 137359599516SKenneth E. Jansen // Measure the time - Start the timer 137459599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 137559599516SKenneth E. Jansen // timer_start = rdtsc(); 137659599516SKenneth E. Jansen //MR CHANGE END 137759599516SKenneth E. Jansen 137859599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, array, &isize, "double", phasta_iotype ); 137959599516SKenneth E. Jansen 138059599516SKenneth E. Jansen //MR CHANGE 138159599516SKenneth E. Jansen // Measure the time - End of timer 138259599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 138359599516SKenneth E. Jansen // timer_end = rdtsc(); 138459599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 138559599516SKenneth E. Jansen 138659599516SKenneth E. Jansen // int isizemin,isizemax,isizetot; 138759599516SKenneth E. Jansen // double sizemin,sizemax,sizeavg,sizetot,rate; 138859599516SKenneth E. Jansen 138959599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizemin,1,MPI_INT,MPI_MIN,MPI_COMM_WORLD); 139059599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizemax,1,MPI_INT,MPI_MAX,MPI_COMM_WORLD); 139159599516SKenneth E. Jansen // MPI_Allreduce(&isize,&isizetot,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD); 139259599516SKenneth E. Jansen 139359599516SKenneth E. Jansen // sizemin=(double)(8.0*isizemin/1024.0/1024.0); 139459599516SKenneth E. Jansen // sizemax=(double)(8.0*isizemax/1024.0/1024.0); 139559599516SKenneth E. Jansen // sizetot=(double)(8.0*isizetot/1024.0/1024.0); 139659599516SKenneth E. Jansen // sizeavg=sizetot/workfc.numpe; 139759599516SKenneth E. Jansen // rate=sizetot/time_span; 139859599516SKenneth E. Jansen 139959599516SKenneth E. Jansen // if (*pid==0) { 140059599516SKenneth E. Jansen // printf("Time: block for '%s': %f s\n",fieldtag_s,time_span); 140159599516SKenneth E. Jansen // printf("Time: block: Min= %f MB; Max= %f MB; Avg= %f MB; Tot= %f MB; Rate= %f MB/s; \n",sizemin,sizemax,sizeavg,sizetot,rate); 140259599516SKenneth E. Jansen // printf("*****************************\n"); 140359599516SKenneth E. Jansen // } 140459599516SKenneth E. Jansen //MR CHANGE END 140559599516SKenneth E. Jansen 140659599516SKenneth E. Jansen } 140759599516SKenneth E. Jansen 140859599516SKenneth E. Jansen // if (*pid==0) { 140959599516SKenneth E. Jansen // printf("Field '%s' written in: %f s\n",fieldtag,time_span); 141059599516SKenneth E. Jansen // printf("Write field '%s' finished! \n",fieldtag_s); 141159599516SKenneth E. Jansen // } 141259599516SKenneth E. Jansen 141359599516SKenneth E. Jansen // 141459599516SKenneth E. Jansen // if (field_flag==nfields){ 141559599516SKenneth E. Jansen // closefile_(&f_descriptor, "write"); 141659599516SKenneth E. Jansen // finalizephmpiio_(&f_descriptor); 141759599516SKenneth E. Jansen // if(*pid==0) { 141859599516SKenneth E. Jansen // printf("Last field %d '%s' finished! \n",nfields, fieldtag_s); 141959599516SKenneth E. Jansen // printf("\n*****************************\n"); 142059599516SKenneth E. Jansen // } 142159599516SKenneth E. Jansen // } 142259599516SKenneth E. Jansen 142359599516SKenneth E. Jansen if (field_flag==nfields){ 142459599516SKenneth E. Jansen 142559599516SKenneth E. Jansen //MR CHANGE 142659599516SKenneth E. Jansen // Measure the time - Start the timer 142759599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 142859599516SKenneth E. Jansen // timer_start = rdtsc(); 142959599516SKenneth E. Jansen //MR CHANGE END 143059599516SKenneth E. Jansen 143159599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 143259599516SKenneth E. Jansen 143359599516SKenneth E. Jansen //MR CHANGE 143459599516SKenneth E. Jansen // Measure the time - End of timer 143559599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 143659599516SKenneth E. Jansen // timer_end = rdtsc(); 143759599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 143859599516SKenneth E. Jansen // if (*pid==0) { 143959599516SKenneth E. Jansen // printf("\n*****************************\n"); 144059599516SKenneth E. Jansen // printf("Time: 'closefile' is: %f s\n",time_span); 144159599516SKenneth E. Jansen // } 144259599516SKenneth E. Jansen //MR CHANGE END 144359599516SKenneth E. Jansen 144459599516SKenneth E. Jansen //MR CHANGE 144559599516SKenneth E. Jansen // Measure the time - Start the timer 144659599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 144759599516SKenneth E. Jansen // timer_start = rdtsc(); 144859599516SKenneth E. Jansen //MR CHANGE END 144959599516SKenneth E. Jansen 145059599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 145159599516SKenneth E. Jansen 145259599516SKenneth E. Jansen //MR CHANGE 145359599516SKenneth E. Jansen // Measure the time - End of timer 145459599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 145559599516SKenneth E. Jansen // timer_end = rdtsc(); 145659599516SKenneth E. Jansen // time_span=(double)((timer_end-timer_start)/cpu_speed); 145759599516SKenneth E. Jansen if (*pid==0) { 145859599516SKenneth E. Jansen // printf("Time: 'finalizephmpiio' is: %f s\n",time_span); 145959599516SKenneth E. Jansen // printf("Last field %d '%s' finished! \n",nfields, fieldtag); 146059599516SKenneth E. Jansen printf("\n"); 146159599516SKenneth E. Jansen // printf("*****************************\n"); 146259599516SKenneth E. Jansen } 146359599516SKenneth E. Jansen } 146459599516SKenneth E. Jansen //MR CHANGE END 146559599516SKenneth E. Jansen 146659599516SKenneth E. Jansen /////////////////////////////////////////////////////////////////////////////////////////// 146759599516SKenneth E. Jansen 146859599516SKenneth E. Jansen free(fieldlabel); 146959599516SKenneth E. Jansen } 147059599516SKenneth E. Jansen 147159599516SKenneth E. Jansen 147259599516SKenneth E. Jansen void 147359599516SKenneth E. Jansen Write_d2wall( int* pid, 147459599516SKenneth E. Jansen int* numnp, 147559599516SKenneth E. Jansen double* array1 ) { 147659599516SKenneth E. Jansen 147759599516SKenneth E. Jansen // time_t timenow = time ( &timenow); 147859599516SKenneth E. Jansen int isize, nitems; 147959599516SKenneth E. Jansen int iarray[10]; 148059599516SKenneth E. Jansen 148159599516SKenneth E. Jansen // MPI_Barrier(MPI_COMM_WORLD); 148259599516SKenneth E. Jansen 148359599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 148459599516SKenneth E. Jansen 148559599516SKenneth E. Jansen int nfiles; 148659599516SKenneth E. Jansen int nfields; 148759599516SKenneth E. Jansen int numparts; 148859599516SKenneth E. Jansen int irank; 148959599516SKenneth E. Jansen int nprocs; 149059599516SKenneth E. Jansen 149159599516SKenneth E. Jansen // First, count the number of fields to write and store the result in 149259599516SKenneth E. Jansen //countfieldstowriterestart(); 149359599516SKenneth E. Jansen 149459599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO 149559599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 149659599516SKenneth E. Jansen nfields = 1; //outpar.nsynciofieldswriterestart; // Only the distance to the walls in d2wall 149759599516SKenneth E. Jansen numparts = workfc.numpe; 149859599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 149959599516SKenneth E. Jansen nprocs = workfc.numpe; 150059599516SKenneth E. Jansen int nppf = numparts/nfiles; 150159599516SKenneth E. Jansen int GPID; 150259599516SKenneth E. Jansen 150359599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 150459599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 150559599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 150659599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 150759599516SKenneth E. Jansen 150859599516SKenneth E. Jansen int descriptor; 150959599516SKenneth E. Jansen char filename[255],path[255],fieldtag_s[255]; 151059599516SKenneth E. Jansen bzero((void*)filename,255); 151159599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 151259599516SKenneth E. Jansen 151359599516SKenneth E. Jansen sprintf(filename,"d2wall.%d",((int)(irank/(nprocs/nfiles))+1)); 151459599516SKenneth E. Jansen 151559599516SKenneth E. Jansen if (irank==0) { 151659599516SKenneth E. Jansen printf("Filename is %s \n",filename); 151759599516SKenneth E. Jansen } 151859599516SKenneth E. Jansen 151959599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write"); 152059599516SKenneth E. Jansen 152159599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor); 152259599516SKenneth E. Jansen 152359599516SKenneth E. Jansen field_flag=0; 152459599516SKenneth E. Jansen 152559599516SKenneth E. Jansen int i; 152659599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 152759599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 152859599516SKenneth E. Jansen // e.g : (in this example) 152959599516SKenneth E. Jansen // proc 0 : 1--4 153059599516SKenneth E. Jansen // proc 1 : 5--8 ... 153159599516SKenneth E. Jansen GPID = startpart + i; 153259599516SKenneth E. Jansen 153359599516SKenneth E. Jansen // Write solution field ... 153459599516SKenneth E. Jansen sprintf(fieldtag_s,"d2wall@%d",GPID); 153559599516SKenneth E. Jansen 153659599516SKenneth E. Jansen isize = (*numnp); 153759599516SKenneth E. Jansen nitems = 2; 153859599516SKenneth E. Jansen iarray[ 0 ] = (*numnp); 153959599516SKenneth E. Jansen iarray[ 1 ] = 1; //numVars = 1 154059599516SKenneth E. Jansen 154159599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 154259599516SKenneth E. Jansen 154359599516SKenneth E. Jansen //nitems = (*nshg)*(*numVars); 154459599516SKenneth E. Jansen //nitems = (*numnp); 154559599516SKenneth E. Jansen 154659599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype ); 154759599516SKenneth E. Jansen 154859599516SKenneth E. Jansen 154959599516SKenneth E. Jansen } 155059599516SKenneth E. Jansen field_flag++; 155159599516SKenneth E. Jansen 155259599516SKenneth E. Jansen if (field_flag==nfields){ 155359599516SKenneth E. Jansen 155459599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 155559599516SKenneth E. Jansen 155659599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 155759599516SKenneth E. Jansen 155859599516SKenneth E. Jansen if (irank==0) { 155959599516SKenneth E. Jansen printf("\n"); 156059599516SKenneth E. Jansen } 156159599516SKenneth E. Jansen } 156259599516SKenneth E. Jansen } 156359599516SKenneth E. Jansen 1564