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_interfaceM2N.h"
16*59599516SKenneth E. Jansen
17*59599516SKenneth E. Jansen //MR CHANGE
18*59599516SKenneth E. Jansen #include "commonM2N_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
Write_M2N(int * pid,int * irankN,int * stepno,int * nshg,int * numVars,int * ndofybar,int * ndoferrors,double * array1,double * array2,double * array3,double * array4)30*59599516SKenneth E. Jansen Write_M2N( int* pid,
31*59599516SKenneth E. Jansen int* irankN,
32*59599516SKenneth E. Jansen int* stepno,
33*59599516SKenneth E. Jansen int* nshg,
34*59599516SKenneth E. Jansen int* numVars,
35*59599516SKenneth E. Jansen int* ndofybar,
36*59599516SKenneth E. Jansen int* ndoferrors,
37*59599516SKenneth E. Jansen double* array1,
38*59599516SKenneth E. Jansen double* array2,
39*59599516SKenneth E. Jansen double* array3,
40*59599516SKenneth E. Jansen double* array4 ) {
41*59599516SKenneth E. Jansen
42*59599516SKenneth E. Jansen char fname[255];
43*59599516SKenneth E. Jansen char rfile[60];
44*59599516SKenneth E. Jansen char existingfile[30], linkfile[30];
45*59599516SKenneth E. Jansen int irstou;
46*59599516SKenneth E. Jansen int magic_number = 362436;
47*59599516SKenneth E. Jansen int* mptr = &magic_number;
48*59599516SKenneth E. Jansen double version=0.0;
49*59599516SKenneth E. Jansen int isize, nitems;
50*59599516SKenneth E. Jansen int iarray[10];
51*59599516SKenneth E. Jansen int nfiles;
52*59599516SKenneth E. Jansen int nfields;
53*59599516SKenneth E. Jansen int numparts;
54*59599516SKenneth E. Jansen int irank;
55*59599516SKenneth E. Jansen int nprocs;
56*59599516SKenneth E. Jansen MPI_Comm mpi_comm_local;
57*59599516SKenneth E. Jansen int ilocalrank;
58*59599516SKenneth E. Jansen int mustwrite;
59*59599516SKenneth E. Jansen
60*59599516SKenneth E. Jansen
61*59599516SKenneth E. Jansen irank = *pid;
62*59599516SKenneth E. Jansen
63*59599516SKenneth E. Jansen // Create the subcommunicator for myrank < irankN)
64*59599516SKenneth E. Jansen mustwrite = 0;
65*59599516SKenneth E. Jansen if (irank < *irankN) mustwrite = 1;
66*59599516SKenneth E. Jansen MPI_Comm_split(MPI_COMM_WORLD, mustwrite, irank, &mpi_comm_local);
67*59599516SKenneth E. Jansen MPI_Comm_rank(mpi_comm_local, &ilocalrank);
68*59599516SKenneth E. Jansen
69*59599516SKenneth E. Jansen if (irank < *irankN) { // Only these ranks write syncio files within mpi_comm_local
70*59599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO
71*59599516SKenneth E. Jansen nfiles = outpar.nsynciofilesred; //We use the same number of files as for geombcRed
72*59599516SKenneth E. Jansen nfields = 4;
73*59599516SKenneth E. Jansen numparts = *irankN;
74*59599516SKenneth E. Jansen nprocs = *irankN;
75*59599516SKenneth E. Jansen
76*59599516SKenneth E. Jansen int nppf = numparts/nfiles;
77*59599516SKenneth E. Jansen int GPID;
78*59599516SKenneth E. Jansen
79*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ...
80*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ...
81*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ...
82*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ...
83*59599516SKenneth E. Jansen
84*59599516SKenneth E. Jansen int descriptor;
85*59599516SKenneth E. Jansen char filename[255],fieldtag_s[255];
86*59599516SKenneth E. Jansen bzero((void*)filename,255);
87*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255);
88*59599516SKenneth E. Jansen
89*59599516SKenneth E. Jansen sprintf(filename,"restartRedTmp-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1));
90*59599516SKenneth E. Jansen if (*pid==0) {
91*59599516SKenneth E. Jansen printf("Filename is %s \n",filename);
92*59599516SKenneth E. Jansen }
93*59599516SKenneth E. Jansen
94*59599516SKenneth E. Jansen initphmpiiosub(&nfields, &nppf, &nfiles, &f_descriptor, "write", mpi_comm_local);
95*59599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor);
96*59599516SKenneth E. Jansen
97*59599516SKenneth E. Jansen // solution
98*59599516SKenneth E. Jansen int i;
99*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor
100*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ...
101*59599516SKenneth E. Jansen // e.g : (in this example)
102*59599516SKenneth E. Jansen // proc 0 : 1--4
103*59599516SKenneth E. Jansen // proc 1 : 5--8 ...
104*59599516SKenneth E. Jansen GPID = startpart + i;
105*59599516SKenneth E. Jansen
106*59599516SKenneth E. Jansen // Write solution field ...
107*59599516SKenneth E. Jansen sprintf(fieldtag_s,"solution@%d",GPID);
108*59599516SKenneth E. Jansen
109*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars);
110*59599516SKenneth E. Jansen nitems = 3;
111*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
112*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars);
113*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
114*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype);
115*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype );
116*59599516SKenneth E. Jansen }
117*59599516SKenneth E. Jansen
118*59599516SKenneth E. Jansen // ybar
119*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor
120*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ...
121*59599516SKenneth E. Jansen // e.g : (in this example)
122*59599516SKenneth E. Jansen // proc 0 : 1--4
123*59599516SKenneth E. Jansen // proc 1 : 5--8 ...
124*59599516SKenneth E. Jansen GPID = startpart + i;
125*59599516SKenneth E. Jansen
126*59599516SKenneth E. Jansen // Write solution field ...
127*59599516SKenneth E. Jansen sprintf(fieldtag_s,"ybar@%d",GPID);
128*59599516SKenneth E. Jansen
129*59599516SKenneth E. Jansen isize = (*nshg)*(*ndofybar);
130*59599516SKenneth E. Jansen nitems = 3;
131*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
132*59599516SKenneth E. Jansen iarray[ 1 ] = (*ndofybar);
133*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
134*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype);
135*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array2), &isize, "double", phasta_iotype );
136*59599516SKenneth E. Jansen }
137*59599516SKenneth E. Jansen
138*59599516SKenneth E. Jansen // errors
139*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor
140*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ...
141*59599516SKenneth E. Jansen // e.g : (in this example)
142*59599516SKenneth E. Jansen // proc 0 : 1--4
143*59599516SKenneth E. Jansen // proc 1 : 5--8 ...
144*59599516SKenneth E. Jansen GPID = startpart + i;
145*59599516SKenneth E. Jansen
146*59599516SKenneth E. Jansen // Write solution field ...
147*59599516SKenneth E. Jansen sprintf(fieldtag_s,"errors@%d",GPID);
148*59599516SKenneth E. Jansen
149*59599516SKenneth E. Jansen isize = (*nshg)*(*ndoferrors);
150*59599516SKenneth E. Jansen nitems = 3;
151*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
152*59599516SKenneth E. Jansen iarray[ 1 ] = (*ndoferrors);
153*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
154*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype);
155*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array3), &isize, "double", phasta_iotype );
156*59599516SKenneth E. Jansen }
157*59599516SKenneth E. Jansen
158*59599516SKenneth E. Jansen // dwal
159*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor
160*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ...
161*59599516SKenneth E. Jansen // e.g : (in this example)
162*59599516SKenneth E. Jansen // proc 0 : 1--4
163*59599516SKenneth E. Jansen // proc 1 : 5--8 ...
164*59599516SKenneth E. Jansen GPID = startpart + i;
165*59599516SKenneth E. Jansen
166*59599516SKenneth E. Jansen // Write solution field ...
167*59599516SKenneth E. Jansen sprintf(fieldtag_s,"dwal@%d",GPID);
168*59599516SKenneth E. Jansen
169*59599516SKenneth E. Jansen isize = (*nshg)*1;
170*59599516SKenneth E. Jansen nitems = 3;
171*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
172*59599516SKenneth E. Jansen iarray[ 1 ] = 1;
173*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
174*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype);
175*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array4), &isize, "double", phasta_iotype );
176*59599516SKenneth E. Jansen }
177*59599516SKenneth E. Jansen
178*59599516SKenneth E. Jansen closefile(&f_descriptor, "write");
179*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor);
180*59599516SKenneth E. Jansen
181*59599516SKenneth E. Jansen }
182*59599516SKenneth E. Jansen
183*59599516SKenneth E. Jansen return;
184*59599516SKenneth E. Jansen }
185*59599516SKenneth E. Jansen
186*59599516SKenneth E. Jansen void
Write_M2N_SolOnly(int * pid,int * irankN,int * stepno,int * nshg,int * numVars,double * array1)187*59599516SKenneth E. Jansen Write_M2N_SolOnly( int* pid,
188*59599516SKenneth E. Jansen int* irankN,
189*59599516SKenneth E. Jansen int* stepno,
190*59599516SKenneth E. Jansen int* nshg,
191*59599516SKenneth E. Jansen int* numVars,
192*59599516SKenneth E. Jansen double* array1 ) {
193*59599516SKenneth E. Jansen
194*59599516SKenneth E. Jansen char fname[255];
195*59599516SKenneth E. Jansen char rfile[60];
196*59599516SKenneth E. Jansen char existingfile[30], linkfile[30];
197*59599516SKenneth E. Jansen int irstou;
198*59599516SKenneth E. Jansen int magic_number = 362436;
199*59599516SKenneth E. Jansen int* mptr = &magic_number;
200*59599516SKenneth E. Jansen double version=0.0;
201*59599516SKenneth E. Jansen int isize, nitems;
202*59599516SKenneth E. Jansen int iarray[10];
203*59599516SKenneth E. Jansen int nfiles;
204*59599516SKenneth E. Jansen int nfields;
205*59599516SKenneth E. Jansen int numparts;
206*59599516SKenneth E. Jansen int irank;
207*59599516SKenneth E. Jansen int nprocs;
208*59599516SKenneth E. Jansen MPI_Comm mpi_comm_local;
209*59599516SKenneth E. Jansen int ilocalrank;
210*59599516SKenneth E. Jansen int mustwrite;
211*59599516SKenneth E. Jansen
212*59599516SKenneth E. Jansen
213*59599516SKenneth E. Jansen irank = *pid;
214*59599516SKenneth E. Jansen
215*59599516SKenneth E. Jansen // Create the subcommunicator for myrank < irankN)
216*59599516SKenneth E. Jansen mustwrite = 0;
217*59599516SKenneth E. Jansen if (irank < *irankN) mustwrite = 1;
218*59599516SKenneth E. Jansen MPI_Comm_split(MPI_COMM_WORLD, mustwrite, irank, &mpi_comm_local);
219*59599516SKenneth E. Jansen MPI_Comm_rank(mpi_comm_local, &ilocalrank);
220*59599516SKenneth E. Jansen
221*59599516SKenneth E. Jansen if (irank < *irankN) { // Only these ranks write syncio files within mpi_comm_local
222*59599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO
223*59599516SKenneth E. Jansen nfiles = outpar.nsynciofilesred; //We use the same number of files as for geombcRed
224*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart;
225*59599516SKenneth E. Jansen numparts = *irankN;
226*59599516SKenneth E. Jansen nprocs = *irankN;
227*59599516SKenneth E. Jansen
228*59599516SKenneth E. Jansen int nppf = numparts/nfiles;
229*59599516SKenneth E. Jansen int GPID;
230*59599516SKenneth E. Jansen
231*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ...
232*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ...
233*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ...
234*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ...
235*59599516SKenneth E. Jansen
236*59599516SKenneth E. Jansen int descriptor;
237*59599516SKenneth E. Jansen char filename[255],fieldtag_s[255];
238*59599516SKenneth E. Jansen bzero((void*)filename,255);
239*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255);
240*59599516SKenneth E. Jansen
241*59599516SKenneth E. Jansen sprintf(filename,"restartRedTmp-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1));
242*59599516SKenneth E. Jansen if (*pid==0) {
243*59599516SKenneth E. Jansen printf("Filename is %s \n",filename);
244*59599516SKenneth E. Jansen }
245*59599516SKenneth E. Jansen
246*59599516SKenneth E. Jansen initphmpiiosub(&nfields, &nppf, &nfiles, &f_descriptor, "write", mpi_comm_local);
247*59599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor);
248*59599516SKenneth E. Jansen
249*59599516SKenneth E. Jansen field_flag=0;
250*59599516SKenneth E. Jansen
251*59599516SKenneth E. Jansen // solution
252*59599516SKenneth E. Jansen int i;
253*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor
254*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ...
255*59599516SKenneth E. Jansen // e.g : (in this example)
256*59599516SKenneth E. Jansen // proc 0 : 1--4
257*59599516SKenneth E. Jansen // proc 1 : 5--8 ...
258*59599516SKenneth E. Jansen GPID = startpart + i;
259*59599516SKenneth E. Jansen
260*59599516SKenneth E. Jansen // Write solution field ...
261*59599516SKenneth E. Jansen sprintf(fieldtag_s,"solution@%d",GPID);
262*59599516SKenneth E. Jansen
263*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars);
264*59599516SKenneth E. Jansen nitems = 3;
265*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
266*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars);
267*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
268*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype);
269*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype );
270*59599516SKenneth E. Jansen }
271*59599516SKenneth E. Jansen field_flag++;
272*59599516SKenneth E. Jansen
273*59599516SKenneth E. Jansen if (field_flag==nfields){
274*59599516SKenneth E. Jansen closefile(&f_descriptor, "write");
275*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor);
276*59599516SKenneth E. Jansen if (*pid==0) {
277*59599516SKenneth E. Jansen printf("\n");
278*59599516SKenneth E. Jansen }
279*59599516SKenneth E. Jansen }
280*59599516SKenneth E. Jansen
281*59599516SKenneth E. Jansen }
282*59599516SKenneth E. Jansen
283*59599516SKenneth E. Jansen return;
284*59599516SKenneth E. Jansen }
285*59599516SKenneth E. Jansen
286*59599516SKenneth E. Jansen void
Write_M2N_Field(int * pid,int * irankN,char * filemode,char * fieldtag,int * tagsize,void * array,char * arraytype,int * nshg,int * numvars,int * stepno)287*59599516SKenneth E. Jansen Write_M2N_Field( int* pid,
288*59599516SKenneth E. Jansen int* irankN,
289*59599516SKenneth E. Jansen char* filemode,
290*59599516SKenneth E. Jansen char* fieldtag,
291*59599516SKenneth E. Jansen int* tagsize,
292*59599516SKenneth E. Jansen void* array,
293*59599516SKenneth E. Jansen char* arraytype,
294*59599516SKenneth E. Jansen int* nshg,
295*59599516SKenneth E. Jansen int* numvars,
296*59599516SKenneth E. Jansen int* stepno) {
297*59599516SKenneth E. Jansen
298*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);
299*59599516SKenneth E. Jansen
300*59599516SKenneth E. Jansen // char rfile[32];
301*59599516SKenneth E. Jansen // assuming restart.sn.(pid+1)
302*59599516SKenneth E. Jansen // sprintf(rfile,"restart.%d.%d",*stepno,*pid+1);
303*59599516SKenneth E. Jansen
304*59599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((*tagsize+1)*sizeof(char));
305*59599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize);
306*59599516SKenneth E. Jansen fieldlabel[*tagsize] = '\0';
307*59599516SKenneth E. Jansen
308*59599516SKenneth E. Jansen int irstou;
309*59599516SKenneth E. Jansen int magic_number = 362436;
310*59599516SKenneth E. Jansen int* mptr = &magic_number;
311*59599516SKenneth E. Jansen double version=0.0;
312*59599516SKenneth E. Jansen int isize, nitems;
313*59599516SKenneth E. Jansen int iarray[10];
314*59599516SKenneth E. Jansen
315*59599516SKenneth E. Jansen char fmode[10];
316*59599516SKenneth E. Jansen if(!strncmp(filemode,"w",1))
317*59599516SKenneth E. Jansen strcpy(fmode,"write");
318*59599516SKenneth E. Jansen else // default is append
319*59599516SKenneth E. Jansen strcpy(fmode,"append");
320*59599516SKenneth E. Jansen
321*59599516SKenneth E. Jansen char datatype[10];
322*59599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1))
323*59599516SKenneth E. Jansen strcpy(datatype,"int");
324*59599516SKenneth E. Jansen else // default is double
325*59599516SKenneth E. Jansen strcpy(datatype,"double");
326*59599516SKenneth E. Jansen
327*59599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib ////////////////////////////
328*59599516SKenneth E. Jansen
329*59599516SKenneth E. Jansen int nfiles;
330*59599516SKenneth E. Jansen int nfields;
331*59599516SKenneth E. Jansen int numparts;
332*59599516SKenneth E. Jansen int irank;
333*59599516SKenneth E. Jansen int nprocs;
334*59599516SKenneth E. Jansen
335*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank;
336*59599516SKenneth E. Jansen
337*59599516SKenneth E. Jansen if (irank < *irankN) { // Only these ranks write syncio files within mpi_comm_local
338*59599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO
339*59599516SKenneth E. Jansen
340*59599516SKenneth E. Jansen nfiles = outpar.nsynciofilesred;
341*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart;
342*59599516SKenneth E. Jansen numparts = workfc.numpe;
343*59599516SKenneth E. Jansen nprocs = workfc.numpe;
344*59599516SKenneth E. Jansen
345*59599516SKenneth E. Jansen int nppf = numparts/nfiles;
346*59599516SKenneth E. Jansen int GPID;
347*59599516SKenneth E. Jansen
348*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ...
349*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ...
350*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ...
351*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ...
352*59599516SKenneth E. Jansen
353*59599516SKenneth E. Jansen char fieldtag_s[255];
354*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255);
355*59599516SKenneth E. Jansen
356*59599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize);
357*59599516SKenneth E. Jansen
358*59599516SKenneth E. Jansen field_flag++;
359*59599516SKenneth E. Jansen if(*pid==0) {
360*59599516SKenneth E. Jansen printf("\n");
361*59599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldlabel);
362*59599516SKenneth E. Jansen }
363*59599516SKenneth E. Jansen
364*59599516SKenneth E. Jansen int i;
365*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) {
366*59599516SKenneth E. Jansen GPID = startpart + i;
367*59599516SKenneth E. Jansen
368*59599516SKenneth E. Jansen // Write field ...
369*59599516SKenneth E. Jansen sprintf(fieldtag_s,"%s@%d",fieldlabel,GPID);
370*59599516SKenneth E. Jansen
371*59599516SKenneth E. Jansen isize = (*nshg)*(*numvars);
372*59599516SKenneth E. Jansen nitems = 3;
373*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
374*59599516SKenneth E. Jansen iarray[ 1 ] = (*numvars);
375*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
376*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, datatype, phasta_iotype);
377*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, array, &isize, datatype, phasta_iotype );
378*59599516SKenneth E. Jansen }
379*59599516SKenneth E. Jansen
380*59599516SKenneth E. Jansen if (field_flag==nfields){
381*59599516SKenneth E. Jansen closefile(&f_descriptor, "write");
382*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor);
383*59599516SKenneth E. Jansen if (*pid==0) {
384*59599516SKenneth E. Jansen printf("Last field %d '%s' finished! \n",nfields, fieldtag);
385*59599516SKenneth E. Jansen printf("\n");
386*59599516SKenneth E. Jansen }
387*59599516SKenneth E. Jansen }
388*59599516SKenneth E. Jansen
389*59599516SKenneth E. Jansen free(fieldlabel);
390*59599516SKenneth E. Jansen }
391*59599516SKenneth E. Jansen }
392*59599516SKenneth E. Jansen
393*59599516SKenneth E. Jansen void
Write_M2N_PhAvg2(int * pid,int * irankN,char * filemode,char * fieldtag,int * tagsize,int * iphase,int * nphasesincycle,void * array,char * arraytype,int * nshg,int * numvars,int * stepno)394*59599516SKenneth E. Jansen Write_M2N_PhAvg2( int* pid,
395*59599516SKenneth E. Jansen int* irankN,
396*59599516SKenneth E. Jansen char* filemode,
397*59599516SKenneth E. Jansen char* fieldtag,
398*59599516SKenneth E. Jansen int* tagsize,
399*59599516SKenneth E. Jansen int* iphase,
400*59599516SKenneth E. Jansen int* nphasesincycle,
401*59599516SKenneth E. Jansen void* array,
402*59599516SKenneth E. Jansen char* arraytype,
403*59599516SKenneth E. Jansen int* nshg,
404*59599516SKenneth E. Jansen int* numvars,
405*59599516SKenneth E. Jansen int* stepno) {
406*59599516SKenneth E. Jansen
407*59599516SKenneth E. Jansen int addtagsize; // phase number is added to the name of the field
408*59599516SKenneth E. Jansen if(*iphase<10)
409*59599516SKenneth E. Jansen addtagsize=1;
410*59599516SKenneth E. Jansen else if(*iphase<100)
411*59599516SKenneth E. Jansen addtagsize=2;
412*59599516SKenneth E. Jansen else if(*iphase<1000)
413*59599516SKenneth E. Jansen addtagsize=3;
414*59599516SKenneth E. Jansen
415*59599516SKenneth E. Jansen int tagsize2;
416*59599516SKenneth E. Jansen tagsize2=*tagsize+addtagsize;
417*59599516SKenneth E. Jansen
418*59599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((tagsize2+1)*sizeof(char));
419*59599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize);
420*59599516SKenneth E. Jansen fieldlabel[tagsize2] = '\0';
421*59599516SKenneth E. Jansen
422*59599516SKenneth E. Jansen char straddtagsize[10];
423*59599516SKenneth E. Jansen sprintf(straddtagsize,"%d",*iphase);
424*59599516SKenneth E. Jansen
425*59599516SKenneth E. Jansen if(*iphase<10) {
426*59599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[0];
427*59599516SKenneth E. Jansen }
428*59599516SKenneth E. Jansen else if(*iphase<100) {
429*59599516SKenneth E. Jansen fieldlabel[tagsize2-2]=straddtagsize[0];
430*59599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[1];
431*59599516SKenneth E. Jansen }
432*59599516SKenneth E. Jansen else if(*iphase<1000) {
433*59599516SKenneth E. Jansen fieldlabel[tagsize2-3]=straddtagsize[0];
434*59599516SKenneth E. Jansen fieldlabel[tagsize2-2]=straddtagsize[1];
435*59599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[2];
436*59599516SKenneth E. Jansen }
437*59599516SKenneth E. Jansen
438*59599516SKenneth E. Jansen int irstou;
439*59599516SKenneth E. Jansen int magic_number = 362436;
440*59599516SKenneth E. Jansen int* mptr = &magic_number;
441*59599516SKenneth E. Jansen double version=0.0;
442*59599516SKenneth E. Jansen int isize, nitems;
443*59599516SKenneth E. Jansen int iarray[10];
444*59599516SKenneth E. Jansen
445*59599516SKenneth E. Jansen char fmode[10];
446*59599516SKenneth E. Jansen if(!strncmp(filemode,"w",1))
447*59599516SKenneth E. Jansen strcpy(fmode,"write");
448*59599516SKenneth E. Jansen else // default is append
449*59599516SKenneth E. Jansen strcpy(fmode,"append");
450*59599516SKenneth E. Jansen
451*59599516SKenneth E. Jansen char datatype[10];
452*59599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1))
453*59599516SKenneth E. Jansen strcpy(datatype,"int");
454*59599516SKenneth E. Jansen else // default is double
455*59599516SKenneth E. Jansen strcpy(datatype,"double");
456*59599516SKenneth E. Jansen
457*59599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib ////////////////////////////
458*59599516SKenneth E. Jansen
459*59599516SKenneth E. Jansen int nfiles;
460*59599516SKenneth E. Jansen int nfields;
461*59599516SKenneth E. Jansen int numparts;
462*59599516SKenneth E. Jansen int irank;
463*59599516SKenneth E. Jansen int nprocs;
464*59599516SKenneth E. Jansen
465*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank;
466*59599516SKenneth E. Jansen if (irank < *irankN) { // Only these ranks write syncio files within mpi_comm_local
467*59599516SKenneth E. Jansen
468*59599516SKenneth E. Jansen nfiles = outpar.nsynciofilesred;
469*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart;
470*59599516SKenneth E. Jansen numparts = workfc.numpe;
471*59599516SKenneth E. Jansen nprocs = workfc.numpe;
472*59599516SKenneth E. Jansen
473*59599516SKenneth E. Jansen int nppf = numparts/nfiles;
474*59599516SKenneth E. Jansen int GPID;
475*59599516SKenneth E. Jansen
476*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ...
477*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ...
478*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ...
479*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ...
480*59599516SKenneth E. Jansen
481*59599516SKenneth E. Jansen char fieldtag_s[255];
482*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255);
483*59599516SKenneth E. Jansen
484*59599516SKenneth E. Jansen field_flag++;
485*59599516SKenneth E. Jansen if(*pid==0) {
486*59599516SKenneth E. Jansen printf("\n");
487*59599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldlabel);
488*59599516SKenneth E. Jansen }
489*59599516SKenneth E. Jansen
490*59599516SKenneth E. Jansen int i;
491*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) {
492*59599516SKenneth E. Jansen GPID = startpart + i;
493*59599516SKenneth E. Jansen
494*59599516SKenneth E. Jansen // Write the field ...
495*59599516SKenneth E. Jansen sprintf(fieldtag_s,"%s@%d",fieldlabel,GPID);
496*59599516SKenneth E. Jansen
497*59599516SKenneth E. Jansen //printf("This is %d and fieldtag_s is %s \n",myrank,fieldtag_s);
498*59599516SKenneth E. Jansen
499*59599516SKenneth E. Jansen isize = (*nshg)*(*numvars);
500*59599516SKenneth E. Jansen nitems = 3;
501*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
502*59599516SKenneth E. Jansen iarray[ 1 ] = (*numvars);
503*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
504*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype);
505*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, array, &isize, "double", phasta_iotype );
506*59599516SKenneth E. Jansen }
507*59599516SKenneth E. Jansen
508*59599516SKenneth E. Jansen if (field_flag==nfields){
509*59599516SKenneth E. Jansen closefile(&f_descriptor, "write");
510*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor);
511*59599516SKenneth E. Jansen if (*pid==0) {
512*59599516SKenneth E. Jansen printf("\n");
513*59599516SKenneth E. Jansen }
514*59599516SKenneth E. Jansen }
515*59599516SKenneth E. Jansen
516*59599516SKenneth E. Jansen free(fieldlabel);
517*59599516SKenneth E. Jansen }
518*59599516SKenneth E. Jansen }
519*59599516SKenneth E. Jansen
520*59599516SKenneth E. Jansen void
Write_Restart(int * pid,int * stepno,int * nshg,int * numVars,double * array1,double * array2)521*59599516SKenneth E. Jansen Write_Restart( int* pid,
522*59599516SKenneth E. Jansen int* stepno,
523*59599516SKenneth E. Jansen int* nshg,
524*59599516SKenneth E. Jansen int* numVars,
525*59599516SKenneth E. Jansen double* array1,
526*59599516SKenneth E. Jansen double* array2 ) {
527*59599516SKenneth E. Jansen
528*59599516SKenneth E. Jansen char fname[255];
529*59599516SKenneth E. Jansen char rfile[60];
530*59599516SKenneth E. Jansen char existingfile[30], linkfile[30];
531*59599516SKenneth E. Jansen int irstou;
532*59599516SKenneth E. Jansen int magic_number = 362436;
533*59599516SKenneth E. Jansen int* mptr = &magic_number;
534*59599516SKenneth E. Jansen double version=0.0;
535*59599516SKenneth E. Jansen int isize, nitems;
536*59599516SKenneth E. Jansen int iarray[10];
537*59599516SKenneth E. Jansen int nfiles;
538*59599516SKenneth E. Jansen int nfields;
539*59599516SKenneth E. Jansen int numparts;
540*59599516SKenneth E. Jansen int irank;
541*59599516SKenneth E. Jansen int nprocs;
542*59599516SKenneth E. Jansen
543*59599516SKenneth E. Jansen // First, count the number of fields to write and store the result in
544*59599516SKenneth E. Jansen //countfieldstowriterestart();
545*59599516SKenneth E. Jansen
546*59599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO
547*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles;
548*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart;
549*59599516SKenneth E. Jansen numparts = workfc.numpe;
550*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank;
551*59599516SKenneth E. Jansen nprocs = workfc.numpe;
552*59599516SKenneth E. Jansen int nppf = numparts/nfiles;
553*59599516SKenneth E. Jansen int GPID;
554*59599516SKenneth E. Jansen
555*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ...
556*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ...
557*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ...
558*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ...
559*59599516SKenneth E. Jansen
560*59599516SKenneth E. Jansen int descriptor;
561*59599516SKenneth E. Jansen char filename[255],fieldtag_s[255];
562*59599516SKenneth E. Jansen bzero((void*)filename,255);
563*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255);
564*59599516SKenneth E. Jansen
565*59599516SKenneth E. Jansen sprintf(filename,"restart-dat.%d.%d",*stepno,((int)(irank/(nprocs/nfiles))+1));
566*59599516SKenneth E. Jansen
567*59599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write");
568*59599516SKenneth E. Jansen
569*59599516SKenneth E. Jansen if (*pid==0) {
570*59599516SKenneth E. Jansen printf("Filename is %s \n",filename);
571*59599516SKenneth E. Jansen }
572*59599516SKenneth E. Jansen
573*59599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor);
574*59599516SKenneth E. Jansen
575*59599516SKenneth E. Jansen field_flag=0;
576*59599516SKenneth E. Jansen
577*59599516SKenneth E. Jansen int i;
578*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor
579*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ...
580*59599516SKenneth E. Jansen // e.g : (in this example)
581*59599516SKenneth E. Jansen // proc 0 : 1--4
582*59599516SKenneth E. Jansen // proc 1 : 5--8 ...
583*59599516SKenneth E. Jansen GPID = startpart + i;
584*59599516SKenneth E. Jansen
585*59599516SKenneth E. Jansen // Write solution field ...
586*59599516SKenneth E. Jansen sprintf(fieldtag_s,"solution@%d",GPID);
587*59599516SKenneth E. Jansen
588*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars);
589*59599516SKenneth E. Jansen nitems = 3;
590*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
591*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars);
592*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
593*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype);
594*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype );
595*59599516SKenneth E. Jansen }
596*59599516SKenneth E. Jansen field_flag++;
597*59599516SKenneth E. Jansen
598*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) {
599*59599516SKenneth E. Jansen
600*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ...
601*59599516SKenneth E. Jansen // e.g : (in this example)
602*59599516SKenneth E. Jansen // proc 0 : 1--4
603*59599516SKenneth E. Jansen // proc 1 : 5--8 ...
604*59599516SKenneth E. Jansen GPID = startpart + i;
605*59599516SKenneth E. Jansen
606*59599516SKenneth E. Jansen // Write solution field ...
607*59599516SKenneth E. Jansen sprintf(fieldtag_s,"time derivative of solution@%d",GPID);
608*59599516SKenneth E. Jansen
609*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars);
610*59599516SKenneth E. Jansen nitems = 3;
611*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
612*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars);
613*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
614*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype);
615*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array2), &isize, "double", phasta_iotype );
616*59599516SKenneth E. Jansen }
617*59599516SKenneth E. Jansen field_flag++;
618*59599516SKenneth E. Jansen
619*59599516SKenneth E. Jansen if (field_flag==nfields){
620*59599516SKenneth E. Jansen closefile(&f_descriptor, "write");
621*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor);
622*59599516SKenneth E. Jansen if (*pid==0) {
623*59599516SKenneth E. Jansen printf("\n");
624*59599516SKenneth E. Jansen }
625*59599516SKenneth E. Jansen }
626*59599516SKenneth E. Jansen }
627*59599516SKenneth E. Jansen
628*59599516SKenneth E. Jansen
629*59599516SKenneth E. Jansen void
Write_Error(int * pid,int * stepno,int * nshg,int * numVars,double * array1)630*59599516SKenneth E. Jansen Write_Error( int* pid,
631*59599516SKenneth E. Jansen int* stepno,
632*59599516SKenneth E. Jansen int* nshg,
633*59599516SKenneth E. Jansen int* numVars,
634*59599516SKenneth E. Jansen double* array1 ) {
635*59599516SKenneth E. Jansen
636*59599516SKenneth E. Jansen
637*59599516SKenneth E. Jansen char fname[255];
638*59599516SKenneth E. Jansen char rfile[60];
639*59599516SKenneth E. Jansen int irstou;
640*59599516SKenneth E. Jansen int magic_number = 362436;
641*59599516SKenneth E. Jansen int* mptr = &magic_number;
642*59599516SKenneth E. Jansen double version=0.0;
643*59599516SKenneth E. Jansen int isize, nitems;
644*59599516SKenneth E. Jansen int iarray[10];
645*59599516SKenneth E. Jansen
646*59599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib ////////////////////////////
647*59599516SKenneth E. Jansen
648*59599516SKenneth E. Jansen int nfiles;
649*59599516SKenneth E. Jansen int nfields;
650*59599516SKenneth E. Jansen int numparts;
651*59599516SKenneth E. Jansen int irank;
652*59599516SKenneth E. Jansen int nprocs;
653*59599516SKenneth E. Jansen
654*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles;
655*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart;
656*59599516SKenneth E. Jansen numparts = workfc.numpe;
657*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank;
658*59599516SKenneth E. Jansen nprocs = workfc.numpe;
659*59599516SKenneth E. Jansen
660*59599516SKenneth E. Jansen int nppf = numparts/nfiles;
661*59599516SKenneth E. Jansen int GPID;
662*59599516SKenneth E. Jansen
663*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ...
664*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ...
665*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ...
666*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ...
667*59599516SKenneth E. Jansen
668*59599516SKenneth E. Jansen field_flag++;
669*59599516SKenneth E. Jansen
670*59599516SKenneth E. Jansen char fieldtag[255];
671*59599516SKenneth E. Jansen
672*59599516SKenneth E. Jansen int i;
673*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) {
674*59599516SKenneth E. Jansen GPID = startpart + i;
675*59599516SKenneth E. Jansen sprintf(fieldtag,"errors@%d",GPID);
676*59599516SKenneth E. Jansen
677*59599516SKenneth E. Jansen if(*pid==0) {
678*59599516SKenneth E. Jansen printf("\n");
679*59599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldtag);
680*59599516SKenneth E. Jansen }
681*59599516SKenneth E. Jansen
682*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars);
683*59599516SKenneth E. Jansen nitems = 3;
684*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
685*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars);
686*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
687*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag, (void*)iarray, &nitems, &isize, "double", phasta_iotype);
688*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag, (void*)array1, &isize, "double", phasta_iotype );
689*59599516SKenneth E. Jansen }
690*59599516SKenneth E. Jansen
691*59599516SKenneth E. Jansen if (field_flag==nfields){
692*59599516SKenneth E. Jansen closefile(&f_descriptor, "write");
693*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor);
694*59599516SKenneth E. Jansen if (*pid==0) {
695*59599516SKenneth E. Jansen printf("Last field %d '%s' finished! \n",nfields, fieldtag);
696*59599516SKenneth E. Jansen printf("\n");
697*59599516SKenneth E. Jansen }
698*59599516SKenneth E. Jansen }
699*59599516SKenneth E. Jansen
700*59599516SKenneth E. Jansen }
701*59599516SKenneth E. Jansen
702*59599516SKenneth E. Jansen void
Write_Displ(int * pid,int * stepno,int * nshg,int * numVars,double * array1)703*59599516SKenneth E. Jansen Write_Displ( int* pid,
704*59599516SKenneth E. Jansen int* stepno,
705*59599516SKenneth E. Jansen int* nshg,
706*59599516SKenneth E. Jansen int* numVars,
707*59599516SKenneth E. Jansen double* array1 ) { //TO BE UPDATED FOR SYNCIO
708*59599516SKenneth E. Jansen
709*59599516SKenneth E. Jansen
710*59599516SKenneth E. Jansen char fname[255];
711*59599516SKenneth E. Jansen char rfile[60];
712*59599516SKenneth E. Jansen int irstou;
713*59599516SKenneth E. Jansen int magic_number = 362436;
714*59599516SKenneth E. Jansen int* mptr = &magic_number;
715*59599516SKenneth E. Jansen time_t timenow = time ( &timenow);
716*59599516SKenneth E. Jansen double version=0.0;
717*59599516SKenneth E. Jansen int isize, nitems;
718*59599516SKenneth E. Jansen int iarray[10];
719*59599516SKenneth E. Jansen
720*59599516SKenneth E. Jansen sprintf(rfile,"restart.%d.%d",*stepno,*pid+1);
721*59599516SKenneth E. Jansen openfile(rfile,"append", &irstou);
722*59599516SKenneth E. Jansen
723*59599516SKenneth E. Jansen isize = (*nshg)*(*numVars);
724*59599516SKenneth E. Jansen nitems = 3;
725*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
726*59599516SKenneth E. Jansen iarray[ 1 ] = (*numVars);
727*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
728*59599516SKenneth E. Jansen writeheader( &irstou, "displacement", (void*)iarray, &nitems, &isize, "double", phasta_iotype );
729*59599516SKenneth E. Jansen writedatablock( &irstou, "displacement", (void*)(array1), &isize, "double", phasta_iotype );
730*59599516SKenneth E. Jansen
731*59599516SKenneth E. Jansen closefile( &irstou, "append" );
732*59599516SKenneth E. Jansen }
733*59599516SKenneth E. Jansen
734*59599516SKenneth E. Jansen void
Write_Field(int * pid,char * filemode,char * fieldtag,int * tagsize,void * array,char * arraytype,int * nshg,int * numvars,int * stepno)735*59599516SKenneth E. Jansen Write_Field( int *pid,
736*59599516SKenneth E. Jansen char* filemode,
737*59599516SKenneth E. Jansen char* fieldtag,
738*59599516SKenneth E. Jansen int* tagsize,
739*59599516SKenneth E. Jansen void* array,
740*59599516SKenneth E. Jansen char* arraytype,
741*59599516SKenneth E. Jansen int* nshg,
742*59599516SKenneth E. Jansen int* numvars,
743*59599516SKenneth E. Jansen int* stepno) {
744*59599516SKenneth E. Jansen
745*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);
746*59599516SKenneth E. Jansen
747*59599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((*tagsize+1)*sizeof(char));
748*59599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize);
749*59599516SKenneth E. Jansen fieldlabel[*tagsize] = '\0';
750*59599516SKenneth E. Jansen
751*59599516SKenneth E. Jansen int irstou;
752*59599516SKenneth E. Jansen int magic_number = 362436;
753*59599516SKenneth E. Jansen int* mptr = &magic_number;
754*59599516SKenneth E. Jansen double version=0.0;
755*59599516SKenneth E. Jansen int isize, nitems;
756*59599516SKenneth E. Jansen int iarray[10];
757*59599516SKenneth E. Jansen
758*59599516SKenneth E. Jansen char fmode[10];
759*59599516SKenneth E. Jansen if(!strncmp(filemode,"w",1))
760*59599516SKenneth E. Jansen strcpy(fmode,"write");
761*59599516SKenneth E. Jansen else // default is append
762*59599516SKenneth E. Jansen strcpy(fmode,"append");
763*59599516SKenneth E. Jansen
764*59599516SKenneth E. Jansen char datatype[10];
765*59599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1))
766*59599516SKenneth E. Jansen strcpy(datatype,"int");
767*59599516SKenneth E. Jansen else // default is double
768*59599516SKenneth E. Jansen strcpy(datatype,"double");
769*59599516SKenneth E. Jansen
770*59599516SKenneth E. Jansen // Old posix format
771*59599516SKenneth E. Jansen /* openfile_(rfile, fmode, &irstou);
772*59599516SKenneth E. Jansen
773*59599516SKenneth E. Jansen nitems = 3; // assuming field will write 3 items in iarray
774*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
775*59599516SKenneth E. Jansen iarray[ 1 ] = (*numvars);
776*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
777*59599516SKenneth E. Jansen
778*59599516SKenneth E. Jansen isize = (*nshg)*(*numvars);
779*59599516SKenneth E. Jansen writeheader_( &irstou, fieldlabel, (void*)iarray, &nitems, &isize, datatype, phasta_iotype );
780*59599516SKenneth E. Jansen
781*59599516SKenneth E. Jansen nitems = (*nshg)*(*numvars);
782*59599516SKenneth E. Jansen writedatablock_( &irstou, fieldlabel, array, &nitems, datatype, phasta_iotype );
783*59599516SKenneth E. Jansen closefile_( &irstou, fmode);
784*59599516SKenneth E. Jansen */
785*59599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib ////////////////////////////
786*59599516SKenneth E. Jansen
787*59599516SKenneth E. Jansen int nfiles;
788*59599516SKenneth E. Jansen int nfields;
789*59599516SKenneth E. Jansen int numparts;
790*59599516SKenneth E. Jansen int irank;
791*59599516SKenneth E. Jansen int nprocs;
792*59599516SKenneth E. Jansen
793*59599516SKenneth E. Jansen // unsigned long long timer_start;
794*59599516SKenneth E. Jansen // unsigned long long timer_end;
795*59599516SKenneth E. Jansen // double time_span;
796*59599516SKenneth E. Jansen
797*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles;
798*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart;
799*59599516SKenneth E. Jansen numparts = workfc.numpe;
800*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank;
801*59599516SKenneth E. Jansen nprocs = workfc.numpe;
802*59599516SKenneth E. Jansen
803*59599516SKenneth E. Jansen int nppf = numparts/nfiles;
804*59599516SKenneth E. Jansen int GPID;
805*59599516SKenneth E. Jansen
806*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ...
807*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ...
808*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ...
809*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ...
810*59599516SKenneth E. Jansen
811*59599516SKenneth E. Jansen char fieldtag_s[255];
812*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255);
813*59599516SKenneth E. Jansen
814*59599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize);
815*59599516SKenneth E. Jansen
816*59599516SKenneth E. Jansen field_flag++;
817*59599516SKenneth E. Jansen if(*pid==0) {
818*59599516SKenneth E. Jansen printf("\n");
819*59599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldlabel);
820*59599516SKenneth E. Jansen }
821*59599516SKenneth E. Jansen
822*59599516SKenneth E. Jansen int i;
823*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) {
824*59599516SKenneth E. Jansen GPID = startpart + i;
825*59599516SKenneth E. Jansen
826*59599516SKenneth E. Jansen // Write solution field ...
827*59599516SKenneth E. Jansen sprintf(fieldtag_s,"%s@%d",fieldlabel,GPID);
828*59599516SKenneth E. Jansen
829*59599516SKenneth E. Jansen isize = (*nshg)*(*numvars);
830*59599516SKenneth E. Jansen nitems = 3;
831*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
832*59599516SKenneth E. Jansen iarray[ 1 ] = (*numvars);
833*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
834*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, datatype, phasta_iotype);
835*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, array, &isize, datatype, phasta_iotype );
836*59599516SKenneth E. Jansen }
837*59599516SKenneth E. Jansen
838*59599516SKenneth E. Jansen if (field_flag==nfields){
839*59599516SKenneth E. Jansen closefile(&f_descriptor, "write");
840*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor);
841*59599516SKenneth E. Jansen if (*pid==0) {
842*59599516SKenneth E. Jansen printf("Last field %d '%s' finished! \n",nfields, fieldtag);
843*59599516SKenneth E. Jansen printf("\n");
844*59599516SKenneth E. Jansen }
845*59599516SKenneth E. Jansen }
846*59599516SKenneth E. Jansen
847*59599516SKenneth E. Jansen free(fieldlabel);
848*59599516SKenneth E. Jansen }
849*59599516SKenneth E. Jansen
850*59599516SKenneth 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)851*59599516SKenneth E. Jansen Write_PhAvg( int* pid,
852*59599516SKenneth E. Jansen char* filemode,
853*59599516SKenneth E. Jansen char* fieldtag,
854*59599516SKenneth E. Jansen int* tagsize,
855*59599516SKenneth E. Jansen int* iphase,
856*59599516SKenneth E. Jansen void* array,
857*59599516SKenneth E. Jansen char* arraytype,
858*59599516SKenneth E. Jansen int* nshg,
859*59599516SKenneth E. Jansen int* numvars,
860*59599516SKenneth E. Jansen int* stepno) {
861*59599516SKenneth E. Jansen
862*59599516SKenneth E. Jansen char rfile[32];
863*59599516SKenneth E. Jansen // assuming restart_phase_avg_<sn>.<iphase>.<pid+1>
864*59599516SKenneth E. Jansen sprintf(rfile,"restart_phase_avg_%d.%d.%d",*stepno,*iphase,*pid+1);
865*59599516SKenneth E. Jansen
866*59599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((*tagsize+1)*sizeof(char));
867*59599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize);
868*59599516SKenneth E. Jansen fieldlabel[*tagsize] = '\0';
869*59599516SKenneth E. Jansen
870*59599516SKenneth E. Jansen int irstou;
871*59599516SKenneth E. Jansen int isize, nitems;
872*59599516SKenneth E. Jansen int iarray[10];
873*59599516SKenneth E. Jansen
874*59599516SKenneth E. Jansen char fmode[10];
875*59599516SKenneth E. Jansen if(!strncmp(filemode,"w",1))
876*59599516SKenneth E. Jansen strcpy(fmode,"write");
877*59599516SKenneth E. Jansen else // default is append
878*59599516SKenneth E. Jansen strcpy(fmode,"append");
879*59599516SKenneth E. Jansen
880*59599516SKenneth E. Jansen char datatype[10];
881*59599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1))
882*59599516SKenneth E. Jansen strcpy(datatype,"int");
883*59599516SKenneth E. Jansen else // default is double
884*59599516SKenneth E. Jansen strcpy(datatype,"double");
885*59599516SKenneth E. Jansen
886*59599516SKenneth E. Jansen openfile(rfile, fmode, &irstou);
887*59599516SKenneth E. Jansen
888*59599516SKenneth E. Jansen if(!strcmp(fmode,"write")) {
889*59599516SKenneth E. Jansen // may be create a routine for 'top' portion under write mode
890*59599516SKenneth E. Jansen int magic_number = 362436;
891*59599516SKenneth E. Jansen int* mptr = &magic_number;
892*59599516SKenneth E. Jansen time_t timenow = time ( &timenow);
893*59599516SKenneth E. Jansen double version=0.0;
894*59599516SKenneth E. Jansen
895*59599516SKenneth E. Jansen /* writing the top ascii header for the restart file */
896*59599516SKenneth E. Jansen
897*59599516SKenneth E. Jansen writestring( &irstou,"# PHASTA Input File Version 2.0\n");
898*59599516SKenneth E. Jansen writestring( &irstou,
899*59599516SKenneth E. Jansen "# format \"keyphrase : sizeofnextblock usual headers\"\n");
900*59599516SKenneth E. Jansen
901*59599516SKenneth E. Jansen char fname[255];
902*59599516SKenneth E. Jansen bzero( (void*)fname, 255 );
903*59599516SKenneth E. Jansen sprintf(fname,"# Output generated by phasta version (NOT YET CURRENT): %lf \n", version);
904*59599516SKenneth E. Jansen writestring( &irstou, fname );
905*59599516SKenneth E. Jansen
906*59599516SKenneth E. Jansen bzero( (void*)fname, 255 );
907*59599516SKenneth E. Jansen gethostname(fname,255);
908*59599516SKenneth E. Jansen writestring( &irstou,"# This result was produced on: ");
909*59599516SKenneth E. Jansen writestring( &irstou, fname );
910*59599516SKenneth E. Jansen writestring( &irstou,"\n");
911*59599516SKenneth E. Jansen
912*59599516SKenneth E. Jansen bzero( (void*)fname, 255 );
913*59599516SKenneth E. Jansen sprintf(fname,"# %s\n", ctime( &timenow ));
914*59599516SKenneth E. Jansen writestring( &irstou, fname );
915*59599516SKenneth E. Jansen
916*59599516SKenneth E. Jansen isize = 1;
917*59599516SKenneth E. Jansen nitems = 1;
918*59599516SKenneth E. Jansen iarray[ 0 ] = 1;
919*59599516SKenneth E. Jansen writeheader( &irstou, "byteorder magic number ",
920*59599516SKenneth E. Jansen (void*)iarray, &nitems, &isize, "integer", phasta_iotype );
921*59599516SKenneth E. Jansen writedatablock( &irstou, "byteorder magic number ",
922*59599516SKenneth E. Jansen (void*)mptr, &isize, "integer", phasta_iotype );
923*59599516SKenneth E. Jansen }
924*59599516SKenneth E. Jansen
925*59599516SKenneth E. Jansen isize = (*nshg)*(*numvars);
926*59599516SKenneth E. Jansen nitems = 3; // assuming field will write 3 items in iarray
927*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
928*59599516SKenneth E. Jansen iarray[ 1 ] = (*numvars);
929*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
930*59599516SKenneth E. Jansen writeheader( &irstou, fieldlabel, (void*)iarray, &nitems, &isize, datatype, phasta_iotype );
931*59599516SKenneth E. Jansen writedatablock( &irstou, fieldlabel, array, &isize, datatype, phasta_iotype );
932*59599516SKenneth E. Jansen
933*59599516SKenneth E. Jansen closefile( &irstou, fmode);
934*59599516SKenneth E. Jansen
935*59599516SKenneth E. Jansen free(fieldlabel);
936*59599516SKenneth E. Jansen }
937*59599516SKenneth E. Jansen
938*59599516SKenneth 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)939*59599516SKenneth E. Jansen Write_PhAvg2( int* pid,
940*59599516SKenneth E. Jansen char* filemode,
941*59599516SKenneth E. Jansen char* fieldtag,
942*59599516SKenneth E. Jansen int* tagsize,
943*59599516SKenneth E. Jansen int* iphase,
944*59599516SKenneth E. Jansen int* nphasesincycle,
945*59599516SKenneth E. Jansen void* array,
946*59599516SKenneth E. Jansen char* arraytype,
947*59599516SKenneth E. Jansen int* nshg,
948*59599516SKenneth E. Jansen int* numvars,
949*59599516SKenneth E. Jansen int* stepno) {
950*59599516SKenneth E. Jansen
951*59599516SKenneth E. Jansen int addtagsize; // phase number is added to the name of the field
952*59599516SKenneth E. Jansen if(*iphase<10)
953*59599516SKenneth E. Jansen addtagsize=1;
954*59599516SKenneth E. Jansen else if(*iphase<100)
955*59599516SKenneth E. Jansen addtagsize=2;
956*59599516SKenneth E. Jansen else if(*iphase<1000)
957*59599516SKenneth E. Jansen addtagsize=3;
958*59599516SKenneth E. Jansen
959*59599516SKenneth E. Jansen int tagsize2;
960*59599516SKenneth E. Jansen tagsize2=*tagsize+addtagsize;
961*59599516SKenneth E. Jansen
962*59599516SKenneth E. Jansen char *fieldlabel = (char *)malloc((tagsize2+1)*sizeof(char));
963*59599516SKenneth E. Jansen strncpy(fieldlabel, fieldtag, *tagsize);
964*59599516SKenneth E. Jansen fieldlabel[tagsize2] = '\0';
965*59599516SKenneth E. Jansen
966*59599516SKenneth E. Jansen char straddtagsize[10];
967*59599516SKenneth E. Jansen sprintf(straddtagsize,"%d",*iphase);
968*59599516SKenneth E. Jansen
969*59599516SKenneth E. Jansen if(*iphase<10) {
970*59599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[0];
971*59599516SKenneth E. Jansen }
972*59599516SKenneth E. Jansen else if(*iphase<100) {
973*59599516SKenneth E. Jansen fieldlabel[tagsize2-2]=straddtagsize[0];
974*59599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[1];
975*59599516SKenneth E. Jansen }
976*59599516SKenneth E. Jansen else if(*iphase<1000) {
977*59599516SKenneth E. Jansen fieldlabel[tagsize2-3]=straddtagsize[0];
978*59599516SKenneth E. Jansen fieldlabel[tagsize2-2]=straddtagsize[1];
979*59599516SKenneth E. Jansen fieldlabel[tagsize2-1]=straddtagsize[2];
980*59599516SKenneth E. Jansen }
981*59599516SKenneth E. Jansen
982*59599516SKenneth E. Jansen int irstou;
983*59599516SKenneth E. Jansen int magic_number = 362436;
984*59599516SKenneth E. Jansen int* mptr = &magic_number;
985*59599516SKenneth E. Jansen double version=0.0;
986*59599516SKenneth E. Jansen int isize, nitems;
987*59599516SKenneth E. Jansen int iarray[10];
988*59599516SKenneth E. Jansen
989*59599516SKenneth E. Jansen char fmode[10];
990*59599516SKenneth E. Jansen if(!strncmp(filemode,"w",1))
991*59599516SKenneth E. Jansen strcpy(fmode,"write");
992*59599516SKenneth E. Jansen else // default is append
993*59599516SKenneth E. Jansen strcpy(fmode,"append");
994*59599516SKenneth E. Jansen
995*59599516SKenneth E. Jansen char datatype[10];
996*59599516SKenneth E. Jansen if(!strncmp(arraytype,"i",1))
997*59599516SKenneth E. Jansen strcpy(datatype,"int");
998*59599516SKenneth E. Jansen else // default is double
999*59599516SKenneth E. Jansen strcpy(datatype,"double");
1000*59599516SKenneth E. Jansen
1001*59599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib ////////////////////////////
1002*59599516SKenneth E. Jansen
1003*59599516SKenneth E. Jansen int nfiles;
1004*59599516SKenneth E. Jansen int nfields;
1005*59599516SKenneth E. Jansen int numparts;
1006*59599516SKenneth E. Jansen int irank;
1007*59599516SKenneth E. Jansen int nprocs;
1008*59599516SKenneth E. Jansen
1009*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles;
1010*59599516SKenneth E. Jansen nfields = outpar.nsynciofieldswriterestart;
1011*59599516SKenneth E. Jansen numparts = workfc.numpe;
1012*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank;
1013*59599516SKenneth E. Jansen nprocs = workfc.numpe;
1014*59599516SKenneth E. Jansen
1015*59599516SKenneth E. Jansen int nppf = numparts/nfiles;
1016*59599516SKenneth E. Jansen int GPID;
1017*59599516SKenneth E. Jansen
1018*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ...
1019*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ...
1020*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ...
1021*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ...
1022*59599516SKenneth E. Jansen
1023*59599516SKenneth E. Jansen char fieldtag_s[255];
1024*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255);
1025*59599516SKenneth E. Jansen
1026*59599516SKenneth E. Jansen field_flag++;
1027*59599516SKenneth E. Jansen if(*pid==0) {
1028*59599516SKenneth E. Jansen printf("\n");
1029*59599516SKenneth E. Jansen printf("The %d/%d th field to be written is '%s'\n",field_flag,nfields,fieldlabel);
1030*59599516SKenneth E. Jansen }
1031*59599516SKenneth E. Jansen
1032*59599516SKenneth E. Jansen int i;
1033*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++ ) {
1034*59599516SKenneth E. Jansen GPID = startpart + i;
1035*59599516SKenneth E. Jansen
1036*59599516SKenneth E. Jansen // Write solution field ...
1037*59599516SKenneth E. Jansen sprintf(fieldtag_s,"%s@%d",fieldlabel,GPID);
1038*59599516SKenneth E. Jansen
1039*59599516SKenneth E. Jansen isize = (*nshg)*(*numvars);
1040*59599516SKenneth E. Jansen nitems = 3;
1041*59599516SKenneth E. Jansen iarray[ 0 ] = (*nshg);
1042*59599516SKenneth E. Jansen iarray[ 1 ] = (*numvars);
1043*59599516SKenneth E. Jansen iarray[ 2 ] = (*stepno);
1044*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype);
1045*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, array, &isize, "double", phasta_iotype );
1046*59599516SKenneth E. Jansen }
1047*59599516SKenneth E. Jansen
1048*59599516SKenneth E. Jansen if (field_flag==nfields){
1049*59599516SKenneth E. Jansen closefile(&f_descriptor, "write");
1050*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor);
1051*59599516SKenneth E. Jansen if (*pid==0) {
1052*59599516SKenneth E. Jansen printf("\n");
1053*59599516SKenneth E. Jansen }
1054*59599516SKenneth E. Jansen }
1055*59599516SKenneth E. Jansen
1056*59599516SKenneth E. Jansen free(fieldlabel);
1057*59599516SKenneth E. Jansen }
1058*59599516SKenneth E. Jansen
1059*59599516SKenneth E. Jansen
1060*59599516SKenneth E. Jansen void
Write_d2wall(int * pid,int * numnp,double * array1)1061*59599516SKenneth E. Jansen Write_d2wall( int* pid,
1062*59599516SKenneth E. Jansen int* numnp,
1063*59599516SKenneth E. Jansen double* array1 ) {
1064*59599516SKenneth E. Jansen
1065*59599516SKenneth E. Jansen int isize, nitems;
1066*59599516SKenneth E. Jansen int iarray[10];
1067*59599516SKenneth E. Jansen
1068*59599516SKenneth E. Jansen /////////////////////////////// Start of writing using new-lib ////////////////////////////
1069*59599516SKenneth E. Jansen
1070*59599516SKenneth E. Jansen int nfiles;
1071*59599516SKenneth E. Jansen int nfields;
1072*59599516SKenneth E. Jansen int numparts;
1073*59599516SKenneth E. Jansen int irank;
1074*59599516SKenneth E. Jansen int nprocs;
1075*59599516SKenneth E. Jansen
1076*59599516SKenneth E. Jansen // First, count the number of fields to write and store the result in
1077*59599516SKenneth E. Jansen //countfieldstowriterestart();
1078*59599516SKenneth E. Jansen
1079*59599516SKenneth E. Jansen // Retrieve and compute the parameters required for SyncIO
1080*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles;
1081*59599516SKenneth E. Jansen nfields = 1; //outpar.nsynciofieldswriterestart; // Only the distance to the walls in d2wall
1082*59599516SKenneth E. Jansen numparts = workfc.numpe;
1083*59599516SKenneth E. Jansen irank = *pid; //workfc.myrank;
1084*59599516SKenneth E. Jansen nprocs = workfc.numpe;
1085*59599516SKenneth E. Jansen int nppf = numparts/nfiles;
1086*59599516SKenneth E. Jansen int GPID;
1087*59599516SKenneth E. Jansen
1088*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ...
1089*59599516SKenneth E. Jansen int nppp = numparts/nprocs;// nppp : Number of parts per proc ...
1090*59599516SKenneth E. Jansen int startpart = irank * nppp +1;// Part id from which I (myrank) start ...
1091*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1;// Part id to which I (myrank) end ...
1092*59599516SKenneth E. Jansen
1093*59599516SKenneth E. Jansen int descriptor;
1094*59599516SKenneth E. Jansen char filename[255],fieldtag_s[255];
1095*59599516SKenneth E. Jansen bzero((void*)filename,255);
1096*59599516SKenneth E. Jansen bzero((void*)fieldtag_s,255);
1097*59599516SKenneth E. Jansen
1098*59599516SKenneth E. Jansen sprintf(filename,"d2wall.%d",((int)(irank/(nprocs/nfiles))+1));
1099*59599516SKenneth E. Jansen
1100*59599516SKenneth E. Jansen if (irank==0) {
1101*59599516SKenneth E. Jansen printf("Filename is %s \n",filename);
1102*59599516SKenneth E. Jansen }
1103*59599516SKenneth E. Jansen
1104*59599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles, &f_descriptor, "write");
1105*59599516SKenneth E. Jansen
1106*59599516SKenneth E. Jansen openfile(filename, "write", &f_descriptor);
1107*59599516SKenneth E. Jansen
1108*59599516SKenneth E. Jansen field_flag=0;
1109*59599516SKenneth E. Jansen
1110*59599516SKenneth E. Jansen int i;
1111*59599516SKenneth E. Jansen for ( i = 0; i < nppp; i++) { //This loop is useful only if several parts per processor
1112*59599516SKenneth E. Jansen // GPID : global part id, corresponds to rank ...
1113*59599516SKenneth E. Jansen // e.g : (in this example)
1114*59599516SKenneth E. Jansen // proc 0 : 1--4
1115*59599516SKenneth E. Jansen // proc 1 : 5--8 ...
1116*59599516SKenneth E. Jansen GPID = startpart + i;
1117*59599516SKenneth E. Jansen
1118*59599516SKenneth E. Jansen // Write solution field ...
1119*59599516SKenneth E. Jansen sprintf(fieldtag_s,"d2wall@%d",GPID);
1120*59599516SKenneth E. Jansen
1121*59599516SKenneth E. Jansen isize = (*numnp);
1122*59599516SKenneth E. Jansen nitems = 2;
1123*59599516SKenneth E. Jansen iarray[ 0 ] = (*numnp);
1124*59599516SKenneth E. Jansen iarray[ 1 ] = 1; //numVars = 1
1125*59599516SKenneth E. Jansen writeheader( &f_descriptor, fieldtag_s, (void*)iarray, &nitems, &isize, "double", phasta_iotype);
1126*59599516SKenneth E. Jansen writedatablock( &f_descriptor, fieldtag_s, (void*)(array1), &isize, "double", phasta_iotype );
1127*59599516SKenneth E. Jansen }
1128*59599516SKenneth E. Jansen field_flag++;
1129*59599516SKenneth E. Jansen
1130*59599516SKenneth E. Jansen if (field_flag==nfields){
1131*59599516SKenneth E. Jansen closefile(&f_descriptor, "write");
1132*59599516SKenneth E. Jansen finalizephmpiio(&f_descriptor);
1133*59599516SKenneth E. Jansen if (irank==0) {
1134*59599516SKenneth E. Jansen printf("\n");
1135*59599516SKenneth E. Jansen }
1136*59599516SKenneth E. Jansen }
1137*59599516SKenneth E. Jansen }
1138*59599516SKenneth E. Jansen
1139