From d900d8c794bb9d50f528bc8e72ceb594fbc292c8 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Thu, 17 Jan 2019 13:37:26 +0100 Subject: Add named types to Grid2D constructor This allows for readable differentiation between constructor overloads. --- src/refinement/grid2D.h | 26 +++++++++++++++++++++++++- src/refinement/grid2D.hh | 44 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 67 insertions(+), 3 deletions(-) (limited to 'src/refinement') diff --git a/src/refinement/grid2D.h b/src/refinement/grid2D.h index 9a20544..f58a4ea 100644 --- a/src/refinement/grid2D.h +++ b/src/refinement/grid2D.h @@ -43,6 +43,29 @@ template class DESCRIPTOR> class FineCoupler2D; template class DESCRIPTOR> class CoarseCoupler2D; template class DESCRIPTOR> class RefiningGrid2D; +template +class NamedType { +private: + T _value; + +public: + explicit NamedType(const T& value): + _value(value) {} + explicit NamedType(T&& value): + _value(std::move(value)) {} + + operator T() const + { + return _value; + } +}; + +template +using RelaxationTime = NamedType; + +template +using LatticeVelocity = NamedType; + template class DESCRIPTOR> class Grid2D { protected: @@ -60,7 +83,8 @@ protected: std::vector>> _coarseCouplers; public: - Grid2D(FunctorPtr>&& domainF, int resolution, T tau, int re); + Grid2D(FunctorPtr>&& domainF, int resolution, RelaxationTime tau, int re); + Grid2D(FunctorPtr>&& domainF, int resolution, LatticeVelocity uMax, int re); UnitConverter& getConverter(); CuboidGeometry2D& getCuboidGeometry(); diff --git a/src/refinement/grid2D.hh b/src/refinement/grid2D.hh index 02fe351..2bf2f7f 100644 --- a/src/refinement/grid2D.hh +++ b/src/refinement/grid2D.hh @@ -34,7 +34,11 @@ namespace olb { template class DESCRIPTOR> -Grid2D::Grid2D(FunctorPtr>&& domainF, int resolution, T tau, int re): +Grid2D::Grid2D( + FunctorPtr>&& domainF, + int resolution, + RelaxationTime tau, + int re): _domainF(std::move(domainF)), _converter(new UnitConverterFromResolutionAndRelaxationTime( resolution, // resolution: number of voxels per charPhysL @@ -65,6 +69,42 @@ Grid2D::Grid2D(FunctorPtr>&& domainF, int resoluti _converter->print(); } +template class DESCRIPTOR> +Grid2D::Grid2D( + FunctorPtr>&& domainF, + int resolution, + LatticeVelocity velocity, + int re): + _domainF(std::move(domainF)), + _converter(new UnitConverterFromResolutionAndLatticeVelocity( + resolution, // resolution: number of voxels per charPhysL + velocity, // maxLatticeVelocity + T{1}, // charPhysLength: reference length of simulation geometry + T{1}, // charPhysVelocity: maximal/highest expected velocity during simulation in __m / s__ + T{1./re}, // physViscosity: physical kinematic viscosity in __m^2 / s__ + T{1}, // physDensity: physical density in __kg / m^3__ + T{1})), + _cuboids(new CuboidGeometry2D( + *_domainF, + _converter->getConversionFactorLength(), +#ifdef PARALLEL_MODE_MPI + singleton::mpi().getSize() +#else + 1 +#endif + )), + _balancer(new HeuristicLoadBalancer( + *_cuboids)), + _geometry(new SuperGeometry2D( + *_cuboids, + *_balancer, + 2)), + _lattice(new SuperLattice2D( + *_geometry)) +{ + _converter->print(); +} + template class DESCRIPTOR> UnitConverter& Grid2D::getConverter() { @@ -209,7 +249,7 @@ RefiningGrid2D::RefiningGrid2D( Grid2D( std::unique_ptr>(new IndicatorCuboid2D(extend, origin)), 2*parentGrid.getConverter().getResolution(), - 2*parentGrid.getConverter().getLatticeRelaxationTime() - 0.5, + RelaxationTime(2*parentGrid.getConverter().getLatticeRelaxationTime() - 0.5), parentGrid.getConverter().getReynoldsNumber()), _origin(origin), _extend(extend), -- cgit v1.2.3