Merge branch 'VariableDensity'

This commit is contained in:
James E McClure
2017-12-01 11:50:27 -05:00
6 changed files with 290 additions and 113 deletions

View File

@@ -77,7 +77,7 @@ extern "C" void ScaLBL_D3Q19_ColorCollide( char *ID, double *disteven, double *d
double alpha, double beta, double Fx, double Fy, double Fz);
extern "C" void ScaLBL_D3Q19_ColorCollide_gen( char *ID, double *disteven, double *distodd, double *phi, double *ColorGrad,
double *Velocity, int Nx, int Ny, int Nz, double tau1, double tau2,
double *Velocity, int Nx, int Ny, int Nz, double tau1, double tau2, double rho1, double rho2,
double alpha, double beta, double Fx, double Fy, double Fz);
extern "C" void ScaLBL_D3Q7_ColorCollideMass(char *ID, double *A_even, double *A_odd, double *B_even, double *B_odd,
@@ -86,10 +86,10 @@ extern "C" void ScaLBL_D3Q7_ColorCollideMass(char *ID, double *A_even, double *A
extern "C" void ScaLBL_ComputePhaseField(char *ID, double *Phi, double *Den, int N);
extern "C" void ScaLBL_Color_BC_z(double *Phi, double *Den, double *A_even, double *A_odd,
extern "C" void ScaLBL_Color_BC_z(double *Phi, double *Den, double *Vel, double *A_even, double *A_odd,
double *B_even, double *B_odd, int Nx, int Ny, int Nz);
extern "C" void ScaLBL_Color_BC_Z(double *Phi, double *Den, double *A_even, double *A_odd,
extern "C" void ScaLBL_Color_BC_Z(double *Phi, double *Den, double *Vel, double *A_even, double *A_odd,
double *B_even, double *B_odd, int Nx, int Ny, int Nz);
extern "C" void ScaLBL_D3Q19_Velocity_BC_z(double *disteven, double *distodd, double uz,

View File

@@ -103,10 +103,13 @@ 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,
extern "C" void ScaLBL_Color_BC_z(double *Phi, double *Den, double *Velocity, double *A_even, double *A_odd,
double *B_even, double *B_odd, int Nx, int Ny, int Nz)
{
int i,j,k,n,N;
double na,nb,ux,uy,uz;
double a1,b1,a2,b2;
N = Nx*Ny*Nz;
// Fill the inlet with component a
for (k=0; k<1; k++){
@@ -126,6 +129,7 @@ extern "C" void ScaLBL_Color_BC_z(double *Phi, double *Den, double *A_even, doub
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;
@@ -141,15 +145,75 @@ extern "C" void ScaLBL_Color_BC_z(double *Phi, double *Den, double *A_even, doub
B_even[2*N+n] = 0.0;
B_odd[2*N+n] = 0.0;
B_even[3*N+n] = 0.0;
*/
na = 1.0;
nb = 0.0;
//....Load the flow velocity...........
ux = Velocity[n];
uy = Velocity[N+n];
uz = Velocity[2*N+n];
A_even[n] = 0.3333333333333333*na;
B_even[n] = 0.3333333333333333*nb;
// Non-Stationary equilibrium distributions
//feq[0] = 0.1111111111111111*(1+4.5*ux);
//feq[1] = 0.1111111111111111*(1-4.5*ux);
//feq[2] = 0.1111111111111111*(1+4.5*uy);
//feq[3] = 0.1111111111111111*(1-4.5*uy);
//feq[4] = 0.1111111111111111*(1+4.5*uz);
//feq[5] = 0.1111111111111111*(1-4.5*uz);
//...............................................
// q = 0,2,4
// Cq = {1,0,0}, {0,1,0}, {0,0,1}
a1 = na*(0.1111111111111111*(1+4.5*ux));
b1 = nb*(0.1111111111111111*(1+4.5*ux));
a2 = na*(0.1111111111111111*(1-4.5*ux));
b2 = nb*(0.1111111111111111*(1-4.5*ux));
A_odd[n] = a1;
A_even[N+n] = a2;
B_odd[n] = b1;
B_even[N+n] = b2;
//...............................................
// q = 2
// Cq = {0,1,0}
a1 = na*(0.1111111111111111*(1+4.5*uy));
b1 = nb*(0.1111111111111111*(1+4.5*uy));
a2 = na*(0.1111111111111111*(1-4.5*uy));
b2 = nb*(0.1111111111111111*(1-4.5*uy));
A_odd[N+n] = a1;
A_even[2*N+n] = a2;
B_odd[N+n] = b1;
B_even[2*N+n] = b2;
//...............................................
// q = 4
// Cq = {0,0,1}
a1 = na*(0.1111111111111111*(1+4.5*uz));
b1 = nb*(0.1111111111111111*(1+4.5*uz));
a2 = na*(0.1111111111111111*(1-4.5*uz));
b2 = nb*(0.1111111111111111*(1-4.5*uz));
A_odd[2*N+n] = a1;
A_even[3*N+n] = a2;
B_odd[2*N+n] = b1;
B_even[3*N+n] = b2;
}
}
}
}
//*************************************************************************
extern "C" void ScaLBL_Color_BC_Z(double *Phi, double *Den, double *A_even, double *A_odd,
extern "C" void ScaLBL_Color_BC_Z(double *Phi, double *Den, double *Velocity, double *A_even, double *A_odd,
double *B_even, double *B_odd, int Nx, int Ny, int Nz)
{
int i,j,k,n,N;
double na,nb,ux,uy,uz;
double a1,b1,a2,b2;
N = Nx*Ny*Nz;
// Fill the outlet with component b
for (k=Nz-3; k<Nz-1; k++){
@@ -161,7 +225,7 @@ extern "C" void ScaLBL_Color_BC_Z(double *Phi, double *Den, double *A_even, doub
Den[n] = 0.0;
Den[N+n] = 1.0;
A_even[n] = 0.0;
/* A_even[n] = 0.0;
A_odd[n] = 0.0;
A_even[N+n] = 0.0;
A_odd[N+n] = 0.0;
@@ -176,6 +240,61 @@ extern "C" void ScaLBL_Color_BC_Z(double *Phi, double *Den, double *A_even, doub
B_even[2*N+n] = 0.1111111111111111;
B_odd[2*N+n] = 0.1111111111111111;
B_even[3*N+n] = 0.1111111111111111;
*/
na = 0.0;
nb = 1.0;
//....Load the flow velocity...........
ux = Velocity[n];
uy = Velocity[N+n];
uz = Velocity[2*N+n];
A_even[n] = 0.3333333333333333*na;
B_even[n] = 0.3333333333333333*nb;
// Non-Stationary equilibrium distributions
//feq[0] = 0.1111111111111111*(1+4.5*ux);
//feq[1] = 0.1111111111111111*(1-4.5*ux);
//feq[2] = 0.1111111111111111*(1+4.5*uy);
//feq[3] = 0.1111111111111111*(1-4.5*uy);
//feq[4] = 0.1111111111111111*(1+4.5*uz);
//feq[5] = 0.1111111111111111*(1-4.5*uz);
//...............................................
// q = 0,2,4
// Cq = {1,0,0}, {0,1,0}, {0,0,1}
a1 = na*(0.1111111111111111*(1+4.5*ux));
b1 = nb*(0.1111111111111111*(1+4.5*ux));
a2 = na*(0.1111111111111111*(1-4.5*ux));
b2 = nb*(0.1111111111111111*(1-4.5*ux));
A_odd[n] = a1;
A_even[N+n] = a2;
B_odd[n] = b1;
B_even[N+n] = b2;
//...............................................
// q = 2
// Cq = {0,1,0}
a1 = na*(0.1111111111111111*(1+4.5*uy));
b1 = nb*(0.1111111111111111*(1+4.5*uy));
a2 = na*(0.1111111111111111*(1-4.5*uy));
b2 = nb*(0.1111111111111111*(1-4.5*uy));
A_odd[N+n] = a1;
A_even[2*N+n] = a2;
B_odd[N+n] = b1;
B_even[2*N+n] = b2;
//...............................................
// q = 4
// Cq = {0,0,1}
a1 = na*(0.1111111111111111*(1+4.5*uz));
b1 = nb*(0.1111111111111111*(1+4.5*uz));
a2 = na*(0.1111111111111111*(1-4.5*uz));
b2 = nb*(0.1111111111111111*(1-4.5*uz));
A_odd[2*N+n] = a1;
A_even[3*N+n] = a2;
B_odd[2*N+n] = b1;
B_even[3*N+n] = b2;
}
}
@@ -956,7 +1075,7 @@ extern "C" void ScaLBL_D3Q19_ColorCollide( char *ID, double *disteven, double *d
extern "C" void ScaLBL_D3Q19_ColorCollide_gen( char *ID, double *disteven, double *distodd, double *phi, double *ColorGrad,
double *Velocity, int Nx, int Ny, int Nz, double tau1, double tau2,
double alpha, double beta, double Fx, double Fy, double Fz)
double rho1, double rho2, double alpha, double beta, double Fx, double Fy, double Fz)
{
int i,j,k,n,nn,N;
@@ -969,6 +1088,7 @@ extern "C" void ScaLBL_D3Q19_ColorCollide_gen( char *ID, double *disteven, doubl
// additional variables needed for computations
double rho,jx,jy,jz,C,nx,ny,nz;
double tau,rlx_setA,rlx_setB;
double rho0;
N = Nx*Ny*Nz;
char id;
@@ -1097,6 +1217,8 @@ extern "C" void ScaLBL_D3Q19_ColorCollide_gen( char *ID, double *disteven, doubl
tau=tau1 + 0.5*(1.0-f1)*(tau2-tau1);
rlx_setA = 1.f/tau;
rlx_setB = 8.f*(2.f-rlx_setA)/(8.f-rlx_setA);
// local density
rho0=rho1 + 0.5*(1.0-f1)*(rho2-rho1);
//......No color gradient at z-boundary if pressure BC are set.............
// if (pBC && k==0) nx = ny = nz = 0.f;
@@ -1183,18 +1305,18 @@ extern "C" void ScaLBL_D3Q19_ColorCollide_gen( char *ID, double *disteven, doubl
//........................................................................
//..........Toelke, Fruediger et. al. 2006...............
if (C == 0.0) nx = ny = nz = 0.0;
m1 = m1 + rlx_setA*((19*(jx*jx+jy*jy+jz*jz)/rho - 11*rho) -alpha*C - m1);
m2 = m2 + rlx_setA*((3*rho - 5.5*(jx*jx+jy*jy+jz*jz)/rho)- m2);
m1 = m1 + rlx_setA*((19*(jx*jx+jy*jy+jz*jz)/rho0 - 11*rho) -alpha*C - m1);
m2 = m2 + rlx_setA*((3*rho - 5.5*(jx*jx+jy*jy+jz*jz)/rho0)- m2);
m4 = m4 + rlx_setB*((-0.6666666666666666*jx)- m4);
m6 = m6 + rlx_setB*((-0.6666666666666666*jy)- m6);
m8 = m8 + rlx_setB*((-0.6666666666666666*jz)- m8);
m9 = m9 + rlx_setA*(((2*jx*jx-jy*jy-jz*jz)/rho) + 0.5*alpha*C*(2*nx*nx-ny*ny-nz*nz) - m9);
m9 = m9 + rlx_setA*(((2*jx*jx-jy*jy-jz*jz)/rho0) + 0.5*alpha*C*(2*nx*nx-ny*ny-nz*nz) - m9);
m10 = m10 + rlx_setA*( - m10);
m11 = m11 + rlx_setA*(((jy*jy-jz*jz)/rho) + 0.5*alpha*C*(ny*ny-nz*nz)- m11);
m11 = m11 + rlx_setA*(((jy*jy-jz*jz)/rho0) + 0.5*alpha*C*(ny*ny-nz*nz)- m11);
m12 = m12 + rlx_setA*( - m12);
m13 = m13 + rlx_setA*( (jx*jy/rho) + 0.5*alpha*C*nx*ny - m13);
m14 = m14 + rlx_setA*( (jy*jz/rho) + 0.5*alpha*C*ny*nz - m14);
m15 = m15 + rlx_setA*( (jx*jz/rho) + 0.5*alpha*C*nx*nz - m15);
m13 = m13 + rlx_setA*( (jx*jy/rho0) + 0.5*alpha*C*nx*ny - m13);
m14 = m14 + rlx_setA*( (jy*jz/rho0) + 0.5*alpha*C*ny*nz - m14);
m15 = m15 + rlx_setA*( (jx*jz/rho0) + 0.5*alpha*C*nx*nz - m15);
m16 = m16 + rlx_setB*( - m16);
m17 = m17 + rlx_setB*( - m17);
m18 = m18 + rlx_setB*( - m18);
@@ -1296,9 +1418,9 @@ extern "C" void ScaLBL_D3Q19_ColorCollide_gen( char *ID, double *disteven, doubl
distodd[7*N+n] = f15;
distodd[8*N+n] = f17;
//...Store the Velocity..........................
Velocity[n] = jx;
Velocity[N+n] = jy;
Velocity[2*N+n] = jz;
Velocity[n] = jx/rho0;
Velocity[N+n] = jy/rho0;
Velocity[2*N+n] = jz/rho0;
//***************************************************************
} // check if n is in the solid
} // loop over n

View File

@@ -122,7 +122,7 @@ __global__ void dvc_ScaLBL_Color_InitDistance(char *ID, double *Den, double *Ph
}
}
//*************************************************************************
__global__ void dvc_ScaLBL_Color_BC_z(double *Phi, double *Den, double *A_even, double *A_odd,
__global__ void dvc_ScaLBL_Color_BC_z(double *Phi, double *Den, double *Velocity, double *A_even, double *A_odd,
double *B_even, double *B_odd, int Nx, int Ny, int Nz)
{
int ij,k,n,N;
@@ -142,26 +142,48 @@ __global__ void dvc_ScaLBL_Color_BC_z(double *Phi, double *Den, double *A_even,
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;
na = 1.0;
nb = 0.0;
ux = Velocity[n];
uy = Velocity[N+n];
uz = Velocity[2*N+n];
A_even[n] = 0.3333333333333333*na;
B_even[n] = 0.3333333333333333*nb;
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;
a1 = na*(0.1111111111111111*(1+4.5*ux));
b1 = nb*(0.1111111111111111*(1+4.5*ux));
a2 = na*(0.1111111111111111*(1-4.5*ux));
b2 = nb*(0.1111111111111111*(1-4.5*ux));
A_odd[n] = a1;
A_even[N+n] = a2;
B_odd[n] = b1;
B_even[N+n] = b2;
a1 = na*(0.1111111111111111*(1+4.5*uy));
b1 = nb*(0.1111111111111111*(1+4.5*uy));
a2 = na*(0.1111111111111111*(1-4.5*uy));
b2 = nb*(0.1111111111111111*(1-4.5*uy));
A_odd[N+n] = a1;
A_even[2*N+n] = a2;
B_odd[N+n] = b1;
B_even[2*N+n] = b2;
a1 = na*(0.1111111111111111*(1+4.5*uz));
b1 = nb*(0.1111111111111111*(1+4.5*uz));
a2 = na*(0.1111111111111111*(1-4.5*uz));
b2 = nb*(0.1111111111111111*(1-4.5*uz));
A_odd[2*N+n] = a1;
A_even[3*N+n] = a2;
B_odd[2*N+n] = b1;
B_even[3*N+n] = b2;
}
}
}
//*************************************************************************
__global__ void dvc_ScaLBL_Color_BC_Z(double *Phi, double *Den, double *A_even, double *A_odd,
__global__ void dvc_ScaLBL_Color_BC_Z(double *Phi, double *Den, double *Velocity, double *A_even, double *A_odd,
double *B_even, double *B_odd, int Nx, int Ny, int Nz)
{
int ij,k,n,N;
@@ -175,21 +197,43 @@ __global__ void dvc_ScaLBL_Color_BC_Z(double *Phi, double *Den, double *A_even,
Den[n] = 0.0;
Den[N+n] = 1.0;
A_even[n] = 0.0;
A_odd[n] = 0.0;
A_even[N+n] = 0.0;
A_odd[N+n] = 0.0;
A_even[2*N+n] = 0.0;
A_odd[2*N+n] = 0.0;
A_even[3*N+n] = 0.0;
na = 0.0;
nb = -1.0;
ux = Velocity[n];
uy = Velocity[N+n];
uz = Velocity[2*N+n];
A_even[n] = 0.3333333333333333*na;
B_even[n] = 0.3333333333333333*nb;
B_even[n] = 0.3333333333333333;
B_odd[n] = 0.1111111111111111;
B_even[N+n] = 0.1111111111111111;
B_odd[N+n] = 0.1111111111111111;
B_even[2*N+n] = 0.1111111111111111;
B_odd[2*N+n] = 0.1111111111111111;
B_even[3*N+n] = 0.1111111111111111;
a1 = na*(0.1111111111111111*(1+4.5*ux));
b1 = nb*(0.1111111111111111*(1+4.5*ux));
a2 = na*(0.1111111111111111*(1-4.5*ux));
b2 = nb*(0.1111111111111111*(1-4.5*ux));
A_odd[n] = a1;
A_even[N+n] = a2;
B_odd[n] = b1;
B_even[N+n] = b2;
a1 = na*(0.1111111111111111*(1+4.5*uy));
b1 = nb*(0.1111111111111111*(1+4.5*uy));
a2 = na*(0.1111111111111111*(1-4.5*uy));
b2 = nb*(0.1111111111111111*(1-4.5*uy));
A_odd[N+n] = a1;
A_even[2*N+n] = a2;
B_odd[N+n] = b1;
B_even[2*N+n] = b2;
a1 = na*(0.1111111111111111*(1+4.5*uz));
b1 = nb*(0.1111111111111111*(1+4.5*uz));
a2 = na*(0.1111111111111111*(1-4.5*uz));
b2 = nb*(0.1111111111111111*(1-4.5*uz));
A_odd[2*N+n] = a1;
A_even[3*N+n] = a2;
B_odd[2*N+n] = b1;
B_even[3*N+n] = b2;
}
for (k=Nz-1; k<Nz; k++){
@@ -954,7 +998,7 @@ __global__ void dvc_ScaLBL_D3Q19_ColorCollide( char *ID, double *disteven, doub
__global__ void dvc_ScaLBL_D3Q19_ColorCollide_gen( char *ID, double *disteven, double *distodd, double *phi, double *ColorGrad,
double *Velocity, int Nx, int Ny, int Nz, double tau1, double tau2,
double alpha, double beta, double Fx, double Fy, double Fz)
double rho1, double rho2, double alpha, double beta, double Fx, double Fy, double Fz)
{
char id;
@@ -1098,6 +1142,8 @@ __global__ void dvc_ScaLBL_D3Q19_ColorCollide_gen( char *ID, double *disteven,
rlx_setA = 1.f/tau;
rlx_setB = 8.f*(2.f-rlx_setA)/(8.f-rlx_setA);
// local density rho0=rho1 + 0.5*(1.0-f1)*(rho2-rho1);
//......No color gradient at z-boundary if pressure BC are set.............
// if (pBC && k==0) nx = ny = nz = 0.f;
// if (pBC && k==Nz-1) nx = ny = nz = 0.f;
@@ -1184,21 +1230,22 @@ __global__ void dvc_ScaLBL_D3Q19_ColorCollide_gen( char *ID, double *disteven,
//........................................................................
//..........Toelke, Fruediger et. al. 2006...............
if (C == 0.0) nx = ny = nz = 0.0;
m1 = m1 + rlx_setA*((19*(jx*jx+jy*jy+jz*jz)/rho - 11*rho) -alpha*C - m1);
m2 = m2 + rlx_setA*((3*rho - 5.5*(jx*jx+jy*jy+jz*jz)/rho)- m2);
m1 = m1 + rlx_setA*((19*(jx*jx+jy*jy+jz*jz)/rho0 - 11*rho) -alpha*C - m1);
m2 = m2 + rlx_setA*((3*rho - 5.5*(jx*jx+jy*jy+jz*jz)/rho0)- m2);
m4 = m4 + rlx_setB*((-0.6666666666666666*jx)- m4);
m6 = m6 + rlx_setB*((-0.6666666666666666*jy)- m6);
m8 = m8 + rlx_setB*((-0.6666666666666666*jz)- m8);
m9 = m9 + rlx_setA*(((2*jx*jx-jy*jy-jz*jz)/rho) + 0.5*alpha*C*(2*nx*nx-ny*ny-nz*nz) - m9);
m9 = m9 + rlx_setA*(((2*jx*jx-jy*jy-jz*jz)/rho0) + 0.5*alpha*C*(2*nx*nx-ny*ny-nz*nz) - m9);
m10 = m10 + rlx_setA*( - m10);
m11 = m11 + rlx_setA*(((jy*jy-jz*jz)/rho) + 0.5*alpha*C*(ny*ny-nz*nz)- m11);
m11 = m11 + rlx_setA*(((jy*jy-jz*jz)/rho0) + 0.5*alpha*C*(ny*ny-nz*nz)- m11);
m12 = m12 + rlx_setA*( - m12);
m13 = m13 + rlx_setA*( (jx*jy/rho) + 0.5*alpha*C*nx*ny - m13);
m14 = m14 + rlx_setA*( (jy*jz/rho) + 0.5*alpha*C*ny*nz - m14);
m15 = m15 + rlx_setA*( (jx*jz/rho) + 0.5*alpha*C*nx*nz - m15);
m13 = m13 + rlx_setA*( (jx*jy/rho0) + 0.5*alpha*C*nx*ny - m13);
m14 = m14 + rlx_setA*( (jy*jz/rho0) + 0.5*alpha*C*ny*nz - m14);
m15 = m15 + rlx_setA*( (jx*jz/rho0) + 0.5*alpha*C*nx*nz - m15);
m16 = m16 + rlx_setB*( - m16);
m17 = m17 + rlx_setB*( - m17);
m18 = m18 + rlx_setB*( - m18);
//.................inverse transformation......................................................
f0 = 0.05263157894736842*rho-0.012531328320802*m1+0.04761904761904762*m2;
f1 = 0.05263157894736842*rho-0.004594820384294068*m1-0.01587301587301587*m2
@@ -1297,9 +1344,9 @@ __global__ void dvc_ScaLBL_D3Q19_ColorCollide_gen( char *ID, double *disteven,
distodd[7*N+n] = f15;
distodd[8*N+n] = f17;
//...Store the Velocity..........................
Velocity[n] = jx;
Velocity[N+n] = jy;
Velocity[2*N+n] = jz;
Velocity[n] = jx/rho0;
Velocity[N+n] = jy/rho0;
Velocity[2*N+n] = jz/rho0;
//***************************************************************
}// check if n is in the solid
@@ -1644,7 +1691,7 @@ extern "C" void ColorCollide( char *ID, double *disteven, double *distodd, doubl
extern "C" void ScaLBL_D3Q19_ColorCollide_gen( char *ID, double *disteven, double *distodd, double *phi, double *ColorGrad,
double *Velocity, int Nx, int Ny, int Nz, double tau1, double tau2,
double alpha, double beta, double Fx, double Fy, double Fz){
double rho1, double rho2, double alpha, double beta, double Fx, double Fy, double Fz){
dvc_ScaLBL_D3Q19_ColorCollide_gen<<<NBLOCKS,NTHREADS >>>(ID, disteven, distodd, phi, ColorGrad, Velocity, Nx, Ny, Nz, tau1, tau2,
alpha, beta, Fx, Fy, Fz);
@@ -1672,14 +1719,14 @@ extern "C" void ScaLBL_D3Q7_ColorCollideMass(char *ID, double *A_even, double *A
dvc_ScaLBL_D3Q7_ColorCollideMass<<<NBLOCKS,NTHREADS >>>(ID, A_even, A_odd, B_even, B_odd, Den, Phi, ColorGrad, Velocity, beta, N, pBC);
}
// Pressure Boundary Conditions Functions
extern "C" void ScaLBL_Color_BC_z(double *Phi, double *Den, double *A_even, double *A_odd,
extern "C" void ScaLBL_Color_BC_z(double *Phi, double *Den, double *Vel, double *A_even, double *A_odd,
double *B_even, double *B_odd, int Nx, int Ny, int Nz){
int GRID = Nx*Ny / 512 + 1;
dvc_ScaLBL_Color_BC_z<<< GRID,512 >>>(Phi, Den, A_even, A_odd, B_even, B_odd, Nx, Ny, Nz);
dvc_ScaLBL_Color_BC_z<<< GRID,512 >>>(Phi, Den, Vel, A_even, A_odd, B_even, B_odd, Nx, Ny, Nz);
}
extern "C" void ScaLBL_Color_BC_Z(double *Phi, double *Den, double *A_even, double *A_odd,
extern "C" void ScaLBL_Color_BC_Z(double *Phi, double *Den, double *Vel, double *A_even, double *A_odd,
double *B_even, double *B_odd, int Nx, int Ny, int Nz){
int GRID = Nx*Ny / 512 + 1;
dvc_ScaLBL_Color_BC_Z<<< GRID,512 >>>(Phi, Den, A_even, A_odd, B_even, B_odd, Nx, Ny, Nz);
dvc_ScaLBL_Color_BC_Z<<< GRID,512 >>>(Phi, Den, Vel, A_even, A_odd, B_even, B_odd, Nx, Ny, Nz);
}

View File

@@ -601,12 +601,12 @@ int main(int argc, char **argv)
}
if (pBC && kproc == 0) {
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
}
if (pBC && kproc == nprocz-1){
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
}
//...........................................................................
@@ -710,12 +710,12 @@ int main(int argc, char **argv)
// Pressure boundary conditions
if (pBC && kproc == 0) {
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
}
if (pBC && kproc == nprocz-1){
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
}
//...................................................................................

View File

@@ -136,7 +136,8 @@ int main(int argc, char **argv)
double D = 1.0; // reference length for non-dimensionalization
// Color Model parameters
int timestepMax;
double tau1, tau2, Fx,Fy,Fz,tol,err;
double tau1, tau2, rho1,rho2;
double Fx,Fy,Fz,tol,err;
double alpha, beta;
double das, dbs, phi_s;
double din,dout;
@@ -163,8 +164,10 @@ int main(int argc, char **argv)
ifstream input("Color.in");
if (input.is_open()){
// Line 1: model parameters (tau, alpha, beta, das, dbs)
input >> tau1; // Viscosity parameter
input >> tau2; // Viscosity parameter
input >> tau1; // Viscosity non-wetting
input >> tau2; // Viscosity wetting
input >> rho1; // density non-wetting
input >> rho2; // density wetting
input >> alpha; // Surface Tension parameter
input >> beta; // Width of the interface
input >> phi_s; // value of phi at the solid surface
@@ -192,6 +195,7 @@ int main(int argc, char **argv)
// Print warning
printf("WARNING: No input file provided (Color.in is missing)! Default parameters will be used. \n");
tau1 = tau2 = 1.0;
rho1 = rho2 = 1.0;
alpha=0.005;
beta= 0.9;
Fx = Fy = Fz = 0.0;
@@ -235,6 +239,8 @@ int main(int argc, char **argv)
//.................................................
MPI_Bcast(&tau1,1,MPI_DOUBLE,0,comm);
MPI_Bcast(&tau2,1,MPI_DOUBLE,0,comm);
MPI_Bcast(&rho1,1,MPI_DOUBLE,0,comm);
MPI_Bcast(&rho2,1,MPI_DOUBLE,0,comm);
MPI_Bcast(&alpha,1,MPI_DOUBLE,0,comm);
MPI_Bcast(&beta,1,MPI_DOUBLE,0,comm);
MPI_Bcast(&das,1,MPI_DOUBLE,0,comm);
@@ -292,6 +298,8 @@ int main(int argc, char **argv)
printf("********************************************************\n");
printf("tau (non-wetting) = %f \n", tau1);
printf("tau (wetting) = %f \n", tau2);
printf("density (non-wetting) = %f \n", rho1);
printf("density (wetting) = %f \n", rho2);
printf("alpha = %f \n", alpha);
printf("beta = %f \n", beta);
printf("das = %f \n", das);
@@ -647,13 +655,13 @@ int main(int argc, char **argv)
}
if (BoundaryCondition==1 && Mask.kproc == 0) {
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (BoundaryCondition==1 && Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
@@ -663,13 +671,13 @@ int main(int argc, char **argv)
}
if (BoundaryCondition==2 && Mask.kproc == 0) {
ScaLBL_D3Q19_Velocity_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (BoundaryCondition==2 && Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Velocity_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
@@ -686,13 +694,13 @@ int main(int argc, char **argv)
// set the initial boundary conditions
if (Mask.kproc == 0) {
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
}
@@ -720,7 +728,7 @@ int main(int argc, char **argv)
if (pBC && Dm.kproc == 0){
if (rank==0) printf("Flux = %.3e, Computed inlet pressure: %f \n",flux,din);
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
@@ -728,7 +736,7 @@ int main(int argc, char **argv)
if (pBC && Dm.kproc == nprocz-1){
// if (rank==nprocx*nprocy*nprocz-1) printf("Flux = %.3e, Computed outlet pressure: %f \n",flux,dout);
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
}
@@ -828,7 +836,7 @@ int main(int argc, char **argv)
// Fused Color Gradient and Collision
//*************************************************************************
ScaLBL_D3Q19_ColorCollide_gen( ID,f_even,f_odd,Phi,ColorGrad,
Velocity,Nx,Ny,Nz,tau1,tau2,alpha,beta,Fx,Fy,Fz);
Velocity,Nx,Ny,Nz,tau1,tau2,rho1,rho2,alpha,beta,Fx,Fy,Fz);
//*************************************************************************
ScaLBL_DeviceBarrier();
@@ -899,24 +907,24 @@ int main(int argc, char **argv)
// Pressure boundary conditions
if (BoundaryCondition==1 && Mask.kproc == 0) {
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (BoundaryCondition==1 && Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
// Velocity boundary conditions
if (BoundaryCondition==2 && Mask.kproc == 0) {
ScaLBL_D3Q19_Velocity_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (BoundaryCondition==2 && Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Velocity_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
@@ -928,12 +936,12 @@ int main(int argc, char **argv)
// set the initial boundary conditions
if (Mask.kproc == 0) {
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
}
@@ -953,14 +961,14 @@ int main(int argc, char **argv)
if (pBC && Dm.kproc == 0){
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (pBC && Dm.kproc == nprocz-1){
// if (rank==nprocx*nprocy*nprocz-1) printf("Flux = %.3e, Computed outlet pressure: %f \n",flux,dout);
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
}

View File

@@ -637,13 +637,13 @@ int main(int argc, char **argv)
}
if (BoundaryCondition==1 && Mask.kproc == 0) {
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (BoundaryCondition==1 && Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
@@ -653,13 +653,13 @@ int main(int argc, char **argv)
}
if (BoundaryCondition==2 && Mask.kproc == 0) {
ScaLBL_D3Q19_Velocity_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (BoundaryCondition==2 && Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Velocity_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
// Set dynamic pressure boundary conditions
@@ -675,12 +675,12 @@ int main(int argc, char **argv)
// set the initial boundary conditions
if (Mask.kproc == 0) {
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
}
@@ -849,24 +849,24 @@ int main(int argc, char **argv)
// Pressure boundary conditions
if (BoundaryCondition==1 && Mask.kproc == 0) {
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (BoundaryCondition==1 && Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
// Velocity boundary conditions
if (BoundaryCondition==2 && Mask.kproc == 0) {
ScaLBL_D3Q19_Velocity_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,0);
}
if (BoundaryCondition==2 && Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Velocity_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,Nz-1);
}
@@ -878,12 +878,12 @@ int main(int argc, char **argv)
// set the initial boundary conditions
if (Mask.kproc == 0) {
ScaLBL_D3Q19_Pressure_BC_z(f_even,f_odd,din,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,1.0,Nx,Ny,Nz,0);
}
if (Mask.kproc == nprocz-1){
ScaLBL_D3Q19_Pressure_BC_Z(f_even,f_odd,dout,Nx,Ny,Nz,Nx*Ny*(Nz-2));
ScaLBL_Color_BC_Z(Phi,Den,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_Color_BC_Z(Phi,Den,Velocity,A_even,A_odd,B_even,B_odd,Nx,Ny,Nz);
ScaLBL_SetSlice_z(Phi,-1.0,Nx,Ny,Nz,Nz-1);
}
}