save the work; fluxBC for Ion solver still does not fully agree COMSOL
This commit is contained in:
parent
f9c32855e5
commit
e93b941d9e
@ -2110,24 +2110,24 @@ void ScaLBL_Communicator::D3Q7_Ion_Concentration_BC_Z(int *neighborList, double
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScaLBL_Communicator::D3Q7_Ion_Flux_BC_z(int *neighborList, double *fq, double Cin, int time){
|
void ScaLBL_Communicator::D3Q7_Ion_Flux_BC_z(int *neighborList, double *fq, double Cin, double tau, double *VelocityZ, int time){
|
||||||
if (kproc == 0) {
|
if (kproc == 0) {
|
||||||
if (time%2==0){
|
if (time%2==0){
|
||||||
ScaLBL_D3Q7_AAeven_Ion_Flux_BC_z(dvcSendList_z, fq, Cin, sendCount_z, N);
|
ScaLBL_D3Q7_AAeven_Ion_Flux_BC_z(dvcSendList_z, fq, Cin, tau, VelocityZ, sendCount_z, N);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
ScaLBL_D3Q7_AAodd_Ion_Flux_BC_z(neighborList, dvcSendList_z, fq, Cin, sendCount_z, N);
|
ScaLBL_D3Q7_AAodd_Ion_Flux_BC_z(neighborList, dvcSendList_z, fq, Cin, tau, VelocityZ, sendCount_z, N);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScaLBL_Communicator::D3Q7_Ion_Flux_BC_Z(int *neighborList, double *fq, double Cout, int time){
|
void ScaLBL_Communicator::D3Q7_Ion_Flux_BC_Z(int *neighborList, double *fq, double Cout, double tau, double *VelocityZ, int time){
|
||||||
if (kproc == nprocz-1){
|
if (kproc == nprocz-1){
|
||||||
if (time%2==0){
|
if (time%2==0){
|
||||||
ScaLBL_D3Q7_AAeven_Ion_Flux_BC_Z(dvcSendList_Z, fq, Cout, sendCount_Z, N);
|
ScaLBL_D3Q7_AAeven_Ion_Flux_BC_Z(dvcSendList_Z, fq, Cout, tau, VelocityZ, sendCount_Z, N);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
ScaLBL_D3Q7_AAodd_Ion_Flux_BC_Z(neighborList, dvcSendList_Z, fq, Cout, sendCount_Z, N);
|
ScaLBL_D3Q7_AAodd_Ion_Flux_BC_Z(neighborList, dvcSendList_Z, fq, Cout, tau, VelocityZ, sendCount_Z, N);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -214,13 +214,13 @@ extern "C" void ScaLBL_D3Q7_AAodd_Ion_Concentration_BC_z(int *d_neighborList, in
|
|||||||
|
|
||||||
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Concentration_BC_Z(int *d_neighborList, int *list, double *dist, double Cout, int count, int Np);
|
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Concentration_BC_Z(int *d_neighborList, int *list, double *dist, double Cout, int count, int Np);
|
||||||
|
|
||||||
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Flux_BC_z(int *list, double *dist, double Cin, int count, int Np);
|
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Flux_BC_z(int *list, double *dist, double Cin, double tau, double *VelocityZ, int count, int Np);
|
||||||
|
|
||||||
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Flux_BC_Z(int *list, double *dist, double Cout, int count, int Np);
|
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Flux_BC_Z(int *list, double *dist, double Cout, double tau, double *VelocityZ, int count, int Np);
|
||||||
|
|
||||||
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Flux_BC_z(int *d_neighborList, int *list, double *dist, double Cin, int count, int Np);
|
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Flux_BC_z(int *d_neighborList, int *list, double *dist, double Cin, double tau, double *VelocityZ, int count, int Np);
|
||||||
|
|
||||||
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Flux_BC_Z(int *d_neighborList, int *list, double *dist, double Cout, int count, int Np);
|
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Flux_BC_Z(int *d_neighborList, int *list, double *dist, double Cout, double tau, double *VelocityZ, int count, int Np);
|
||||||
|
|
||||||
class ScaLBL_Communicator{
|
class ScaLBL_Communicator{
|
||||||
public:
|
public:
|
||||||
@ -287,8 +287,8 @@ public:
|
|||||||
void Poisson_D3Q7_BC_Z(int *Map, double *Psi, double Vout);
|
void Poisson_D3Q7_BC_Z(int *Map, double *Psi, double Vout);
|
||||||
void D3Q7_Ion_Concentration_BC_z(int *neighborList, double *fq, double Cin, int time);
|
void D3Q7_Ion_Concentration_BC_z(int *neighborList, double *fq, double Cin, int time);
|
||||||
void D3Q7_Ion_Concentration_BC_Z(int *neighborList, double *fq, double Cout, int time);
|
void D3Q7_Ion_Concentration_BC_Z(int *neighborList, double *fq, double Cout, int time);
|
||||||
void D3Q7_Ion_Flux_BC_z(int *neighborList, double *fq, double Cin, int time);
|
void D3Q7_Ion_Flux_BC_z(int *neighborList, double *fq, double Cin, double tau, double *VelocityZ, int time);
|
||||||
void D3Q7_Ion_Flux_BC_Z(int *neighborList, double *fq, double Cout, int time);
|
void D3Q7_Ion_Flux_BC_Z(int *neighborList, double *fq, double Cout, double tau, double *VelocityZ, int time);
|
||||||
|
|
||||||
// Debugging and unit testing functions
|
// Debugging and unit testing functions
|
||||||
void PrintD3Q19();
|
void PrintD3Q19();
|
||||||
|
102
cpu/D3Q7BC.cpp
102
cpu/D3Q7BC.cpp
@ -224,54 +224,124 @@ extern "C" void ScaLBL_D3Q7_AAodd_Ion_Concentration_BC_Z(int *d_neighborList, in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Flux_BC_z(int *list, double *dist, double FluxIn, int count, int Np){
|
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Flux_BC_z(int *list, double *dist, double FluxIn, double tau, double *VelocityZ, int count, int Np){
|
||||||
//NOTE: FluxIn is the inward flux
|
//NOTE: FluxIn is the inward flux
|
||||||
|
double f0,f1,f2,f3,f4,f5,f6;
|
||||||
|
double fsum_partial;
|
||||||
|
int n;
|
||||||
|
double uz;
|
||||||
for (int idx=0; idx<count; idx++){
|
for (int idx=0; idx<count; idx++){
|
||||||
int n = list[idx];
|
n = list[idx];
|
||||||
double f6 = dist[5*Np+n];
|
f0 = dist[n];
|
||||||
|
f1 = dist[2*Np+n];
|
||||||
|
f2 = dist[1*Np+n];
|
||||||
|
f3 = dist[4*Np+n];
|
||||||
|
f4 = dist[3*Np+n];
|
||||||
|
f6 = dist[5*Np+n];
|
||||||
|
fsum_partial = f0+f1+f2+f3+f4+f6;
|
||||||
|
uz = VelocityZ[n];
|
||||||
|
|
||||||
//...................................................
|
//...................................................
|
||||||
double f5 = FluxIn +f6;
|
f5 =(FluxIn+(1.0-0.5/tau)*f6-uz*fsum_partial)/(1.0-0.5/tau+uz);
|
||||||
dist[6*Np+n] = f5;
|
dist[6*Np+n] = f5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Flux_BC_Z(int *list, double *dist, double FluxIn, int count, int Np){
|
|
||||||
|
extern "C" void ScaLBL_D3Q7_AAeven_Ion_Flux_BC_Z(int *list, double *dist, double FluxIn, double tau, double *VelocityZ, int count, int Np){
|
||||||
//NOTE: FluxIn is the inward flux
|
//NOTE: FluxIn is the inward flux
|
||||||
|
double f0,f1,f2,f3,f4,f5,f6;
|
||||||
|
double fsum_partial;
|
||||||
|
int n;
|
||||||
|
double uz;
|
||||||
for (int idx=0; idx<count; idx++){
|
for (int idx=0; idx<count; idx++){
|
||||||
int n = list[idx];
|
n = list[idx];
|
||||||
double f5 = dist[6*Np+n];
|
f0 = dist[n];
|
||||||
|
f1 = dist[2*Np+n];
|
||||||
|
f2 = dist[1*Np+n];
|
||||||
|
f3 = dist[4*Np+n];
|
||||||
|
f4 = dist[3*Np+n];
|
||||||
|
f5 = dist[6*Np+n];
|
||||||
|
fsum_partial = f0+f1+f2+f3+f4+f5;
|
||||||
|
uz = VelocityZ[n];
|
||||||
|
|
||||||
//...................................................
|
//...................................................
|
||||||
double f6 = FluxIn +f5;
|
f6 =(FluxIn+(1.0-0.5/tau)*f5+uz*fsum_partial)/(1.0-0.5/tau-uz);
|
||||||
dist[5*Np+n] = f6;
|
dist[5*Np+n] = f6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Flux_BC_z(int *d_neighborList, int *list, double *dist, double FluxIn, int count, int Np){
|
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Flux_BC_z(int *d_neighborList, int *list, double *dist, double FluxIn, double tau, double *VelocityZ, int count, int Np){
|
||||||
//NOTE: FluxIn is the inward flux
|
//NOTE: FluxIn is the inward flux
|
||||||
|
double f0,f1,f2,f3,f4,f5,f6;
|
||||||
|
double fsum_partial;
|
||||||
|
int n;
|
||||||
int nread,nr5;
|
int nread,nr5;
|
||||||
|
double uz;
|
||||||
for (int idx=0; idx<count; idx++){
|
for (int idx=0; idx<count; idx++){
|
||||||
int n = list[idx];
|
n = list[idx];
|
||||||
|
f0 = dist[n];
|
||||||
|
|
||||||
|
nread = d_neighborList[n];
|
||||||
|
f1 = dist[nread];
|
||||||
|
|
||||||
|
nread = d_neighborList[n+2*Np];
|
||||||
|
f3 = dist[nread];
|
||||||
|
|
||||||
|
nread = d_neighborList[n+Np];
|
||||||
|
f2 = dist[nread];
|
||||||
|
|
||||||
|
nread = d_neighborList[n+3*Np];
|
||||||
|
f4 = dist[nread];
|
||||||
|
|
||||||
nread = d_neighborList[n+5*Np];
|
nread = d_neighborList[n+5*Np];
|
||||||
double f6 = dist[nread];
|
f6 = dist[nread];
|
||||||
|
|
||||||
|
fsum_partial = f0+f1+f2+f3+f4+f6;
|
||||||
|
uz = VelocityZ[n];
|
||||||
|
//...................................................
|
||||||
|
f5 =(FluxIn+(1.0-0.5/tau)*f6-uz*fsum_partial)/(1.0-0.5/tau+uz);
|
||||||
|
|
||||||
// Unknown distributions
|
// Unknown distributions
|
||||||
nr5 = d_neighborList[n+4*Np];
|
nr5 = d_neighborList[n+4*Np];
|
||||||
double f5 = FluxIn +f6;
|
|
||||||
dist[nr5] = f5;
|
dist[nr5] = f5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Flux_BC_Z(int *d_neighborList, int *list, double *dist, double FluxIn, int count, int Np){
|
extern "C" void ScaLBL_D3Q7_AAodd_Ion_Flux_BC_Z(int *d_neighborList, int *list, double *dist, double FluxIn, double tau, double *VelocityZ, int count, int Np){
|
||||||
//NOTE: FluxIn is the inward flux
|
//NOTE: FluxIn is the inward flux
|
||||||
|
double f0,f1,f2,f3,f4,f5,f6;
|
||||||
|
double fsum_partial;
|
||||||
|
int n;
|
||||||
int nread,nr6;
|
int nread,nr6;
|
||||||
|
double uz;
|
||||||
|
|
||||||
for (int idx=0; idx<count; idx++){
|
for (int idx=0; idx<count; idx++){
|
||||||
int n = list[idx];
|
n = list[idx];
|
||||||
|
f0 = dist[n];
|
||||||
|
|
||||||
|
nread = d_neighborList[n];
|
||||||
|
f1 = dist[nread];
|
||||||
|
|
||||||
|
nread = d_neighborList[n+2*Np];
|
||||||
|
f3 = dist[nread];
|
||||||
|
|
||||||
nread = d_neighborList[n+4*Np];
|
nread = d_neighborList[n+4*Np];
|
||||||
double f5 = dist[nread];
|
f5 = dist[nread];
|
||||||
|
|
||||||
|
nread = d_neighborList[n+Np];
|
||||||
|
f2 = dist[nread];
|
||||||
|
|
||||||
|
nread = d_neighborList[n+3*Np];
|
||||||
|
f4 = dist[nread];
|
||||||
|
|
||||||
|
fsum_partial = f0+f1+f2+f3+f4+f5;
|
||||||
|
uz = VelocityZ[n];
|
||||||
|
//...................................................
|
||||||
|
f6 =(FluxIn+(1.0-0.5/tau)*f5+uz*fsum_partial)/(1.0-0.5/tau-uz);
|
||||||
|
|
||||||
// unknown distributions
|
// unknown distributions
|
||||||
nr6 = d_neighborList[n+5*Np];
|
nr6 = d_neighborList[n+5*Np];
|
||||||
double f6 = FluxIn +f5;
|
|
||||||
dist[nr6] = f6;
|
dist[nr6] = f6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -742,7 +742,7 @@ void ScaLBL_IonModel::Initialize(){
|
|||||||
if (rank==0) printf("LB Ion Solver: inlet boundary for Ion %i is concentration = %.5g [mol/m^3] \n",i+1,Cin[i]/(h*h*h*1.0e-18));
|
if (rank==0) printf("LB Ion Solver: inlet boundary for Ion %i is concentration = %.5g [mol/m^3] \n",i+1,Cin[i]/(h*h*h*1.0e-18));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (rank==0) printf("LB Ion Solver: inlet boundary for Ion %i is flux = %.5g [mol/m^2/sec] \n",i+1,Cin[i]/(h*h*1.0e-12)/time_conv[i]);
|
if (rank==0) printf("LB Ion Solver: inlet boundary for Ion %i is (inward) flux = %.5g [mol/m^2/sec] \n",i+1,Cin[i]/(h*h*1.0e-12)/time_conv[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (BoundaryConditionOutlet[i]){
|
switch (BoundaryConditionOutlet[i]){
|
||||||
@ -753,7 +753,7 @@ void ScaLBL_IonModel::Initialize(){
|
|||||||
if (rank==0) printf("LB Ion Solver: outlet boundary for Ion %i is concentration = %.5g [mol/m^3] \n",i+1,Cout[i]/(h*h*h*1.0e-18));
|
if (rank==0) printf("LB Ion Solver: outlet boundary for Ion %i is concentration = %.5g [mol/m^3] \n",i+1,Cout[i]/(h*h*h*1.0e-18));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (rank==0) printf("LB Ion Solver: outlet boundary for Ion %i is flux = %.5g [mol/m^2/sec] \n",i+1,Cout[i]/(h*h*1.0e-12)/time_conv[i]);
|
if (rank==0) printf("LB Ion Solver: outlet boundary for Ion %i is (inward) flux = %.5g [mol/m^2/sec] \n",i+1,Cout[i]/(h*h*1.0e-12)/time_conv[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -803,7 +803,7 @@ void ScaLBL_IonModel::Run(double *Velocity, double *ElectricField){
|
|||||||
ScaLBL_Comm->D3Q7_Ion_Concentration_BC_z(NeighborList, &fq[ic*Np*7], Cin[ic], timestep);
|
ScaLBL_Comm->D3Q7_Ion_Concentration_BC_z(NeighborList, &fq[ic*Np*7], Cin[ic], timestep);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
ScaLBL_Comm->D3Q7_Ion_Flux_BC_z(NeighborList, &fq[ic*Np*7], Cin[ic], timestep);
|
ScaLBL_Comm->D3Q7_Ion_Flux_BC_z(NeighborList, &fq[ic*Np*7], Cin[ic], tau[ic], &Velocity[2*Np], timestep);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -813,7 +813,7 @@ void ScaLBL_IonModel::Run(double *Velocity, double *ElectricField){
|
|||||||
ScaLBL_Comm->D3Q7_Ion_Concentration_BC_Z(NeighborList, &fq[ic*Np*7], Cout[ic], timestep);
|
ScaLBL_Comm->D3Q7_Ion_Concentration_BC_Z(NeighborList, &fq[ic*Np*7], Cout[ic], timestep);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
ScaLBL_Comm->D3Q7_Ion_Flux_BC_Z(NeighborList, &fq[ic*Np*7], Cout[ic], timestep);
|
ScaLBL_Comm->D3Q7_Ion_Flux_BC_Z(NeighborList, &fq[ic*Np*7], Cout[ic], tau[ic], &Velocity[2*Np], timestep);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -847,7 +847,7 @@ void ScaLBL_IonModel::Run(double *Velocity, double *ElectricField){
|
|||||||
ScaLBL_Comm->D3Q7_Ion_Concentration_BC_z(NeighborList, &fq[ic*Np*7], Cin[ic], timestep);
|
ScaLBL_Comm->D3Q7_Ion_Concentration_BC_z(NeighborList, &fq[ic*Np*7], Cin[ic], timestep);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
ScaLBL_Comm->D3Q7_Ion_Flux_BC_z(NeighborList, &fq[ic*Np*7], Cin[ic], timestep);
|
ScaLBL_Comm->D3Q7_Ion_Flux_BC_z(NeighborList, &fq[ic*Np*7], Cin[ic], tau[ic], &Velocity[2*Np], timestep);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -857,7 +857,7 @@ void ScaLBL_IonModel::Run(double *Velocity, double *ElectricField){
|
|||||||
ScaLBL_Comm->D3Q7_Ion_Concentration_BC_Z(NeighborList, &fq[ic*Np*7], Cout[ic], timestep);
|
ScaLBL_Comm->D3Q7_Ion_Concentration_BC_Z(NeighborList, &fq[ic*Np*7], Cout[ic], timestep);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
ScaLBL_Comm->D3Q7_Ion_Flux_BC_Z(NeighborList, &fq[ic*Np*7], Cout[ic], timestep);
|
ScaLBL_Comm->D3Q7_Ion_Flux_BC_Z(NeighborList, &fq[ic*Np*7], Cout[ic], tau[ic], &Velocity[2*Np], timestep);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user