add zeta potential to Poisson

This commit is contained in:
James McClure 2020-08-11 16:52:56 -04:00
parent 6ff5a9a8ae
commit 30014a49c0
4 changed files with 24 additions and 2 deletions

View File

@ -1067,6 +1067,16 @@ void ScaLBL_Communicator::SetupBounceBackList(IntArray &Map, signed char *id, in
ScaLBL_CopyToDevice(bb_dist, bb_dist_tmp, local_count*sizeof(int));
}
void ScaLBL_Communicator::SolidDirichletD3Q7(double *fq, double *assignValues){
// fq is a D3Q7 distribution
// assignValues is a list of values to assign at bounce-back sites
for (int idx=0; idx<n_bb_d3q7; idx++){
double value = assignValues[idx];
int iq = bb_dist[idx];
fq[iq] += value;
}
}
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

View File

@ -170,6 +170,7 @@ public:
MPI_Comm MPI_COMM_SCALBL; // MPI Communicator
unsigned long int CommunicationCount,SendCount,RecvCount;
int Nx,Ny,Nz,N;
int n_bb_d3q7, n_bb_d3q19;
int BoundaryCondition;
int next;
@ -206,7 +207,7 @@ public:
void RecvGrad(double *Phi, double *Gradient);
void RegularLayout(IntArray map, const double *data, DoubleArray &regdata);
void SetupBounceBackList(IntArray &Map, signed char *id, int Np);
//void SolidDirichletD3Q7();
void SolidDirichletD3Q7(double *fq, double *assignValues);
// Routines to set boundary conditions
void Color_BC_z(int *Map, double *Phi, double *Den, double vA, double vB);
@ -270,7 +271,6 @@ 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;
//......................................................................................

View File

@ -183,7 +183,16 @@ void ScaLBL_Poisson::Create(){
ScaLBL_AllocateDeviceMemory((void **) &fq, 7*dist_mem_size);
ScaLBL_AllocateDeviceMemory((void **) &Psi, sizeof(double)*Np);
ScaLBL_AllocateDeviceMemory((void **) &ElectricField, 3*sizeof(double)*Np);
ScaLBL_AllocateDeviceMemory((void **) &zeta, sizeof(double)*ScaLBL_Comm->n_bb_d3q7);
//...........................................................................
// initialize the zeta function (example is zeta is constant on solid surface)
double *tmpZeta = new double[ScaLBL_Comm->n_bb_d3q7];
for int (i=0; i<ScaLBL_Comm->n_bb_d3q7; i++){
tmpZeta[i] = 1.0/k2_inv; // this has to be read from input file
}
ScaLBL_CopyToDevice(zeta, tmpZeta, sizeof(double)*ScaLBL_Comm->n_bb_d3q7);
delete [] tmpZeta;
// Update GPU data structures
if (rank==0) printf ("Setting up device map and neighbor list \n");
// copy the neighbor list
@ -225,6 +234,7 @@ void ScaLBL_Poisson::Run(double *ChargeDensity){
// Set boundary conditions
/* ... */
ScaLBL_D3Q7_AAodd_Poisson(NeighborList, fq, ChargeDensity, Psi, ElectricField, rlx, epsilon_LB, deltaT, 0, ScaLBL_Comm->LastExterior(), Np);
ScaLBL_Comm->SolidDirichletD3Q7(fq, zeta);
ScaLBL_DeviceBarrier(); MPI_Barrier(comm);
// *************EVEN TIMESTEP*************//
@ -235,6 +245,7 @@ void ScaLBL_Poisson::Run(double *ChargeDensity){
// Set boundary conditions
/* ... */
ScaLBL_D3Q7_AAeven_Poisson(fq, ChargeDensity, Psi, ElectricField, rlx, epsilon_LB, deltaT, 0, ScaLBL_Comm->LastExterior(), Np);
ScaLBL_Comm->SolidDirichletD3Q7(fq, zeta);
ScaLBL_DeviceBarrier(); MPI_Barrier(comm);
//************************************************************************/

View File

@ -58,6 +58,7 @@ public:
double *fq;
double *Psi;
double *ElectricField;
double *zeta;
private:
MPI_Comm comm;