summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2019-01-11 10:26:17 +0100
committerAdrian Kummerlaender2019-06-24 15:17:09 +0200
commit5a6c48a6d8ac139dbed3088e0e397cbb42a1f480 (patch)
tree3eb8efcabdb75aa3b2a4b7c6b6153123af45466a
parent946cb3702e6baacec1faaeab9ad66dfd99320b55 (diff)
downloadgrid_refinement_openlb-5a6c48a6d8ac139dbed3088e0e397cbb42a1f480.tar
grid_refinement_openlb-5a6c48a6d8ac139dbed3088e0e397cbb42a1f480.tar.gz
grid_refinement_openlb-5a6c48a6d8ac139dbed3088e0e397cbb42a1f480.tar.bz2
grid_refinement_openlb-5a6c48a6d8ac139dbed3088e0e397cbb42a1f480.tar.xz
grid_refinement_openlb-5a6c48a6d8ac139dbed3088e0e397cbb42a1f480.zip
Move distribution scaling factor to Coupler2D
Scaling factor is specific to the refinement method implemented by the coupler.
-rw-r--r--apps/adrian/poiseuille2d/poiseuille2d.cpp4
-rw-r--r--src/refinement/coupler2D.h3
-rw-r--r--src/refinement/coupler2D.hh30
-rw-r--r--src/refinement/grid2D.h5
-rw-r--r--src/refinement/grid2D.hh14
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<T,2> wantedFineExtend {3.0, 1.5};
- const Vector<T,2> fineOrigin = coarseGrid->alignLocationToGrid({0.8, (ly-wantedFineExtend[1])/2});
+ const Vector<T,2> fineOrigin = coarseGrid->alignOriginToGrid({0.8, (ly-wantedFineExtend[1])/2});
const Vector<T,2> fineExtend = coarseGrid->alignExtendToGrid(wantedFineExtend);
auto fineGrid = &coarseGrid->refine(fineOrigin, fineExtend);
@@ -222,7 +222,7 @@ int main(int argc, char* argv[])
createLocalBoundaryCondition2D<T, DESCRIPTOR>(fineSBoundaryCondition);
const Vector<T,2> wantedFineExtend2 {0.6, 0.4};
- const Vector<T,2> fineOrigin2 = fineGrid->alignLocationToGrid({1.05, (ly-wantedFineExtend2[1])/2});
+ const Vector<T,2> fineOrigin2 = fineGrid->alignOriginToGrid({1.05, (ly-wantedFineExtend2[1])/2});
const Vector<T,2> 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<int,3>& getFineLatticeR(int y) const;
const Vector<int,3>& getCoarseLatticeR(int y) const;
+ T getScalingFactor() const;
+ T getInvScalingFactor() const;
+
private:
std::vector<Vector<int,3>> _coarseLatticeR;
std::vector<Vector<int,3>> _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 <typename T, template<typename> class DESCRIPTOR>
+T Coupler2D<T,DESCRIPTOR>::getScalingFactor() const
+{
+ return 4. - _coarse.getConverter().getLatticeRelaxationFrequency();
+}
+
+template <typename T, template<typename> class DESCRIPTOR>
+T Coupler2D<T,DESCRIPTOR>::getInvScalingFactor() const
+{
+ return 1./getScalingFactor();
+}
template <typename T, template<typename> class DESCRIPTOR>
const Vector<int,3>& Coupler2D<T,DESCRIPTOR>::getFineLatticeR(int y) const
@@ -175,7 +186,7 @@ void FineCoupler2D<T,DESCRIPTOR>::couple()
Cell<T,DESCRIPTOR> cell;
fineLattice.get(finePos, cell);
for (int iPop=0; iPop < DESCRIPTOR<T>::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<T,DESCRIPTOR>::couple()
_c2f_fneq[y+2][iPop]
);
- fineCell[iPop] = lbHelpers<T,DESCRIPTOR>::equilibrium(iPop, rho, u, uSqr) + this->_coarse.getScalingFactor() * fneq;
+ fineCell[iPop] = lbHelpers<T,DESCRIPTOR>::equilibrium(iPop, rho, u, uSqr) + this->getScalingFactor() * fneq;
}
fineLattice.set(finePos, fineCell);
@@ -249,7 +260,7 @@ void FineCoupler2D<T,DESCRIPTOR>::couple()
_c2f_fneq[1][iPop],
_c2f_fneq[2][iPop]
);
- fineCell[iPop] = lbHelpers<T,DESCRIPTOR>::equilibrium(iPop, rho, u, uSqr) + this->_coarse.getScalingFactor() * fneq;
+ fineCell[iPop] = lbHelpers<T,DESCRIPTOR>::equilibrium(iPop, rho, u, uSqr) + this->getScalingFactor() * fneq;
}
fineLattice.set(finePos, fineCell);
@@ -284,7 +295,7 @@ void FineCoupler2D<T,DESCRIPTOR>::couple()
_c2f_fneq[this->_coarseSize-2][iPop],
_c2f_fneq[this->_coarseSize-3][iPop]
);
- fineCell[iPop] = lbHelpers<T,DESCRIPTOR>::equilibrium(iPop, rho, u, uSqr) + this->_coarse.getScalingFactor() * fneq;
+ fineCell[iPop] = lbHelpers<T,DESCRIPTOR>::equilibrium(iPop, rho, u, uSqr) + this->getScalingFactor() * fneq;
}
fineLattice.set(finePos, fineCell);
@@ -294,14 +305,15 @@ void FineCoupler2D<T,DESCRIPTOR>::couple()
template <typename T, template<typename> class DESCRIPTOR>
void computeRestrictedFneq(const SuperLattice2D<T,DESCRIPTOR>& lattice,
- Vector<int,3> pos,
+ Vector<int,3> latticeR,
T restrictedFneq[DESCRIPTOR<T>::q])
{
for (int iPop=0; iPop < DESCRIPTOR<T>::q; ++iPop) {
- T fNeq[DESCRIPTOR<T>::q] {};
+ const auto neighbor = latticeR + Vector<int,3>{0, DESCRIPTOR<T>::c[iPop][0], DESCRIPTOR<T>::c[iPop][1]};
Cell<T,DESCRIPTOR> cell;
- const Vector<int,3> neighborPos {pos[0], pos[1] + DESCRIPTOR<T>::c[iPop][0], pos[2] + DESCRIPTOR<T>::c[iPop][1]};
- lattice.get(neighborPos, cell);
+ lattice.get(neighbor, cell);
+
+ T fNeq[DESCRIPTOR<T>::q] {};
lbHelpers<T,DESCRIPTOR>::computeFneq(cell, fNeq);
for (int jPop=0; jPop < DESCRIPTOR<T>::q; ++jPop) {
@@ -352,7 +364,7 @@ void CoarseCoupler2D<T,DESCRIPTOR>::couple()
coarseLattice.get(coarsePos, coarseCell);
for (int iPop=0; iPop < DESCRIPTOR<T>::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<T>& getSuperGeometry();
SuperLattice2D<T,DESCRIPTOR>& getSuperLattice();
- T getScalingFactor();
- T getInvScalingFactor();
-
void collideAndStream();
FineCoupler2D<T,DESCRIPTOR>& addFineCoupling(
@@ -76,7 +73,7 @@ public:
CoarseCoupler2D<T,DESCRIPTOR>& addCoarseCoupling(
Grid2D<T,DESCRIPTOR>& fineGrid, Vector<T,2> origin, Vector<T,2> extend);
- Vector<T,2> alignLocationToGrid(Vector<T,2> physR) const;
+ Vector<T,2> alignOriginToGrid(Vector<T,2> physR) const;
Vector<T,2> alignExtendToGrid(Vector<T,2> physR) const;
Grid2D<T,DESCRIPTOR>& refine(IndicatorF2D<T>& 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
@@ -104,18 +104,6 @@ SuperLattice2D<T,DESCRIPTOR>& Grid2D<T,DESCRIPTOR>::getSuperLattice()
}
template <typename T, template<typename> class DESCRIPTOR>
-T Grid2D<T,DESCRIPTOR>::getScalingFactor()
-{
- return 4. - _converter->getLatticeRelaxationFrequency();
-}
-
-template <typename T, template<typename> class DESCRIPTOR>
-T Grid2D<T,DESCRIPTOR>::getInvScalingFactor()
-{
- return 1./getScalingFactor();
-}
-
-template <typename T, template<typename> class DESCRIPTOR>
void Grid2D<T,DESCRIPTOR>::collideAndStream()
{
for ( auto& fineCoupler : _fineCouplers ) {
@@ -181,7 +169,7 @@ Grid2D<T,DESCRIPTOR>& Grid2D<T,DESCRIPTOR>::refine(IndicatorF2D<T>& domainF)
}
template <typename T, template<typename> class DESCRIPTOR>
-Vector<T,2> Grid2D<T,DESCRIPTOR>::alignLocationToGrid(Vector<T,2> physR) const
+Vector<T,2> Grid2D<T,DESCRIPTOR>::alignOriginToGrid(Vector<T,2> physR) const
{
Vector<int,3> latticeR{};
_cuboids->getLatticeR(physR, latticeR);