update to ScaLBL
This commit is contained in:
parent
00e6d0f2da
commit
c998cc24b0
@ -3,7 +3,7 @@
|
|||||||
#include "analysis/analysis.h"
|
#include "analysis/analysis.h"
|
||||||
#include "common/Array.h"
|
#include "common/Array.h"
|
||||||
#include "common/Communication.h"
|
#include "common/Communication.h"
|
||||||
#include "common/MPI_Helpers.h"
|
#include "common/MPI.h"
|
||||||
#include "common/ScaLBL.h"
|
#include "common/ScaLBL.h"
|
||||||
#include "models/ColorModel.h"
|
#include "models/ColorModel.h"
|
||||||
|
|
||||||
|
@ -78,43 +78,43 @@ ScaLBL_Communicator::ScaLBL_Communicator(std::shared_ptr <Domain> Dm){
|
|||||||
BoundaryCondition = Dm->BoundaryCondition;
|
BoundaryCondition = Dm->BoundaryCondition;
|
||||||
//......................................................................................
|
//......................................................................................
|
||||||
|
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_x, 5*sendCount_x*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_x, 2*5*sendCount_x*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_X, 5*sendCount_X*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_X, 2*5*sendCount_X*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_y, 5*sendCount_y*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_y, 2*5*sendCount_y*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_Y, 5*sendCount_Y*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_Y, 2*5*sendCount_Y*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_z, 5*sendCount_z*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_z, 2*5*sendCount_z*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_Z, 5*sendCount_Z*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_Z, 2*5*sendCount_Z*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_xy, sendCount_xy*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_xy, 2*sendCount_xy*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_xY, sendCount_xY*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_xY, 2*sendCount_xY*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_Xy, sendCount_Xy*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_Xy, 2*sendCount_Xy*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_XY, sendCount_XY*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_XY, 2*sendCount_XY*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_xz, sendCount_xz*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_xz, 2*sendCount_xz*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_xZ, sendCount_xZ*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_xZ, 2*sendCount_xZ*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_Xz, sendCount_Xz*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_Xz, 2*sendCount_Xz*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_XZ, sendCount_XZ*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_XZ, 2*sendCount_XZ*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_yz, sendCount_yz*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_yz, 2*sendCount_yz*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_yZ, sendCount_yZ*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_yZ, 2*sendCount_yZ*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_Yz, sendCount_Yz*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_Yz, 2*sendCount_Yz*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &sendbuf_YZ, sendCount_YZ*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &sendbuf_YZ, 2*sendCount_YZ*sizeof(double)); // Allocate device memory
|
||||||
//......................................................................................
|
//......................................................................................
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_x, 5*recvCount_x*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_x, 2*5*recvCount_x*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_X, 5*recvCount_X*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_X, 2*5*recvCount_X*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_y, 5*recvCount_y*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_y, 2*5*recvCount_y*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_Y, 5*recvCount_Y*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_Y, 2*5*recvCount_Y*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_z, 5*recvCount_z*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_z, 2*5*recvCount_z*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_Z, 5*recvCount_Z*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_Z, 2*5*recvCount_Z*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_xy, recvCount_xy*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_xy, 2*recvCount_xy*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_xY, recvCount_xY*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_xY, 2*recvCount_xY*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_Xy, recvCount_Xy*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_Xy, 2*recvCount_Xy*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_XY, recvCount_XY*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_XY, 2*recvCount_XY*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_xz, recvCount_xz*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_xz, 2*recvCount_xz*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_xZ, recvCount_xZ*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_xZ, 2*recvCount_xZ*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_Xz, recvCount_Xz*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_Xz, 2*recvCount_Xz*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_XZ, recvCount_XZ*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_XZ, 2*recvCount_XZ*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_yz, recvCount_yz*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_yz, 2*recvCount_yz*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_yZ, recvCount_yZ*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_yZ, 2*recvCount_yZ*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_Yz, recvCount_Yz*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_Yz, 2*recvCount_Yz*sizeof(double)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &recvbuf_YZ, recvCount_YZ*sizeof(double)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &recvbuf_YZ, 2*recvCount_YZ*sizeof(double)); // Allocate device memory
|
||||||
//......................................................................................
|
//......................................................................................
|
||||||
ScaLBL_AllocateZeroCopy((void **) &dvcSendList_x, sendCount_x*sizeof(int)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &dvcSendList_x, sendCount_x*sizeof(int)); // Allocate device memory
|
||||||
ScaLBL_AllocateZeroCopy((void **) &dvcSendList_X, sendCount_X*sizeof(int)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &dvcSendList_X, sendCount_X*sizeof(int)); // Allocate device memory
|
||||||
@ -174,6 +174,44 @@ ScaLBL_Communicator::ScaLBL_Communicator(std::shared_ptr <Domain> Dm){
|
|||||||
ScaLBL_AllocateZeroCopy((void **) &dvcRecvDist_YZ, recvCount_YZ*sizeof(int)); // Allocate device memory
|
ScaLBL_AllocateZeroCopy((void **) &dvcRecvDist_YZ, recvCount_YZ*sizeof(int)); // Allocate device memory
|
||||||
//......................................................................................
|
//......................................................................................
|
||||||
|
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_x,Dm->sendList_x,sendCount_x*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_X,Dm->sendList_X,sendCount_X*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_y,Dm->sendList_y,sendCount_y*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_Y,Dm->sendList_Y,sendCount_Y*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_z,Dm->sendList_z,sendCount_z*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_Z,Dm->sendList_Z,sendCount_Z*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_xy,Dm->sendList_xy,sendCount_xy*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_XY,Dm->sendList_XY,sendCount_XY*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_xY,Dm->sendList_xY,sendCount_xY*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_Xy,Dm->sendList_Xy,sendCount_Xy*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_xz,Dm->sendList_xz,sendCount_xz*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_XZ,Dm->sendList_XZ,sendCount_XZ*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_xZ,Dm->sendList_xZ,sendCount_xZ*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_Xz,Dm->sendList_Xz,sendCount_Xz*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_yz,Dm->sendList_yz,sendCount_yz*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_YZ,Dm->sendList_YZ,sendCount_YZ*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_yZ,Dm->sendList_yZ,sendCount_yZ*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcSendList_Yz,Dm->sendList_Yz,sendCount_Yz*sizeof(int));
|
||||||
|
//......................................................................................
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_x,Dm->recvList_x,recvCount_x*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_X,Dm->recvList_X,recvCount_X*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_y,Dm->recvList_y,recvCount_y*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_Y,Dm->recvList_Y,recvCount_Y*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_z,Dm->recvList_z,recvCount_z*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_Z,Dm->recvList_Z,recvCount_Z*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_xy,Dm->recvList_xy,recvCount_xy*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_XY,Dm->recvList_XY,recvCount_XY*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_xY,Dm->recvList_xY,recvCount_xY*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_Xy,Dm->recvList_Xy,recvCount_Xy*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_xz,Dm->recvList_xz,recvCount_xz*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_XZ,Dm->recvList_XZ,recvCount_XZ*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_xZ,Dm->recvList_xZ,recvCount_xZ*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_Xz,Dm->recvList_Xz,recvCount_Xz*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_yz,Dm->recvList_yz,recvCount_yz*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_YZ,Dm->recvList_YZ,recvCount_YZ*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_yZ,Dm->recvList_yZ,recvCount_yZ*sizeof(int));
|
||||||
|
ScaLBL_CopyToZeroCopy(dvcRecvList_Yz,Dm->recvList_Yz,recvCount_Yz*sizeof(int));
|
||||||
|
//......................................................................................
|
||||||
ScaLBL_CopyToZeroCopy(dvcSendList_x,Dm->sendList("x"),sendCount_x*sizeof(int));
|
ScaLBL_CopyToZeroCopy(dvcSendList_x,Dm->sendList("x"),sendCount_x*sizeof(int));
|
||||||
ScaLBL_CopyToZeroCopy(dvcSendList_X,Dm->sendList("X"),sendCount_X*sizeof(int));
|
ScaLBL_CopyToZeroCopy(dvcSendList_X,Dm->sendList("X"),sendCount_X*sizeof(int));
|
||||||
ScaLBL_CopyToZeroCopy(dvcSendList_y,Dm->sendList("y"),sendCount_y*sizeof(int));
|
ScaLBL_CopyToZeroCopy(dvcSendList_y,Dm->sendList("y"),sendCount_y*sizeof(int));
|
||||||
@ -319,7 +357,7 @@ int ScaLBL_Communicator::LastInterior(){
|
|||||||
return last_interior;
|
return last_interior;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScaLBL_Communicator::D3Q19_MapRecv(int Cqx, int Cqy, int Cqz, const int *list, int start, int count,
|
void ScaLBL_Communicator::D3Q19_MapRecv(int Cqx, int Cqy, int Cqz, int *list, int start, int count,
|
||||||
int *d3q19_recvlist){
|
int *d3q19_recvlist){
|
||||||
int i,j,k,n,nn,idx;
|
int i,j,k,n,nn,idx;
|
||||||
int * ReturnDist;
|
int * ReturnDist;
|
||||||
@ -363,14 +401,18 @@ int ScaLBL_Communicator::MemoryOptimizedLayoutAA(IntArray &Map, int *neighborLis
|
|||||||
int idx,i,j,k,n;
|
int idx,i,j,k,n;
|
||||||
|
|
||||||
// Check that Map has size matching sub-domain
|
// Check that Map has size matching sub-domain
|
||||||
if ( (int) Map.size(0) != Nx)
|
if (Map.size(0) != Nx)
|
||||||
ERROR("ScaLBL_Communicator::MemoryOptimizedLayout: Map array dimensions do not match! \n");
|
ERROR("ScaLBL_Communicator::MemoryOptimizedLayout: Map array dimensions do not match! \n");
|
||||||
|
|
||||||
// Initialize Map
|
// Initialize Map
|
||||||
for (k=0;k<Nz;k++){
|
for (k=0;k<Nz;k++){
|
||||||
for (j=0;j<Ny;j++){
|
for (j=0;j<Ny;j++){
|
||||||
for (i=0;i<Nx;i++){
|
for (i=0;i<Nx;i++){
|
||||||
Map(i,j,k) = -2;
|
n = k*Nx*Ny + j*Nx + i;
|
||||||
|
if (id[n] > 0)
|
||||||
|
Map(i,j,k) = -2; // this label is for parallel communication sites
|
||||||
|
else
|
||||||
|
Map(i,j,k) = -1; // this label is for solid bounce-back sites
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -847,6 +889,238 @@ int ScaLBL_Communicator::MemoryOptimizedLayoutAA(IntArray &Map, int *neighborLis
|
|||||||
return(Np);
|
return(Np);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::SetupBounceBackList(IntArray &Map, signed char *id, int Np)
|
||||||
|
{
|
||||||
|
|
||||||
|
int idx,i,j,k;
|
||||||
|
int neighbor;
|
||||||
|
// 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);
|
||||||
|
if (!(idx<0)){
|
||||||
|
|
||||||
|
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];
|
||||||
|
int *bb_interactions_tmp = new int [local_count];
|
||||||
|
ScaLBL_AllocateDeviceMemory((void **) &bb_dist, sizeof(int)*local_count);
|
||||||
|
ScaLBL_AllocateDeviceMemory((void **) &bb_interactions, 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);
|
||||||
|
if (!(idx<0)){
|
||||||
|
|
||||||
|
int neighbor; // cycle through the neighbors of lattice site idx
|
||||||
|
neighbor=Map(i-1,j,k);
|
||||||
|
if (neighbor==-1){
|
||||||
|
bb_interactions_tmp[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_tmp[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_tmp[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_tmp[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_tmp[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_tmp[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);
|
||||||
|
if (!(idx<0)){
|
||||||
|
|
||||||
|
neighbor=Map(i-1,j-1,k);
|
||||||
|
if (neighbor==-1){
|
||||||
|
bb_interactions_tmp[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_tmp[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_tmp[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_tmp[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_tmp[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_tmp[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_tmp[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_tmp[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_tmp[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_tmp[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_tmp[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_tmp[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));
|
||||||
|
ScaLBL_CopyToDevice(bb_interactions, bb_interactions_tmp, local_count*sizeof(int));
|
||||||
|
ScaLBL_DeviceBarrier();
|
||||||
|
|
||||||
|
delete [] bb_dist_tmp;
|
||||||
|
delete [] bb_interactions_tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::SolidDirichletD3Q7(double *fq, double *BoundaryValue){
|
||||||
|
// fq is a D3Q7 distribution
|
||||||
|
// BoundaryValues is a list of values to assign at bounce-back solid sites
|
||||||
|
ScaLBL_Solid_Dirichlet_D3Q7(fq,BoundaryValue,bb_dist,bb_interactions,n_bb_d3q7);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::SolidNeumannD3Q7(double *fq, double *BoundaryValue){
|
||||||
|
// fq is a D3Q7 distribution
|
||||||
|
// BoundaryValues is a list of values to assign at bounce-back solid sites
|
||||||
|
ScaLBL_Solid_Neumann_D3Q7(fq,BoundaryValue,bb_dist,bb_interactions,n_bb_d3q7);
|
||||||
|
}
|
||||||
|
|
||||||
void ScaLBL_Communicator::SendD3Q19AA(double *dist){
|
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
|
// NOTE: the center distribution f0 must NOT be at the start of feven, provide offset to start of f2
|
||||||
@ -1251,6 +1525,104 @@ void ScaLBL_Communicator::BiRecvD3Q7AA(double *Aq, double *Bq){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::SendD3Q7AA(double *Aq, int Component){
|
||||||
|
|
||||||
|
// NOTE: the center distribution f0 must NOT be at the start of feven, provide offset to start of f2
|
||||||
|
if (Lock==true){
|
||||||
|
ERROR("ScaLBL Error (SendD3Q7): ScaLBL_Communicator is locked -- did you forget to match Send/Recv calls?");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Lock=true;
|
||||||
|
}
|
||||||
|
// assign tag of 19 to D3Q19 communication
|
||||||
|
sendtag = recvtag = 7;
|
||||||
|
ScaLBL_DeviceBarrier();
|
||||||
|
// Pack the distributions
|
||||||
|
//...Packing for x face(2,8,10,12,14)................................
|
||||||
|
ScaLBL_D3Q19_Pack(2,dvcSendList_x,0,sendCount_x,sendbuf_x,&Aq[Component*7*N],N);
|
||||||
|
|
||||||
|
//...Packing for X face(1,7,9,11,13)................................
|
||||||
|
ScaLBL_D3Q19_Pack(1,dvcSendList_X,0,sendCount_X,sendbuf_X,&Aq[Component*7*N],N);
|
||||||
|
|
||||||
|
//...Packing for y face(4,8,9,16,18).................................
|
||||||
|
ScaLBL_D3Q19_Pack(4,dvcSendList_y,0,sendCount_y,sendbuf_y,&Aq[Component*7*N],N);
|
||||||
|
|
||||||
|
//...Packing for Y face(3,7,10,15,17).................................
|
||||||
|
ScaLBL_D3Q19_Pack(3,dvcSendList_Y,0,sendCount_Y,sendbuf_Y,&Aq[Component*7*N],N);
|
||||||
|
|
||||||
|
//...Packing for z face(6,12,13,16,17)................................
|
||||||
|
ScaLBL_D3Q19_Pack(6,dvcSendList_z,0,sendCount_z,sendbuf_z,&Aq[Component*7*N],N);
|
||||||
|
|
||||||
|
//...Packing for Z face(5,11,14,15,18)................................
|
||||||
|
ScaLBL_D3Q19_Pack(5,dvcSendList_Z,0,sendCount_Z,sendbuf_Z,&Aq[Component*7*N],N);
|
||||||
|
|
||||||
|
//...................................................................................
|
||||||
|
// Send all the distributions
|
||||||
|
//...................................................................................
|
||||||
|
req1[0] = MPI_COMM_SCALBL.Isend(sendbuf_x, sendCount_x,rank_x,sendtag);
|
||||||
|
req2[0] = MPI_COMM_SCALBL.Irecv(recvbuf_X, recvCount_X,rank_X,recvtag);
|
||||||
|
req1[1] = MPI_COMM_SCALBL.Isend(sendbuf_X, sendCount_X,rank_X,sendtag);
|
||||||
|
req2[1] = MPI_COMM_SCALBL.Irecv(recvbuf_x, recvCount_x,rank_x,recvtag);
|
||||||
|
req1[2] = MPI_COMM_SCALBL.Isend(sendbuf_y, sendCount_y,rank_y,sendtag);
|
||||||
|
req2[2] = MPI_COMM_SCALBL.Irecv(recvbuf_Y, recvCount_Y,rank_Y,recvtag);
|
||||||
|
req1[3] = MPI_COMM_SCALBL.Isend(sendbuf_Y, sendCount_Y,rank_Y,sendtag);
|
||||||
|
req2[3] = MPI_COMM_SCALBL.Irecv(recvbuf_y, recvCount_y,rank_y,recvtag);
|
||||||
|
req1[4] = MPI_COMM_SCALBL.Isend(sendbuf_z, sendCount_z,rank_z,sendtag);
|
||||||
|
req2[4] = MPI_COMM_SCALBL.Irecv(recvbuf_Z, recvCount_Z,rank_Z,recvtag);
|
||||||
|
req1[5] = MPI_COMM_SCALBL.Isend(sendbuf_Z, sendCount_Z,rank_Z,sendtag);
|
||||||
|
req2[5] = MPI_COMM_SCALBL.Irecv(recvbuf_z, recvCount_z,rank_z,recvtag);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::RecvD3Q7AA(double *Aq, int Component){
|
||||||
|
|
||||||
|
// NOTE: the center distribution f0 must NOT be at the start of feven, provide offset to start of f2
|
||||||
|
//...................................................................................
|
||||||
|
// Wait for completion of D3Q19 communication
|
||||||
|
MPI_COMM_SCALBL.waitAll(6,req1);
|
||||||
|
MPI_COMM_SCALBL.waitAll(6,req2);
|
||||||
|
ScaLBL_DeviceBarrier();
|
||||||
|
|
||||||
|
//...................................................................................
|
||||||
|
// NOTE: AA Routine writes to opposite
|
||||||
|
// Unpack the distributions on the device
|
||||||
|
//...................................................................................
|
||||||
|
//...Unpacking for x face(2,8,10,12,14)................................
|
||||||
|
ScaLBL_D3Q7_Unpack(2,dvcRecvDist_x,0,recvCount_x,recvbuf_x,&Aq[Component*7*N],N);
|
||||||
|
//...................................................................................
|
||||||
|
//...Packing for X face(1,7,9,11,13)................................
|
||||||
|
ScaLBL_D3Q7_Unpack(1,dvcRecvDist_X,0,recvCount_X,recvbuf_X,&Aq[Component*7*N],N);
|
||||||
|
//...................................................................................
|
||||||
|
//...Packing for y face(4,8,9,16,18).................................
|
||||||
|
ScaLBL_D3Q7_Unpack(4,dvcRecvDist_y,0,recvCount_y,recvbuf_y,&Aq[Component*7*N],N);
|
||||||
|
//...................................................................................
|
||||||
|
//...Packing for Y face(3,7,10,15,17).................................
|
||||||
|
ScaLBL_D3Q7_Unpack(3,dvcRecvDist_Y,0,recvCount_Y,recvbuf_Y,&Aq[Component*7*N],N);
|
||||||
|
//...................................................................................
|
||||||
|
|
||||||
|
if (BoundaryCondition > 0){
|
||||||
|
if (kproc != 0){
|
||||||
|
//...Packing for z face(6,12,13,16,17)................................
|
||||||
|
ScaLBL_D3Q7_Unpack(6,dvcRecvDist_z,0,recvCount_z,recvbuf_z,&Aq[Component*7*N],N);
|
||||||
|
}
|
||||||
|
if (kproc != nprocz-1){
|
||||||
|
//...Packing for Z face(5,11,14,15,18)................................
|
||||||
|
ScaLBL_D3Q7_Unpack(5,dvcRecvDist_Z,0,recvCount_Z,recvbuf_Z,&Aq[Component*7*N],N);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//...Packing for z face(6,12,13,16,17)................................
|
||||||
|
ScaLBL_D3Q7_Unpack(6,dvcRecvDist_z,0,recvCount_z,recvbuf_z,&Aq[Component*7*N],N);
|
||||||
|
//...Packing for Z face(5,11,14,15,18)................................
|
||||||
|
ScaLBL_D3Q7_Unpack(5,dvcRecvDist_Z,0,recvCount_Z,recvbuf_Z,&Aq[Component*7*N],N);
|
||||||
|
}
|
||||||
|
|
||||||
|
//...................................................................................
|
||||||
|
Lock=false; // unlock the communicator after communications complete
|
||||||
|
//...................................................................................
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void ScaLBL_Communicator::TriSendD3Q7AA(double *Aq, double *Bq, double *Cq){
|
void ScaLBL_Communicator::TriSendD3Q7AA(double *Aq, double *Bq, double *Cq){
|
||||||
|
|
||||||
// NOTE: the center distribution f0 must NOT be at the start of feven, provide offset to start of f2
|
// NOTE: the center distribution f0 must NOT be at the start of feven, provide offset to start of f2
|
||||||
@ -1478,6 +1850,7 @@ void ScaLBL_Communicator::RecvHalo(double *data){
|
|||||||
|
|
||||||
void ScaLBL_Communicator::RegularLayout(IntArray map, const double *data, DoubleArray ®data){
|
void ScaLBL_Communicator::RegularLayout(IntArray map, const double *data, DoubleArray ®data){
|
||||||
// Gets data from the device and stores in regular layout
|
// Gets data from the device and stores in regular layout
|
||||||
|
int i,j,k,idx;
|
||||||
int Nx = map.size(0);
|
int Nx = map.size(0);
|
||||||
int Ny = map.size(1);
|
int Ny = map.size(1);
|
||||||
int Nz = map.size(2);
|
int Nz = map.size(2);
|
||||||
@ -1489,10 +1862,11 @@ void ScaLBL_Communicator::RegularLayout(IntArray map, const double *data, Double
|
|||||||
double value;
|
double value;
|
||||||
TmpDat = new double [N];
|
TmpDat = new double [N];
|
||||||
ScaLBL_CopyToHost(&TmpDat[0],&data[0], N*sizeof(double));
|
ScaLBL_CopyToHost(&TmpDat[0],&data[0], N*sizeof(double));
|
||||||
for (int k=0; k<Nz; k++){
|
for (k=0; k<Nz; k++){
|
||||||
for (int j=0; j<Ny; j++){
|
for (j=0; j<Ny; j++){
|
||||||
for (int i=0; i<Nx; i++){
|
for (i=0; i<Nx; i++){
|
||||||
auto idx=map(i,j,k);
|
n=k*Nx*Ny+j*Nx+i;
|
||||||
|
idx=map(i,j,k);
|
||||||
if (!(idx<0)){
|
if (!(idx<0)){
|
||||||
value=TmpDat[idx];
|
value=TmpDat[idx];
|
||||||
regdata(i,j,k)=value;
|
regdata(i,j,k)=value;
|
||||||
@ -1505,29 +1879,33 @@ void ScaLBL_Communicator::RegularLayout(IntArray map, const double *data, Double
|
|||||||
delete [] TmpDat;
|
delete [] TmpDat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::Color_BC_z(int *Map, double *Phi, double *Den, double vA, double vB){
|
||||||
void ScaLBL_Communicator::Color_BC_z(int *Map, double *Phi, double *Den, double vA, double vB)
|
|
||||||
{
|
|
||||||
//double Value=(vA-vB)/(vA+vB);
|
|
||||||
if (kproc == 0) {
|
if (kproc == 0) {
|
||||||
|
if (BoundaryCondition == 5){
|
||||||
|
//ScaLBL_CopySlice_z(Phi,Nx,Ny,Nz,1,0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
// Set the phase indicator field and density on the z inlet
|
// Set the phase indicator field and density on the z inlet
|
||||||
ScaLBL_Color_BC_z(dvcSendList_z, Map, Phi, Den, vA, vB, sendCount_z, N);
|
ScaLBL_Color_BC_z(dvcSendList_z, Map, Phi, Den, vA, vB, sendCount_z, N);
|
||||||
|
}
|
||||||
//ScaLBL_SetSlice_z(Phi,Value,Nx,Ny,Nz,0);
|
//ScaLBL_SetSlice_z(Phi,Value,Nx,Ny,Nz,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScaLBL_Communicator::Color_BC_Z(int *Map, double *Phi, double *Den, double vA, double vB)
|
void ScaLBL_Communicator::Color_BC_Z(int *Map, double *Phi, double *Den, double vA, double vB){
|
||||||
{
|
|
||||||
//double Value=(vA-vB)/(vA+vB);
|
|
||||||
if (kproc == nprocz-1){
|
if (kproc == nprocz-1){
|
||||||
|
if (BoundaryCondition == 5){
|
||||||
|
//ScaLBL_CopySlice_z(Phi,Nx,Ny,Nz,Nz-2,Nz-1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
// Set the phase indicator field and density on the Z outlet
|
// Set the phase indicator field and density on the Z outlet
|
||||||
ScaLBL_Color_BC_Z(dvcSendList_Z, Map, Phi, Den, vA, vB, sendCount_Z, N);
|
ScaLBL_Color_BC_Z(dvcSendList_Z, Map, Phi, Den, vA, vB, sendCount_Z, N);
|
||||||
//ScaLBL_SetSlice_z(Phi,Value,Nx,Ny,Nz,Nz-1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScaLBL_Communicator::D3Q19_Pressure_BC_z(int *neighborList, double *fq, double din, int time)
|
}
|
||||||
{
|
|
||||||
|
void ScaLBL_Communicator::D3Q19_Pressure_BC_z(int *neighborList, double *fq, double din, int time){
|
||||||
//ScaLBL_D3Q19_Pressure_BC_z(int *LIST,fq,din,Nx,Ny,Nz);
|
//ScaLBL_D3Q19_Pressure_BC_z(int *LIST,fq,din,Nx,Ny,Nz);
|
||||||
if (kproc == 0) {
|
if (kproc == 0) {
|
||||||
if (time%2==0){
|
if (time%2==0){
|
||||||
@ -1572,6 +1950,7 @@ double ScaLBL_Communicator::D3Q19_Flux_BC_z(int *neighborList, double *fq, doubl
|
|||||||
locsum = ScaLBL_D3Q19_AAeven_Flux_BC_z(dvcSendList_z, fq, flux, InletArea, sendCount_z, N);
|
locsum = ScaLBL_D3Q19_AAeven_Flux_BC_z(dvcSendList_z, fq, flux, InletArea, sendCount_z, N);
|
||||||
|
|
||||||
sum = MPI_COMM_SCALBL.sumReduce( locsum );
|
sum = MPI_COMM_SCALBL.sumReduce( locsum );
|
||||||
|
|
||||||
din = flux/InletArea + sum;
|
din = flux/InletArea + sum;
|
||||||
//if (rank==0) printf("computed din (even) =%f \n",din);
|
//if (rank==0) printf("computed din (even) =%f \n",din);
|
||||||
if (kproc == 0)
|
if (kproc == 0)
|
||||||
@ -1592,6 +1971,17 @@ double ScaLBL_Communicator::D3Q19_Flux_BC_z(int *neighborList, double *fq, doubl
|
|||||||
return din;
|
return din;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::D3Q19_Reflection_BC_z(double *fq){
|
||||||
|
if (kproc == 0)
|
||||||
|
ScaLBL_D3Q19_Reflection_BC_z(dvcSendList_z, fq, sendCount_z, N);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::D3Q19_Reflection_BC_Z(double *fq){
|
||||||
|
if (kproc == nprocz-1)
|
||||||
|
ScaLBL_D3Q19_Reflection_BC_Z(dvcSendList_Z, fq, sendCount_Z, N);
|
||||||
|
}
|
||||||
|
|
||||||
void ScaLBL_Communicator::PrintD3Q19(){
|
void ScaLBL_Communicator::PrintD3Q19(){
|
||||||
printf("Printing D3Q19 communication buffer contents \n");
|
printf("Printing D3Q19 communication buffer contents \n");
|
||||||
|
|
||||||
@ -1612,3 +2002,80 @@ void ScaLBL_Communicator::PrintD3Q19(){
|
|||||||
delete [] TempBuffer;
|
delete [] TempBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::D3Q7_Poisson_Potential_BC_z(int *neighborList, double *fq, double Vin, int time){
|
||||||
|
if (kproc == 0) {
|
||||||
|
if (time%2==0){
|
||||||
|
ScaLBL_D3Q7_AAeven_Poisson_Potential_BC_z(dvcSendList_z, fq, Vin, sendCount_z, N);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
ScaLBL_D3Q7_AAodd_Poisson_Potential_BC_z(neighborList, dvcSendList_z, fq, Vin, sendCount_z, N);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::D3Q7_Poisson_Potential_BC_Z(int *neighborList, double *fq, double Vout, int time){
|
||||||
|
if (kproc == nprocz-1){
|
||||||
|
if (time%2==0){
|
||||||
|
ScaLBL_D3Q7_AAeven_Poisson_Potential_BC_Z(dvcSendList_Z, fq, Vout, sendCount_Z, N);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
ScaLBL_D3Q7_AAodd_Poisson_Potential_BC_Z(neighborList, dvcSendList_Z, fq, Vout, sendCount_Z, N);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::Poisson_D3Q7_BC_z(int *Map, double *Psi, double Vin){
|
||||||
|
if (kproc == 0) {
|
||||||
|
ScaLBL_Poisson_D3Q7_BC_z(dvcSendList_z, Map, Psi, Vin, sendCount_z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::Poisson_D3Q7_BC_Z(int *Map, double *Psi, double Vout){
|
||||||
|
if (kproc == nprocz-1){
|
||||||
|
ScaLBL_Poisson_D3Q7_BC_Z(dvcSendList_Z, Map, Psi, Vout, sendCount_Z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::D3Q7_Ion_Concentration_BC_z(int *neighborList, double *fq, double Cin, int time){
|
||||||
|
if (kproc == 0) {
|
||||||
|
if (time%2==0){
|
||||||
|
ScaLBL_D3Q7_AAeven_Ion_Concentration_BC_z(dvcSendList_z, fq, Cin, sendCount_z, N);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
ScaLBL_D3Q7_AAodd_Ion_Concentration_BC_z(neighborList, dvcSendList_z, fq, Cin, sendCount_z, N);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::D3Q7_Ion_Concentration_BC_Z(int *neighborList, double *fq, double Cout, int time){
|
||||||
|
if (kproc == nprocz-1){
|
||||||
|
if (time%2==0){
|
||||||
|
ScaLBL_D3Q7_AAeven_Ion_Concentration_BC_Z(dvcSendList_Z, fq, Cout, sendCount_Z, N);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
ScaLBL_D3Q7_AAodd_Ion_Concentration_BC_Z(neighborList, dvcSendList_Z, fq, Cout, sendCount_Z, N);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::D3Q7_Ion_Flux_BC_z(int *neighborList, double *fq, double Cin, double tau, double *VelocityZ, int time){
|
||||||
|
if (kproc == 0) {
|
||||||
|
if (time%2==0){
|
||||||
|
ScaLBL_D3Q7_AAeven_Ion_Flux_BC_z(dvcSendList_z, fq, Cin, tau, VelocityZ, sendCount_z, N);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
ScaLBL_D3Q7_AAodd_Ion_Flux_BC_z(neighborList, dvcSendList_z, fq, Cin, tau, VelocityZ, sendCount_z, N);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Communicator::D3Q7_Ion_Flux_BC_Z(int *neighborList, double *fq, double Cout, double tau, double *VelocityZ, int time){
|
||||||
|
if (kproc == nprocz-1){
|
||||||
|
if (time%2==0){
|
||||||
|
ScaLBL_D3Q7_AAeven_Ion_Flux_BC_Z(dvcSendList_Z, fq, Cout, tau, VelocityZ, sendCount_Z, N);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
ScaLBL_D3Q7_AAodd_Ion_Flux_BC_Z(neighborList, dvcSendList_Z, fq, Cout, tau, VelocityZ, sendCount_Z, N);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
263
common/ScaLBL.h
263
common/ScaLBL.h
@ -55,6 +55,181 @@ extern "C" void ScaLBL_D3Q19_AAeven_BGK(double *dist, int start, int finish, int
|
|||||||
|
|
||||||
extern "C" void ScaLBL_D3Q19_AAodd_BGK(int *neighborList, double *dist, int start, int finish, int Np, double rlx, double Fx, double Fy, double Fz);
|
extern "C" void ScaLBL_D3Q19_AAodd_BGK(int *neighborList, double *dist, int start, int finish, int Np, double rlx, double Fx, double Fy, double Fz);
|
||||||
|
|
||||||
|
// GREYSCALE MODEL (Single-component)
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_GreyIMRT_Init(double *Dist, int Np, double Den);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_AAeven_Greyscale(double *dist, int start, int finish, int Np, double rlx, double rlx_eff, double Fx, double Fy, double Fz,
|
||||||
|
double *Poros,double *Perm, double *Velocity,double *Pressure);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_AAodd_Greyscale(int *neighborList, double *dist, int start, int finish, int Np, double rlx, double rlx_eff, double Fx, double Fy, double Fz,
|
||||||
|
double *Poros,double *Perm, double *Velocity,double *Pressure);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_AAeven_Greyscale_IMRT(double *dist, int start, int finish, int Np, double rlx, double rlx_eff, double Fx, double Fy, double Fz,
|
||||||
|
double *Poros,double *Perm, double *Velocity,double Den,double *Pressure);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_AAodd_Greyscale_IMRT(int *neighborList, double *dist, int start, int finish, int Np, double rlx, double rlx_eff, double Fx, double Fy, double Fz,
|
||||||
|
double *Poros,double *Perm, double *Velocity,double Den,double *Pressure);
|
||||||
|
// ION TRANSPORT MODEL
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAodd_IonConcentration(int *neighborList, double *dist, double *Den, int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAeven_IonConcentration(double *dist, double *Den, int start, int finish, int Np);
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAodd_Ion(int *neighborList, double *dist, double *Den, double *Velocity, double *ElectricField,
|
||||||
|
double Di, int zi, double rlx, double Vt, int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAeven_Ion(double *dist, double *Den, double *Velocity, double *ElectricField,
|
||||||
|
double Di, int zi, double rlx, double Vt, int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_Ion_Init(double *dist, double *Den, double DenInit, int Np);
|
||||||
|
extern "C" void ScaLBL_D3Q7_Ion_Init_FromFile(double *dist, double *Den, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_Ion_ChargeDensity(double *Den, double *ChargeDensity, int IonValence, int ion_component, int start, int finish, int Np);
|
||||||
|
|
||||||
|
// LBM Poisson solver
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAodd_Poisson(int *neighborList,int *Map, double *dist, double *Den_charge, double *Psi, double *ElectricField, double tau, double epsilon_LB,
|
||||||
|
int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAeven_Poisson(int *Map, double *dist, double *Den_charge, double *Psi, double *ElectricField, double tau, double epsilon_LB,
|
||||||
|
int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAodd_Poisson_ElectricPotential(int *neighborList,int *Map, double *dist, double *Psi, int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAeven_Poisson_ElectricPotential(int *Map, double *dist, double *Psi, int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_Poisson_Init(int *Map, double *dist, double *Psi, int start, int finish, int Np);
|
||||||
|
|
||||||
|
//maybe deprecated
|
||||||
|
//extern "C" void ScaLBL_D3Q7_Poisson_ElectricField(int *neighborList, int *Map, signed char *ID, double *Psi, double *ElectricField, int SolidBC,
|
||||||
|
// int strideY, int strideZ,int start, int finish, int Np);
|
||||||
|
|
||||||
|
// LBM Stokes Model (adapted from MRT model)
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_AAeven_StokesMRT(double *dist, double *Velocity, double *ChargeDensity, double *ElectricField, double rlx_setA, double rlx_setB,
|
||||||
|
double Gx, double Gy, double Gz,double rho0, double den_scale, double h, double time_conv, int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_AAodd_StokesMRT(int *neighborList, double *dist, double *Velocity, double *ChargeDensity, double *ElectricField, double rlx_setA, double rlx_setB,
|
||||||
|
double Gx, double Gy, double Gz, double rho0, double den_scale, double h, double time_conv,int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_AAeven_Greyscale_MRT(double *dist, int start, int finish, int Np, double rlx, double rlx_eff, double Fx, double Fy, double Fz,
|
||||||
|
double *Poros,double *Perm, double *Velocity,double Den,double *Pressure);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_AAodd_Greyscale_MRT(int *neighborList, double *dist, int start, int finish, int Np, double rlx, double rlx_eff, double Fx, double Fy, double Fz,
|
||||||
|
double *Poros,double *Perm, double *Velocity,double Den,double *Pressure);
|
||||||
|
// GREYSCALE FREE-ENERGY MODEL (Two-component)
|
||||||
|
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAeven_GreyscaleFE(double *dist, double *Aq, double *Bq, double *Den,
|
||||||
|
// double *DenGradA, double *DenGradB, double *SolidForce, int start, int finish, int Np,
|
||||||
|
// double tauA,double tauB,double tauA_eff,double tauB_eff,double rhoA,double rhoB,double Gsc, double Gx, double Gy, double Gz,
|
||||||
|
// double *Poros,double *Perm, double *Velocity,double *Pressure);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAodd_GreyscaleFE(int *neighborList, double *dist, double *Aq, double *Bq, double *Den,
|
||||||
|
// double *DenGradA, double *DenGradB, double *SolidForce, int start, int finish, int Np,
|
||||||
|
// double tauA,double tauB,double tauA_eff,double tauB_eff,double rhoA,double rhoB,double Gsc, double Gx, double Gy, double Gz,
|
||||||
|
// double *Poros,double *Perm, double *Velocity,double *Pressure);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAeven_GreyscaleFEChem(double *dist, double *Cq, double *Phi, double *SolidForce, int start, int finish, int Np,
|
||||||
|
// double tauA,double tauB,double tauA_eff,double tauB_eff,double rhoA,double rhoB,double gamma,double kappaA,double kappaB,double lambdaA,double lambdaB,
|
||||||
|
// double Gx, double Gy, double Gz,
|
||||||
|
// double *Poros,double *Perm, double *Velocity,double *Pressure,double *PressureGrad,double *PressTensorGrad,double *PhiLap);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAodd_GreyscaleFEChem(int *neighborList, double *dist, double *Cq, double *Phi, double *SolidForce, int start, int finish, int Np,
|
||||||
|
// double tauA,double tauB,double tauA_eff,double tauB_eff,double rhoA,double rhoB,double gamma,double kappaA,double kappaB,double lambdaA,double lambdaB,
|
||||||
|
// double Gx, double Gy, double Gz,
|
||||||
|
// double *Poros,double *Perm, double *Velocity,double *Pressure,double *PressureGrad,double *PressTensorGrad,double *PhiLap);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q7_GreyscaleFE_Init(double *Den, double *Cq, double *PhiLap, double gamma, double kappaA, double kappaB, double lambdaA, double lambdaB, int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_GreyscaleFE_IMRT_Init(double *dist, double *Den, double rhoA, double rhoB, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q7_AAodd_GreyscaleFEDensity(int *NeighborList, double *Aq, double *Bq, double *Den, double *Phi, int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q7_AAeven_GreyscaleFEDensity(double *Aq, double *Bq, double *Den, double *Phi, int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q7_AAodd_GreyscaleFEPhi(int *NeighborList, double *Cq, double *Phi, int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q7_AAeven_GreyscaleFEPhi(double *Cq, double *Phi, int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_GreyscaleFE_Gradient(int *neighborList, double *Den, double *DenGrad, int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_GreyscaleFE_Laplacian(int *neighborList, double *Den, double *DenLap, int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_GreyscaleFE_Pressure(double *dist, double *Den, double *Porosity,double *Velocity,
|
||||||
|
// double *Pressure, double rhoA,double rhoB, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_GreyscaleFE_PressureTensor(int *neighborList, double *Phi,double *Pressure, double *PressTensor, double *PhiLap,
|
||||||
|
// double kappaA,double kappaB,double lambdaA,double lambdaB, int start, int finish, int Np);
|
||||||
|
|
||||||
|
// GREYSCALE SHAN-CHEN MODEL (Two-component)
|
||||||
|
|
||||||
|
//extern "C" void ScaLBL_D3Q19_GreyscaleSC_Init(int *Map, double *distA, double *distB, double *DenA, double *DenB, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAodd_GreyscaleSC_Density(int *NeighborList, int *Map, double *distA, double *distB, double *DenA, double *DenB, int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAeven_GreyscaleSC_Density(int *Map, double *distA, double *distB, double *DenA, double *DenB, int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAodd_GreyscaleSC_MRT(int *neighborList, int *Mpa, double *distA, double *distB, double *DenA,double *DenB, double *DenGradA, double *DenGradB,
|
||||||
|
// double *SolidForceA, double *SolidForceB, double *Poros,double *Perm, double *Velocity,double *Pressure,
|
||||||
|
// double tauA,double tauB,double tauA_eff,double tauB_eff, double Gsc, double Gx, double Gy, double Gz,
|
||||||
|
// int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAeven_GreyscaleSC_MRT(int *Map,double *distA, double *distB, double *DenA,double *DenB, double *DenGradA, double *DenGradB,
|
||||||
|
// double *SolidForceA, double *SolidForceB, double *Poros,double *Perm, double *Velocity,double *Pressure,
|
||||||
|
// double tauA,double tauB,double tauA_eff,double tauB_eff, double Gsc, double Gx, double Gy, double Gz,
|
||||||
|
// int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAodd_GreyscaleSC_BGK(int *neighborList, int *Map, double *distA, double *distB, double *DenA, double *DenB, double *DenGradA, double *DenGradB,
|
||||||
|
// double *SolidForceA, double *SolidForceB, double *Poros,double *Perm, double *Velocity,double *Pressure,
|
||||||
|
// double tauA,double tauB,double tauA_eff,double tauB_eff, double Gsc, double Gx, double Gy, double Gz,
|
||||||
|
// int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAeven_GreyscaleSC_BGK(int *Map, double *distA, double *distB, double *DenA, double *DenB, double *DenGradA, double *DenGradB,
|
||||||
|
// double *SolidForceA, double *SolidForceB, double *Poros,double *Perm, double *Velocity,double *Pressure,
|
||||||
|
// double tauA,double tauB,double tauA_eff,double tauB_eff, double Gsc, double Gx, double Gy, double Gz,
|
||||||
|
// int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_GreyscaleSC_Gradient(int *neighborList, int *Map, double *Den, double *DenGrad, int strideY, int strideZ,int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_GreyscaleSC_BC_z(int *list, int *Map, double *DenA, double *DenB, double vA, double vB, int count);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_GreyscaleSC_BC_Z(int *list, int *Map, double *DenA, double *DenB, double vA, double vB, int count);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_GreyscaleSC_AAeven_Pressure_BC_z(int *list, double *distA, double *distB, double dinA, double dinB, int count, int N);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_GreyscaleSC_AAeven_Pressure_BC_Z(int *list, double *distA, double *distB, double doutA, double doutB, int count, int N);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_GreyscaleSC_AAodd_Pressure_BC_z(int *neighborList, int *list, double *distA, double *distB, double dinA, double dinB, int count, int N);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_GreyscaleSC_AAodd_Pressure_BC_Z(int *neighborList, int *list, double *distA, double *distB, double doutA, double doutB, int count, int N);
|
||||||
|
|
||||||
|
// GREYSCALE COLOR MODEL (Two-component)
|
||||||
|
//extern "C" void ScaLBL_D3Q19_GreyscaleColor_Init(double *dist, double *Porosity, int Np);
|
||||||
|
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAeven_GreyscaleColor(int *Map, double *dist, double *Aq, double *Bq, double *Den,
|
||||||
|
// double *ColorGrad,double *Phi,double *GreySolidGrad, double *Poros,double *Perm,double *Vel,
|
||||||
|
// double rhoA, double rhoB, double tauA, double tauB,double tauA_eff,double tauB_eff, double alpha, double beta,
|
||||||
|
// double Fx, double Fy, double Fz, int strideY, int strideZ, int start, int finish, int Np);
|
||||||
|
//
|
||||||
|
//extern "C" void ScaLBL_D3Q19_AAodd_GreyscaleColor(int *d_neighborList, int *Map, double *dist, double *Aq, double *Bq, double *Den,
|
||||||
|
// double *ColorGrad,double *Phi, double *GreySolidGrad, double *Poros,double *Perm,double *Vel,
|
||||||
|
// double rhoA, double rhoB, double tauA, double tauB, double tauA_eff,double tauB_eff, double alpha, double beta,
|
||||||
|
// double Fx, double Fy, double Fz, int strideY, int strideZ, int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_AAeven_GreyscaleColor(int *Map, double *dist, double *Aq, double *Bq, double *Den,
|
||||||
|
double *Phi,double *GreySolidGrad, double *Poros,double *Perm,double *Vel,double *Pressure,
|
||||||
|
double rhoA, double rhoB, double tauA, double tauB,double tauA_eff,double tauB_eff, double alpha, double beta,
|
||||||
|
double Fx, double Fy, double Fz, int strideY, int strideZ, int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_AAodd_GreyscaleColor(int *d_neighborList, int *Map, double *dist, double *Aq, double *Bq, double *Den,
|
||||||
|
double *Phi, double *GreySolidGrad, double *Poros,double *Perm,double *Vel,double *Pressure,
|
||||||
|
double rhoA, double rhoB, double tauA, double tauB, double tauA_eff,double tauB_eff, double alpha, double beta,
|
||||||
|
double Fx, double Fy, double Fz, int strideY, int strideZ, int start, int finish, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_PhaseField_InitFromRestart(double *Den, double *Aq, double *Bq, int start, int finish, int Np);
|
||||||
|
|
||||||
// MRT MODEL
|
// MRT MODEL
|
||||||
extern "C" void ScaLBL_D3Q19_AAeven_MRT(double *dist, int start, int finish, int Np, double rlx_setA, double rlx_setB, double Fx,
|
extern "C" void ScaLBL_D3Q19_AAeven_MRT(double *dist, int start, int finish, int Np, double rlx_setA, double rlx_setB, double Fx,
|
||||||
double Fy, double Fz);
|
double Fy, double Fz);
|
||||||
@ -63,7 +238,6 @@ extern "C" void ScaLBL_D3Q19_AAodd_MRT(int *d_neighborList, double *dist, int st
|
|||||||
double rlx_setA, double rlx_setB, double Fx, double Fy, double Fz);
|
double rlx_setA, double rlx_setB, double Fx, double Fy, double Fz);
|
||||||
|
|
||||||
// COLOR MODEL
|
// COLOR MODEL
|
||||||
|
|
||||||
extern "C" void ScaLBL_D3Q19_AAeven_Color(int *Map, double *dist, double *Aq, double *Bq, double *Den, double *Phi,
|
extern "C" void ScaLBL_D3Q19_AAeven_Color(int *Map, double *dist, double *Aq, double *Bq, double *Den, double *Phi,
|
||||||
double *Vel, double rhoA, double rhoB, double tauA, double tauB, double alpha, double beta,
|
double *Vel, double rhoA, double rhoB, double tauA, double tauB, double alpha, double beta,
|
||||||
double Fx, double Fy, double Fz, int strideY, int strideZ, int start, int finish, int Np);
|
double Fx, double Fy, double Fz, int strideY, int strideZ, int start, int finish, int Np);
|
||||||
@ -101,11 +275,6 @@ extern "C" void ScaLBL_D3Q19_Gradient_DFH(int *NeighborList, double *Phi, double
|
|||||||
|
|
||||||
// BOUNDARY CONDITION ROUTINES
|
// BOUNDARY CONDITION ROUTINES
|
||||||
|
|
||||||
//extern "C" void ScaLBL_D3Q19_Pressure_BC_z(double *disteven, double *distodd, double din,
|
|
||||||
// int Nx, int Ny, int Nz);
|
|
||||||
//extern "C" void ScaLBL_D3Q19_Pressure_BC_Z(double *disteven, double *distodd, double dout,
|
|
||||||
// int Nx, int Ny, int Nz, int outlet);
|
|
||||||
|
|
||||||
extern "C" void ScaLBL_D3Q19_AAodd_Pressure_BC_z(int *neighborList, int *list, double *dist, double din, int count, int Np);
|
extern "C" void ScaLBL_D3Q19_AAodd_Pressure_BC_z(int *neighborList, int *list, double *dist, double din, int count, int Np);
|
||||||
|
|
||||||
extern "C" void ScaLBL_D3Q19_AAodd_Pressure_BC_Z(int *neighborList, int *list, double *dist, double dout, int count, int Np);
|
extern "C" void ScaLBL_D3Q19_AAodd_Pressure_BC_Z(int *neighborList, int *list, double *dist, double dout, int count, int Np);
|
||||||
@ -124,8 +293,50 @@ extern "C" void ScaLBL_Color_BC_z(int *list, int *Map, double *Phi, double *Den,
|
|||||||
|
|
||||||
extern "C" void ScaLBL_Color_BC_Z(int *list, int *Map, double *Phi, double *Den, double vA, double vB, int count, int Np);
|
extern "C" void ScaLBL_Color_BC_Z(int *list, int *Map, double *Phi, double *Den, double vA, double vB, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_Reflection_BC_z(int *list, double *dist, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q19_Reflection_BC_Z(int *list, double *dist, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_Reflection_BC_z(int *list, double *dist, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_Reflection_BC_Z(int *list, double *dist, int count, int Np);
|
||||||
|
|
||||||
extern "C" void ScaLBL_SetSlice_z(double *Phi, double value, int Nx, int Ny, int Nz, int Slice);
|
extern "C" void ScaLBL_SetSlice_z(double *Phi, double value, int Nx, int Ny, int Nz, int Slice);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_CopySlice_z(double *Phi, int Nx, int Ny, int Nz, int Source, int Destination);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_Solid_Dirichlet_D3Q7(double *dist,double *BoundaryValue,int *BounceBackDist_list,int *BounceBackSolid_list,int N);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_Solid_Neumann_D3Q7(double *dist,double *BoundaryValue,int *BounceBackDist_list,int *BounceBackSolid_list,int N);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAeven_Poisson_Potential_BC_z(int *list, double *dist, double Vin, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAeven_Poisson_Potential_BC_Z(int *list, double *dist, double Vout, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAodd_Poisson_Potential_BC_z(int *d_neighborList, int *list, double *dist, double Vin, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAodd_Poisson_Potential_BC_Z(int *d_neighborList, int *list, double *dist, double Vout, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_Poisson_D3Q7_BC_z(int *list, int *Map, double *Psi, double Vin, int count);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_Poisson_D3Q7_BC_Z(int *list, int *Map, double *Psi, double Vout, int count);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Concentration_BC_z(int *list, double *dist, double Cin, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Concentration_BC_Z(int *list, double *dist, double Cout, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Concentration_BC_z(int *d_neighborList, int *list, double *dist, double Cin, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Concentration_BC_Z(int *d_neighborList, int *list, double *dist, double Cout, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Flux_BC_z(int *list, double *dist, double Cin, double tau, double *VelocityZ, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Flux_BC_Z(int *list, double *dist, double Cout, double tau, double *VelocityZ, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Flux_BC_z(int *d_neighborList, int *list, double *dist, double Cin, double tau, double *VelocityZ, int count, int Np);
|
||||||
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Flux_BC_Z(int *d_neighborList, int *list, double *dist, double Cout, double tau, double *VelocityZ, int count, int Np);
|
||||||
|
|
||||||
class ScaLBL_Communicator{
|
class ScaLBL_Communicator{
|
||||||
public:
|
public:
|
||||||
//......................................................................................
|
//......................................................................................
|
||||||
@ -134,8 +345,10 @@ public:
|
|||||||
//ScaLBL_Communicator(Domain &Dm, IntArray &Map);
|
//ScaLBL_Communicator(Domain &Dm, IntArray &Map);
|
||||||
~ScaLBL_Communicator();
|
~ScaLBL_Communicator();
|
||||||
//......................................................................................
|
//......................................................................................
|
||||||
|
MPI_Comm MPI_COMM_SCALBL; // MPI Communicator
|
||||||
unsigned long int CommunicationCount,SendCount,RecvCount;
|
unsigned long int CommunicationCount,SendCount,RecvCount;
|
||||||
int Nx,Ny,Nz,N;
|
int Nx,Ny,Nz,N;
|
||||||
|
int n_bb_d3q7, n_bb_d3q19;
|
||||||
int BoundaryCondition;
|
int BoundaryCondition;
|
||||||
|
|
||||||
int next;
|
int next;
|
||||||
@ -159,18 +372,10 @@ public:
|
|||||||
int LastInterior();
|
int LastInterior();
|
||||||
|
|
||||||
int MemoryOptimizedLayoutAA(IntArray &Map, int *neighborList, signed char *id, int Np);
|
int MemoryOptimizedLayoutAA(IntArray &Map, int *neighborList, signed char *id, int Np);
|
||||||
// void MemoryOptimizedLayout(IntArray &Map, int *neighborList, char *id, int Np);
|
|
||||||
// void MemoryOptimizedLayoutFull(IntArray &Map, int *neighborList, char *id, int Np);
|
|
||||||
// void MemoryDenseLayout(IntArray &Map, int *neighborList, char *id, int Np);
|
|
||||||
// void MemoryDenseLayoutFull(IntArray &Map, int *neighborList, char *id, int Np);
|
|
||||||
// void SendD3Q19(double *f_even, double *f_odd);
|
|
||||||
// void RecvD3Q19(double *f_even, double *f_odd);
|
|
||||||
// void SendD3Q19AA(double *f_even, double *f_odd);
|
|
||||||
// void RecvD3Q19AA(double *f_even, double *f_odd);
|
|
||||||
void SendD3Q19AA(double *dist);
|
void SendD3Q19AA(double *dist);
|
||||||
void RecvD3Q19AA(double *dist);
|
void RecvD3Q19AA(double *dist);
|
||||||
// void BiSendD3Q7(double *A_even, double *A_odd, double *B_even, double *B_odd);
|
void SendD3Q7AA(double *fq, int Component);
|
||||||
// void BiRecvD3Q7(double *A_even, double *A_odd, double *B_even, double *B_odd);
|
void RecvD3Q7AA(double *fq, int Component);
|
||||||
void BiSendD3Q7AA(double *Aq, double *Bq);
|
void BiSendD3Q7AA(double *Aq, double *Bq);
|
||||||
void BiRecvD3Q7AA(double *Aq, double *Bq);
|
void BiRecvD3Q7AA(double *Aq, double *Bq);
|
||||||
void TriSendD3Q7AA(double *Aq, double *Bq, double *Cq);
|
void TriSendD3Q7AA(double *Aq, double *Bq, double *Cq);
|
||||||
@ -179,23 +384,36 @@ public:
|
|||||||
void RecvHalo(double *data);
|
void RecvHalo(double *data);
|
||||||
void RecvGrad(double *Phi, double *Gradient);
|
void RecvGrad(double *Phi, double *Gradient);
|
||||||
void RegularLayout(IntArray map, const double *data, DoubleArray ®data);
|
void RegularLayout(IntArray map, const double *data, DoubleArray ®data);
|
||||||
|
void SetupBounceBackList(IntArray &Map, signed char *id, int Np);
|
||||||
|
void SolidDirichletD3Q7(double *fq, double *BoundaryValue);
|
||||||
|
void SolidNeumannD3Q7(double *fq, double *BoundaryValue);
|
||||||
|
|
||||||
// Routines to set boundary conditions
|
// Routines to set boundary conditions
|
||||||
void Color_BC_z(int *Map, double *Phi, double *Den, double vA, double vB);
|
void Color_BC_z(int *Map, double *Phi, double *Den, double vA, double vB);
|
||||||
void Color_BC_Z(int *Map, double *Phi, double *Den, double vA, double vB);
|
void Color_BC_Z(int *Map, double *Phi, double *Den, double vA, double vB);
|
||||||
void D3Q19_Pressure_BC_z(int *neighborList, double *fq, double din, int time);
|
void D3Q19_Pressure_BC_z(int *neighborList, double *fq, double din, int time);
|
||||||
void D3Q19_Pressure_BC_Z(int *neighborList, double *fq, double dout, int time);
|
void D3Q19_Pressure_BC_Z(int *neighborList, double *fq, double dout, int time);
|
||||||
|
void D3Q19_Reflection_BC_z(double *fq);
|
||||||
|
void D3Q19_Reflection_BC_Z(double *fq);
|
||||||
double D3Q19_Flux_BC_z(int *neighborList, double *fq, double flux, int time);
|
double D3Q19_Flux_BC_z(int *neighborList, double *fq, double flux, int time);
|
||||||
|
void D3Q7_Poisson_Potential_BC_z(int *neighborList, double *fq, double Vin, int time);
|
||||||
// void TestSendD3Q19(double *f_even, double *f_odd);
|
void D3Q7_Poisson_Potential_BC_Z(int *neighborList, double *fq, double Vout, int time);
|
||||||
// void TestRecvD3Q19(double *f_even, double *f_odd);
|
void Poisson_D3Q7_BC_z(int *Map, double *Psi, double Vin);
|
||||||
|
void Poisson_D3Q7_BC_Z(int *Map, double *Psi, double Vout);
|
||||||
|
void D3Q7_Ion_Concentration_BC_z(int *neighborList, double *fq, double Cin, int time);
|
||||||
|
void D3Q7_Ion_Concentration_BC_Z(int *neighborList, double *fq, double Cout, int time);
|
||||||
|
void D3Q7_Ion_Flux_BC_z(int *neighborList, double *fq, double Cin, double tau, double *VelocityZ, int time);
|
||||||
|
void D3Q7_Ion_Flux_BC_Z(int *neighborList, double *fq, double Cout, double tau, double *VelocityZ, int time);
|
||||||
|
void GreyscaleSC_BC_z(int *Map, double *DenA, double *DenB, double vA, double vB);
|
||||||
|
void GreyscaleSC_BC_Z(int *Map, double *DenA, double *DenB, double vA, double vB);
|
||||||
|
void GreyscaleSC_Pressure_BC_z(int *neighborList, double *fqA, double *fqB, double dinA, double dinB, int time);
|
||||||
|
void GreyscaleSC_Pressure_BC_Z(int *neighborList, double *fqA, double *fqB, double doutA, double doutB, int time);
|
||||||
// Debugging and unit testing functions
|
// Debugging and unit testing functions
|
||||||
void PrintD3Q19();
|
void PrintD3Q19();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//void D3Q19_MapRecv_OLD(int q, int Cqx, int Cqy, int Cqz, int *list, int start, int count, int *d3q19_recvlist);
|
//void D3Q19_MapRecv_OLD(int q, int Cqx, int Cqy, int Cqz, int *list, int start, int count, int *d3q19_recvlist);
|
||||||
void D3Q19_MapRecv(int Cqx, int Cqy, int Cqz, const int *list, int start, int count, int *d3q19_recvlist);
|
void D3Q19_MapRecv(int Cqx, int Cqy, int Cqz, int *list, int start, int count, int *d3q19_recvlist);
|
||||||
|
|
||||||
bool Lock; // use Lock to make sure only one call at a time to protect data in transit
|
bool Lock; // use Lock to make sure only one call at a time to protect data in transit
|
||||||
// only one set of Send requests can be active at any time (per instance)
|
// only one set of Send requests can be active at any time (per instance)
|
||||||
@ -242,6 +460,9 @@ 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 *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 *bb_dist;
|
||||||
|
int *bb_interactions;
|
||||||
|
//......................................................................................
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user