From 8ba42a9a9dd2630a651d2cfa2e0ebc7fb1843100 Mon Sep 17 00:00:00 2001
From: Adrian Kummerlaender
Date: Wed, 1 May 2019 21:06:52 +0200
Subject: Move refinement to contrib
---
src/contrib/refinement/grid2D.h | 169 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 169 insertions(+)
create mode 100644 src/contrib/refinement/grid2D.h
(limited to 'src/contrib/refinement/grid2D.h')
diff --git a/src/contrib/refinement/grid2D.h b/src/contrib/refinement/grid2D.h
new file mode 100644
index 0000000..51d19ce
--- /dev/null
+++ b/src/contrib/refinement/grid2D.h
@@ -0,0 +1,169 @@
+/* This file is part of the OpenLB library
+ *
+ * Copyright (C) 2019 Adrian Kummerländer
+ * E-mail contact: info@openlb.net
+ * The most recent release of OpenLB can be downloaded at
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef REFINEMENT_GRID_2D_H
+#define REFINEMENT_GRID_2D_H
+
+#include
+#include
+#include
+#include
+
+#include "core/unitConverter.h"
+#include "core/superLattice2D.h"
+#include "geometry/superGeometry2D.h"
+#include "geometry/cuboidGeometry2D.h"
+#include "geometry/superGeometry2D.h"
+#include "communication/loadBalancer.h"
+#include "functors/analytical/indicator/indicatorF2D.h"
+#include "utilities/functorPtr.h"
+#include "utilities/namedType.h"
+
+namespace olb {
+
+
+template class FineCoupler2D;
+template class CoarseCoupler2D;
+template class RefiningGrid2D;
+
+template class sOnLatticeBoundaryCondition2D;
+template class sOffLatticeBoundaryCondition2D;
+
+template
+using RelaxationTime = utilities::NamedType;
+
+template
+using LatticeVelocity = utilities::NamedType;
+
+template
+struct Characteristics {
+ Characteristics(T l, T u, T nu, T rho):
+ length(l),
+ velocity(u),
+ viscosity(nu),
+ density(rho) { }
+
+ Characteristics(int Re):
+ Characteristics(1.0, 1.0, 1.0/Re, 1.0) { }
+
+ const T length;
+ const T velocity;
+ const T viscosity;
+ const T density;
+};
+
+
+template
+class Grid2D {
+protected:
+ FunctorPtr> _domainF;
+ const Characteristics _characteristics;
+
+ std::unique_ptr> _converter;
+ std::unique_ptr> _cuboids;
+ std::unique_ptr> _balancer;
+ std::unique_ptr> _geometry;
+ std::unique_ptr> _lattice;
+
+ std::vector>> _dynamics;
+ std::vector>> _onLatticeBoundaryConditions;
+ std::vector>> _offLatticeBoundaryConditions;
+
+ std::vector>> _fineGrids;
+
+ std::vector>> _fineCouplers;
+ std::vector>> _coarseCouplers;
+
+public:
+ Grid2D(FunctorPtr>&& domainF,
+ RelaxationTime tau,
+ int resolution,
+ Characteristics characteristics);
+ Grid2D(FunctorPtr>&& domainF,
+ LatticeVelocity latticeVelocity,
+ int resolution,
+ Characteristics characteristics);
+
+ Grid2D(FunctorPtr>&& domainF, RelaxationTime tau, int resolution, int re);
+ Grid2D(FunctorPtr>&& domainF, LatticeVelocity uMax, int resolution, int re);
+
+ Characteristics getCharacteristics() const;
+
+ UnitConverter& getConverter();
+ CuboidGeometry2D& getCuboidGeometry();
+ LoadBalancer& getLoadBalancer();
+ SuperGeometry2D& getSuperGeometry();
+ SuperLattice2D& getSuperLattice();
+
+ Dynamics& addDynamics(std::unique_ptr>&& dynamics);
+ sOnLatticeBoundaryCondition2D& getOnLatticeBoundaryCondition();
+ sOffLatticeBoundaryCondition2D& getOffLatticeBoundaryCondition();
+
+ void collideAndStream();
+
+ FineCoupler2D& addFineCoupling(
+ Grid2D& fineGrid, Vector origin, Vector extend);
+ CoarseCoupler2D& addCoarseCoupling(
+ Grid2D& fineGrid, Vector origin, Vector extend);
+
+ Vector alignOriginToGrid(Vector physR) const;
+ Vector alignExtendToGrid(Vector physR) const;
+
+ RefiningGrid2D& refine(Vector origin, Vector extend, bool addCouplers=true);
+
+ void forEachGrid(std::function&)>&& f);
+ void forEachGrid(const std::string& id, std::function&,const std::string&)>&& f);
+
+ /// Returns the finest grid representing a physical position
+ /**
+ * Only works if pos is actually contained in a node of the refinement tree.
+ **/
+ Grid2D& locate(Vector pos);
+
+ std::size_t getActiveVoxelN() const;
+
+};
+
+template
+class RefiningGrid2D : public Grid2D {
+private:
+ const Vector _origin;
+ const Vector _extend;
+
+ Grid2D& _parentGrid;
+
+public:
+ RefiningGrid2D(Grid2D& parentGrid, Vector origin, Vector extend);
+
+ Vector getOrigin() const;
+ Vector getExtend() const;
+
+ /// Indicates the subdomain of the coarse grid rendered moot by refinement
+ std::unique_ptr> getRefinedOverlap() const;
+
+};
+
+
+}
+
+#endif
--
cgit v1.2.3