extern "C" void PackDist(int q, int *list, int start, int count, double *sendbuf, double *dist, int N){ //.................................................................................... // Pack distribution q into the send buffer for the listed lattice sites // dist may be even or odd distributions stored by stream layout //.................................................................................... int idx,n; for (idx=0; idx 0.0) dist[q*N+nn] = recvbuf[start+idx]; dist[q*N+nn] = recvbuf[start+idx]; } } extern "C" void InitD3Q19(char *ID, double *f_even, double *f_odd, int Nx, int Ny, int Nz) { int n,N; N = Nx*Ny*Nz; for (n=0; n 0){ f_even[n] = 0.3333333333333333; f_odd[n] = 0.055555555555555555; //double(100*n)+1.f; f_even[N+n] = 0.055555555555555555; //double(100*n)+2.f; f_odd[N+n] = 0.055555555555555555; //double(100*n)+3.f; f_even[2*N+n] = 0.055555555555555555; //double(100*n)+4.f; f_odd[2*N+n] = 0.055555555555555555; //double(100*n)+5.f; f_even[3*N+n] = 0.055555555555555555; //double(100*n)+6.f; f_odd[3*N+n] = 0.0277777777777778; //double(100*n)+7.f; f_even[4*N+n] = 0.0277777777777778; //double(100*n)+8.f; f_odd[4*N+n] = 0.0277777777777778; //double(100*n)+9.f; f_even[5*N+n] = 0.0277777777777778; //double(100*n)+10.f; f_odd[5*N+n] = 0.0277777777777778; //double(100*n)+11.f; f_even[6*N+n] = 0.0277777777777778; //double(100*n)+12.f; f_odd[6*N+n] = 0.0277777777777778; //double(100*n)+13.f; f_even[7*N+n] = 0.0277777777777778; //double(100*n)+14.f; f_odd[7*N+n] = 0.0277777777777778; //double(100*n)+15.f; f_even[8*N+n] = 0.0277777777777778; //double(100*n)+16.f; f_odd[8*N+n] = 0.0277777777777778; //double(100*n)+17.f; f_even[9*N+n] = 0.0277777777777778; //double(100*n)+18.f; } else{ for(int q=0; q<9; q++){ f_even[q*N+n] = -1.0; f_odd[q*N+n] = -1.0; } f_even[9*N+n] = -1.0; } } } //************************************************************************* extern "C" void SwapD3Q19(char *ID, double *disteven, double *distodd, int Nx, int Ny, int Nz) { int i,j,k,n,nn,N; // distributions double f1,f2,f3,f4,f5,f6,f7,f8,f9; double f10,f11,f12,f13,f14,f15,f16,f17,f18; N = Nx*Ny*Nz; for (n=0; n 0){ //........................................................................ // Retrieve even distributions from the local node (swap convention) // f0 = disteven[n]; // Does not particupate in streaming f1 = distodd[n]; f3 = distodd[N+n]; f5 = distodd[2*N+n]; f7 = distodd[3*N+n]; f9 = distodd[4*N+n]; f11 = distodd[5*N+n]; f13 = distodd[6*N+n]; f15 = distodd[7*N+n]; f17 = distodd[8*N+n]; //........................................................................ //........................................................................ // Retrieve odd distributions from neighboring nodes (swap convention) //........................................................................ nn = n+1; // neighbor index (pull convention) if (!(i+1 0){ distodd[n] = f2; disteven[N+nn] = f1; } //} //........................................................................ nn = n+Nx; // neighbor index (pull convention) if (!(j+1 0){ distodd[N+n] = f4; disteven[2*N+nn] = f3; // } } //........................................................................ nn = n+Nx*Ny; // neighbor index (pull convention) if (!(k+1 0){ distodd[2*N+n] = f6; disteven[3*N+nn] = f5; // } } //........................................................................ nn = n+Nx+1; // neighbor index (pull convention) if (!(i+1 0){ distodd[3*N+n] = f8; disteven[4*N+nn] = f7; // } } //........................................................................ nn = n-Nx+1; // neighbor index (pull convention) if (!(i+1 0){ distodd[4*N+n] = f10; disteven[5*N+nn] = f9; // } } //........................................................................ nn = n+Nx*Ny+1; // neighbor index (pull convention) if (!(i+1 0){ distodd[5*N+n] = f12; disteven[6*N+nn] = f11; // } } //........................................................................ nn = n-Nx*Ny+1; // neighbor index (pull convention) if (!(i+1 0){ distodd[6*N+n] = f14; disteven[7*N+nn] = f13; // } } //........................................................................ nn = n+Nx*Ny+Nx; // neighbor index (pull convention) if (!(j+1 0){ distodd[7*N+n] = f16; disteven[8*N+nn] = f15; // } } //........................................................................ nn = n-Nx*Ny+Nx; // neighbor index (pull convention) if (!(j+1 0){ distodd[8*N+n] = f18; disteven[9*N+nn] = f17; // } } //........................................................................ } } }