1*59599516SKenneth E. Jansen /* This file provides interface functions for 'partial ' random 2*59599516SKenneth E. Jansen access into the PHASTA input files 3*59599516SKenneth E. Jansen 4*59599516SKenneth E. Jansen Anil Karanam March 2001 */ 5*59599516SKenneth E. Jansen 6*59599516SKenneth E. Jansen #include <stdio.h> 7*59599516SKenneth E. Jansen #include <string.h> 8*59599516SKenneth E. Jansen #include <ctype.h> 9*59599516SKenneth E. Jansen #include <stdlib.h> 10*59599516SKenneth E. Jansen #include <time.h> 11*59599516SKenneth E. Jansen #include <math.h> 12*59599516SKenneth E. Jansen #include <mpi.h> 13*59599516SKenneth E. Jansen #include "phastaIO.h" 14*59599516SKenneth E. Jansen #include <FCMangle.h> 15*59599516SKenneth E. Jansen #include "new_interfaceM2NFixBnd.h" 16*59599516SKenneth E. Jansen 17*59599516SKenneth E. Jansen //MR CHANGE 18*59599516SKenneth E. Jansen #include "commonM2NFixBnd_c.h" 19*59599516SKenneth E. Jansen //MR CHANGE END 20*59599516SKenneth E. Jansen 21*59599516SKenneth E. Jansen #ifdef intel 22*59599516SKenneth E. Jansen #include <winsock2.h> 23*59599516SKenneth E. Jansen #else 24*59599516SKenneth E. Jansen #include <unistd.h> 25*59599516SKenneth E. Jansen #include <strings.h> 26*59599516SKenneth E. Jansen #endif 27*59599516SKenneth E. Jansen 28*59599516SKenneth E. Jansen 29*59599516SKenneth E. Jansen void 30*59599516SKenneth E. Jansen Write_M2NFixBnd(int* pid, 31*59599516SKenneth E. Jansen int* stepno, 32*59599516SKenneth E. Jansen int* nshg, 33*59599516SKenneth E. Jansen int* numVars, 34*59599516SKenneth E. Jansen int* ndofybar, 35*59599516SKenneth E. Jansen int* ndoferrors, 36*59599516SKenneth E. Jansen double* array1, 37*59599516SKenneth E. Jansen double* array2, 38*59599516SKenneth E. Jansen double* array3, 39*59599516SKenneth E. Jansen double* array4 ) { 40*59599516SKenneth E. Jansen 41*59599516SKenneth E. Jansen char fname[255]; 42*59599516SKenneth E. Jansen char rfile[60]; 43*59599516SKenneth E. Jansen char existingfile[30], linkfile[30]; 44*59599516SKenneth E. Jansen int irstou; 45*59599516SKenneth E. Jansen int magic_number = 362436; 46*59599516SKenneth E. Jansen int* mptr = &magic_number; 47*59599516SKenneth E. Jansen double version=0.0; 48*59599516SKenneth E. Jansen int isize, nitems; 49*59599516SKenneth E. Jansen int iarray[10]; 50*59599516SKenneth E. Jansen int nfiles; 51*59599516SKenneth E. Jansen int nfields; 52*59599516SKenneth E. Jansen int numparts; 53*59599516SKenneth E. Jansen int irank; 54*59599516SKenneth E. Jansen int nprocs; 55*59599516SKenneth E. Jansen 56*59599516SKenneth E. Jansen 57*59599516SKenneth E. Jansen irank = *pid; 58*59599516SKenneth E. Jansen 59*59599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO 60*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; //We use the same number of files as before 61*59599516SKenneth E. Jansen nfields = 4; 62*59599516SKenneth E. Jansen numparts = workfc.numpe; 63*59599516SKenneth E. Jansen nprocs= workfc.numpe; 64*59599516SKenneth E. Jansen 65*59599516SKenneth E. Jansen int nppf = numparts/nfiles; 66*59599516SKenneth E. Jansen int GPID; 67*59599516SKenneth E. Jansen 68*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 69*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 70*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 71*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 72*59599516SKenneth E. Jansen 73*59599516SKenneth E. Jansen int descriptor; 74*59599516SKenneth E. Jansen char filename[255],fieldtag_s[255]; 75*59599516SKenneth E. Jansen bzero((void*)filename,255); 76*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 77*59599516SKenneth E. Jansen 78*59599516SKenneth E. Jansen sprintf(filename,"restartRed-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1)); 79*59599516SKenneth E. Jansen if (*pid==0) { 80*59599516SKenneth E. Jansen printf("Filename is %s \n",filename); 81*59599516SKenneth E. Jansen } 82*59599516SKenneth E. Jansen 83*59599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write"); 84*59599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor); 85*59599516SKenneth E. Jansen 86*59599516SKenneth E. Jansen // solution 87*59599516SKenneth E. Jansen int i; 88*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 89*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 90*59599516SKenneth E. Jansen // e.g : (in this example) 91*59599516SKenneth E. Jansen // proc 0 : 1--4 92*59599516SKenneth E. Jansen // proc 1 : 5--8 ... 93*59599516SKenneth E. Jansen GPID = startpart + i; 94*59599516SKenneth E. Jansen 95*59599516SKenneth E. Jansen // Write solution field ... 96*59599516SKenneth E. Jansen sprintf(fieldtag_s,"solution@%d",GPID); 97*59599516SKenneth E. Jansen 98*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 99*59599516SKenneth E. Jansen nitems = 3; 100*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 101*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 102*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 103*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 104*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype ); 105*59599516SKenneth E. Jansen } 106*59599516SKenneth E. Jansen 107*59599516SKenneth E. Jansen // ybar 108*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 109*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 110*59599516SKenneth E. Jansen // e.g : (in this example) 111*59599516SKenneth E. Jansen // proc 0 : 1--4 112*59599516SKenneth E. Jansen // proc 1 : 5--8 ... 113*59599516SKenneth E. Jansen GPID = startpart + i; 114*59599516SKenneth E. Jansen 115*59599516SKenneth E. Jansen // Write solution field ... 116*59599516SKenneth E. Jansen sprintf(fieldtag_s,"ybar@%d",GPID); 117*59599516SKenneth E. Jansen 118*59599516SKenneth E. Jansen isize = (*nshg)*(*ndofybar); 119*59599516SKenneth E. Jansen nitems = 3; 120*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 121*59599516SKenneth E. Jansen iarray[ 1 ] = (*ndofybar); 122*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 123*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 124*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array2), &isize, "double", phasta_iotype ); 125*59599516SKenneth E. Jansen } 126*59599516SKenneth E. Jansen 127*59599516SKenneth E. Jansen // errors 128*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 129*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 130*59599516SKenneth E. Jansen // e.g : (in this example) 131*59599516SKenneth E. Jansen // proc 0 : 1--4 132*59599516SKenneth E. Jansen // proc 1 : 5--8 ... 133*59599516SKenneth E. Jansen GPID = startpart + i; 134*59599516SKenneth E. Jansen 135*59599516SKenneth E. Jansen // Write solution field ... 136*59599516SKenneth E. Jansen sprintf(fieldtag_s,"errors@%d",GPID); 137*59599516SKenneth E. Jansen 138*59599516SKenneth E. Jansen isize = (*nshg)*(*ndoferrors); 139*59599516SKenneth E. Jansen nitems = 3; 140*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 141*59599516SKenneth E. Jansen iarray[ 1 ] = (*ndoferrors); 142*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 143*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 144*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array3), &isize, "double", phasta_iotype ); 145*59599516SKenneth E. Jansen } 146*59599516SKenneth E. Jansen 147*59599516SKenneth E. Jansen // dwal 148*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 149*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 150*59599516SKenneth E. Jansen // e.g : (in this example) 151*59599516SKenneth E. Jansen // proc 0 : 1--4 152*59599516SKenneth E. Jansen // proc 1 : 5--8 ... 153*59599516SKenneth E. Jansen GPID = startpart + i; 154*59599516SKenneth E. Jansen 155*59599516SKenneth E. Jansen // Write solution field ... 156*59599516SKenneth E. Jansen sprintf(fieldtag_s,"dwal@%d",GPID); 157*59599516SKenneth E. Jansen 158*59599516SKenneth E. Jansen isize = (*nshg)*1; 159*59599516SKenneth E. Jansen nitems = 3; 160*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 161*59599516SKenneth E. Jansen iarray[ 1 ] = 1; 162*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 163*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 164*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array4), &isize, "double", phasta_iotype ); 165*59599516SKenneth E. Jansen } 166*59599516SKenneth E. Jansen 167*59599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 168*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 169*59599516SKenneth E. Jansen 170*59599516SKenneth E. Jansen return; 171*59599516SKenneth E. Jansen } 172*59599516SKenneth E. Jansen 173*59599516SKenneth E. Jansen void 174*59599516SKenneth E. Jansen Write_M2NFixBnd_SolOnly(int* pid, 175*59599516SKenneth E. Jansen int* stepno, 176*59599516SKenneth E. Jansen int* nshg, 177*59599516SKenneth E. Jansen int* numVars, 178*59599516SKenneth E. Jansen double* array1 ) { 179*59599516SKenneth E. Jansen 180*59599516SKenneth E. Jansen char fname[255]; 181*59599516SKenneth E. Jansen char rfile[60]; 182*59599516SKenneth E. Jansen char existingfile[30], linkfile[30]; 183*59599516SKenneth E. Jansen int irstou; 184*59599516SKenneth E. Jansen int magic_number = 362436; 185*59599516SKenneth E. Jansen int* mptr = &magic_number; 186*59599516SKenneth E. Jansen double version=0.0; 187*59599516SKenneth E. Jansen int isize, nitems; 188*59599516SKenneth E. Jansen int iarray[10]; 189*59599516SKenneth E. Jansen int nfiles; 190*59599516SKenneth E. Jansen int nfields; 191*59599516SKenneth E. Jansen int numparts; 192*59599516SKenneth E. Jansen int irank; 193*59599516SKenneth E. Jansen int nprocs; 194*59599516SKenneth E. Jansen 195*59599516SKenneth E. Jansen // First, count the number of fields to write and store the result in 196*59599516SKenneth E. Jansen //countfieldstowriterestart(); 197*59599516SKenneth E. Jansen 198*59599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO 199*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 200*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 201*59599516SKenneth E. Jansen numparts = workfc.numpe; 202*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 203*59599516SKenneth E. Jansen nprocs = workfc.numpe; 204*59599516SKenneth E. Jansen int nppf = numparts/nfiles; 205*59599516SKenneth E. Jansen int GPID; 206*59599516SKenneth E. Jansen 207*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 208*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 209*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 210*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 211*59599516SKenneth E. Jansen 212*59599516SKenneth E. Jansen int descriptor; 213*59599516SKenneth E. Jansen char filename[255],fieldtag_s[255]; 214*59599516SKenneth E. Jansen bzero((void*)filename,255); 215*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 216*59599516SKenneth E. Jansen 217*59599516SKenneth E. Jansen sprintf(filename,"restartRed-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1)); 218*59599516SKenneth E. Jansen 219*59599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write"); 220*59599516SKenneth E. Jansen 221*59599516SKenneth E. Jansen if (*pid==0) { 222*59599516SKenneth E. Jansen printf("Filename is %s \n",filename); 223*59599516SKenneth E. Jansen } 224*59599516SKenneth E. Jansen 225*59599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor); 226*59599516SKenneth E. Jansen 227*59599516SKenneth E. Jansen field_flag=0; 228*59599516SKenneth E. Jansen 229*59599516SKenneth E. Jansen int i; 230*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 231*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 232*59599516SKenneth E. Jansen // e.g : (in this example) 233*59599516SKenneth E. Jansen // proc 0 : 1--4 234*59599516SKenneth E. Jansen // proc 1 : 5--8 ... 235*59599516SKenneth E. Jansen GPID = startpart + i; 236*59599516SKenneth E. Jansen 237*59599516SKenneth E. Jansen // Write solution field ... 238*59599516SKenneth E. Jansen sprintf(fieldtag_s,"solution@%d",GPID); 239*59599516SKenneth E. Jansen 240*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 241*59599516SKenneth E. Jansen nitems = 3; 242*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 243*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 244*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 245*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 246*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype ); 247*59599516SKenneth E. Jansen 248*59599516SKenneth E. Jansen } 249*59599516SKenneth E. Jansen field_flag++; 250*59599516SKenneth E. Jansen 251*59599516SKenneth E. Jansen if (field_flag==nfields){ 252*59599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 253*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 254*59599516SKenneth E. Jansen if (*pid==0) { 255*59599516SKenneth E. Jansen printf("\n"); 256*59599516SKenneth E. Jansen } 257*59599516SKenneth E. Jansen } 258*59599516SKenneth E. Jansen } 259*59599516SKenneth E. Jansen 260*59599516SKenneth E. Jansen 261*59599516SKenneth E. Jansen 262*59599516SKenneth E. Jansen void 263*59599516SKenneth E. Jansen Write_Restart( int* pid, 264*59599516SKenneth E. Jansen int* stepno, 265*59599516SKenneth E. Jansen int* nshg, 266*59599516SKenneth E. Jansen int* numVars, 267*59599516SKenneth E. Jansen double* array1, 268*59599516SKenneth E. Jansen double* array2 ) { 269*59599516SKenneth E. Jansen 270*59599516SKenneth E. Jansen char fname[255]; 271*59599516SKenneth E. Jansen char rfile[60]; 272*59599516SKenneth E. Jansen char existingfile[30], linkfile[30]; 273*59599516SKenneth E. Jansen int irstou; 274*59599516SKenneth E. Jansen int magic_number = 362436; 275*59599516SKenneth E. Jansen int* mptr = &magic_number; 276*59599516SKenneth E. Jansen double version=0.0; 277*59599516SKenneth E. Jansen int isize, nitems; 278*59599516SKenneth E. Jansen int iarray[10]; 279*59599516SKenneth E. Jansen int nfiles; 280*59599516SKenneth E. Jansen int nfields; 281*59599516SKenneth E. Jansen int numparts; 282*59599516SKenneth E. Jansen int irank; 283*59599516SKenneth E. Jansen int nprocs; 284*59599516SKenneth E. Jansen 285*59599516SKenneth E. Jansen // First, count the number of fields to write and store the result in 286*59599516SKenneth E. Jansen //countfieldstowriterestart(); 287*59599516SKenneth E. Jansen 288*59599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO 289*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 290*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 291*59599516SKenneth E. Jansen numparts = workfc.numpe; 292*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 293*59599516SKenneth E. Jansen nprocs = workfc.numpe; 294*59599516SKenneth E. Jansen int nppf = numparts/nfiles; 295*59599516SKenneth E. Jansen int GPID; 296*59599516SKenneth E. Jansen 297*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 298*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 299*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 300*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 301*59599516SKenneth E. Jansen 302*59599516SKenneth E. Jansen int descriptor; 303*59599516SKenneth E. Jansen char filename[255],fieldtag_s[255]; 304*59599516SKenneth E. Jansen bzero((void*)filename,255); 305*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 306*59599516SKenneth E. Jansen 307*59599516SKenneth E. Jansen sprintf(filename,"restart-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1)); 308*59599516SKenneth E. Jansen 309*59599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write"); 310*59599516SKenneth E. Jansen 311*59599516SKenneth E. Jansen if (*pid==0) { 312*59599516SKenneth E. Jansen printf("Filename is %s \n",filename); 313*59599516SKenneth E. Jansen } 314*59599516SKenneth E. Jansen 315*59599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor); 316*59599516SKenneth E. Jansen 317*59599516SKenneth E. Jansen field_flag=0; 318*59599516SKenneth E. Jansen 319*59599516SKenneth E. Jansen int i; 320*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 321*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 322*59599516SKenneth E. Jansen // e.g : (in this example) 323*59599516SKenneth E. Jansen // proc 0 : 1--4 324*59599516SKenneth E. Jansen // proc 1 : 5--8 ... 325*59599516SKenneth E. Jansen GPID = startpart + i; 326*59599516SKenneth E. Jansen 327*59599516SKenneth E. Jansen // Write solution field ... 328*59599516SKenneth E. Jansen sprintf(fieldtag_s,"solution@%d",GPID); 329*59599516SKenneth E. Jansen 330*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 331*59599516SKenneth E. Jansen nitems = 3; 332*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 333*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 334*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 335*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 336*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype ); 337*59599516SKenneth E. Jansen } 338*59599516SKenneth E. Jansen field_flag++; 339*59599516SKenneth E. Jansen 340*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { 341*59599516SKenneth E. Jansen 342*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 343*59599516SKenneth E. Jansen // e.g : (in this example) 344*59599516SKenneth E. Jansen // proc 0 : 1--4 345*59599516SKenneth E. Jansen // proc 1 : 5--8 ... 346*59599516SKenneth E. Jansen GPID = startpart + i; 347*59599516SKenneth E. Jansen 348*59599516SKenneth E. Jansen // Write solution field ... 349*59599516SKenneth E. Jansen sprintf(fieldtag_s,"time derivative of solution@%d",GPID); 350*59599516SKenneth E. Jansen 351*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 352*59599516SKenneth E. Jansen nitems = 3; 353*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 354*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 355*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 356*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 357*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array2), &isize, "double", phasta_iotype ); 358*59599516SKenneth E. Jansen } 359*59599516SKenneth E. Jansen field_flag++; 360*59599516SKenneth E. Jansen 361*59599516SKenneth E. Jansen if (field_flag==nfields){ 362*59599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 363*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 364*59599516SKenneth E. Jansen if (*pid==0) { 365*59599516SKenneth E. Jansen printf("\n"); 366*59599516SKenneth E. Jansen } 367*59599516SKenneth E. Jansen } 368*59599516SKenneth E. Jansen } 369*59599516SKenneth E. Jansen 370*59599516SKenneth E. Jansen 371*59599516SKenneth E. Jansen void 372*59599516SKenneth E. Jansen Write_Error( int* pid, 373*59599516SKenneth E. Jansen int* stepno, 374*59599516SKenneth E. Jansen int* nshg, 375*59599516SKenneth E. Jansen int* numVars, 376*59599516SKenneth E. Jansen double* array1 ) { 377*59599516SKenneth E. Jansen 378*59599516SKenneth E. Jansen 379*59599516SKenneth E. Jansen char fname[255]; 380*59599516SKenneth E. Jansen char rfile[60]; 381*59599516SKenneth E. Jansen int irstou; 382*59599516SKenneth E. Jansen int magic_number = 362436; 383*59599516SKenneth E. Jansen int* mptr = &magic_number; 384*59599516SKenneth E. Jansen double version=0.0; 385*59599516SKenneth E. Jansen int isize, nitems; 386*59599516SKenneth E. Jansen int iarray[10]; 387*59599516SKenneth E. Jansen 388*59599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 389*59599516SKenneth E. Jansen 390*59599516SKenneth E. Jansen int nfiles; 391*59599516SKenneth E. Jansen int nfields; 392*59599516SKenneth E. Jansen int numparts; 393*59599516SKenneth E. Jansen int irank; 394*59599516SKenneth E. Jansen int nprocs; 395*59599516SKenneth E. Jansen 396*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 397*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 398*59599516SKenneth E. Jansen numparts = workfc.numpe; 399*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 400*59599516SKenneth E. Jansen nprocs = workfc.numpe; 401*59599516SKenneth E. Jansen 402*59599516SKenneth E. Jansen int nppf = numparts/nfiles; 403*59599516SKenneth E. Jansen int GPID; 404*59599516SKenneth E. Jansen 405*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 406*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 407*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 408*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 409*59599516SKenneth E. Jansen 410*59599516SKenneth E. Jansen field_flag++; 411*59599516SKenneth E. Jansen 412*59599516SKenneth E. Jansen char fieldtag[255]; 413*59599516SKenneth E. Jansen 414*59599516SKenneth E. Jansen int i; 415*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) { 416*59599516SKenneth E. Jansen GPID = startpart + i; 417*59599516SKenneth E. Jansen sprintf(fieldtag,"errors@%d",GPID); 418*59599516SKenneth E. Jansen 419*59599516SKenneth E. Jansen if(*pid==0) { 420*59599516SKenneth E. Jansen printf("\n"); 421*59599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldtag); 422*59599516SKenneth E. Jansen } 423*59599516SKenneth E. Jansen 424*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 425*59599516SKenneth E. Jansen nitems = 3; 426*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 427*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 428*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 429*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 430*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag, (void*)array1, &isize, "double", phasta_iotype ); 431*59599516SKenneth E. Jansen } 432*59599516SKenneth E. Jansen 433*59599516SKenneth E. Jansen if (field_flag==nfields){ 434*59599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 435*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 436*59599516SKenneth E. Jansen if (*pid==0) { 437*59599516SKenneth E. Jansen printf("Last field %d '%s' finished! \n",nfields, fieldtag); 438*59599516SKenneth E. Jansen printf("\n"); 439*59599516SKenneth E. Jansen } 440*59599516SKenneth E. Jansen } 441*59599516SKenneth E. Jansen 442*59599516SKenneth E. Jansen } 443*59599516SKenneth E. Jansen 444*59599516SKenneth E. Jansen void 445*59599516SKenneth E. Jansen Write_Displ( int* pid, 446*59599516SKenneth E. Jansen int* stepno, 447*59599516SKenneth E. Jansen int* nshg, 448*59599516SKenneth E. Jansen int* numVars, 449*59599516SKenneth E. Jansen double* array1 ) { //TO BE UPDATED FOR SYNCIO 450*59599516SKenneth E. Jansen 451*59599516SKenneth E. Jansen 452*59599516SKenneth E. Jansen char fname[255]; 453*59599516SKenneth E. Jansen char rfile[60]; 454*59599516SKenneth E. Jansen int irstou; 455*59599516SKenneth E. Jansen int magic_number = 362436; 456*59599516SKenneth E. Jansen int* mptr = &magic_number; 457*59599516SKenneth E. Jansen time_t timenow = time ( &timenow); 458*59599516SKenneth E. Jansen double version=0.0; 459*59599516SKenneth E. Jansen int isize, nitems; 460*59599516SKenneth E. Jansen int iarray[10]; 461*59599516SKenneth E. Jansen 462*59599516SKenneth E. Jansen sprintf(rfile,"restart.%d.%d",*stepno,*pid+1); 463*59599516SKenneth E. Jansen openfile(rfile,"append", &irstou); 464*59599516SKenneth E. Jansen 465*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars); 466*59599516SKenneth E. Jansen nitems = 3; 467*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 468*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars); 469*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 470*59599516SKenneth E. Jansen writeheader( &irstou, "displacement", (void*)iarray, &nitems, &isize, "double", phasta_iotype ); 471*59599516SKenneth E. Jansen writedatablock( &irstou, "displacement", (void*)(array1), &isize, "double", phasta_iotype ); 472*59599516SKenneth E. Jansen 473*59599516SKenneth E. Jansen closefile( &irstou, "append" ); 474*59599516SKenneth E. Jansen } 475*59599516SKenneth E. Jansen 476*59599516SKenneth E. Jansen void 477*59599516SKenneth E. Jansen Write_Field( int *pid, 478*59599516SKenneth E. Jansen char* filemode, 479*59599516SKenneth E. Jansen char* fieldtag, 480*59599516SKenneth E. Jansen int* tagsize, 481*59599516SKenneth E. Jansen void* array, 482*59599516SKenneth E. Jansen char* arraytype, 483*59599516SKenneth E. Jansen int* nshg, 484*59599516SKenneth E. Jansen int* numvars, 485*59599516SKenneth E. Jansen int* stepno) { 486*59599516SKenneth E. Jansen 487*59599516SKenneth E. Jansen //printf("Rank is %d, field is %s, tagsize is %d, nshg is %d, numvars is %d\n",*pid,fieldtag,*tagsize,*nshg,*numvars); 488*59599516SKenneth E. Jansen 489*59599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((*tagsize+1)*sizeof(char)); 490*59599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 491*59599516SKenneth E. Jansen fieldlabel[*tagsize] = '\0'; 492*59599516SKenneth E. Jansen 493*59599516SKenneth E. Jansen int irstou; 494*59599516SKenneth E. Jansen int magic_number = 362436; 495*59599516SKenneth E. Jansen int* mptr = &magic_number; 496*59599516SKenneth E. Jansen double version=0.0; 497*59599516SKenneth E. Jansen int isize, nitems; 498*59599516SKenneth E. Jansen int iarray[10]; 499*59599516SKenneth E. Jansen 500*59599516SKenneth E. Jansen char fmode[10]; 501*59599516SKenneth E. Jansen if(!strncmp(filemode,"w",1)) 502*59599516SKenneth E. Jansen strcpy(fmode,"write"); 503*59599516SKenneth E. Jansen else // default is append 504*59599516SKenneth E. Jansen strcpy(fmode,"append"); 505*59599516SKenneth E. Jansen 506*59599516SKenneth E. Jansen char datatype[10]; 507*59599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1)) 508*59599516SKenneth E. Jansen strcpy(datatype,"int"); 509*59599516SKenneth E. Jansen else // default is double 510*59599516SKenneth E. Jansen strcpy(datatype,"double"); 511*59599516SKenneth E. Jansen 512*59599516SKenneth E. Jansen // Old posix format 513*59599516SKenneth E. Jansen /* openfile_(rfile, fmode, &irstou); 514*59599516SKenneth E. Jansen 515*59599516SKenneth E. Jansen nitems = 3; // assuming field will write 3 items in iarray 516*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 517*59599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 518*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 519*59599516SKenneth E. Jansen 520*59599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 521*59599516SKenneth E. Jansen writeheader_( &irstou, fieldlabel, (void*)iarray, &nitems, &isize, datatype, phasta_iotype ); 522*59599516SKenneth E. Jansen 523*59599516SKenneth E. Jansen nitems = (*nshg)*(*numvars); 524*59599516SKenneth E. Jansen writedatablock_( &irstou, fieldlabel, array, &nitems, datatype, phasta_iotype ); 525*59599516SKenneth E. Jansen closefile_( &irstou, fmode); 526*59599516SKenneth E. Jansen */ 527*59599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 528*59599516SKenneth E. Jansen 529*59599516SKenneth E. Jansen int nfiles; 530*59599516SKenneth E. Jansen int nfields; 531*59599516SKenneth E. Jansen int numparts; 532*59599516SKenneth E. Jansen int irank; 533*59599516SKenneth E. Jansen int nprocs; 534*59599516SKenneth E. Jansen 535*59599516SKenneth E. Jansen // unsigned long long timer_start; 536*59599516SKenneth E. Jansen // unsigned long long timer_end; 537*59599516SKenneth E. Jansen // double time_span; 538*59599516SKenneth E. Jansen 539*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 540*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 541*59599516SKenneth E. Jansen numparts = workfc.numpe; 542*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 543*59599516SKenneth E. Jansen nprocs = workfc.numpe; 544*59599516SKenneth E. Jansen 545*59599516SKenneth E. Jansen int nppf = numparts/nfiles; 546*59599516SKenneth E. Jansen int GPID; 547*59599516SKenneth E. Jansen 548*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 549*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 550*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 551*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 552*59599516SKenneth E. Jansen 553*59599516SKenneth E. Jansen char fieldtag_s[255]; 554*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 555*59599516SKenneth E. Jansen 556*59599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 557*59599516SKenneth E. Jansen 558*59599516SKenneth E. Jansen field_flag++; 559*59599516SKenneth E. Jansen if(*pid==0) { 560*59599516SKenneth E. Jansen printf("\n"); 561*59599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldlabel); 562*59599516SKenneth E. Jansen } 563*59599516SKenneth E. Jansen 564*59599516SKenneth E. Jansen int i; 565*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) { 566*59599516SKenneth E. Jansen GPID = startpart + i; 567*59599516SKenneth E. Jansen 568*59599516SKenneth E. Jansen // Write solution field ... 569*59599516SKenneth E. Jansen sprintf(fieldtag_s,"%s@%d",fieldlabel,GPID); 570*59599516SKenneth E. Jansen 571*59599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 572*59599516SKenneth E. Jansen nitems = 3; 573*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 574*59599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 575*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 576*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, datatype, phasta_iotype); 577*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, array, &isize, datatype, phasta_iotype ); 578*59599516SKenneth E. Jansen } 579*59599516SKenneth E. Jansen 580*59599516SKenneth E. Jansen if (field_flag==nfields){ 581*59599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 582*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 583*59599516SKenneth E. Jansen if (*pid==0) { 584*59599516SKenneth E. Jansen printf("Last field %d '%s' finished! \n",nfields, fieldtag); 585*59599516SKenneth E. Jansen printf("\n"); 586*59599516SKenneth E. Jansen } 587*59599516SKenneth E. Jansen } 588*59599516SKenneth E. Jansen 589*59599516SKenneth E. Jansen free(fieldlabel); 590*59599516SKenneth E. Jansen } 591*59599516SKenneth E. Jansen 592*59599516SKenneth E. Jansen void 593*59599516SKenneth E. Jansen Write_PhAvg( int* pid, 594*59599516SKenneth E. Jansen char* filemode, 595*59599516SKenneth E. Jansen char* fieldtag, 596*59599516SKenneth E. Jansen int* tagsize, 597*59599516SKenneth E. Jansen int* iphase, 598*59599516SKenneth E. Jansen void* array, 599*59599516SKenneth E. Jansen char* arraytype, 600*59599516SKenneth E. Jansen int* nshg, 601*59599516SKenneth E. Jansen int* numvars, 602*59599516SKenneth E. Jansen int* stepno) { 603*59599516SKenneth E. Jansen 604*59599516SKenneth E. Jansen char rfile[32]; 605*59599516SKenneth E. Jansen // assuming restart_phase_avg_<sn>.<iphase>.<pid+1> 606*59599516SKenneth E. Jansen sprintf(rfile,"restart_phase_avg_%d.%d.%d",*stepno,*iphase,*pid+1); 607*59599516SKenneth E. Jansen 608*59599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((*tagsize+1)*sizeof(char)); 609*59599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 610*59599516SKenneth E. Jansen fieldlabel[*tagsize] = '\0'; 611*59599516SKenneth E. Jansen 612*59599516SKenneth E. Jansen int irstou; 613*59599516SKenneth E. Jansen int isize, nitems; 614*59599516SKenneth E. Jansen int iarray[10]; 615*59599516SKenneth E. Jansen 616*59599516SKenneth E. Jansen char fmode[10]; 617*59599516SKenneth E. Jansen if(!strncmp(filemode,"w",1)) 618*59599516SKenneth E. Jansen strcpy(fmode,"write"); 619*59599516SKenneth E. Jansen else // default is append 620*59599516SKenneth E. Jansen strcpy(fmode,"append"); 621*59599516SKenneth E. Jansen 622*59599516SKenneth E. Jansen char datatype[10]; 623*59599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1)) 624*59599516SKenneth E. Jansen strcpy(datatype,"int"); 625*59599516SKenneth E. Jansen else // default is double 626*59599516SKenneth E. Jansen strcpy(datatype,"double"); 627*59599516SKenneth E. Jansen 628*59599516SKenneth E. Jansen openfile(rfile, fmode, &irstou); 629*59599516SKenneth E. Jansen 630*59599516SKenneth E. Jansen if(!strcmp(fmode,"write")) { 631*59599516SKenneth E. Jansen // may be create a routine for 'top' portion under write mode 632*59599516SKenneth E. Jansen int magic_number = 362436; 633*59599516SKenneth E. Jansen int* mptr = &magic_number; 634*59599516SKenneth E. Jansen time_t timenow = time ( &timenow); 635*59599516SKenneth E. Jansen double version=0.0; 636*59599516SKenneth E. Jansen 637*59599516SKenneth E. Jansen /* writing the top ascii header for the restart file */ 638*59599516SKenneth E. Jansen 639*59599516SKenneth E. Jansen writestring( &irstou,"# PHASTA Input File Version 2.0\n"); 640*59599516SKenneth E. Jansen writestring( &irstou, 641*59599516SKenneth E. Jansen "# format \"keyphrase : sizeofnextblock usual headers\"\n"); 642*59599516SKenneth E. Jansen 643*59599516SKenneth E. Jansen char fname[255]; 644*59599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 645*59599516SKenneth E. Jansen sprintf(fname,"# Output generated by phasta version (NOT YET CURRENT): %lf \n", version); 646*59599516SKenneth E. Jansen writestring( &irstou, fname ); 647*59599516SKenneth E. Jansen 648*59599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 649*59599516SKenneth E. Jansen gethostname(fname,255); 650*59599516SKenneth E. Jansen writestring( &irstou,"# This result was produced on: "); 651*59599516SKenneth E. Jansen writestring( &irstou, fname ); 652*59599516SKenneth E. Jansen writestring( &irstou,"\n"); 653*59599516SKenneth E. Jansen 654*59599516SKenneth E. Jansen bzero( (void*)fname, 255 ); 655*59599516SKenneth E. Jansen sprintf(fname,"# %s\n", ctime( &timenow )); 656*59599516SKenneth E. Jansen writestring( &irstou, fname ); 657*59599516SKenneth E. Jansen 658*59599516SKenneth E. Jansen isize = 1; 659*59599516SKenneth E. Jansen nitems = 1; 660*59599516SKenneth E. Jansen iarray[ 0 ] = 1; 661*59599516SKenneth E. Jansen writeheader( &irstou, "byteorder magic number ", 662*59599516SKenneth E. Jansen (void*)iarray, &nitems, &isize, "integer", phasta_iotype ); 663*59599516SKenneth E. Jansen writedatablock( &irstou, "byteorder magic number ", 664*59599516SKenneth E. Jansen (void*)mptr, &isize, "integer", phasta_iotype ); 665*59599516SKenneth E. Jansen } 666*59599516SKenneth E. Jansen 667*59599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 668*59599516SKenneth E. Jansen nitems = 3; // assuming field will write 3 items in iarray 669*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 670*59599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 671*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 672*59599516SKenneth E. Jansen writeheader( &irstou, fieldlabel, (void*)iarray, &nitems, &isize, datatype, phasta_iotype ); 673*59599516SKenneth E. Jansen writedatablock( &irstou, fieldlabel, array, &isize, datatype, phasta_iotype ); 674*59599516SKenneth E. Jansen 675*59599516SKenneth E. Jansen closefile( &irstou, fmode); 676*59599516SKenneth E. Jansen 677*59599516SKenneth E. Jansen free(fieldlabel); 678*59599516SKenneth E. Jansen } 679*59599516SKenneth E. Jansen 680*59599516SKenneth E. Jansen void 681*59599516SKenneth E. Jansen Write_PhAvg2( int* pid, 682*59599516SKenneth E. Jansen char* filemode, 683*59599516SKenneth E. Jansen char* fieldtag, 684*59599516SKenneth E. Jansen int* tagsize, 685*59599516SKenneth E. Jansen int* iphase, 686*59599516SKenneth E. Jansen int* nphasesincycle, 687*59599516SKenneth E. Jansen void* array, 688*59599516SKenneth E. Jansen char* arraytype, 689*59599516SKenneth E. Jansen int* nshg, 690*59599516SKenneth E. Jansen int* numvars, 691*59599516SKenneth E. Jansen int* stepno) { 692*59599516SKenneth E. Jansen 693*59599516SKenneth E. Jansen int addtagsize; // phase number is added to the name of the field 694*59599516SKenneth E. Jansen if(*iphase<10) 695*59599516SKenneth E. Jansen addtagsize=1; 696*59599516SKenneth E. Jansen else if(*iphase<100) 697*59599516SKenneth E. Jansen addtagsize=2; 698*59599516SKenneth E. Jansen else if(*iphase<1000) 699*59599516SKenneth E. Jansen addtagsize=3; 700*59599516SKenneth E. Jansen 701*59599516SKenneth E. Jansen int tagsize2; 702*59599516SKenneth E. Jansen tagsize2=*tagsize+addtagsize; 703*59599516SKenneth E. Jansen 704*59599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((tagsize2+1)*sizeof(char)); 705*59599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize); 706*59599516SKenneth E. Jansen fieldlabel[tagsize2] = '\0'; 707*59599516SKenneth E. Jansen 708*59599516SKenneth E. Jansen char straddtagsize[10]; 709*59599516SKenneth E. Jansen sprintf(straddtagsize,"%d",*iphase); 710*59599516SKenneth E. Jansen 711*59599516SKenneth E. Jansen if(*iphase<10) { 712*59599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[0]; 713*59599516SKenneth E. Jansen } 714*59599516SKenneth E. Jansen else if(*iphase<100) { 715*59599516SKenneth E. Jansen fieldlabel[tagsize2-2]=straddtagsize[0]; 716*59599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[1]; 717*59599516SKenneth E. Jansen } 718*59599516SKenneth E. Jansen else if(*iphase<1000) { 719*59599516SKenneth E. Jansen fieldlabel[tagsize2-3]=straddtagsize[0]; 720*59599516SKenneth E. Jansen fieldlabel[tagsize2-2]=straddtagsize[1]; 721*59599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[2]; 722*59599516SKenneth E. Jansen } 723*59599516SKenneth E. Jansen 724*59599516SKenneth E. Jansen int irstou; 725*59599516SKenneth E. Jansen int magic_number = 362436; 726*59599516SKenneth E. Jansen int* mptr = &magic_number; 727*59599516SKenneth E. Jansen double version=0.0; 728*59599516SKenneth E. Jansen int isize, nitems; 729*59599516SKenneth E. Jansen int iarray[10]; 730*59599516SKenneth E. Jansen 731*59599516SKenneth E. Jansen char fmode[10]; 732*59599516SKenneth E. Jansen if(!strncmp(filemode,"w",1)) 733*59599516SKenneth E. Jansen strcpy(fmode,"write"); 734*59599516SKenneth E. Jansen else // default is append 735*59599516SKenneth E. Jansen strcpy(fmode,"append"); 736*59599516SKenneth E. Jansen 737*59599516SKenneth E. Jansen char datatype[10]; 738*59599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1)) 739*59599516SKenneth E. Jansen strcpy(datatype,"int"); 740*59599516SKenneth E. Jansen else // default is double 741*59599516SKenneth E. Jansen strcpy(datatype,"double"); 742*59599516SKenneth E. Jansen 743*59599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 744*59599516SKenneth E. Jansen 745*59599516SKenneth E. Jansen int nfiles; 746*59599516SKenneth E. Jansen int nfields; 747*59599516SKenneth E. Jansen int numparts; 748*59599516SKenneth E. Jansen int irank; 749*59599516SKenneth E. Jansen int nprocs; 750*59599516SKenneth E. Jansen 751*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 752*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart; 753*59599516SKenneth E. Jansen numparts = workfc.numpe; 754*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 755*59599516SKenneth E. Jansen nprocs = workfc.numpe; 756*59599516SKenneth E. Jansen 757*59599516SKenneth E. Jansen int nppf = numparts/nfiles; 758*59599516SKenneth E. Jansen int GPID; 759*59599516SKenneth E. Jansen 760*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 761*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 762*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 763*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 764*59599516SKenneth E. Jansen 765*59599516SKenneth E. Jansen char fieldtag_s[255]; 766*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 767*59599516SKenneth E. Jansen 768*59599516SKenneth E. Jansen field_flag++; 769*59599516SKenneth E. Jansen if(*pid==0) { 770*59599516SKenneth E. Jansen printf("\n"); 771*59599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldlabel); 772*59599516SKenneth E. Jansen } 773*59599516SKenneth E. Jansen 774*59599516SKenneth E. Jansen int i; 775*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) { 776*59599516SKenneth E. Jansen GPID = startpart + i; 777*59599516SKenneth E. Jansen 778*59599516SKenneth E. Jansen // Write solution field ... 779*59599516SKenneth E. Jansen sprintf(fieldtag_s,"%s@%d",fieldlabel,GPID); 780*59599516SKenneth E. Jansen 781*59599516SKenneth E. Jansen isize = (*nshg)*(*numvars); 782*59599516SKenneth E. Jansen nitems = 3; 783*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg); 784*59599516SKenneth E. Jansen iarray[ 1 ] = (*numvars); 785*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno); 786*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 787*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, array, &isize, "double", phasta_iotype ); 788*59599516SKenneth E. Jansen } 789*59599516SKenneth E. Jansen 790*59599516SKenneth E. Jansen if (field_flag==nfields){ 791*59599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 792*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 793*59599516SKenneth E. Jansen if (*pid==0) { 794*59599516SKenneth E. Jansen printf("\n"); 795*59599516SKenneth E. Jansen } 796*59599516SKenneth E. Jansen } 797*59599516SKenneth E. Jansen 798*59599516SKenneth E. Jansen free(fieldlabel); 799*59599516SKenneth E. Jansen } 800*59599516SKenneth E. Jansen 801*59599516SKenneth E. Jansen 802*59599516SKenneth E. Jansen void 803*59599516SKenneth E. Jansen Write_d2wall( int* pid, 804*59599516SKenneth E. Jansen int* numnp, 805*59599516SKenneth E. Jansen double* array1 ) { 806*59599516SKenneth E. Jansen 807*59599516SKenneth E. Jansen int isize, nitems; 808*59599516SKenneth E. Jansen int iarray[10]; 809*59599516SKenneth E. Jansen 810*59599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib //////////////////////////// 811*59599516SKenneth E. Jansen 812*59599516SKenneth E. Jansen int nfiles; 813*59599516SKenneth E. Jansen int nfields; 814*59599516SKenneth E. Jansen int numparts; 815*59599516SKenneth E. Jansen int irank; 816*59599516SKenneth E. Jansen int nprocs; 817*59599516SKenneth E. Jansen 818*59599516SKenneth E. Jansen // First, count the number of fields to write and store the result in 819*59599516SKenneth E. Jansen //countfieldstowriterestart(); 820*59599516SKenneth E. Jansen 821*59599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO 822*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 823*59599516SKenneth E. Jansen nfields = 1; //outpar.nsynciofieldswriterestart; // Only the distance to the walls in d2wall 824*59599516SKenneth E. Jansen numparts = workfc.numpe; 825*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank; 826*59599516SKenneth E. Jansen nprocs = workfc.numpe; 827*59599516SKenneth E. Jansen int nppf = numparts/nfiles; 828*59599516SKenneth E. Jansen int GPID; 829*59599516SKenneth E. Jansen 830*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 831*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ... 832*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ... 833*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ... 834*59599516SKenneth E. Jansen 835*59599516SKenneth E. Jansen int descriptor; 836*59599516SKenneth E. Jansen char filename[255],fieldtag_s[255]; 837*59599516SKenneth E. Jansen bzero((void*)filename,255); 838*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255); 839*59599516SKenneth E. Jansen 840*59599516SKenneth E. Jansen sprintf(filename,"d2wall.%d",((int)(irank/(nprocs/nfiles))+1)); 841*59599516SKenneth E. Jansen 842*59599516SKenneth E. Jansen if (irank==0) { 843*59599516SKenneth E. Jansen printf("Filename is %s \n",filename); 844*59599516SKenneth E. Jansen } 845*59599516SKenneth E. Jansen 846*59599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write"); 847*59599516SKenneth E. Jansen 848*59599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor); 849*59599516SKenneth E. Jansen 850*59599516SKenneth E. Jansen field_flag=0; 851*59599516SKenneth E. Jansen 852*59599516SKenneth E. Jansen int i; 853*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor 854*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ... 855*59599516SKenneth E. Jansen // e.g : (in this example) 856*59599516SKenneth E. Jansen // proc 0 : 1--4 857*59599516SKenneth E. Jansen // proc 1 : 5--8 ... 858*59599516SKenneth E. Jansen GPID = startpart + i; 859*59599516SKenneth E. Jansen 860*59599516SKenneth E. Jansen // Write solution field ... 861*59599516SKenneth E. Jansen sprintf(fieldtag_s,"d2wall@%d",GPID); 862*59599516SKenneth E. Jansen 863*59599516SKenneth E. Jansen isize = (*numnp); 864*59599516SKenneth E. Jansen nitems = 2; 865*59599516SKenneth E. Jansen iarray[ 0 ] = (*numnp); 866*59599516SKenneth E. Jansen iarray[ 1 ] = 1; //numVars = 1 867*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype); 868*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype ); 869*59599516SKenneth E. Jansen } 870*59599516SKenneth E. Jansen field_flag++; 871*59599516SKenneth E. Jansen 872*59599516SKenneth E. Jansen if (field_flag==nfields){ 873*59599516SKenneth E. Jansen closefile(&f_descriptor, "write"); 874*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor); 875*59599516SKenneth E. Jansen if (irank==0) { 876*59599516SKenneth E. Jansen printf("\n"); 877*59599516SKenneth E. Jansen } 878*59599516SKenneth E. Jansen } 879*59599516SKenneth E. Jansen } 880*59599516SKenneth E. Jansen 881