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