From 5a6c48a6d8ac139dbed3088e0e397cbb42a1f480 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Fri, 11 Jan 2019 10:26:17 +0100 Subject: Move distribution scaling factor to Coupler2D Scaling factor is specific to the refinement method implemented by the coupler. --- apps/adrian/poiseuille2d/poiseuille2d.cpp | 4 ++-- src/refinement/coupler2D.h | 3 +++ src/refinement/coupler2D.hh | 30 +++++++++++++++++++++--------- src/refinement/grid2D.h | 5 +---- src/refinement/grid2D.hh | 14 +------------- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/apps/adrian/poiseuille2d/poiseuille2d.cpp b/apps/adrian/poiseuille2d/poiseuille2d.cpp index b16a19b..e71e51e 100644 --- a/apps/adrian/poiseuille2d/poiseuille2d.cpp +++ b/apps/adrian/poiseuille2d/poiseuille2d.cpp @@ -188,7 +188,7 @@ int main(int argc, char* argv[]) prepareGeometry(coarseGrid->getConverter(), coarseGrid->getSuperGeometry()); const Vector wantedFineExtend {3.0, 1.5}; - const Vector fineOrigin = coarseGrid->alignLocationToGrid({0.8, (ly-wantedFineExtend[1])/2}); + const Vector fineOrigin = coarseGrid->alignOriginToGrid({0.8, (ly-wantedFineExtend[1])/2}); const Vector fineExtend = coarseGrid->alignExtendToGrid(wantedFineExtend); auto fineGrid = &coarseGrid->refine(fineOrigin, fineExtend); @@ -222,7 +222,7 @@ int main(int argc, char* argv[]) createLocalBoundaryCondition2D(fineSBoundaryCondition); const Vector wantedFineExtend2 {0.6, 0.4}; - const Vector fineOrigin2 = fineGrid->alignLocationToGrid({1.05, (ly-wantedFineExtend2[1])/2}); + const Vector fineOrigin2 = fineGrid->alignOriginToGrid({1.05, (ly-wantedFineExtend2[1])/2}); const Vector fineExtend2 = fineGrid->alignExtendToGrid(wantedFineExtend2); auto fineGrid2 = &fineGrid->refine(fineOrigin2, fineExtend2); diff --git a/src/refinement/coupler2D.h b/src/refinement/coupler2D.h index e911575..60a5cab 100644 --- a/src/refinement/coupler2D.h +++ b/src/refinement/coupler2D.h @@ -44,6 +44,9 @@ protected: const Vector& getFineLatticeR(int y) const; const Vector& getCoarseLatticeR(int y) const; + T getScalingFactor() const; + T getInvScalingFactor() const; + private: std::vector> _coarseLatticeR; std::vector> _fineLatticeR; diff --git a/src/refinement/coupler2D.hh b/src/refinement/coupler2D.hh index d599728..1d773f3 100644 --- a/src/refinement/coupler2D.hh +++ b/src/refinement/coupler2D.hh @@ -30,6 +30,17 @@ namespace olb { +template class DESCRIPTOR> +T Coupler2D::getScalingFactor() const +{ + return 4. - _coarse.getConverter().getLatticeRelaxationFrequency(); +} + +template class DESCRIPTOR> +T Coupler2D::getInvScalingFactor() const +{ + return 1./getScalingFactor(); +} template class DESCRIPTOR> const Vector& Coupler2D::getFineLatticeR(int y) const @@ -175,7 +186,7 @@ void FineCoupler2D::couple() Cell cell; fineLattice.get(finePos, cell); for (int iPop=0; iPop < DESCRIPTOR::q; ++iPop) { - cell[iPop] = fEq[iPop] + this->_coarse.getScalingFactor() * _c2f_fneq[y][iPop]; + cell[iPop] = fEq[iPop] + this->getScalingFactor() * _c2f_fneq[y][iPop]; } fineLattice.set(finePos, cell); } @@ -214,7 +225,7 @@ void FineCoupler2D::couple() _c2f_fneq[y+2][iPop] ); - fineCell[iPop] = lbHelpers::equilibrium(iPop, rho, u, uSqr) + this->_coarse.getScalingFactor() * fneq; + fineCell[iPop] = lbHelpers::equilibrium(iPop, rho, u, uSqr) + this->getScalingFactor() * fneq; } fineLattice.set(finePos, fineCell); @@ -249,7 +260,7 @@ void FineCoupler2D::couple() _c2f_fneq[1][iPop], _c2f_fneq[2][iPop] ); - fineCell[iPop] = lbHelpers::equilibrium(iPop, rho, u, uSqr) + this->_coarse.getScalingFactor() * fneq; + fineCell[iPop] = lbHelpers::equilibrium(iPop, rho, u, uSqr) + this->getScalingFactor() * fneq; } fineLattice.set(finePos, fineCell); @@ -284,7 +295,7 @@ void FineCoupler2D::couple() _c2f_fneq[this->_coarseSize-2][iPop], _c2f_fneq[this->_coarseSize-3][iPop] ); - fineCell[iPop] = lbHelpers::equilibrium(iPop, rho, u, uSqr) + this->_coarse.getScalingFactor() * fneq; + fineCell[iPop] = lbHelpers::equilibrium(iPop, rho, u, uSqr) + this->getScalingFactor() * fneq; } fineLattice.set(finePos, fineCell); @@ -294,14 +305,15 @@ void FineCoupler2D::couple() template class DESCRIPTOR> void computeRestrictedFneq(const SuperLattice2D& lattice, - Vector pos, + Vector latticeR, T restrictedFneq[DESCRIPTOR::q]) { for (int iPop=0; iPop < DESCRIPTOR::q; ++iPop) { - T fNeq[DESCRIPTOR::q] {}; + const auto neighbor = latticeR + Vector{0, DESCRIPTOR::c[iPop][0], DESCRIPTOR::c[iPop][1]}; Cell cell; - const Vector neighborPos {pos[0], pos[1] + DESCRIPTOR::c[iPop][0], pos[2] + DESCRIPTOR::c[iPop][1]}; - lattice.get(neighborPos, cell); + lattice.get(neighbor, cell); + + T fNeq[DESCRIPTOR::q] {}; lbHelpers::computeFneq(cell, fNeq); for (int jPop=0; jPop < DESCRIPTOR::q; ++jPop) { @@ -352,7 +364,7 @@ void CoarseCoupler2D::couple() coarseLattice.get(coarsePos, coarseCell); for (int iPop=0; iPop < DESCRIPTOR::q; ++iPop) { - coarseCell[iPop] = fEq[iPop] + this->_coarse.getInvScalingFactor() * fNeq[iPop]; + coarseCell[iPop] = fEq[iPop] + this->getInvScalingFactor() * fNeq[iPop]; } coarseLattice.set(coarsePos, coarseCell); diff --git a/src/refinement/grid2D.h b/src/refinement/grid2D.h index cc6bb62..1d15170 100644 --- a/src/refinement/grid2D.h +++ b/src/refinement/grid2D.h @@ -66,9 +66,6 @@ public: SuperGeometry2D& getSuperGeometry(); SuperLattice2D& getSuperLattice(); - T getScalingFactor(); - T getInvScalingFactor(); - void collideAndStream(); FineCoupler2D& addFineCoupling( @@ -76,7 +73,7 @@ public: CoarseCoupler2D& addCoarseCoupling( Grid2D& fineGrid, Vector origin, Vector extend); - Vector alignLocationToGrid(Vector physR) const; + Vector alignOriginToGrid(Vector physR) const; Vector alignExtendToGrid(Vector physR) const; Grid2D& refine(IndicatorF2D& domainF); diff --git a/src/refinement/grid2D.hh b/src/refinement/grid2D.hh index 59e23ce..99a2563 100644 --- a/src/refinement/grid2D.hh +++ b/src/refinement/grid2D.hh @@ -103,18 +103,6 @@ SuperLattice2D& Grid2D::getSuperLattice() return *_lattice; } -template class DESCRIPTOR> -T Grid2D::getScalingFactor() -{ - return 4. - _converter->getLatticeRelaxationFrequency(); -} - -template class DESCRIPTOR> -T Grid2D::getInvScalingFactor() -{ - return 1./getScalingFactor(); -} - template class DESCRIPTOR> void Grid2D::collideAndStream() { @@ -181,7 +169,7 @@ Grid2D& Grid2D::refine(IndicatorF2D& domainF) } template class DESCRIPTOR> -Vector Grid2D::alignLocationToGrid(Vector physR) const +Vector Grid2D::alignOriginToGrid(Vector physR) const { Vector latticeR{}; _cuboids->getLatticeR(physR, latticeR); -- cgit v1.2.3