I am looking for a bit of input/error checking of my code I have included just the relevant portions of code to the BCs and calling them from main.
I am looking to do the following:
CBBBBBBBBBBBBBBBBBBBBBBBBBc
X ---------------------------------------------O
X ---------------------------------------------O
X ---------------------------------------------O
X ---------------------------------------------O
CBBBBBBBBBBBBBBBBBBBBBBBBBc
c-corner node, boundary::outflow
C-corner node, boundary::freeslip
X- inlet with defined rho and vel [Velocity BC]
O- outlet with rho defined [Pressure BC]
B- defined density bounce back [Contact angle (sort of)]
So this setup works with out the following lines:
//Defines free slip at inlet corners
boundaryCondition.addExternalVelocityCornerPP( 0, 0, lattice, boundary::freeslip );
boundaryCondition.addExternalVelocityCornerPN( 0, ny-1, lattice, boundary::freeslip );
//Defines free slip at outlet corners
boundaryCondition.addExternalVelocityCornerNP( nx-1, 0, lattice, boundary::outflow );
boundaryCondition.addExternalVelocityCornerNN( nx-1, ny-1, lattice, boundary::outflow );
void BCSetup( MultiBlockLattice2D<T,DESCRIPTOR>& lattice,
OnLatticeBoundaryCondition2D<T,DESCRIPTOR>& boundaryCondition )
{
const plint gap = 1;
Box2D inlet(0,0, 1, ny-2);
Box2D outlet(nx-1,nx-1, 1, ny-2);
Box2D bottom(0,nx-1, 0,0);
Box2D top(0,nx-1, ny-1,ny-1);
//Defines interaction density at boundary for the bounceback collision
defineDynamics(lattice, bottom, new BounceBack<T, DESCRIPTOR>(solidRhoL) );
defineDynamics(lattice, top, new BounceBack<T, DESCRIPTOR>(solidRhoL) );
//
boundaryCondition.setVelocityConditionOnBlockBoundaries (lattice, inlet );
setBoundaryVelocity(lattice, inlet, inlet_vel);
//Sets density everywhere to RhoAll
setBoundaryDensity ( lattice, lattice.getBoundingBox(), RhoAll);
//sets the density just at the outlet to DeltaRho (establishing the parameter needed for the pressure bc)
boundaryCondition.setPressureConditionOnBlockBoundaries (lattice, outlet );
setBoundaryDensity ( lattice, outlet, DeltaRho );
//Defines free slip at inlet corners
boundaryCondition.addExternalVelocityCornerPP( 0, 0, lattice, boundary::freeslip );
boundaryCondition.addExternalVelocityCornerPN( 0, ny-1, lattice, boundary::freeslip );
//Defines free slip at outlet corners
boundaryCondition.addExternalVelocityCornerNP( nx-1, 0, lattice, boundary::outflow );
boundaryCondition.addExternalVelocityCornerNN( nx-1, ny-1, lattice, boundary::outflow );
}
int main(int argc, char *argv[])
{
MultiBlockLattice2D<T, DESCRIPTOR> lattice (
nx,ny, new ExternalMomentBGKdynamics<T, DESCRIPTOR>(omega));
OnLatticeBoundaryCondition2D<T,DESCRIPTOR>*
boundaryCondition = createInamuroBoundaryCondition2D<T,DESCRIPTOR>();
BCSetup(lattice, *boundaryCondition);
plint processorLevel = 1;
integrateProcessingFunctional (
new ShanChenSingleComponentProcessor2D<T,DESCRIPTOR> (
G, new interparticlePotential::PsiShanChen94<T>(psi0,rho0) ),
lattice.getBoundingBox(), lattice, processorLevel );
lattice.initialize();
for (int iT=0; iT<maxIter; ++iT) {
lattice.collideAndStream();
}
}
So my question is how to implement these corner nodes correctly?
Secondly am I implementing the other BCs the way I think I am?
~Thank you!