Setting layer for the velocity boundary condition -- mass part will bounce back

This commit is contained in:
James E McClure
2015-07-19 12:08:40 -04:00
parent 9e8fe0f6f8
commit b9b4301eac
4 changed files with 33 additions and 3 deletions

View File

@@ -91,6 +91,8 @@ extern "C" void ScaLBL_D3Q19_Velocity_BC_z(double *disteven, double *distodd, do
extern "C" void ScaLBL_D3Q19_Velocity_BC_Z(double *disteven, double *distodd, double uz,
int Nx, int Ny, int Nz, int outlet);
extern "C" void SetPhiSlice_z(double *Phi, double value, int Nx, int Ny, int Nz, int Slice);
class ScaLBL_Communicator{
public:
//......................................................................................

View File

@@ -1425,6 +1425,13 @@ extern "C" void ComputePhi(char *ID, double *Phi, double *Den, int N)
//...................................................................
}
extern "C" void SetPhiSlice_z(double *Phi, double value, int Nx, int Ny, int Nz, int Slice){
int n;
for (n=Slice*Nx*Ny; n<(Slice+1)*Nx*Ny; n++){
Phi[n] = value;
}
}
/*
//*************************************************************************
extern "C" void InitDenColor( int nblocks, int nthreads, int S,

View File

@@ -1387,17 +1387,34 @@ __global__ void dvc_ComputePhi(char *ID, double *Phi, double *Den, int N)
}
//...................................................................
}
__global__ void dvc_SetPhiSlice_z(double *Phi, double value, int Nx, int Ny, int Nz, int Slice)
{
int n = Slice*Nx*Ny + blockIdx.x*blockDim.x + threadIdx.x;
if (n < (Slice+1)*Nx*Ny){
Phi[n] = value;
}
}
extern "C" void SetPhiSlice_z(double *Phi, double value, int Nx, int Ny, int Nz, int Slice){
int GRID = Nx*Ny / 512 + 1;
dvc_SetPhiSlice_z<<<GRID,512>>>(Phi,value,Nx,Ny,Nz,Slice);
}
extern "C" void InitDenColor(char *ID, double *Den, double *Phi, double das, double dbs, int Nx, int Ny, int Nz){
dvc_InitDenColor<<<NBLOCKS,NTHREADS >>>(ID, Den, Phi, das, dbs, Nx, Ny, Nz);
}
extern "C" void InitDenColorDistance(char *ID, double *Den, double *Phi, double *Distance,
double das, double dbs, double beta, double xp, int Nx, int Ny, int Nz){
dvc_InitDenColorDistance<<<NBLOCKS,NTHREADS >>>(ID, Den, Phi, Distance, das, dbs, beta, xp, Nx, Ny, Nz);
}
extern "C" void ComputeColorGradient(char *ID, double *phi, double *ColorGrad, int Nx, int Ny, int Nz){
dvc_ComputeColorGradient<<<NBLOCKS,NTHREADS >>>(ID, phi, ColorGrad, Nx, Ny, Nz);
}
extern "C" void ColorCollide( char *ID, double *disteven, double *distodd, double *ColorGrad,
double *Velocity, int Nx, int Ny, int Nz,double rlx_setA, double rlx_setB,
double alpha, double beta, double Fx, double Fy, double Fz, bool pBC){
@@ -1405,6 +1422,7 @@ extern "C" void ColorCollide( char *ID, double *disteven, double *distodd, doubl
alpha, beta, Fx, Fy, Fz, pBC);
}
extern "C" void ColorCollideOpt( char *ID, double *disteven, double *distodd, double *phi, double *ColorGrad,
double *Velocity, int Nx, int Ny, int Nz,double rlx_setA, double rlx_setB,
double alpha, double beta, double Fx, double Fy, double Fz){
@@ -1412,6 +1430,7 @@ extern "C" void ColorCollideOpt( char *ID, double *disteven, double *distodd, do
alpha, beta, Fx, Fy, Fz);
}
extern "C" void DensityStreamD3Q7(char *ID, double *Den, double *Copy, double *Phi, double *ColorGrad, double *Velocity,
double beta, int Nx, int Ny, int Nz, bool pBC){

View File

@@ -670,7 +670,6 @@ int main(int argc, char **argv)
//..................................................................................
ComputeDensityD3Q7(ID, A_even, A_odd, &Den[0], Nx, Ny, Nz);
ComputeDensityD3Q7(ID, B_even, B_odd, &Den[N], Nx, Ny, Nz);
//*************************************************************************
// Compute the phase indicator field
//*************************************************************************
@@ -699,11 +698,14 @@ int main(int argc, char **argv)
// Velocity boundary conditions
if (BoundaryCondition==2 && kproc == 0) {
ScaLBL_D3Q19_Velocity_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ColorBC_inlet(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
//ColorBC_inlet(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
SetPhiSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (BoundaryCondition==2 && kproc == nprocz-1){
ScaLBL_D3Q19_Velocity_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ColorBC_outlet(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
//ColorBC_outlet(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
SetPhiSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
//...................................................................................