re-factor electric solvers for unit testing
This commit is contained in:
parent
aa26fcafda
commit
75e8647051
@ -418,76 +418,20 @@ void ScaLBL_Poisson::Run(double *ChargeDensity){
|
|||||||
//************************************************************************/
|
//************************************************************************/
|
||||||
// *************ODD TIMESTEP*************//
|
// *************ODD TIMESTEP*************//
|
||||||
timestep++;
|
timestep++;
|
||||||
ScaLBL_Comm->SendD3Q7AA(fq, 0); //READ FROM NORMAL
|
SolveElectricPotentialAAodd();
|
||||||
ScaLBL_D3Q7_AAodd_Poisson_ElectricPotential(NeighborList, dvcMap, fq, Psi, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np);
|
|
||||||
ScaLBL_Comm->RecvD3Q7AA(fq, 0); //WRITE INTO OPPOSITE
|
|
||||||
ScaLBL_DeviceBarrier();
|
|
||||||
// Set boundary conditions
|
|
||||||
if (BoundaryCondition == 1){
|
|
||||||
ScaLBL_Comm->D3Q7_Poisson_Potential_BC_z(NeighborList, fq, Vin, timestep);
|
|
||||||
ScaLBL_Comm->D3Q7_Poisson_Potential_BC_Z(NeighborList, fq, Vout, timestep);
|
|
||||||
}
|
|
||||||
//-------------------------//
|
|
||||||
ScaLBL_D3Q7_AAodd_Poisson_ElectricPotential(NeighborList, dvcMap, fq, Psi, 0, ScaLBL_Comm->LastExterior(), Np);
|
|
||||||
|
|
||||||
//compute electric field
|
//compute electric field
|
||||||
ScaLBL_Comm_Regular->SendHalo(Psi);
|
SolveElectricField();
|
||||||
ScaLBL_D3Q7_Poisson_ElectricField(NeighborList, dvcMap, dvcID, Psi, ElectricField, BoundaryConditionSolid,
|
|
||||||
Nx, Nx*Ny, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np);
|
|
||||||
ScaLBL_Comm_Regular->RecvHalo(Psi);
|
|
||||||
ScaLBL_DeviceBarrier();
|
|
||||||
if (BoundaryCondition == 1){
|
|
||||||
ScaLBL_Comm->Poisson_D3Q7_BC_z(dvcMap,Psi,Vin);
|
|
||||||
ScaLBL_Comm->Poisson_D3Q7_BC_Z(dvcMap,Psi,Vout);
|
|
||||||
}
|
|
||||||
ScaLBL_D3Q7_Poisson_ElectricField(NeighborList, dvcMap, dvcID, Psi, ElectricField, BoundaryConditionSolid, Nx, Nx*Ny, 0, ScaLBL_Comm->LastExterior(), Np);
|
|
||||||
|
|
||||||
//perform collision
|
//perform collision
|
||||||
ScaLBL_D3Q7_AAodd_Poisson(NeighborList, dvcMap, fq, ChargeDensity, Psi, ElectricField, tau, epsilon_LB, gamma, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np);
|
SolvePoissonAAodd();
|
||||||
ScaLBL_D3Q7_AAodd_Poisson(NeighborList, dvcMap, fq, ChargeDensity, Psi, ElectricField, tau, epsilon_LB, gamma, 0, ScaLBL_Comm->LastExterior(), Np);
|
|
||||||
if (BoundaryConditionSolid==1){
|
|
||||||
ScaLBL_Comm->SolidDirichletD3Q7(fq, Psi);
|
|
||||||
}
|
|
||||||
else if (BoundaryConditionSolid==2){
|
|
||||||
ScaLBL_Comm->SolidNeumannD3Q7(fq, Psi);
|
|
||||||
}
|
|
||||||
ScaLBL_DeviceBarrier(); MPI_Barrier(comm);
|
ScaLBL_DeviceBarrier(); MPI_Barrier(comm);
|
||||||
|
|
||||||
// *************EVEN TIMESTEP*************//
|
// *************EVEN TIMESTEP*************//
|
||||||
timestep++;
|
timestep++;
|
||||||
ScaLBL_Comm->SendD3Q7AA(fq, 0); //READ FORM NORMAL
|
SolveElectricPotentialAAeven();
|
||||||
ScaLBL_D3Q7_AAeven_Poisson_ElectricPotential(dvcMap, fq, Psi, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np);
|
|
||||||
ScaLBL_Comm->RecvD3Q7AA(fq, 0); //WRITE INTO OPPOSITE
|
|
||||||
ScaLBL_DeviceBarrier();
|
|
||||||
// Set boundary conditions
|
|
||||||
if (BoundaryCondition == 1){
|
|
||||||
ScaLBL_Comm->D3Q7_Poisson_Potential_BC_z(NeighborList, fq, Vin, timestep);
|
|
||||||
ScaLBL_Comm->D3Q7_Poisson_Potential_BC_Z(NeighborList, fq, Vout, timestep);
|
|
||||||
}
|
|
||||||
//-------------------------//
|
|
||||||
ScaLBL_D3Q7_AAeven_Poisson_ElectricPotential(dvcMap, fq, Psi, 0, ScaLBL_Comm->LastExterior(), Np);
|
|
||||||
|
|
||||||
//compute electric field
|
//compute electric field
|
||||||
ScaLBL_Comm_Regular->SendHalo(Psi);
|
SolveElectricField();
|
||||||
ScaLBL_D3Q7_Poisson_ElectricField(NeighborList, dvcMap, dvcID, Psi, ElectricField, BoundaryConditionSolid,
|
|
||||||
Nx, Nx*Ny, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np);
|
|
||||||
ScaLBL_Comm_Regular->RecvHalo(Psi);
|
|
||||||
ScaLBL_DeviceBarrier();
|
|
||||||
if (BoundaryCondition == 1){
|
|
||||||
ScaLBL_Comm->Poisson_D3Q7_BC_z(dvcMap,Psi,Vin);
|
|
||||||
ScaLBL_Comm->Poisson_D3Q7_BC_Z(dvcMap,Psi,Vout);
|
|
||||||
}
|
|
||||||
ScaLBL_D3Q7_Poisson_ElectricField(NeighborList, dvcMap, dvcID, Psi, ElectricField, BoundaryConditionSolid, Nx, Nx*Ny, 0, ScaLBL_Comm->LastExterior(), Np);
|
|
||||||
|
|
||||||
//perform collision
|
//perform collision
|
||||||
ScaLBL_D3Q7_AAeven_Poisson(dvcMap, fq, ChargeDensity, Psi, ElectricField, tau, epsilon_LB, gamma, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np);
|
SolvePoissonAAeven()
|
||||||
ScaLBL_D3Q7_AAeven_Poisson(dvcMap, fq, ChargeDensity, Psi, ElectricField, tau, epsilon_LB, gamma, 0, ScaLBL_Comm->LastExterior(), Np);
|
|
||||||
if (BoundaryConditionSolid==1){
|
|
||||||
ScaLBL_Comm->SolidDirichletD3Q7(fq, Psi);
|
|
||||||
}
|
|
||||||
else if (BoundaryConditionSolid==2){
|
|
||||||
ScaLBL_Comm->SolidNeumannD3Q7(fq, Psi);
|
|
||||||
}
|
|
||||||
ScaLBL_DeviceBarrier(); MPI_Barrier(comm);
|
ScaLBL_DeviceBarrier(); MPI_Barrier(comm);
|
||||||
//************************************************************************/
|
//************************************************************************/
|
||||||
|
|
||||||
@ -584,6 +528,67 @@ void ScaLBL_Poisson::getElectricField(int timestep){
|
|||||||
fclose(EZ);
|
fclose(EZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Poisson::SolveElectricPotentialAAodd(){
|
||||||
|
ScaLBL_Comm->SendD3Q7AA(fq, 0); //READ FROM NORMAL
|
||||||
|
ScaLBL_D3Q7_AAodd_Poisson_ElectricPotential(NeighborList, dvcMap, fq, Psi, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np);
|
||||||
|
ScaLBL_Comm->RecvD3Q7AA(fq, 0); //WRITE INTO OPPOSITE
|
||||||
|
ScaLBL_DeviceBarrier();
|
||||||
|
// Set boundary conditions
|
||||||
|
if (BoundaryCondition == 1){
|
||||||
|
ScaLBL_Comm->D3Q7_Poisson_Potential_BC_z(NeighborList, fq, Vin, timestep);
|
||||||
|
ScaLBL_Comm->D3Q7_Poisson_Potential_BC_Z(NeighborList, fq, Vout, timestep);
|
||||||
|
}
|
||||||
|
//-------------------------//
|
||||||
|
ScaLBL_D3Q7_AAodd_Poisson_ElectricPotential(NeighborList, dvcMap, fq, Psi, 0, ScaLBL_Comm->LastExterior(), Np);
|
||||||
|
}
|
||||||
|
void ScaLBL_Poisson::SolveElectricField(){
|
||||||
|
ScaLBL_Comm_Regular->SendHalo(Psi);
|
||||||
|
ScaLBL_D3Q7_Poisson_ElectricField(NeighborList, dvcMap, dvcID, Psi, ElectricField, BoundaryConditionSolid,
|
||||||
|
Nx, Nx*Ny, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np);
|
||||||
|
ScaLBL_Comm_Regular->RecvHalo(Psi);
|
||||||
|
ScaLBL_DeviceBarrier();
|
||||||
|
if (BoundaryCondition == 1){
|
||||||
|
ScaLBL_Comm->Poisson_D3Q7_BC_z(dvcMap,Psi,Vin);
|
||||||
|
ScaLBL_Comm->Poisson_D3Q7_BC_Z(dvcMap,Psi,Vout);
|
||||||
|
}
|
||||||
|
ScaLBL_D3Q7_Poisson_ElectricField(NeighborList, dvcMap, dvcID, Psi, ElectricField, BoundaryConditionSolid, Nx, Nx*Ny, 0, ScaLBL_Comm->LastExterior(), Np);
|
||||||
|
|
||||||
|
}
|
||||||
|
void ScaLBL_Poisson::SolvePoissonAAodd(){
|
||||||
|
ScaLBL_D3Q7_AAodd_Poisson(NeighborList, dvcMap, fq, ChargeDensity, Psi, ElectricField, tau, epsilon_LB, gamma, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np);
|
||||||
|
ScaLBL_D3Q7_AAodd_Poisson(NeighborList, dvcMap, fq, ChargeDensity, Psi, ElectricField, tau, epsilon_LB, gamma, 0, ScaLBL_Comm->LastExterior(), Np);
|
||||||
|
if (BoundaryConditionSolid==1){
|
||||||
|
ScaLBL_Comm->SolidDirichletD3Q7(fq, Psi);
|
||||||
|
}
|
||||||
|
else if (BoundaryConditionSolid==2){
|
||||||
|
ScaLBL_Comm->SolidNeumannD3Q7(fq, Psi);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScaLBL_Poisson::SolveElectricPotentialAAeven(){
|
||||||
|
ScaLBL_Comm->SendD3Q7AA(fq, 0); //READ FORM NORMAL
|
||||||
|
ScaLBL_D3Q7_AAeven_Poisson_ElectricPotential(dvcMap, fq, Psi, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np);
|
||||||
|
ScaLBL_Comm->RecvD3Q7AA(fq, 0); //WRITE INTO OPPOSITE
|
||||||
|
ScaLBL_DeviceBarrier();
|
||||||
|
// Set boundary conditions
|
||||||
|
if (BoundaryCondition == 1){
|
||||||
|
ScaLBL_Comm->D3Q7_Poisson_Potential_BC_z(NeighborList, fq, Vin, timestep);
|
||||||
|
ScaLBL_Comm->D3Q7_Poisson_Potential_BC_Z(NeighborList, fq, Vout, timestep);
|
||||||
|
}
|
||||||
|
//-------------------------//
|
||||||
|
ScaLBL_D3Q7_AAeven_Poisson_ElectricPotential(dvcMap, fq, Psi, 0, ScaLBL_Comm->LastExterior(), Np);
|
||||||
|
}
|
||||||
|
void ScaLBL_Poisson::SolvePoissonAAeven(){
|
||||||
|
ScaLBL_D3Q7_AAeven_Poisson(dvcMap, fq, ChargeDensity, Psi, ElectricField, tau, epsilon_LB, gamma, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np);
|
||||||
|
ScaLBL_D3Q7_AAeven_Poisson(dvcMap, fq, ChargeDensity, Psi, ElectricField, tau, epsilon_LB, gamma, 0, ScaLBL_Comm->LastExterior(), Np);
|
||||||
|
if (BoundaryConditionSolid==1){
|
||||||
|
ScaLBL_Comm->SolidDirichletD3Q7(fq, Psi);
|
||||||
|
}
|
||||||
|
else if (BoundaryConditionSolid==2){
|
||||||
|
ScaLBL_Comm->SolidNeumannD3Q7(fq, Psi);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ScaLBL_Poisson::ElectricField_LB_to_Phys(DoubleArray &Efield_reg){
|
void ScaLBL_Poisson::ElectricField_LB_to_Phys(DoubleArray &Efield_reg){
|
||||||
for (int k=0;k<Nz;k++){
|
for (int k=0;k<Nz;k++){
|
||||||
|
@ -28,6 +28,11 @@ public:
|
|||||||
void Create();
|
void Create();
|
||||||
void Initialize();
|
void Initialize();
|
||||||
void Run(double *ChargeDensity);
|
void Run(double *ChargeDensity);
|
||||||
|
void SolveElectricPotentialAAodd();
|
||||||
|
void SolveElectricPotentialAAeven();
|
||||||
|
void SolveElectricField();
|
||||||
|
void SolvePoissonAAodd();
|
||||||
|
void SolvePoissonAAeven();
|
||||||
void getElectricPotential(int timestep);
|
void getElectricPotential(int timestep);
|
||||||
void getElectricField(int timestep);
|
void getElectricField(int timestep);
|
||||||
|
|
||||||
@ -80,4 +85,5 @@ private:
|
|||||||
void AssignSolidBoundary(double *poisson_solid);
|
void AssignSolidBoundary(double *poisson_solid);
|
||||||
void Potential_Init(double *psi_init);
|
void Potential_Init(double *psi_init);
|
||||||
void ElectricField_LB_to_Phys(DoubleArray &Efield_reg);
|
void ElectricField_LB_to_Phys(DoubleArray &Efield_reg);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user