added bounce-back interaction capability
This commit is contained in:
1 parent
3592ac7562
commit
e0b0e05664
2 files changed
+220
-1
No files matched your search
+214
-1
@@ -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
|
||||
|
||||
@@ -205,6 +205,8 @@ public:
|
||||
void RecvHalo(double *data);
|
||||
void RecvGrad(double *Phi, double *Gradient);
|
||||
void RegularLayout(IntArray map, const double *data, DoubleArray ®data);
|
||||
void SolidDirichletD3Q7_init();
|
||||
void SolidDirichletD3Q7();
|
||||
|
||||
// Routines to set boundary conditions
|
||||
void Color_BC_z(int *Map, double *Phi, double *Den, double vA, double vB);
|
||||
@@ -268,6 +270,10 @@ private:
|
||||
int *dvcRecvDist_xy, *dvcRecvDist_yz, *dvcRecvDist_xz, *dvcRecvDist_Xy, *dvcRecvDist_Yz, *dvcRecvDist_xZ;
|
||||
int *dvcRecvDist_xY, *dvcRecvDist_yZ, *dvcRecvDist_Xz, *dvcRecvDist_XY, *dvcRecvDist_YZ, *dvcRecvDist_XZ;
|
||||
//......................................................................................
|
||||
int n_bb_d3q7, n_bb_d3q19;
|
||||
int *bb_dist;
|
||||
int *bb_interactions;
|
||||
//......................................................................................
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user