10 #include "src_piny_physics_v1.0/include/class_defs/piny_constants.h"
12 #include "para_grp_parse.h"
13 #include "main/CPcharmParaInfoGrp.h"
14 #include "src_piny_physics_v1.0/friend_lib/proto_friend_lib_entry.h"
15 #include "src_mathlib/mathlib.h"
16 #include "src_piny_physics_v1.0/include/class_defs/allclass_gen.h"
17 #include "src_piny_physics_v1.0/include/class_defs/allclass_cp.h"
18 #include "src_piny_physics_v1.0/include/class_defs/PINY_INIT/PhysicsParamTrans.h"
22 #if CMK_PROJECTIONS_USE_ZLIB
27 #define M_PI 3.14159265358979323846
38 GENERAL_DATA *general_data = GENERAL_DATA::get();
41 #include "src_piny_physics_v1.0/include/class_defs/allclass_strip_gen.h"
42 #include "src_piny_physics_v1.0/include/class_defs/allclass_strip_cp.h"
52 int rhoRsubplanes = config.rhoRsubplanes;
53 int rhoGHelpers = config.rhoGHelpers;
55 int sizeXEext = sim->ngrid_eext_a;
56 int sizeYEext = sim->ngrid_eext_b;
57 int sizeZEext = sim->ngrid_eext_c;
58 int sizeX = sim->sizeX;
59 int sizeY = sim->sizeY;
60 int sizeZ = sim->sizeZ;
62 double *hmati = gencell->hmati;
63 double ecut4 = 8.0*cpcoeffs_info->ecut;
65 int ka_max = 2*(sim->kx_max);
66 int kb_max = 2*(sim->ky_max);
67 int kc_max = 2*(sim->kz_max);
69 get_rho_kvectors(ecut4,hmati,&kx,&ky,&kz,&nline_tot,&nPacked,ka_max,kb_max,kc_max);
74 int *kx_ind =
new int[nline_tot];
75 int *kx_line =
new int[nline_tot];
76 int *ky_line =
new int[nline_tot];
77 int *kx_line_ext =
new int[nline_tot];
78 int *ky_line_ext =
new int[nline_tot];
79 int *istrt_line =
new int [nline_tot];
80 int *iend_line =
new int [nline_tot];
81 int *npts_line =
new int [nline_tot];
86 for(
int i = 1;i<nPacked;i++){
88 nplane_x = (iii > nplane_x ? iii : nplane_x);
89 if(kx[i]!=kx[(i-1)] || ky[i]!=ky[(i-1)]){
91 npts_line[ic] = iend_line[ic]-istrt_line[ic];
96 iend_line[ic] = nPacked;
97 npts_line[ic] = iend_line[ic]-istrt_line[ic];
100 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
101 CkPrintf(
"Toasty Rho Line Flip-lines!\n");
102 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
107 double temp = ((double)nplane_x)*config.gExpandFactRho;
108 int nchareRhoG = (int)temp;
112 int nx_ext = sim->ngrid_eext_a;
113 int ny_ext = sim->ngrid_eext_b;
114 int nz_ext = sim->ngrid_eext_c;
116 int *kxt =
new int[nPacked];
117 int *kyt =
new int[nPacked];
118 int *kzt =
new int[nPacked];
119 CmiMemcpy(kxt,kx,(nPacked*
sizeof(
int)));
120 CmiMemcpy(kyt,ky,(nPacked*
sizeof(
int)));
121 CmiMemcpy(kzt,kz,(nPacked*
sizeof(
int)));
123 int *mapl =
new int[nline_tot];
124 for(
int i=0;i<nline_tot;i++){mapl[i]=i;}
126 if(config.rhoLineOrder==0){
127 int nsplit = (3*nplane_x)/2;
129 for(
int i=0;i<nsplit; i++){
130 for(
int j=i;j<nline_tot;j+=nsplit){
134 if(config.rhoLineOrder==1){
136 for(
int j=0;j<4;j++){
137 for(
int i=0;i<nline_tot;i++){
138 double stuff = altRandom(&seed);
139 int index = (int)( ((
double) nline_tot)*stuff );
140 index = MIN(index,nline_tot-1);
142 mapl[i] = mapl[index];
148 for(
int i=0;i<nline_tot;i++){
150 for(
int lt=istrt_line[j],l=jc;lt<iend_line[j];lt++,l++){
158 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
159 CkPrintf(
"Toasty Rho Line Flip-pts!\n");
160 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
171 kx_line[ic] = kx[ic];
172 ky_line[ic] = ky[ic];
173 kx_line_ext[ic] = kx[ic];
174 ky_line_ext[ic] = ky[ic];
175 if(kx_line[ic] <0){kx_line[ic] +=nx;}
176 if(ky_line[ic] <0){ky_line[ic] +=ny;}
177 if(kx_line_ext[ic]<0){kx_line_ext[ic]+=nx_ext;}
178 if(ky_line_ext[ic]<0){ky_line_ext[ic]+=ny_ext;}
179 for(
int i = 1;i<nPacked;i++){
180 if(kx[i]!=kx[(i-1)] || ky[i]!=ky[(i-1)]){
182 npts_line[ic] = iend_line[ic]-istrt_line[ic];
187 kx_line_ext[ic] = kx[i];
188 ky_line_ext[ic] = ky[i];
189 if(kx_line[ic] <0){kx_line[ic] +=nx;}
190 if(ky_line[ic] <0){ky_line[ic] +=ny;}
191 if(kx_line_ext[ic]<0){kx_line_ext[ic]+=nx_ext;}
192 if(ky_line_ext[ic]<0){ky_line_ext[ic]+=ny_ext;}
195 iend_line[ic] = nPacked;
196 npts_line[ic] = iend_line[ic]-istrt_line[ic];
200 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
201 CkPrintf(
"Toasty Line Rho Flip-lines.b!\n");
202 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
210 int run_length_sum = 0;
215 if(curr_x<0){curr_x+=nx;}
216 if(curr_y<0){curr_y+=ny;}
217 if(curr_z<0){curr_z+=nz;}
219 int nline_tot_now = 1;
221 CkVec<RunDescriptor> runs;
224 runs.push_back(
RunDescriptor(curr_x,curr_y,0,run_length_sum,0,1,nz));
227 for(
int pNo=1;pNo<nPacked;pNo++) {
235 if (z == tmpz + 1 && x == curr_x && y == curr_y) {
246 runs.push_back(
RunDescriptor(curr_x,curr_y,curr_z,run_length_sum,run_length,1,nz));
248 run_length_sum += run_length;
249 if((curr_x!=x || curr_y!=y) && kz[pNo-1]<0){
250 runs.push_back(
RunDescriptor(curr_x,curr_y,0,run_length_sum,0,1,nz));
253 if((curr_x!=x || curr_y!=y) && kz[pNo]>=0){
263 if(kx[pNo]!=kx[(pNo-1)] || ky[pNo]!=ky[(pNo-1)] ){
265 if( (nrun_tot-1)/2 != nline_tot_now-1){
267 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
268 CkPrintf(
"Broken Rho Run Desscriptor : %d %d %d : %d %d %d: %d %d\n",
269 kx[pNo],ky[pNo],kz[pNo],kx[(pNo-1)],ky[(pNo-1)],kz[(pNo-1)],
270 nrun_tot-1,nline_tot_now-1);
271 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
277 runs.push_back(
RunDescriptor(curr_x,curr_y,curr_z,run_length_sum,run_length,1,nz));
278 run_length_sum += run_length;
280 runs.push_back(
RunDescriptor(curr_x,curr_y,0,run_length_sum,0,1,nz));
285 if(run_length_sum!=nPacked){
286 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
287 CkPrintf(
"The rho rundescriptor didn't assign all pts to rho runs \n");
288 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
292 if((nrun_tot %2)!=0 || nrun_tot != 2*nline_tot){
293 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
294 CkPrintf(
"The rho rundescriptor MUST find an even number of half-lines\n");
295 CkPrintf(
"The rho rundescriptor MUST find the correct number of lines\n");
296 CkPrintf(
"%d %d %d %d\n",nrun_tot,nrun_tot/2,nline_tot,
298 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
302 for(
int i=0;i<nline_tot;i+=2){
306 if( (Desi->x != Desi1->x) || (Desi->y != Desi1->y) ){
307 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
308 CkPrintf(
"The rho rundescriptor MUST pair up the half-lines\n");
309 CkPrintf(
"i %d kx %d kx1 %d ky %d ky1 %d\n",i,Desi->x,Desi1->x,Desi->y,Desi1->y);
310 CkPrintf(
"or you will not be a happy camper :\n");
311 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
314 if(Desi->z==0 && Desi->length != 0){
315 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
316 CkPrintf(
"The rho rundescriptor with 1st z == 0 must have 0 lngth\n");
317 CkPrintf(
"%d %d %d : %d %d %d\n",Desi->x,Desi->y,Desi->z,
318 Desi1->x,Desi1->y,Desi1->z);
319 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
322 if(Desi1->z<0 || (Desi->z<=nz/2 && Desi->length != 0)){
323 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
324 CkPrintf(
"The rho rundescriptor MUST have 1st z <=0 and 2nd >=0\n");
325 CkPrintf(
"%d %d %d : %d %d %d\n",Desi->x,Desi->y,Desi->z,
326 Desi1->x,Desi1->y,Desi1->z);
327 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
335 int nchareRhoGEext = nchareRhoG*rhoGHelpers;
336 int *istrt_lgrp =
new int [nchareRhoG];
337 int *iend_lgrp =
new int [nchareRhoG];
338 int *npts_lgrp =
new int [nchareRhoG];
339 int *nline_lgrp =
new int [nchareRhoG];
340 int *nline_lgrp_eext =
new int [nchareRhoGEext];
343 istrt_lgrp,iend_lgrp,npts_lgrp,nline_lgrp,
false);
349 int nlines_min=nline_lgrp[0];
351 for(
int i=0;i<nchareRhoG;i++){
352 nlines_max=MAX(nlines_max,nline_lgrp[i]);
353 nlines_min=MIN(nlines_min,nline_lgrp[i]);
355 int **index_tran_upack_rho = cmall_int_mat(0,nchareRhoG,0,nlines_max,
"util.C");
356 int **index_tran_upack_eext = cmall_int_mat(0,nchareRhoGEext,0,nlines_max,
"util.C");
358 int yspace=sizeX/2+1;
359 for(
int igrp=0;igrp<nchareRhoG;igrp++){
360 for(
int i=istrt_lgrp[igrp],j=0;i<iend_lgrp[igrp];i++,j++){
361 index_tran_upack_rho[igrp][j] = kx_line[i] + ky_line[i]*yspace;
365 int nlines_max_eext = 0;
366 int yspaceEext=sizeXEext/2+1;
367 for(
int igrp=0,jgrp=0;igrp<nchareRhoG;igrp++){
368 int nlTot = nline_lgrp[igrp];
369 int istrt = istrt_lgrp[igrp];
370 for(
int k=0;k<rhoGHelpers;k++,jgrp++){
374 nline_lgrp_eext[jgrp] = nl;
375 nlines_max_eext = MAX(nlines_max_eext,nl);
376 for(
int j=0,i=kstrt;j<nl;j++,i++){
377 index_tran_upack_eext[jgrp][j] = kx_line_ext[i] + ky_line_ext[i]*yspaceEext;
382 CkVec<RunDescriptor> *RhosortedRunDescriptors;
383 RhosortedRunDescriptors =
new CkVec<RunDescriptor> [nchareRhoG];
384 for(
int igrp = 0; igrp < nchareRhoG; igrp++){
385 for(
int i=istrt_lgrp[igrp];i<iend_lgrp[igrp];i++){
388 RhosortedRunDescriptors[igrp].push_back(runs[j]);
389 RhosortedRunDescriptors[igrp].push_back(runs[j1]);
393 for(
int x = 0; x < nchareRhoG; x ++) {
394 int runsToBeSent = RhosortedRunDescriptors[x].size();
396 for (
int j = 0; j < RhosortedRunDescriptors[x].size(); j++){
397 numPoints += RhosortedRunDescriptors[x][j].length;
404 double *pts_per_chare =
new double[nchareRhoG];
405 double *lines_per_chare =
new double[nchareRhoG];
406 for(
int i=0;i<nchareRhoG;i++){
407 pts_per_chare[i] =(double) npts_lgrp[i];
408 lines_per_chare[i]=(double) nline_lgrp[i];
415 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
416 CkPrintf(
"No lines in a RhoG collection. Your RhoG decomp stinks.\n");
417 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
421 if(nlines_min<config.rhoGHelpers){
422 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
423 CkPrintf(
"RhoGHelper parameter, %d, must be <= minimum number\n",config.rhoGHelpers);
424 CkPrintf(
"of lines in any RhoG chare array element, %d.\n",nlines_min);
425 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
429 if(rhoRsubplanes > nplane_x){
430 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
431 CkPrintf(
"RhoGsubplanes parameter, %d, must be <= number\n",rhoRsubplanes);
432 CkPrintf(
"number of gx values which span 0<=gx <=%d.\n",nplane_x);
433 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
440 int ***index_tran_upack_rho_y = NULL;
441 int ***index_tran_pack_rho_y = NULL;
442 int **nline_send_rho_y = NULL;
443 int ***index_tran_upack_eext_y = NULL;
444 int ***index_tran_upack_eext_ys= NULL;
445 int ***index_tran_pack_eext_y = NULL;
446 int ***index_tran_pack_eext_ys = NULL;
447 int **nline_send_eext_y = NULL;
448 int *numSubGx = NULL;
449 int **listSubGx = NULL;
451 int ngxSubMax = nplane_x/rhoRsubplanes+1;
452 if(rhoRsubplanes==1){ngxSubMax=0;}
457 CkPrintf(
"Creating the subPlane maps\n");
464 index_tran_upack_rho_y = cmall_itens3(0,nchareRhoG,0,rhoRsubplanes,
465 0,nlines_max,
"util.C");
466 index_tran_pack_rho_y = cmall_itens3(0,nchareRhoG,0,rhoRsubplanes,
467 0,nlines_max,
"util.C");
468 nline_send_rho_y = cmall_int_mat(0,nchareRhoG,0,rhoRsubplanes,
"util.C");
471 index_tran_upack_eext_y = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
472 0,nlines_max_eext,
"util.C");
473 index_tran_upack_eext_ys = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
474 0,nlines_max_eext,
"util.C");
475 index_tran_pack_eext_y = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
476 0,nlines_max_eext,
"util.C");
477 index_tran_pack_eext_ys = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
478 0,nlines_max_eext,
"util.C");
479 nline_send_eext_y = cmall_int_mat(0,nchareRhoGEext,0,rhoRsubplanes,
"util.C");
482 numSubGx =
new int [rhoRsubplanes];
483 listSubGx = cmall_int_mat(0,rhoRsubplanes,0,ngxSubMax,
"util.C");
488 int *listGx =
new int [nplane_x];
489 int *mapGrpGx =
new int [nplane_x];
490 int *mapMemGx =
new int [nplane_x];
492 int div = (nplane_x/rhoRsubplanes);
493 int rem = (nplane_x % rhoRsubplanes);
494 for(
int igrp=0;igrp<rhoRsubplanes;igrp++){
495 int max = (igrp < rem ? 1 : 0);
496 numSubGx[igrp] = max+div;
499 nline_lgrp_eext,kx_line,nline_send_eext_y,rhoRsubplanes);
500 if(config.rhoSubPlaneBalance==1){
501 for(
int i=0;i<nplane_x;i++){mapGrpGx[listGx[i]] = i;}
502 create_gx_decomp(nline_tot,nplane_x,kx_line,mapGrpGx,rhoRsubplanes,numSubGx);
506 for(
int i=0;i<nplane_x;i++){
507 if(listGx[i]!=i){listSubFlag==1;}
510 CkPrintf(
"This is a straight run through gx on the subplanes\n");
513 for(
int igrp=0;igrp<rhoRsubplanes;igrp++){
514 int num = numSubGx[igrp];
515 if(num>1){sort_me(num,&listGx[iii]);}
516 CkPrintf(
"subplane[%d] : %d : Gx { ",igrp,num);
517 for(
int jc=0,ic=iii;ic<iii+num;ic++,jc++){
518 listSubGx[igrp][jc] = listGx[ic];
519 mapGrpGx[listGx[ic]] = igrp;
520 mapMemGx[listGx[ic]] = jc;
521 CkPrintf(
"%d ",listGx[ic]);
531 for(
int igrp=0,i=0;igrp<nchareRhoG;igrp++){
532 for(
int ic=0;ic<rhoRsubplanes;ic++){
533 nline_send_rho_y[igrp][ic]=0;
536 for(
int igrp=0;igrp<nchareRhoG;igrp++){
537 for(
int i=istrt_lgrp[igrp],j=0;i<iend_lgrp[igrp];i++,j++){
538 int ic = mapGrpGx[kx_line[i]];
539 int ip = mapMemGx[kx_line[i]];
540 int jc = nline_send_rho_y[igrp][ic];
541 nline_send_rho_y[igrp][ic]++;
542 index_tran_pack_rho_y[igrp][ic][jc] = j*sizeZ;
543 index_tran_upack_rho_y[igrp][ic][jc] = ip*sizeY + ky_line[i];
547 int nsend_min=10000000;
549 for(
int igrp=0;igrp<nchareRhoG;igrp++){
550 for(
int ic=0;ic<rhoRsubplanes;ic++){
551 if(nline_send_rho_y[igrp][ic]>0){
552 nsend_min= MIN(nsend_min, nline_send_rho_y[igrp][ic]);
553 nsend_max= MAX(nsend_max, nline_send_rho_y[igrp][ic]);
557 CkPrintf(
"Msg size Imbalance : rhoG <-> rhoR min %d max %d\n",
558 nsend_min, nsend_max);
564 for(
int igrp=0,i=0;igrp<nchareRhoGEext;igrp++){
565 for(
int ic=0;ic<rhoRsubplanes;ic++){
566 nline_send_eext_y[igrp][ic]=0;
569 for(
int igrp=0,i=0;igrp<nchareRhoGEext;igrp++){
570 for(
int j=0;j<nline_lgrp_eext[igrp];j++,i++){
571 int ic = mapGrpGx[kx_line[i]];
572 int ip = mapMemGx[kx_line[i]];
573 int jc = nline_send_eext_y[igrp][ic];
574 nline_send_eext_y[igrp][ic]++;
575 index_tran_pack_eext_y[igrp][ic][jc] = j*sizeZEext;
576 index_tran_pack_eext_ys[igrp][ic][jc] = j*sizeZ;
577 index_tran_upack_eext_y[igrp][ic][jc] = ip*sizeYEext + ky_line_ext[i];
578 index_tran_upack_eext_ys[igrp][ic][jc]= ip*sizeY + ky_line[i];
584 for(
int igrp=0;igrp<nchareRhoGEext;igrp++){
585 for(
int ic=0;ic<rhoRsubplanes;ic++){
586 if(nline_send_eext_y[igrp][ic]>0){
587 nsend_min= MIN(nsend_min, nline_send_eext_y[igrp][ic]);
588 nsend_max= MAX(nsend_max, nline_send_eext_y[igrp][ic]);
592 CkPrintf(
"Msg size Imbalance : rhoGhart <-> rhoRhart min %d max %d\n",
593 nsend_min, nsend_max);
604 config.nchareRhoG = nchareRhoG;
606 sim->nplane_rho_x = nplane_x;
607 sim->nchareRhoG = nchareRhoG;
608 sim->nchareRhoGEext = nchareRhoGEext;
609 sim->npts_per_chareRhoG = npts_lgrp;
610 sim->index_tran_upack_rho = index_tran_upack_rho;
611 sim->index_tran_upack_eext = index_tran_upack_eext;
612 sim->nlines_max_rho = nlines_max;
613 sim->nlines_per_chareRhoG = nline_lgrp;
614 sim->nlines_per_chareRhoGEext= nline_lgrp_eext;
615 sim->RhosortedRunDescriptors = RhosortedRunDescriptors;
616 sim->npts_tot_rho = nPacked;
617 sim->nlines_tot_rho = nline_tot;
618 sim->lines_per_chareRhoG = lines_per_chare;
619 sim->pts_per_chareRhoG = pts_per_chare;
621 sim->rhoRsubplanes = config.rhoRsubplanes;
622 sim->nlines_max_eext = nlines_max_eext;
623 sim->nline_send_eext_y = nline_send_eext_y;
624 sim->nline_send_rho_y = nline_send_rho_y;
625 sim->index_tran_upack_rho_y = index_tran_upack_rho_y;
626 sim->index_tran_upack_eext_y = index_tran_upack_eext_y;
627 sim->index_tran_upack_eext_ys= index_tran_upack_eext_ys;
628 sim->index_tran_pack_rho_y = index_tran_pack_rho_y;
629 sim->index_tran_pack_eext_y = index_tran_pack_eext_y;
630 sim->index_tran_pack_eext_ys = index_tran_pack_eext_ys;
632 sim->ngxSubMax = ngxSubMax;
633 sim->numSubGx = numSubGx;
634 sim->listSubGx = listSubGx;
635 sim->listSubFlag = listSubFlag;
642 int Rhart_min=10000000;
644 for(
int j=0; j< nchareRhoGEext;j++){
645 int recvCountFromRHartExt = 0;
646 for(
int i=0;i<rhoRsubplanes;i++){
647 if(sim->nline_send_eext_y[j][i]>0)
648 recvCountFromRHartExt++;
650 recvCountFromRHartExt*=sizeZEext;
651 total += recvCountFromRHartExt;
652 Rhart_max=MAX(Rhart_max,recvCountFromRHartExt);
653 Rhart_min=MIN(Rhart_min,recvCountFromRHartExt);
655 total /= (double)nchareRhoGEext;
656 CkPrintf(
"GHart recv %d min msg %d max msg avg %g from RHart\n",
657 Rhart_min, Rhart_max,total);
662 int Rho_min=10000000;
664 for(
int j=0; j< nchareRhoGEext;j++){
665 int recvCountFromRho = 0;
666 for(
int i=0;i<rhoRsubplanes;i++){
667 if(sim->nline_send_eext_y[j][i]>0)
670 recvCountFromRho*=sizeZ;
671 total += recvCountFromRho;
672 Rho_max=MAX(Rho_max,recvCountFromRho);
673 Rho_min=MIN(Rho_min,recvCountFromRho);
675 total /= (double)nchareRhoGEext;
676 CkPrintf(
"GHart recv %d min msg %d max msg avg %g from RRho\n",
677 Rho_min, Rho_max,total);
682 int RRho_min=10000000;
684 for(
int j=0; j< nchareRhoG;j++){
685 int recvCountFromRRho = 0;
686 for(
int i=0;i<rhoRsubplanes;i++){
687 if(sim->nline_send_rho_y[j][i]>0)
690 recvCountFromRRho*=sizeZ;
691 total += recvCountFromRRho;
692 RRho_max=MAX(RRho_max,recvCountFromRRho);
693 RRho_min=MIN(RRho_min,recvCountFromRRho);
695 total /= (double)nchareRhoG;
696 CkPrintf(
"GRho recv %d min msg %d max msg avg %g from RRho\n",
697 RRho_min,RRho_max,total);
702 int GRho_min=10000000;
703 for(
int j=0; j< rhoRsubplanes;j++){
704 int recvCountFromGRho = 0;
705 for(
int i=0;i<nchareRhoG;i++){
706 if(sim->nline_send_rho_y[i][j]>0)
709 GRho_max=MAX(GRho_max,recvCountFromGRho);
710 GRho_min=MIN(GRho_min,recvCountFromGRho);
712 CkPrintf(
"RRho recv %d min msg %d max msg from RhoG\n",GRho_min, GRho_max);
717 int GHart_min=10000000;
718 for(
int j=0; j< rhoRsubplanes;j++){
719 int recvCountFromGHartExt = 0;
720 for(
int i=0;i<nchareRhoGEext;i++){
721 if(sim->nline_send_eext_y[i][j]>0)
722 recvCountFromGHartExt++;
724 GHart_max=MAX(GHart_max,recvCountFromGHartExt);
725 GHart_min=MIN(GHart_min,recvCountFromGHartExt);
727 CkPrintf(
"RRho recv %d min msg %d max msg from GHart\n",GHart_min, GHart_max);
732 int GHart_min=10000000;
733 for(
int j=0; j< rhoRsubplanes;j++){
734 int recvCountFromGHartExt = 0;
735 for(
int i=0;i<nchareRhoGEext;i++){
736 if(sim->nline_send_eext_y[i][j]>0)
737 recvCountFromGHartExt++;
739 GHart_max=MAX(GHart_max,recvCountFromGHartExt);
740 GHart_min=MIN(GHart_min,recvCountFromGHartExt);
742 CkPrintf(
"RHart recv %d min msg %d max msg from GHart\n",GHart_min, GHart_max);
747 CkPrintf(
"Completed subPlane map creation.\n");
748 PRINT_LINE_STAR; CkPrintf(
"\n\n");
757 delete [] kx_line_ext;
758 delete [] ky_line_ext;
759 delete [] istrt_line;
765 delete [] istrt_lgrp;
778 int **kz_ret,
int *nline_tot_ret,
int *nPacked_ret,
779 int ka_max,
int kb_max,
int kc_max)
788 double tpi = 2.0*M_PI;
792 for(
int ka=0;ka<=ka_max;ka++){
793 for(
int kb=-kb_max;kb<=kb_max;kb++){
794 for(
int kc=-kc_max;kc<=kc_max;kc++){
795 double gx = tpi*(ka*hmati[1] + kb*hmati[2] + kc*hmati[3]);
796 double gy = tpi*(ka*hmati[4] + kb*hmati[5] + kc*hmati[6]);
797 double gz = tpi*(ka*hmati[7] + kb*hmati[8] + kc*hmati[9]);
798 double g2 = gx*gx+gy*gy+gz*gz;
799 if(g2<=ecut4){nPacked++;}
802 if(ka==0 && kb<0){nPacked_np--;}
803 if(ka==0 && kb==0 && kc<=0){nPacked_np--;}
809 CkPrintf(
"Rho kvectors perfect sphere %d : %d %d %d\n",nPacked_np,ka_max,kb_max,kc_max);
814 int *kx =
new int[nPacked];
815 int *ky =
new int[nPacked];
816 int *kz =
new int[nPacked];
819 for(
int ka=0;ka<=ka_max;ka++){
820 for(
int kb=-kb_max;kb<=kb_max;kb++){
821 for(
int kc=-kc_max;kc<=kc_max;kc++){
822 double gx = tpi*(ka*hmati[1] + kb*hmati[2] + kc*hmati[3]);
823 double gy = tpi*(ka*hmati[4] + kb*hmati[5] + kc*hmati[6]);
824 double gz = tpi*(ka*hmati[7] + kb*hmati[8] + kc*hmati[9]);
825 double g2 = gx*gx+gy*gy+gz*gz;
840 for(
int i=1; i<nPacked;i++){
841 if(kx[i]!=kx[(i-1)] || ky[i]!=ky[i-1]){nline_tot++;}
850 *nline_tot_ret = nline_tot;
851 *nPacked_ret = nPacked;
863 const char *fromFile,
int ibinary_opt,
864 int *nline_tot_ret,
int *nplane_ret,
865 int *istrt_lgrp,
int *iend_lgrp,
866 int *npts_lgrp,
int *nline_lgrp,
867 int **kx_line_ret,
int **ky_line_ret,
868 int **kx_ret,
int **ky_ret,
int **kz_ret,
int iget_decomp,
869 int gen_wave,
int nx_in,
int ny_in ,
int nz_in)
876 #ifdef _CP_DEBUG_UTIL_VERBOSE_
877 CkPrintf(
"Reading state from file: %s\n",fromFile);
879 if(ibinary_opt < 0 || ibinary_opt > 3){
880 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
881 CkPrintf(
"Bad binary option : %d %s\n",ibinary_opt,fromFile);
882 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
889 int doublePack = config.doublePack;
891 int *kx=
new int [nPacked];
892 int *ky=
new int [nPacked];
893 int *kz=
new int [nPacked];
896 readState(nPacked,arrCP,fromFile,ibinary_opt,nline_tot_ret,
897 nplane_ret,kx,ky,kz,&nx,&ny,&nz,
898 istrt_lgrp,iend_lgrp,npts_lgrp,nline_lgrp,iget_decomp,0);
903 kx -= 1; ky -= 1; kz -=1;
904 PhysicsParamTransfer::fetch_state_kvecs(kx,ky,kz,ncoef,doublePack);
905 kx += 1; ky += 1; kz +=1;
906 processState(nPacked,ncoef,arrCP,fromFile,ibinary_opt,nline_tot_ret,
908 istrt_lgrp,iend_lgrp,npts_lgrp,nline_lgrp,iget_decomp,0,0,ny);
911 int nplane = (*nplane_ret);
912 int nline_tot = (*nline_tot_ret);
913 int nchareG = config.nchareG;
915 if(nx!=nx_in || ny!=ny_in || nz!=nz_in){
916 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
917 CkPrintf(
"Bad State fft size Input\n");
918 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
925 #ifdef _INPUT_FOR_KPTS_MESSES_UP_
926 if(!config.doublePack){
927 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_warning_@@@@@@@@@@@@@@@@@@@@\n");
928 CkPrintf(
"The rundescriptor needs some love for the non-double pack\n");
929 CkPrintf(
"It is not consistent with new FFT logic due to input data order\n");
930 CkPrintf(
"If the data is just reordered all should be well, %s\n",fromFile);
931 CkPrintf(
"Raz is on the job.\n");
932 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_warning_@@@@@@@@@@@@@@@@@@@@\n");
937 int run_length_sum = 0;
942 if(curr_x<0){curr_x+=nx;}
943 if(curr_y<0){curr_y+=ny;}
944 if(curr_z<0){curr_z+=nz;}
946 int nline_tot_now = 1;
949 runs.push_back(
RunDescriptor(curr_x,curr_y,curr_z,run_length_sum,0,1,nz));
953 for(
int pNo=1;pNo<nPacked;pNo++) {
961 if (z == tmpz + 1 && x == curr_x && y == curr_y) {
972 runs.push_back(
RunDescriptor(curr_x,curr_y,curr_z,run_length_sum,run_length,1,nz));
974 run_length_sum += run_length;
975 if((curr_x!=x || curr_y!=y) && kz[pNo-1]<0){
976 runs.push_back(
RunDescriptor(curr_x,curr_y,0,run_length_sum,0,1,nz));
979 if((curr_x!=x || curr_y!=y) && kz[pNo]>=0){
990 if(kx[pNo]!=kx[(pNo-1)] || ky[pNo]!=ky[(pNo-1)] ){
992 if( (nrun_tot-1)/2 != nline_tot_now-1){
993 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
994 CkPrintf(
"Broken State Run Desscriptor : %d %d %d : %d %d %d: %d %d\n",
995 kx[pNo],ky[pNo],kz[pNo],kx[(pNo-1)],ky[(pNo-1)],kz[(pNo-1)],
996 nrun_tot-1,nline_tot_now-1);
997 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1003 runs.push_back(
RunDescriptor(curr_x,curr_y,curr_z,run_length_sum,run_length,1,nz));
1004 run_length_sum += run_length;
1005 if(kz[nPacked-1]<0){
1006 runs.push_back(
RunDescriptor(curr_x,curr_y,0,run_length_sum,0,1,nz));
1010 if(run_length_sum!=nPacked){
1011 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1012 CkPrintf(
"The state rundescriptor didn't assign all pts to runs %s\n",fromFile);
1013 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1017 if((nrun_tot %2)!=0 || nrun_tot != 2*nline_tot){
1018 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1019 CkPrintf(
"The state rundescriptor MUST find an even number of half-lines\n");
1020 CkPrintf(
"The rundescriptor MUST find the correct number of lines\n");
1021 CkPrintf(
"%d %d %d %d %s\n",nrun_tot,nrun_tot/2,nline_tot,
1022 nline_tot_now,fromFile);
1023 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1027 for(
int i=0;i<nline_tot;i+=2){
1030 if( (Desi->x != Desi1->x) || (Desi->y != Desi1->y) ){
1031 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1032 CkPrintf(
"The state rundescriptor MUST pair up the half-lines\n");
1033 CkPrintf(
"or you will not be a happy camper : %s\n",fromFile);
1034 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1037 if(Desi->z==0 && Desi->length != 0){
1038 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1039 CkPrintf(
"The state rundescriptor with 1st z == 0 must have 0 lngth\n");
1040 CkPrintf(
"%d %d %d : %d %d %d\n",Desi->x,Desi->y,Desi->z,
1041 Desi1->x,Desi1->y,Desi1->z);
1042 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1045 if(Desi1->z<0 || (Desi->z<=nz/2 && Desi->length != 0)){
1046 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1047 CkPrintf(
"The state rundescriptor MUST have 1st z <=0 and 2nd >=0\n");
1048 CkPrintf(
"%d %d %d : %d %d %d\n",Desi->x,Desi->y,Desi->z,
1049 Desi1->x,Desi1->y,Desi1->z);
1050 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1057 int *kx_line =
new int [nline_tot];
1058 int *ky_line =
new int [nline_tot];
1062 if(kx_line[0]<0){kx_line[0]+=nx;}
1063 if(ky_line[0]<0){ky_line[0]+=ny;}
1065 for(
int i = 1;i<nPacked;i++){
1066 if(kx[i]!=kx[(i-1)] || ky[i]!=ky[(i-1)]){
1068 kx_line[ic] = kx[i];
1069 ky_line[ic] = ky[i];
1070 if(ky_line[ic]<0){ky_line[ic]+=ny;}
1071 if(kx_line[ic]<0){kx_line[ic]+=nx;}
1077 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1078 CkPrintf(
"Incorrect number of (state) lines : %s\n",fromFile);
1079 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1083 *kx_line_ret = kx_line;
1084 *ky_line_ret = ky_line;
1095 #ifdef _CP_DEBUG_UTIL_VERBOSE_
1096 CkPrintf(
"Done reading state from file: %s\n",fromFile);
1109 int *nline_tot_ret,
int *nplane_ret,
int *kx,
int *ky,
int *kz,
1110 int *nx_ret,
int *ny_ret,
int *nz_ret,
1111 int *istrt_lgrp,
int *iend_lgrp,
int *npts_lgrp,
int *nline_lgrp,
1112 int iget_decomp,
int iget_vstate)
1121 strcpy(stuff,
"coef");
1123 strcpy(stuff,
"velocity");
1125 #ifdef _CP_DEBUG_UTIL_VERBOSE_
1126 CkPrintf(
"Reading %s state file: %s\n",stuff,fromFile);
1128 if(ibinary_opt < 0 || ibinary_opt > 3){
1129 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1130 CkPrintf(
"Bad binary option : %d\n",ibinary_opt);
1131 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1138 #if !CMK_PROJECTIONS_USE_ZLIB
1141 CkPrintf(
"Attempt to use ZLIB Failed! Please review compilation\n");
1149 FILE *fp=fopen(fromFile,
"r");
1151 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1152 CkPrintf(
"Can't open %s state file %s\n",stuff,fromFile);
1153 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1157 if(4!=fscanf(fp,
"%d%d%d%d",&nPackedLoc,&nx,&ny,&nz)){
1158 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1159 CkPrintf(
"Can't parse size line of file %s\n",fromFile);
1160 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1163 for(
int pNo=0;pNo<nPacked;pNo++) {
1166 if(5!=fscanf(fp,
"%lg%lg%d%d%d",&re,&im,&x,&y,&z)){
1167 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1168 CkPrintf(
"Can't parse packed %s state location %s\n",stuff,fromFile);
1169 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1177 if(config.doublePack && x==0 && y==0 && z==0){
break;}
1181 #if CMK_PROJECTIONS_USE_ZLIB
1182 else if(ibinary_opt==2){
1184 char bigenough[1000];
1185 char localFile[1000];
1186 strcpy(localFile,fromFile);
1187 strcat(localFile,
".gz");
1188 gzFile zfp=gzopen(localFile,
"rb");
1190 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1191 CkPrintf(
"Can't open %s state file %s\n",stuff,localFile);
1192 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1196 if(gzgets(zfp,bigenough,1000)!=Z_NULL)
1198 if(4!=sscanf(bigenough,
"%d%d%d%d",&nPackedLoc,&nx,&ny,&nz)){
1199 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1200 CkPrintf(
"Can't parse size line of file %s\n",localFile);
1201 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1207 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1208 CkPrintf(
"Can't parse size line of file %s\n",localFile);
1209 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1212 for(
int pNo=0;pNo<nPacked;pNo++) {
1215 if(gzgets(zfp,bigenough,1000)!=Z_NULL)
1217 if(5!=sscanf(bigenough,
"%lg%lg%d%d%d",&re,&im,&x,&y,&z)){
1218 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1219 CkPrintf(
"Can't parse packed %s state location %s\n",stuff,localFile);
1220 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1226 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1227 CkPrintf(
"Can't parse packed %s state location %s\n",stuff,localFile);
1228 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1236 if(config.doublePack && x==0 && y==0 && z==0){
break;}
1240 else if (ibinary_opt==3)
1243 char localFile[1000];
1244 strcpy(localFile,fromFile);
1245 strcat(localFile,
".gz");
1246 gzFile zfp=gzopen(localFile,
"rb");
1248 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1249 CkPrintf(
"Can't open %s state file %s\n",stuff,localFile);
1250 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1255 gzread(zfp,&(nPackedLoc),
sizeof(
int));
1256 gzread(zfp,&(nx),
sizeof(
int));
1257 gzread(zfp,&(ny),
sizeof(
int));
1258 gzread(zfp,&(nz),
sizeof(
int));
1259 for(
int pNo=0;pNo<nPacked;pNo++) {
1262 gzread(zfp,&(re),
sizeof(
double));
1263 gzread(zfp,&(im),
sizeof(
double));
1264 gzread(zfp,&(x),
sizeof(
int));
1265 gzread(zfp,&(y),
sizeof(
int));
1266 gzread(zfp,&(z),
sizeof(
int));
1272 if(config.doublePack && x==0 && y==0 && z==0){
break;}
1279 FILE *fp=fopen(fromFile,
"rb");
1281 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1282 CkPrintf(
"Can't open %s state file %s\n",stuff,fromFile);
1283 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1288 assert(fread(&(nPackedLoc),
sizeof(
int),n,fp)>0);
1289 assert(fread(&(nx),
sizeof(
int),n,fp));
1290 assert(fread(&(ny),
sizeof(
int),n,fp));
1291 assert(fread(&(nz),
sizeof(
int),n,fp));
1292 for(
int pNo=0;pNo<nPacked;pNo++) {
1295 assert(fread(&(re),
sizeof(
double),n,fp));
1296 assert(fread(&(im),
sizeof(
double),n,fp));
1297 assert(fread(&(x),
sizeof(
int),n,fp));
1298 assert(fread(&(y),
sizeof(
int),n,fp));
1299 assert(fread(&(z),
sizeof(
int),n,fp));
1305 if(config.doublePack && x==0 && y==0 && z==0){
break;}
1310 #ifdef _CP_DEBUG_UTIL_VERBOSE_
1311 CkPrintf(
"Done reading %s state from file: %s\n",stuff,fromFile);
1316 processState(nPacked,nktot,arrCP,fromFile,ibinary_opt,nline_tot_ret,nplane_ret,kx,ky,kz,
1317 istrt_lgrp,iend_lgrp,npts_lgrp,nline_lgrp,iget_decomp,iget_vstate,1,ny);
1333 int *nline_tot_ret,
int *nplane_ret,
int *kx,
int *ky,
int *kz,
1334 int *istrt_lgrp,
int *iend_lgrp,
int *npts_lgrp,
int *nline_lgrp,
1335 int iget_decomp,
int iget_vstate,
int iopt,
int ny) {
1340 #ifdef _CP_DEBUG_UTIL_VERBOSE_
1341 CkPrintf(
"Proceesing %s state %s\n",stuff,fromFile);
1344 int nchareG = config.nchareG;
1348 strcpy(stuff,
"coef");
1350 strcpy(stuff,
"velocity");
1356 if(config.doublePack){
1360 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1361 CkPrintf(
"Bad num pts in readState() %s: %d %d \n",nktot,n_ret,fromFile);
1362 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1374 for(
int i = 1;i<nPacked;i++){
1375 if(kx[i]!=kx[(i-1)]){nplane++;}
1376 if(kx[i]!=kx[(i-1)] || ky[i]!=ky[(i-1)]){nline_tot++;}
1377 if(kx[i]<kx[(i-1)]){
1378 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1379 CkPrintf(
"Bad x-flip in processState() %s\n",fromFile);
1380 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1383 if(kx[i]==kx[(i-1)]){
1384 if(ky[i]<ky[(i-1)]){
1385 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1386 CkPrintf(
"Bad y-flip in readState() %s\n",fromFile);
1387 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1391 if(kx[i]==kx[(i-1)] && ky[i]==ky[(i-1)]){
1392 if(kz[i]!=(kz[(i-1)]+1)){
1393 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1394 CkPrintf(
"Bad y-flip in readState() %s\n",fromFile);
1395 CkPrintf(
" %d %d %d\n",kx[i],ky[i],kz[i]);
1396 CkPrintf(
" %d %d %d\n",kx[(i-1)],ky[(i-1)],kz[(i-1)]);
1397 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1403 if(config.nchareG>nline_tot){
1404 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
1405 CkPrintf(
"Dude, too much juice on the chunks. Chill on gExpandFact\n");
1406 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
1413 int *kx_ind =
new int[nline_tot];
1414 int *kx_line =
new int[nline_tot];
1415 int *ky_line =
new int[nline_tot];
1416 int *istrt_line =
new int [nline_tot];
1417 int *iend_line =
new int [nline_tot];
1418 int *npts_line =
new int [nline_tot];
1421 for(
int i = 1;i<nPacked;i++){
1422 if(kx[i]!=kx[(i-1)] || ky[i]!=ky[(i-1)]){
1424 npts_line[ic] = iend_line[ic]-istrt_line[ic];
1429 iend_line[ic] = nPacked;
1430 npts_line[ic] = iend_line[ic]-istrt_line[ic];
1433 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1434 CkPrintf(
"Toasty Line Flip-lines!\n");
1435 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1441 arrCPt =
new complex[nPacked];
1442 CmiMemcpy(arrCPt,arrCP,(nPacked*
sizeof(
complex)));
1445 int *kxt =
new int[nPacked];
1446 int *kyt =
new int[nPacked];
1447 int *kzt =
new int[nPacked];
1448 CmiMemcpy(kxt,kx,(nPacked*
sizeof(
int)));
1449 CmiMemcpy(kyt,ky,(nPacked*
sizeof(
int)));
1450 CmiMemcpy(kzt,kz,(nPacked*
sizeof(
int)));
1454 for(
int i=0;i<nchareG; i++){
1455 for(
int j=i;j<nline_tot;j+=nchareG){
1456 for(
int lt=istrt_line[j],l=jc;lt<iend_line[j];lt++,l++){
1460 if(iopt==1){arrCP[l] = arrCPt[lt];}
1467 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1468 CkPrintf(
"Toasty Line Flip-pts!\n");
1469 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1473 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1474 CkPrintf(
"Toasty Line Flip-lines!\n");
1475 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1484 for(
int i = 1;i<nPacked;i++){
1485 kxmax = MAX(kx[i],kxmax);
1486 if(kx[i]!=kx[(i-1)] || ky[i]!=ky[(i-1)]){
1488 npts_line[ic] = iend_line[ic]-istrt_line[ic];
1491 kx_line[ic] = kx[i];
1492 ky_line[ic] = ky[i];
1495 iend_line[ic] = nPacked;
1496 npts_line[ic] = iend_line[ic]-istrt_line[ic];
1499 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1500 CkPrintf(
"Toasty Line Flip-lines.b!\n");
1501 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1509 if(istrt_lgrp==NULL || iend_lgrp == NULL){
1510 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1511 CkPrintf(
"Toasty Line Flip memory!\n");
1512 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1516 istrt_lgrp,iend_lgrp,npts_lgrp,nline_lgrp,
true);
1523 int mal_size = MAX(nline_tot,(kxmax+1));
1524 int *kx_tmp =
new int[nline_tot];
1525 int *ky_tmp =
new int[nline_tot];
1526 int *k_tmp =
new int[mal_size];
1527 if(iopt==1){CmiMemcpy(arrCPt,arrCP,(nPacked*
sizeof(
complex)));}
1528 CmiMemcpy(kxt,kx,(nPacked*
sizeof(
int)));
1529 CmiMemcpy(kyt,ky,(nPacked*
sizeof(
int)));
1530 CmiMemcpy(kzt,kz,(nPacked*
sizeof(
int)));
1534 for(
int i=0;i<nchareG;i++){
1535 for(
int l=0;l<nline_lgrp[i];l++){
1536 kx_tmp[l] = kx_line[(l+loff)];
1537 ky_tmp[l] = ky_line[(l+loff)];
1540 if(nline_lgrp[i]>1){
sort_kxky(nline_lgrp[i],kx_tmp,ky_tmp,kx_ind,k_tmp,ny);}
1541 for(
int l=0;l<nline_lgrp[i];l++){
1542 int istrt = istrt_line[(kx_ind[l]+loff)];
1543 int iend = iend_line[(kx_ind[l]+loff)];
1544 for(
int j=istrt,jk=joff;j<iend;j++,jk++){
1545 if(iopt==1){arrCP[jk] = arrCPt[j];}
1550 joff += npts_line[(kx_ind[l]+loff)];
1552 loff += nline_lgrp[i];
1555 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1556 CkPrintf(
"Toasty Line Flip-pts.2!\n");
1557 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1560 if(loff!=nline_tot){
1561 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1562 CkPrintf(
"Toasty Line Flip-lines.2!\n");
1563 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1570 #ifdef _CP_DEBUG_LINE_
1571 if(iopt==1 && doublePack==1){
1573 for(
int i=1;i<nPacked;i++){
1574 double wght_now = 2.0;
1575 if(kx[i]==0 && ky[i]<0){wght_now=0.0;}
1576 if(kx[i]==0 && ky[i]==0 && kz[i]<0){wght_now=0.0;}
1577 if(kx[i]==0 && ky[i]==0 && kz[i]==0){wght_now=1.0;}
1578 norm += (wght_now)*arrCP[i].getMagSqr();
1581 for(
int i=1;i<nPacked;i++){
1582 double wght_now = 2.0;
1583 if(kxt[i]==0 && kyt[i]<0){wght_now=0.0;}
1584 if(kxt[i]==0 && kyt[i]==0 && kzt[i]<0){wght_now=0.0;}
1585 if(kxt[i]==0 && kyt[i]==0 && kzt[i]==0){wght_now=1.0;}
1586 normt += (wght_now)*arrCPt[i].getMagSqr();
1588 CkPrintf(
"state : %g %g\n",norm,normt);
1591 if(iopt==1 && doublePack==0){
1593 for(
int i=1;i<nPacked;i++){
1594 norm += arrCP[i].getMagSqr();
1597 for(
int i=1;i<nPacked;i++){
1598 normt += arrCPt[i].getMagSqr();
1600 CkPrintf(
"state : %g %g\n",norm,normt);
1607 #ifdef _INPUT_FOR_KPTS_MESSES_UP_
1608 if(!config.doublePack){
1609 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_warning_@@@@@@@@@@@@@@@@@@@@\n");
1610 CkPrintf(
"The rundescriptor needs some love for the non-double pack\n");
1611 CkPrintf(
"It is not consistent with new FFT logic due to input data order\n");
1612 CkPrintf(
"If the data is just reordered all should be well, %s\n",fromFile);
1613 CkPrintf(
"Raz is on the job.\n");
1614 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_warning_@@@@@@@@@@@@@@@@@@@@\n");
1621 *nplane_ret = nplane;
1622 *nline_tot_ret = nline_tot;
1624 if(iopt==1){
delete [] arrCPt;}
1628 delete [] istrt_line;
1629 delete [] iend_line;
1630 delete [] npts_line;
1638 #ifdef _CP_DEBUG_UTIL_VERBOSE_
1639 CkPrintf(
"Done proceesing %s state %s\n",stuff,fromFile);
1659 sprintf (fname,
"%s/Spin.0_Kpt.0_Bead.0_Temper.0/state1.out",config.dataPath);
1661 int numData = config.numData;
1662 int ibinary_opt = sim->ibinary_opt;
1663 int sizeY = sim->sizeY;
1664 int sizeZ = sim->sizeZ;
1665 int nchareG = sim->nchareG;
1666 int sizeXNL = sim->ngrid_nloc_a;
1667 int nxNL = sim->ngrid_nloc_a;
1668 int nyNL = sim->ngrid_nloc_b;
1669 int gen_wave = sim->gen_wave;
1670 int ncoef = sim->ncoef;
1671 int doublePack = config.doublePack;
1672 double gExpandFact = config.gExpandFact;
1679 CkVec<RunDescriptor> runDescriptorVec;
1681 int *istrt_lgrp =
new int [nchareG];
1682 int *iend_lgrp =
new int [nchareG];
1683 int *npts_lgrp =
new int [nchareG];
1684 int *nline_lgrp =
new int [nchareG];
1685 int *kx_line = NULL;
1686 int *ky_line = NULL;
1691 readStateIntoRuns(numData,ncoef,complexPoints,runDescriptorVec,fname,ibinary_opt,
1692 &nline_tot,&(sim->nplane_x),istrt_lgrp,iend_lgrp,
1693 npts_lgrp,nline_lgrp,&kx_line,&ky_line,&kx,&ky,&kz,1,gen_wave,
1695 int nplane = sim->nplane_x;
1697 if(config.nGplane_x != nplane && config.doublePack){
1698 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1699 CkPrintf(
"Mismatch in allowed gspace planes %d %d\n",config.nGplane_x,nplane);
1700 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1704 double temp = ((double)nplane)*gExpandFact;
1705 int mychareG = (int)temp;
1706 if(mychareG!=nchareG || mychareG!=config.nchareG){
1707 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1708 CkPrintf(
"Mismatch in allowed gspace chare arrays %d %d %d\n",
1709 mychareG,nchareG,config.nchareG);
1710 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1720 for(
int i = 1;i<numData;i++){
1721 kx_min = (kx_min <= kx[i] ? kx_min : kx[i]);
1722 ky_min = (ky_min <= ky[i] ? ky_min : ky[i]);
1723 kz_min = (kz_min <= kz[i] ? kz_min : kz[i]);
1724 kx_max = (kx_max >= kx[i] ? kx_max : kx[i]);
1725 ky_max = (ky_max >= ky[i] ? ky_max : ky[i]);
1726 kz_max = (kz_max >= kz[i] ? kz_max : kz[i]);
1728 kx_max = (kx_max >= -kx_min ? kx_max : -kx_min);
1729 ky_max = (ky_max >= -ky_min ? ky_max : -ky_min);
1730 kz_max = (kz_max >= -kz_min ? kz_max : -kz_min);
1732 sim->kx_max = kx_max;
1733 sim->ky_max = ky_max;
1734 sim->kz_max = kz_max;
1736 if(2*kx_max >= sizeX/2 || 2*ky_max >= sizeY/2 || 2*kz_max >= sizeZ/2){
1737 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1738 CkPrintf(
"Bad FFT sizes : (%d,%d), (%d,%d), (%d,%d)\n",
1739 2*kx_max,sizeX/2,2*ky_max,sizeY/2,2*kz_max,sizeZ/2);
1740 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1747 int *kx_lineNL =
new int[nline_tot];
1748 int *ky_lineNL =
new int[nline_tot];
1751 kx_lineNL[ic] = kx[ic];
1752 ky_lineNL[ic] = ky[ic];
1753 if(kx_lineNL[ic]<0){kx_lineNL[ic]+=nxNL;}
1754 if(ky_lineNL[ic]<0){ky_lineNL[ic]+=nyNL;}
1755 for(
int i = 1;i<numData;i++){
1756 if(kx[i]!=kx[(i-1)] || ky[i]!=ky[(i-1)]){
1758 kx_lineNL[ic] = kx[i];
1759 ky_lineNL[ic] = ky[i];
1760 if(kx_lineNL[ic]<0){kx_lineNL[ic]+=nxNL;}
1761 if(ky_lineNL[ic]<0){ky_lineNL[ic]+=nyNL;}
1767 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1768 CkPrintf(
"Incorrect number of lines in util.C\n");
1769 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1778 for(
int i=0;i<nchareG;i++){nlines_max=MAX(nlines_max,nline_lgrp[i]);}
1779 int **index_tran_upack = cmall_int_mat(0,nchareG,0,nlines_max,
"util.C");
1780 int **index_tran_upackNL = cmall_int_mat(0,nchareG,0,nlines_max,
"util.C");
1783 int yspaceNL = sizeXNL;
1784 if(doublePack){yspace =sizeX/2+1;}
1785 if(doublePack){yspaceNL=sizeXNL/2+1;}
1786 for(
int igrp=0;igrp<nchareG;igrp++){
1787 for(
int i=istrt_lgrp[igrp],j=0;i<iend_lgrp[igrp];i++,j++){
1788 index_tran_upack[igrp][j] = kx_line[i] + ky_line[i]*yspace;
1789 index_tran_upackNL[igrp][j] = kx_lineNL[i] + ky_lineNL[i]*yspaceNL;
1793 CkVec<RunDescriptor> *sortedRunDescriptors;
1794 sortedRunDescriptors =
new CkVec<RunDescriptor> [nchareG];
1795 for(
int igrp = 0; igrp < nchareG; igrp++){
1796 for(
int i=istrt_lgrp[igrp];i<iend_lgrp[igrp];i++){
1799 sortedRunDescriptors[igrp].push_back(runDescriptorVec[j]);
1800 sortedRunDescriptors[igrp].push_back(runDescriptorVec[j1]);
1804 int *index_output_off =
new int[nchareG];
1806 for(
int x = 0; x < nchareG; x ++) {
1807 index_output_off[x] = numPoints;
1809 int runsToBeSent = sortedRunDescriptors[x].size();
1810 for (
int j = 0; j < runsToBeSent; j++){
1811 numPoints += sortedRunDescriptors[x][j].length;
1812 nnn += sortedRunDescriptors[x][j].length;
1814 if(nnn != npts_lgrp[x]){
1815 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1816 CkPrintf(
"Incorrect number of points in gspace chare\n");
1817 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1822 if(numPoints!=numData){
1823 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1824 CkPrintf(
"Incorrect number of total g-space points\n");
1825 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
1834 int *num_uni =
new int [nchareG];
1835 int *num_red =
new int [nchareG];
1837 for(
int i = 0; i < nchareG; i ++) {
1841 for(
int j=0;j<npts_lgrp[i];j++){
1842 int iii = j+index_output_off[i];
1843 if(kx[iii]==0 && ky[iii]>0){num_uni[i]++;}
1844 if(kx[iii]==0 && ky[iii]<0){num_red[i]++;}
1845 if(kx[iii]==0 && ky[iii]==0 && kz[iii]>=0){num_uni[i]++;}
1846 if(kx[iii]==0 && ky[iii]==0 && kz[iii]<0){num_red[i]++;}
1848 nk0_max=MAX(num_uni[i],nk0_max);
1849 nk0_max=MAX(num_red[i],nk0_max);
1857 for(
int i=0;i<nchareG;i++){RCommPkg[i].Init(nk0_max,nchareG);}
1861 for(
int i=0;i<nchareG;i++){
1862 int *num_send = RCommPkg[i].num_send;
1863 int **lst_send = RCommPkg[i].lst_send;
1864 for(
int j=0;j<nchareG;j++){
1865 int *num_recv = RCommPkg[j].num_recv;
1866 int **lst_recv = RCommPkg[j].lst_recv;
1867 for(
int ip=0;ip<num_uni[i];ip++){
1868 int iii = ip+index_output_off[i] + num_red[i];
1869 for(
int jp=0;jp<num_red[j];jp++){
1870 int jjj = jp+index_output_off[j];
1871 if(ky[iii]==-ky[jjj] && kz[iii]==-kz[jjj]){
1872 lst_send[j][num_send[j]] = ip+num_red[i];
1873 lst_recv[i][num_recv[i]] = jp;
1882 for(
int i=0;i<nchareG;i++){
1883 int *num_send = RCommPkg[i].num_send;
1884 int *num_recv = RCommPkg[i].num_recv;
1885 int num_recv_tot = 0;
1886 int num_send_tot = 0;
1887 for(
int j=0;j<nchareG;j++){
1888 if(num_send[j]>0){num_send_tot++;}
1889 if(num_recv[j]>0){num_recv_tot++;}
1891 RCommPkg[i].num_recv_tot = num_recv_tot;
1892 RCommPkg[i].num_send_tot = num_send_tot;
1895 for(
int i=0;i<nchareG;i++){
1896 int *num_send = RCommPkg[i].num_send;
1897 int **lst_send = RCommPkg[i].lst_send;
1898 for(
int j=0;j<nchareG;j++){
1899 int *num_recv = RCommPkg[j].num_recv;
1900 int **lst_recv = RCommPkg[j].lst_recv;
1901 if(num_send[j]!=num_recv[i]){
1902 CkPrintf(
"Bad Num of Redundent g-vectors %d %d\n",i,j);
1905 for(
int ip=0;ip<num_send[j];ip++){
1906 int iii = index_output_off[i]+lst_send[j][ip];
1907 int jjj = index_output_off[j]+lst_recv[i][ip];
1908 if(kx[iii]!=0 || kx[jjj]!=0 || ky[iii]!=-ky[jjj] || kz[iii]!=-kz[jjj] ||
1909 ky[iii]<0 || (kz[iii]<0 && ky[iii]==0)){
1910 CkPrintf(
"Bad Num of Redundent g-vectors %d %d %d %d %d\n",iii,jjj,ip,i,j);
1911 CkPrintf(
"%d %d %d : %d %d %d\n",kx[iii],ky[iii],kz[iii],
1912 kx[jjj],ky[jjj],kz[jjj]);
1924 sim->npts_per_chareG = npts_lgrp;
1925 sim->index_tran_upack = index_tran_upack;
1926 sim->index_tran_upackNL = index_tran_upackNL;
1927 sim->nlines_max = nlines_max;
1928 sim->nlines_per_chareG = nline_lgrp;
1929 sim->sortedRunDescriptors = sortedRunDescriptors;
1930 sim->npts_tot = numData;
1931 sim->nlines_tot = nline_tot;
1932 sim->index_output_off = index_output_off;
1933 sim->RCommPkg = RCommPkg;
1935 delete [] istrt_lgrp;
1936 delete [] iend_lgrp;
1937 delete [] complexPoints;
1940 delete [] kx_lineNL;
1941 delete [] ky_lineNL;
1957 int *k_x,
int *k_y,
int *k_z,
int cp_min_opt,
1958 int sizeX,
int sizeY,
int sizeZ,
char *psiName,
char *vpsiName,
1959 int ibinary_write_opt,
int iteration,
int istate,
1960 int ispin,
int ikpt,
int ibead,
int itemper)
1965 int *index =
new int [ncoef];
1966 int *ktemp =
new int [ncoef];
1969 int ncoef_true=ncoef-istrt;
1973 sprintf (fname,
"%s/Spin.%d_Kpt.%d_Bead.%d_Temper.%d/TimeStamp",config.dataPathOut,ispin,ikpt,ibead,itemper);
1974 FILE *fp = fopen(fname,
"w");
1975 fprintf(fp,
"time step = %d\n",iteration);
1979 if(ibinary_write_opt==0){
1980 FILE *fp = fopen(psiName,
"w");
1982 fprintf(fp,
"%d %d %d %d\n",ncoef_true,sizeX,sizeY,sizeZ);
1983 for(
int i=istrt+1;i<ncoef;i++){
1984 fprintf(fp,
"%g %g %d %d %d \n",psi[index[i]].re,psi[index[i]].im,
1985 k_x[index[i]],k_y[index[i]],k_z[index[i]]);
1988 fprintf(fp,
"%g %g %d %d %d \n",psi[index[i]].re,psi[index[i]].im,
1989 k_x[index[i]],k_y[index[i]],k_z[index[i]]);
1992 #if CMK_PROJECTIONS_USE_ZLIB
1993 else if(ibinary_write_opt==2){
1994 strcat(psiName,
".gz");
1995 gzFile zfp = gzopen(psiName,
"w");
1997 gzprintf(zfp,
"%d %d %d %d\n",ncoef_true,sizeX,sizeY,sizeZ);
1998 for(
int i=istrt+1;i<ncoef;i++){
1999 gzprintf(zfp,
"%g %g %d %d %d \n",psi[index[i]].re,psi[index[i]].im,
2000 k_x[index[i]],k_y[index[i]],k_z[index[i]]);
2003 gzprintf(zfp,
"%g %g %d %d %d \n",psi[index[i]].re,psi[index[i]].im,
2004 k_x[index[i]],k_y[index[i]],k_z[index[i]]);
2007 else if(ibinary_write_opt==3){
2008 strcat(psiName,
".gz");
2009 gzFile zfp = gzopen(psiName,
"w");
2012 gzwrite(zfp,&ncoef_true,
sizeof(
int));
2013 gzwrite(zfp,&sizeX,
sizeof(
int));
2014 gzwrite(zfp,&sizeY,
sizeof(
int));
2015 gzwrite(zfp,&sizeZ,
sizeof(
int));
2016 for(
int i=istrt+1;i<ncoef;i++){
2017 gzwrite(zfp,&psi[index[i]].re,
sizeof(
double));
2018 gzwrite(zfp,&psi[index[i]].im,
sizeof(
double));
2019 gzwrite(zfp,&k_x[index[i]],
sizeof(
int));
2020 gzwrite(zfp,&k_y[index[i]],
sizeof(
int));
2021 gzwrite(zfp,&k_z[index[i]],
sizeof(
int));
2024 gzwrite(zfp,&psi[index[i]].re,
sizeof(
double));
2025 gzwrite(zfp,&psi[index[i]].im,
sizeof(
double));
2026 gzwrite(zfp,&k_x[index[i]],
sizeof(
int));
2027 gzwrite(zfp,&k_y[index[i]],
sizeof(
int));
2028 gzwrite(zfp,&k_z[index[i]],
sizeof(
int));
2033 FILE *fp = fopen(psiName,
"w");
2036 fwrite(&ncoef_true,
sizeof(
int),n,fp);
2037 fwrite(&sizeX,
sizeof(
int),n,fp);
2038 fwrite(&sizeY,
sizeof(
int),n,fp);
2039 fwrite(&sizeZ,
sizeof(
int),n,fp);
2040 for(
int i=istrt+1;i<ncoef;i++){
2041 fwrite(&psi[index[i]].re,
sizeof(
double),n,fp);
2042 fwrite(&psi[index[i]].im,
sizeof(
double),n,fp);
2043 fwrite(&k_x[index[i]],
sizeof(
int),n,fp);
2044 fwrite(&k_y[index[i]],
sizeof(
int),n,fp);
2045 fwrite(&k_z[index[i]],
sizeof(
int),n,fp);
2048 fwrite(&psi[index[i]].re,
sizeof(
double),n,fp);
2049 fwrite(&psi[index[i]].im,
sizeof(
double),n,fp);
2050 fwrite(&k_x[index[i]],
sizeof(
int),n,fp);
2051 fwrite(&k_y[index[i]],
sizeof(
int),n,fp);
2052 fwrite(&k_z[index[i]],
sizeof(
int),n,fp);
2059 if(ibinary_write_opt==0){
2060 FILE *fp = fopen(vpsiName,
"w");
2062 fprintf(fp,
"%d %d %d %d\n",ncoef_true,sizeX,sizeY,sizeZ);
2063 for(
int i=istrt+1;i<ncoef;i++){
2064 fprintf(fp,
"%g %g %d %d %d \n",vpsi[index[i]].re,vpsi[index[i]].im,
2065 k_x[index[i]],k_y[index[i]],k_z[index[i]]);
2068 fprintf(fp,
"%g %g %d %d %d \n",vpsi[index[i]].re,vpsi[index[i]].im,
2069 k_x[index[i]],k_y[index[i]],k_z[index[i]]);
2072 #if CMK_PROJECTIONS_USE_ZLIB
2073 else if(ibinary_write_opt==2){
2074 strcat(vpsiName,
".gz");
2075 gzFile zfp=gzopen(vpsiName,
"w");
2077 gzprintf(zfp,
"%d %d %d %d\n",ncoef_true,sizeX,sizeY,sizeZ);
2078 for(
int i=istrt+1;i<ncoef;i++){
2079 gzprintf(zfp,
"%g %g %d %d %d \n",vpsi[index[i]].re,vpsi[index[i]].im,
2080 k_x[index[i]],k_y[index[i]],k_z[index[i]]);
2083 gzprintf(zfp,
"%g %g %d %d %d \n",vpsi[index[i]].re,vpsi[index[i]].im,
2084 k_x[index[i]],k_y[index[i]],k_z[index[i]]);
2088 else if(ibinary_write_opt==3){
2089 strcat(vpsiName,
".gz");
2090 gzFile zfp=gzopen(vpsiName,
"w");
2093 gzwrite(zfp,&ncoef_true,
sizeof(
int));
2094 gzwrite(zfp,&sizeX,
sizeof(
int));
2095 gzwrite(zfp,&sizeY,
sizeof(
int));
2096 gzwrite(zfp,&sizeZ,
sizeof(
int));
2097 for(
int i=istrt+1;i<ncoef;i++){
2098 gzwrite(zfp,&vpsi[index[i]].re,
sizeof(
double));
2099 gzwrite(zfp,&vpsi[index[i]].im,
sizeof(
double));
2100 gzwrite(zfp,&k_x[index[i]],
sizeof(
int));
2101 gzwrite(zfp,&k_y[index[i]],
sizeof(
int));
2102 gzwrite(zfp,&k_z[index[i]],
sizeof(
int));
2105 gzwrite(zfp,&vpsi[index[i]].re,
sizeof(
double));
2106 gzwrite(zfp,&vpsi[index[i]].im,
sizeof(
double));
2107 gzwrite(zfp,&k_x[index[i]],
sizeof(
int));
2108 gzwrite(zfp,&k_y[index[i]],
sizeof(
int));
2109 gzwrite(zfp,&k_z[index[i]],
sizeof(
int));
2114 FILE *fp = fopen(vpsiName,
"w");
2117 fwrite(&ncoef_true,
sizeof(
int),n,fp);
2118 fwrite(&sizeX,
sizeof(
int),n,fp);
2119 fwrite(&sizeY,
sizeof(
int),n,fp);
2120 fwrite(&sizeZ,
sizeof(
int),n,fp);
2121 for(
int i=istrt+1;i<ncoef;i++){
2122 fwrite(&vpsi[index[i]].re,
sizeof(
double),n,fp);
2123 fwrite(&vpsi[index[i]].im,
sizeof(
double),n,fp);
2124 fwrite(&k_x[index[i]],
sizeof(
int),n,fp);
2125 fwrite(&k_y[index[i]],
sizeof(
int),n,fp);
2126 fwrite(&k_z[index[i]],
sizeof(
int),n,fp);
2129 fwrite(&vpsi[index[i]].re,
sizeof(
double),n,fp);
2130 fwrite(&vpsi[index[i]].im,
sizeof(
double),n,fp);
2131 fwrite(&k_x[index[i]],
sizeof(
int),n,fp);
2132 fwrite(&k_y[index[i]],
sizeof(
int),n,fp);
2133 fwrite(&k_z[index[i]],
sizeof(
int),n,fp);
2153 int kxmax = kx[0];
int kxmin=kx[0];
2154 int kymax = ky[0];
int kymin=ky[0];
2155 int kzmax = kz[0];
int kzmin=kz[0];
2156 for(
int i=0;i<n;i++){
2157 kxmax = MAX(kxmax,kx[i]); kxmin = MIN(kxmin,kx[i]);
2158 kymax = MAX(kymax,ky[i]); kymin = MIN(kymin,ky[i]);
2159 kzmax = MAX(kzmax,kz[i]); kzmin = MIN(kzmin,kz[i]);
2161 int nx = kxmax-kxmin+1;
2162 int ny = kymax-kymin+1;
2163 int nz = kzmax-kzmin+1;
2169 for(
int i=0;i<n;i++){index[i]=i;}
2170 for(
int i=0;i<n;i++){ktemp[i]=(kz[i]-kzmin)+(ky[i]-kymin)*nz+(kx[i]-kxmin)*nz*ny;}
2171 sort_commence(n,ktemp,index);
2177 for(
int i=0;i<n;i++){
2178 if(kx[index[i]]==0&&ky[index[i]]==0&&kz[index[i]]==0){
2182 (*istrt_ret) = istrt;
2192 void sort_kxky(
int n,
int *kx,
int *ky,
int *index,
int *ktemp,
int sizeY){
2196 for(
int i=0;i<n;i++){index[i]=i;}
2197 sort_commence(n,kx,index);
2198 for(
int i=0;i<n;i++){ktemp[i]=ky[i];}
2199 for(
int i=0;i<n;i++){ky[i]=ktemp[index[i]];}
2205 int kmax = kx[(n-1)];
2206 for(
int i=0;i<=kmax-kmin;i++){ktemp[i]=0;}
2207 for(
int i=0;i<n;i++){ktemp[kx[i]-kmin]++;}
2210 for(
int i=0;i<=kmax-kmin;i++){
2211 if(ktemp[i]>1){sort_commence(ktemp[i],&ky[ioff],&index[ioff]);}
2222 void sort_kxky_old(
int n,
int *kx,
int *ky,
int *index,
int *kyt){
2226 for(
int i=0;i<n;i++){index[i]=i;}
2227 for(
int i=0;i<n;i++){
2229 int itmp = index[nk0];
2230 index[nk0] = index[i];
2236 for(
int i=0;i<nk0;i++){kyt[i]=ky[index[i]];}
2237 sort_commence(nk0,kyt,index);
2251 int ntot,
int ndiv,
int idiv)
2256 if(idiv>=ndiv || ntot< ndiv){
2257 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
2258 CkPrintf(
"Incorrect input to RhoGHart collection creator.\n");
2259 CkPrintf(
"idiv %d ndiv %d, ntot %d.\n");
2260 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
2264 int n = (ntot/ndiv);
2265 int r = (ntot%ndiv);
2268 if(idiv>=r){istrt += r;}
2269 if(idiv<r) {istrt += idiv;}
2274 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
2275 CkPrintf(
"No lines in a RhoGHart collection!!\n");
2276 CkPrintf(
"@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
2281 (*istrt_ret) = istrt;
2296 int nchareRhoGEext,
int *numSubGx,
2297 int *nline_lgrp_eext,
int *kx_line,
2298 int **nline_send_eext_y,
int rhoRsubplanes){
2302 int *list1 =
new int [nplane_x];
2306 for(
int j=0;j<nplane_x;j++){list1[j]=j;}
2307 for(
int ntry=1;ntry<100;ntry++){
2312 double stuff = altRandom(&seed);
2313 int index = (int) (((
double)nplane_x)*stuff);
2314 index = MIN(index,nplane_x-1);
2315 stuff = altRandom(&seed);
2316 int jndex = (int) (((
double)nplane_x)*stuff);
2317 jndex = MIN(jndex,nplane_x-1);
2318 int itemp = list1[index];
2319 list1[index] = list1[jndex];
2320 list1[jndex] = itemp;
2326 for(
int igrp=0;igrp<rhoRsubplanes;igrp++){
2327 int num = numSubGx[igrp];
2328 for(
int jc=0,ic=iii;ic<iii+num;ic++,jc++){
2329 mapGrpGx[list1[ic]] = igrp;
2338 mapGrpGx,kx_line,nline_send_eext_y,&score);
2344 if(score<score_max || ntry==1){
2346 for(
int i=0;i<nplane_x;i++){listGx[i]=list1[i];}
2348 for(
int i=0;i<nplane_x;i++){list1[i]=listGx[i];}
2366 int *mapGrpGx,
int *kx_line,
int **nline_send_eext_y,
2371 for(
int igrp=0,i=0;igrp<nchareRhoGEext;igrp++){
2372 for(
int ic=0;ic<rhoRsubplanes;ic++){
2373 nline_send_eext_y[igrp][ic]=0;
2376 for(
int igrp=0,i=0;igrp<nchareRhoGEext;igrp++){
2377 for(
int j=0;j<nline_lgrp_eext[igrp];j++,i++){
2378 int ic = mapGrpGx[kx_line[i]];
2379 nline_send_eext_y[igrp][ic]++;
2387 for(
int j=0; j< nchareRhoGEext;j++){
2388 int recvCountFromRHartExt = 0;
2389 for(
int i=0;i<rhoRsubplanes;i++){
2390 if(nline_send_eext_y[j][i]>0){recvCountFromRHartExt++;}
2392 Rhart_max[0]+=recvCountFromRHartExt;
2404 int nchare,
int *nline_grp){
2408 int *npts =
new int [nline];
2409 for(
int i =0;i<nline;i++){npts[i]=0;}
2410 for(
int i =0;i<nktot;i++){npts[mapl[kx_line[i]]]++;}
2415 double dev_min = 0.0;
2419 int mmm = (nktot/nchare);
2420 for(
int ibal=0;ibal<=mmm-1;ibal++){
2422 int ntarg = (nktot/nchare);
2423 if(ntarg > nbal){ntarg -= nbal;}
2428 for(
int i=0;i<nline;i++){
2430 if( (nnow>=ntarg) && (ic<(nchare-1)) ){
2432 nmin = MIN(nmin,nnow);
2433 nmax = MAX(nmax,nnow);
2437 nmin = MIN(nmin,nnow);
2438 nmax = MAX(nmax,nnow);
2439 double dev = 100.0*((double)(nmax-nmin))/((
double)MAX(nmin,1));
2441 if(dev<dev_min || ifirst==0){
2453 int ntarg = (nktot/nchare);
2454 if(ntarg > nbal_min){ntarg = ntarg-nbal_min;}
2458 for(
int i=0;i<nchare;i++){nline_grp[i]=0;}
2459 for(
int i=0;i<nline;i++){
2462 if( (nnow>=ntarg) && (ic<(nchare-1)) ){
2479 FILE *
openScreenfWrite(
const char *dirnameBase,
const char *fname,
int temper,
int bead,
bool beadfile)
2484 char beadname[1024];
2485 memset(dirPath, 0 , 1024);
2486 memset(lfname, 0 , 1024);
2487 snprintf(subdir,1023,
"/Temper.%d/",temper);
2488 strncpy(dirPath, dirnameBase, 1023);
2489 strncpy(lfname, fname, 1023);
2490 strncat(dirPath,subdir,1023);
2492 snprintf(beadname,1023,
".Bead.%d",bead);
2493 strncat(lfname,beadname,1023);
2495 strncat(dirPath,lfname,1023);
2496 FILE *file=fopen(dirPath,
"a");
FILE * openScreenfWrite(const char *dirnameBase, const char *fname, int temper, int bead, bool beadfile)
this stuff is in a C file because multiple includes of .def will give you too many implementations of...
void make_rho_runs(CPcharmParaInfo *sim)
== rho space run descriptors for spherical cutoff fft support
void get_rho_kvectors(double ecut4, double *hmati, int **kx_ret, int **ky_ret, int **kz_ret, int *nline_tot_ret, int *nPacked_ret, int ka_max, int kb_max, int kc_max)
void sort_psi_output(int n, int *kx, int *ky, int *kz, int *index, int *ktemp, int *istrt_ret)
void sort_kxky(int n, int *kx, int *ky, int *index, int *ktemp, int sizeY)
void readStateIntoRuns(int nPacked, int ncoef, complex *arrCP, CkVec< RunDescriptor > &runs, const char *fromFile, int ibinary_opt, int *nline_tot_ret, int *nplane_ret, int *istrt_lgrp, int *iend_lgrp, int *npts_lgrp, int *nline_lgrp, int **kx_line_ret, int **ky_line_ret, int **kx_ret, int **ky_ret, int **kz_ret, int iget_decomp, int gen_wave, int nx_in, int ny_in, int nz_in)
== Index logic for lines of constant x,y in gspace.
Config config
addtogroup Uber
static void get_chareG_line_prms(int, int, int, int *, int *, int *, int *, int *, bool)
functions
void readState(int nPacked, complex *arrCP, const char *fromFile, int ibinary_opt, int *nline_tot_ret, int *nplane_ret, int *kx, int *ky, int *kz, int *nx_ret, int *ny_ret, int *nz_ret, int *istrt_lgrp, int *iend_lgrp, int *npts_lgrp, int *nline_lgrp, int iget_decomp, int iget_vstate)
void getSplitDecomp(int *istrt_ret, int *iend_ret, int *n_ret, int ntot, int ndiv, int idiv)
Initialization Function /////////////////////////////////////////////////////////////////////////// /...
static void flip_data_set(int, int *, int *, int *, int *)
void create_gx_decomp(int nktot, int nline, int *kx_line, int *mapl, int nchare, int *nline_grp)
void score_subPlane_decomp(int nchareRhoGEext, int rhoRsubplanes, int *nline_lgrp_eext, int *mapGrpGx, int *kx_line, int **nline_send_eext_y, int *Rhart_max)
Score a decomposition /////////////////////////////////////////////////////////////////////////// ///...
void create_subPlane_decomp(int nplane_x, int *listGx, int *mapGrpGx, int nchareRhoGEext, int *numSubGx, int *nline_lgrp_eext, int *kx_line, int **nline_send_eext_y, int rhoRsubplanes)
Create some decompositions and find the best one. ///////////////////////////////////////////////////...
void create_line_decomp_descriptor(CPcharmParaInfo *sim)
/////////////////////////////////////////////////////////////////////////cc
void processState(int nPacked, int nktot, complex *arrCP, const char *fromFile, int ibinary_opt, int *nline_tot_ret, int *nplane_ret, int *kx, int *ky, int *kz, int *istrt_lgrp, int *iend_lgrp, int *npts_lgrp, int *nline_lgrp, int iget_decomp, int iget_vstate, int iopt, int ny)