10 #include "ckcomplex.h"
12 #include "para_grp_parse.h"
13 #include "src_piny_physics_v1.0/include/class_defs/piny_constants.h"
22 int *npts,
int *istrt_lgrp,
int *iend_lgrp,
int *npts_lgrp,
int *nline_lgrp,
32 PRINTF(
"Statically load balancing pts and lines in state G-space : \n");
34 PRINTF(
"Statically load balancing pts and lines in rho G-space : \n");
36 PRINTF(
" There are %d pts %d lines and %d chunks\n",nktot,nline,nchareG);
37 PRINT_LINE_DASH;printf(
"\n");
40 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
41 PRINTF(
"Dude, too much juice on the chunks. Chill on gExpandFact\n");
42 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
50 int mmm = (nktot/nchareG);
51 for(
int ibal=0;ibal<=mmm-1;ibal++){
55 int ntarg = (nktot/nchareG);
56 if(ntarg > nbal){ntarg -= nbal;}
61 for(
int i=0;i<nline;i++){
63 if( (nnow>=ntarg) && (ic<(nchareG-1)) ){
65 nmin = MIN(nmin,nnow);
66 nmax = MAX(nmax,nnow);
70 nmin = MIN(nmin,nnow);
71 nmax = MAX(nmax,nnow);
72 double dev = 100.0*((double)(nmax-nmin))/((
double)MAX(nmin,1));
74 if(dev<dev_min || ifirst==0){
84 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
85 PRINTF(
"Dude, too much juice on the chunks. Chill on gExpandFact\n");
86 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
93 int ntarg = (nktot/nchareG);
94 if(ntarg > nbal_min){ntarg = ntarg-nbal_min;}
100 for(
int i=0;i<nline;i++){
101 npts_lgrp[ic] += npts[i];
103 if( (npts_lgrp[ic]>=ntarg) && (ic<(nchareG-1)) ){
108 istrt_lgrp[ic] = i+1;
111 iend_lgrp[(nchareG-1)] = nline;
117 int nmin = npts_lgrp[0];
119 int nline_min = nline_lgrp[0];
120 for(
int i=0;i<nchareG;i++){
121 nmax = MAX(nmax,npts_lgrp[i]);
122 nmin = MIN(nmin,npts_lgrp[i]);
123 nline_max = MAX(nline_lgrp[i],nline_max);
124 nline_min = MIN(nline_lgrp[i],nline_min);
126 double dev = 100.0*((double)(nmax-nmin))/((
double)MAX(nmin,1));
127 double dev_l = 100.0*((double)(nline_max-nline_min))/((
double)MAX(nline_min,1));
129 if(nline_min==0 || nmin==0){
130 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
131 PRINTF(
"Dude, too much juice on the chunks. Chill on gExpandFact\n");
132 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
136 PRINTF(
" Load balance statistics (%d %d)\n",ibal_min,nbal_min);
137 PRINTF(
" pt_max=%d : pt_min=%d : dev=%g\n",nmax,nmin,dev);
138 PRINTF(
" li_max=%d : li_min=%d : dev=%g\n",nline_max,nline_min,dev_l);
145 int nnn = npts_lgrp[0];
146 int nc = nline_lgrp[0];
147 if(istrt_lgrp[0]!=0) {ierr++;}
148 for(
int i=1;i<nchareG;i++){
149 if(iend_lgrp[(i-1)]!=istrt_lgrp[i]){ierr++;CkPrintf(
"err.1\n");}
153 if(iend_lgrp[(nchareG-1)]!=nline){ierr++;CkPrintf(
"err.2\n");}
154 if(nc!=nline){ierr++;CkPrintf(
"err.3\n");}
155 if(nnn!=nktot){ierr++;CkPrintf(
"err.4\n");}
158 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
159 PRINTF(
"Error in get_chareG_line_params\n");
160 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
166 PRINTF(
"Static load balancing complete\n");
167 PRINT_LINE_STAR;printf(
"\n");
187 for(
int i=0;i<nktot;i++){
188 if(kx[i]==0){nplane0++;}
190 int *kxt = (
int *)malloc(nplane0*
sizeof(
int));
191 int *kyt = (
int *)malloc(nplane0*
sizeof(
int));
192 int *kzt = (
int *)malloc(nplane0*
sizeof(
int));
197 for(
int i=0;i<nplane0-1;i++){
201 if(iopt==1){datat[i]= data[i];}
203 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
204 PRINTF(
"Error while flipping piny dblpack data set\n");
205 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
209 kxt[(nplane0-1)] = kx[(nktot-1)];
210 kyt[(nplane0-1)] = ky[(nktot-1)];
211 kzt[(nplane0-1)] = kz[(nktot-1)];
212 if(iopt==1){datat[(nplane0-1)] = data[(nktot-1)];}
214 if(kx[(nktot-1)]!=0 || ky[(nktot-1)] || kz[(nktot-1)]){
215 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
216 PRINTF(
"Error while flipping piny dblpack data set\n");
217 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
224 for(
int i=nktot-2;i>=0;i--){
225 kx[(i+nplane0)] = kx[i];
226 ky[(i+nplane0)] = ky[i];
227 kz[(i+nplane0)] = kz[i];
228 if(iopt==1){data[(i+nplane0)] = data[i];}
235 for(
int i=0;i<nplane0-1;i++){
236 int ind = nplane0-i-2;
241 data[i].re = datat[ind].re;
242 data[i].im = -datat[ind].im;
244 if(kx[i]!=0 || ky[i]<ky[i1]){
245 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
246 PRINTF(
"Error while flipping piny dblpack data set\n");
247 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
252 kx[(nplane0-1)] = kxt[(nplane0-1)];
253 ky[(nplane0-1)] = kyt[(nplane0-1)];
254 kz[(nplane0-1)] = kzt[(nplane0-1)];
255 if(iopt==1){data[(nplane0-1)] = datat[(nplane0-1)];}
257 if(nktot>=nplane0+1){
258 if(kx[nplane0]!= 0 || ky[nplane0]!=0 || kz[nplane0]!=1){
259 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
260 PRINTF(
"Error while flipping piny dblpack data set\n");
261 PRINTF(
"@@@@@@@@@@@@@@@@@@@@_Error_@@@@@@@@@@@@@@@@@@@@\n");
266 #ifdef _GLENN_DBG_FLIP
267 int nnn = MIN(nplane0+3,nktot);
268 for(
int i=0;i<nnn;i++){
269 PRINTF(
" %d : %d %d %d \n",i,kx[i],ky[i],kz[i]);
276 (*n_ret) = (nktot+nplane0-1);
282 if(iopt==1){free(datat);}
static void get_chareG_line_prms(int, int, int, int *, int *, int *, int *, int *, bool)
functions
static void flip_data_set(int, int *, int *, int *, int *)