added bounce-back interaction capability
This commit is contained in:
@@ -526,7 +526,7 @@ int ScaLBL_Communicator::MemoryOptimizedLayoutAA(IntArray &Map, int *neighborLis
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//for (idx=0; idx<Np; idx++) printf("%i: %i %i\n", idx, neighborList[Np], neighborList[Np+idx]);
|
||||
//.......................................................................
|
||||
// Now map through SendList and RecvList to update indices
|
||||
@@ -853,6 +853,219 @@ int ScaLBL_Communicator::MemoryOptimizedLayoutAA(IntArray &Map, int *neighborLis
|
||||
return(Np);
|
||||
}
|
||||
|
||||
|
||||
void ScaLBL_Communicator::SetupBounceBackList()
|
||||
{
|
||||
|
||||
// save list of bounce-back distributions and interaction sites
|
||||
n_bb_d3q7 = 0; n_bb_d3q19 = 0;
|
||||
|
||||
int local_count = 0;
|
||||
for (k=1;k<Nz-1;k++){
|
||||
for (j=1;j<Ny-1;j++){
|
||||
for (i=1;i<Nx-1;i++){
|
||||
n=k*Nx*Ny+j*Nx+i;
|
||||
idx=Map(i,j,k);
|
||||
else if (!(idx<0)){
|
||||
|
||||
int neighbor; // cycle through the neighbors of lattice site idx
|
||||
neighbor=Map(i-1,j,k);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i+1,j,k);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i,j-1,k);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i,j+1,k);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i,j,k-1);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i,j,k+1);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i-1,j-1,k);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i+1,j+1,k);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i-1,j+1,k);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i+1,j-1,k);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i-1,j,k-1);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i+1,j,k+1);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i-1,j,k+1);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i+1,j,k-1);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i,j-1,k-1);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i,j+1,k+1);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i,j-1,k+1);
|
||||
if (neighbor==-1) local_count++;
|
||||
|
||||
neighbor=Map(i,j+1,k-1);
|
||||
if (neighbor==-1) local_count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int *bb_dist_tmp = new int [local_count];
|
||||
bb_interactions = new int [local_count];
|
||||
ScaLBL_AllocateDeviceMemory((void **) &bb_dist, sizeof(int)*local_count);
|
||||
|
||||
local_count=0;
|
||||
for (k=1;k<Nz-1;k++){
|
||||
for (j=1;j<Ny-1;j++){
|
||||
for (i=1;i<Nx-1;i++){
|
||||
n=k*Nx*Ny+j*Nx+i;
|
||||
idx=Map(i,j,k);
|
||||
else if (!(idx<0)){
|
||||
|
||||
int neighbor; // cycle through the neighbors of lattice site idx
|
||||
neighbor=Map(i-1,j,k);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i-1) + (j)*Nx + (k)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 2*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i+1,j,k);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i+1) + (j)*Nx + (k)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++] = idx + 1*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i,j-1,k);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i) + (j-1)*Nx + (k)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 4*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i,j+1,k);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i) + (j+1)*Nx + (k)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 3*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i,j,k-1);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i) + (j)*Nx + (k-1)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 6*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i,j,k+1);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i) + (j)*Nx + (k+1)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 5*Np;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
n_bb_d3q7 = local_count;
|
||||
for (k=1;k<Nz-1;k++){
|
||||
for (j=1;j<Ny-1;j++){
|
||||
for (i=1;i<Nx-1;i++){
|
||||
n=k*Nx*Ny+j*Nx+i;
|
||||
idx=Map(i,j,k);
|
||||
else if (!(idx<0)){
|
||||
|
||||
neighbor=Map(i-1,j-1,k);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i-1) + (j-1)*Nx + (k)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 8*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i+1,j+1,k);
|
||||
if (neighbor==-1) {
|
||||
bb_interactions[local_count] = (i+1) + (j+1)*Nx + (k)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 7*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i-1,j+1,k);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i-1) + (j+1)*Nx + (k)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 10*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i+1,j-1,k);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i+1) + (j-1)*Nx + (k)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 9*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i-1,j,k-1);
|
||||
if (neighbor==-1) {
|
||||
bb_interactions[local_count] = (i-1) + (j)*Nx + (k-1)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 12*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i+1,j,k+1);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i+1) + (j)*Nx + (k+1)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 11*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i-1,j,k+1);
|
||||
if (neighbor==-1) {
|
||||
bb_interactions[local_count] = (i-1) + (j)*Nx + (k+1)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 14*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i+1,j,k-1);
|
||||
if (neighbor==-1) {
|
||||
bb_interactions[local_count] = (i+1) + (j)*Nx + (k-1)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 13*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i,j-1,k-1);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i) + (j-1)*Nx + (k-1)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 16*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i,j+1,k+1);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i) + (j+1)*Nx + (k+1)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 15*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i,j-1,k+1);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i) + (j-1)*Nx + (k+1)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 18*Np;
|
||||
}
|
||||
|
||||
neighbor=Map(i,j+1,k-1);
|
||||
if (neighbor==-1){
|
||||
bb_interactions[local_count] = (i) + (j+1)*Nx + (k-1)*Nx*Ny;
|
||||
bb_dist_tmp[local_count++]=idx + 17*Np;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
n_bb_d3q19 = local_count; // this gives the d3q19 distributions not part of d3q7 model
|
||||
ScaLBL_CopyToDevice(bb_dist, bb_dist_tmp, local_count*sizeof(int));
|
||||
}
|
||||
|
||||
void ScaLBL_Communicator::SendD3Q19AA(double *dist){
|
||||
|
||||
// NOTE: the center distribution f0 must NOT be at the start of feven, provide offset to start of f2
|
||||
|
||||
Reference in New Issue
Block a user