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);
|
double Value=(vA-vB)/(vA+vB);
|
||||||
if (kproc == 0) {
|
if (kproc == 0) {
|
||||||
// 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(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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3995,7 +3995,7 @@ void ScaLBL_Communicator::Color_BC_Z(int *Map, double *Phi, double *Den, double
|
|||||||
double Value=(vA-vB)/(vA+vB);
|
double Value=(vA-vB)/(vA+vB);
|
||||||
if (kproc == nprocz-1){
|
if (kproc == nprocz-1){
|
||||||
// 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(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);
|
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)
|
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);
|
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)
|
__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;
|
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);
|
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)
|
__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;
|
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();
|
cudaError_t err = cudaGetLastError();
|
||||||
if (cudaSuccess != err){
|
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