diff options
Diffstat (limited to 'src/refinement')
-rw-r--r-- | src/refinement/grid2D.h | 26 | ||||
-rw-r--r-- | src/refinement/grid2D.hh | 44 |
2 files changed, 67 insertions, 3 deletions
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 <typename T, template<typename> class DESCRIPTOR> class FineCoupler2D; template <typename T, template<typename> class DESCRIPTOR> class CoarseCoupler2D; template <typename T, template<typename> class DESCRIPTOR> class RefiningGrid2D; +template <typename T, typename Identificator> +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 <typename T> +using RelaxationTime = NamedType<T,struct NamedRelaxationTime>; + +template <typename T> +using LatticeVelocity = NamedType<T,struct NamedLatticeVelocity>; + template <typename T, template<typename> class DESCRIPTOR> class Grid2D { protected: @@ -60,7 +83,8 @@ protected: std::vector<std::unique_ptr<CoarseCoupler2D<T,DESCRIPTOR>>> _coarseCouplers; public: - Grid2D(FunctorPtr<IndicatorF2D<T>>&& domainF, int resolution, T tau, int re); + Grid2D(FunctorPtr<IndicatorF2D<T>>&& domainF, int resolution, RelaxationTime<T> tau, int re); + Grid2D(FunctorPtr<IndicatorF2D<T>>&& domainF, int resolution, LatticeVelocity<T> uMax, int re); UnitConverter<T,DESCRIPTOR>& getConverter(); CuboidGeometry2D<T>& 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 <typename T, template<typename> class DESCRIPTOR> -Grid2D<T,DESCRIPTOR>::Grid2D(FunctorPtr<IndicatorF2D<T>>&& domainF, int resolution, T tau, int re): +Grid2D<T,DESCRIPTOR>::Grid2D( + FunctorPtr<IndicatorF2D<T>>&& domainF, + int resolution, + RelaxationTime<T> tau, + int re): _domainF(std::move(domainF)), _converter(new UnitConverterFromResolutionAndRelaxationTime<T,DESCRIPTOR>( resolution, // resolution: number of voxels per charPhysL @@ -66,6 +70,42 @@ Grid2D<T,DESCRIPTOR>::Grid2D(FunctorPtr<IndicatorF2D<T>>&& domainF, int resoluti } template <typename T, template<typename> class DESCRIPTOR> +Grid2D<T,DESCRIPTOR>::Grid2D( + FunctorPtr<IndicatorF2D<T>>&& domainF, + int resolution, + LatticeVelocity<T> velocity, + int re): + _domainF(std::move(domainF)), + _converter(new UnitConverterFromResolutionAndLatticeVelocity<T,DESCRIPTOR>( + 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<T>( + *_domainF, + _converter->getConversionFactorLength(), +#ifdef PARALLEL_MODE_MPI + singleton::mpi().getSize() +#else + 1 +#endif + )), + _balancer(new HeuristicLoadBalancer<T>( + *_cuboids)), + _geometry(new SuperGeometry2D<T>( + *_cuboids, + *_balancer, + 2)), + _lattice(new SuperLattice2D<T,DESCRIPTOR>( + *_geometry)) +{ + _converter->print(); +} + +template <typename T, template<typename> class DESCRIPTOR> UnitConverter<T,DESCRIPTOR>& Grid2D<T,DESCRIPTOR>::getConverter() { return *_converter; @@ -209,7 +249,7 @@ RefiningGrid2D<T,DESCRIPTOR>::RefiningGrid2D( Grid2D<T,DESCRIPTOR>( std::unique_ptr<IndicatorF2D<T>>(new IndicatorCuboid2D<T>(extend, origin)), 2*parentGrid.getConverter().getResolution(), - 2*parentGrid.getConverter().getLatticeRelaxationTime() - 0.5, + RelaxationTime<T>(2*parentGrid.getConverter().getLatticeRelaxationTime() - 0.5), parentGrid.getConverter().getReynoldsNumber()), _origin(origin), _extend(extend), |