Enforcing mass conservation for opposing components in reservoir
This commit is contained in:
@@ -3986,7 +3986,7 @@ void ScaLBL_Communicator::Color_BC_z(int *Map, double *Phi, double *Den, double
|
||||
double Value=(vA-vB)/(vA+vB);
|
||||
if (kproc == 0) {
|
||||
// Set the phase indicator field and density on the z inlet
|
||||
ScaLBL_Color_BC(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);
|
||||
}
|
||||
}
|
||||
@@ -3995,7 +3995,7 @@ void ScaLBL_Communicator::Color_BC_Z(int *Map, double *Phi, double *Den, double
|
||||
double Value=(vA-vB)/(vA+vB);
|
||||
if (kproc == nprocz-1){
|
||||
// Set the phase indicator field and density on the Z outlet
|
||||
ScaLBL_Color_BC(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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,48 +103,7 @@ extern "C" void ScaLBL_Color_InitDistance(char *ID, double *Den, double *Phi, do
|
||||
|
||||
|
||||
//*************************************************************************
|
||||
extern "C" void ScaLBL_Color_BC_z(double *Phi, double *Den, double *A_even, double *A_odd,
|
||||
double *B_even, double *B_odd, int Nx, int Ny, int Nz)
|
||||
{
|
||||
int i,j,k,n,N;
|
||||
N = Nx*Ny*Nz;
|
||||
// Fill the inlet with component a
|
||||
for (k=0; k<1; k++){
|
||||
for (j=0;j<Ny;j++){
|
||||
for (i=0;i<Nx;i++){
|
||||
n = k*Nx*Ny+j*Nx+i;
|
||||
Phi[n] = 1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (k=1; k<3; k++){
|
||||
for (j=0;j<Ny;j++){
|
||||
for (i=0;i<Nx;i++){
|
||||
n = k*Nx*Ny+j*Nx+i;
|
||||
Phi[n] = 1.0;
|
||||
Den[n] = 1.0;
|
||||
Den[N+n] = 0.0;
|
||||
|
||||
A_even[n] = 0.3333333333333333;
|
||||
A_odd[n] = 0.1111111111111111;
|
||||
A_even[N+n] = 0.1111111111111111;
|
||||
A_odd[N+n] = 0.1111111111111111;
|
||||
A_even[2*N+n] = 0.1111111111111111;
|
||||
A_odd[2*N+n] = 0.1111111111111111;
|
||||
A_even[3*N+n] = 0.1111111111111111;
|
||||
|
||||
B_even[n] = 0.0;
|
||||
B_odd[n] = 0.0;
|
||||
B_even[N+n] = 0.0;
|
||||
B_odd[N+n] = 0.0;
|
||||
B_even[2*N+n] = 0.0;
|
||||
B_odd[2*N+n] = 0.0;
|
||||
B_even[3*N+n] = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//*************************************************************************
|
||||
extern "C" void ScaLBL_Color_BC(int *list, int *Map, double *Phi, double *Den, double vA, double vB, int count, int Np)
|
||||
{
|
||||
@@ -160,6 +119,36 @@ extern "C" void ScaLBL_Color_BC(int *list, int *Map, double *Phi, double *Den, d
|
||||
Phi[nm] = (vA-vB)/(vA+vB);
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void ScaLBL_Color_BC_z(int *list, int *Map, double *Phi, double *Den, double vA, double vB, int count, int Np)
|
||||
{
|
||||
int idx,n,nm;
|
||||
// Fill the outlet with component b
|
||||
|
||||
for (idx=0; idx<count; idx++){
|
||||
n = list[idx];
|
||||
Den[n] = vA;
|
||||
double valB = Den[Np+n]; // mass that reaches inlet is conserved
|
||||
|
||||
nm = Map[n];
|
||||
Phi[nm] = (vA-valB)/(vA+valB);
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void ScaLBL_Color_BC_Z(int *list, int *Map, double *Phi, double *Den, double vA, double vB, int count, int Np)
|
||||
{
|
||||
int idx,n,nm;
|
||||
// Fill the outlet with component b
|
||||
|
||||
for (idx=0; idx<count; idx++){
|
||||
n = list[idx];
|
||||
double valA = Den[n]; // mass that reaches outlet is conserved
|
||||
Den[Np+n] = vB;
|
||||
|
||||
nm = Map[n];
|
||||
Phi[nm] = (valA-vB)/(valA+vB);
|
||||
}
|
||||
}
|
||||
//*************************************************************************
|
||||
|
||||
//*************************************************************************
|
||||
|
||||
46
gpu/Color.cu
46
gpu/Color.cu
@@ -125,6 +125,7 @@ __global__ void dvc_ScaLBL_Color_InitDistance(char *ID, double *Den, double *Ph
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
|
||||
__global__ void dvc_ScaLBL_Color_BC(int *list, int *Map, double *Phi, double *Den, double vA, double vB, int count, int Np)
|
||||
{
|
||||
int idx,n,nm;
|
||||
@@ -139,6 +140,35 @@ __global__ void dvc_ScaLBL_Color_BC(int *list, int *Map, double *Phi, double *D
|
||||
Phi[nm] = (vA-vB)/(vA+vB);
|
||||
}
|
||||
}
|
||||
__global__ void dvc_ScaLBL_Color_BC_z(int *list, int *Map, double *Phi, double *Den, double vA, double vB, int count, int Np)
|
||||
{
|
||||
int idx,n,nm;
|
||||
// Fill the outlet with component b
|
||||
idx = blockIdx.x*blockDim.x + threadIdx.x;
|
||||
if (idx < count){
|
||||
n = list[idx];
|
||||
Den[n] = vA;
|
||||
double valB = Den[Np+n]; // mass that reaches inlet is conserved
|
||||
|
||||
nm = Map[n];
|
||||
Phi[nm] = (vA-valB)/(vA+valB);
|
||||
}
|
||||
}
|
||||
|
||||
__global__ void dvc_ScaLBL_Color_BC_Z(int *list, int *Map, double *Phi, double *Den, double vA, double vB, int count, int Np)
|
||||
{
|
||||
int idx,n,nm;
|
||||
// Fill the outlet with component b
|
||||
idx = blockIdx.x*blockDim.x + threadIdx.x;
|
||||
if (idx < count){
|
||||
n = list[idx];
|
||||
double valA = Den[n]; // mass that reaches outlet is conserved
|
||||
Den[Np+n] = vB;
|
||||
|
||||
nm = Map[n];
|
||||
Phi[nm] = (valA-vB)/(valA+vB);
|
||||
}
|
||||
}
|
||||
//*************************************************************************
|
||||
|
||||
__global__ void dvc_ScaLBL_D3Q19_ColorGradient(char *ID, double *phi, double *ColorGrad, int Nx, int Ny, int Nz)
|
||||
@@ -4077,13 +4107,23 @@ extern "C" void ScaLBL_D3Q19_AAodd_ColorMass(int *d_neighborList, double *Aq, do
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void ScaLBL_Color_BC(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){
|
||||
int GRID = count / 512 + 1;
|
||||
dvc_ScaLBL_Color_BC<<<GRID,512>>>(list, Map, Phi, Den, vA, vB, count, Np);
|
||||
dvc_ScaLBL_Color_BC_z<<<GRID,512>>>(list, Map, Phi, Den, vA, vB, count, Np);
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (cudaSuccess != err){
|
||||
printf("CUDA error in ScaLBL_Color_BC: %s \n",cudaGetErrorString(err));
|
||||
printf("CUDA error in ScaLBL_Color_BC_z: %s \n",cudaGetErrorString(err));
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void ScaLBL_Color_BC_Z(int *list, int *Map, double *Phi, double *Den, double vA, double vB, int count, int Np){
|
||||
int GRID = count / 512 + 1;
|
||||
dvc_ScaLBL_Color_BC_Z<<<GRID,512>>>(list, Map, Phi, Den, vA, vB, count, Np);
|
||||
cudaError_t err = cudaGetLastError();
|
||||
if (cudaSuccess != err){
|
||||
printf("CUDA error in ScaLBL_Color_BC_Z: %s \n",cudaGetErrorString(err));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user