From 6aa13fba80e2ca2c85f3af42e11356d2562584a8 Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Thu, 1 Aug 2024 20:22:47 +0200 Subject: [PATCH 01/24] [disc][pq1bubble] Generalize grid geometry to allow for hybrid scheme Co-authored-by: Timo Koch <timokoch@uio.no> --- .../pq1bubble/fvgridgeometry.hh | 52 +++- .../pq1bubble/geometryhelper.hh | 222 +++++++++++++++++- 2 files changed, 267 insertions(+), 7 deletions(-) diff --git a/dumux/discretization/pq1bubble/fvgridgeometry.hh b/dumux/discretization/pq1bubble/fvgridgeometry.hh index f3d60a7fc9..0f8d94c232 100644 --- a/dumux/discretization/pq1bubble/fvgridgeometry.hh +++ b/dumux/discretization/pq1bubble/fvgridgeometry.hh @@ -16,6 +16,7 @@ #include <utility> #include <unordered_map> +#include <type_traits> #include <dune/grid/common/mcmgmapper.hh> @@ -38,9 +39,20 @@ namespace Dumux { namespace Detail { +template<class T> +using EnableHybridCVFE + = typename T::EnableHybridCVFE; + +template<class T> +static constexpr bool enablesHybridCVFE + = Dune::Std::detected_or_t<std::false_type, EnableHybridCVFE, T>{}; + template<class GV, class T> using PQ1BubbleGeometryHelper_t = Dune::Std::detected_or_t< - Dumux::PQ1BubbleGeometryHelper<GV, typename T::SubControlVolume, typename T::SubControlVolumeFace>, + std::conditional_t<enablesHybridCVFE<T>, + Dumux::HybridPQ1BubbleGeometryHelper<GV, typename T::SubControlVolume, typename T::SubControlVolumeFace>, + Dumux::PQ1BubbleGeometryHelper<GV, typename T::SubControlVolume, typename T::SubControlVolumeFace> + >, SpecifiesGeometryHelper, T >; @@ -80,6 +92,17 @@ struct PQ1BubbleDefaultGridGeometryTraits using LocalView = PQ1BubbleFVElementGeometry<GridGeometry, enableCache>; }; +/*! + * \ingroup PQ1BubbleDiscretization + * \brief The default traits for the hybrid pq1bubble finite volume grid geometry + * Defines the scv and scvf types and the mapper types + * \tparam the grid view type + */ +template<class BaseTraits> +struct HybridPQ1BubbleCVFEGridGeometryTraits +: public BaseTraits +{ using EnableHybridCVFE = std::true_type; }; + /*! * \ingroup PQ1BubbleDiscretization * \brief Base class for the finite volume geometry vector for pq1bubble schemes @@ -105,6 +128,8 @@ class PQ1BubbleFVGridGeometry static_assert(dim > 1, "Only implemented for dim > 1"); + static constexpr bool enableHybridCVFE = Detail::enablesHybridCVFE<Traits>; + public: //! export the discretization method this geometry belongs to using DiscretizationMethod = DiscretizationMethods::PQ1Bubble; @@ -198,7 +223,6 @@ public: { return { gg.cache_ }; } private: - class PQ1BubbleGridGeometryCache { friend class PQ1BubbleFVGridGeometry; @@ -282,9 +306,12 @@ private: // instantiate the geometry helper GeometryHelper geometryHelper(elementGeometry); - numScv_ += geometryHelper.numScv(); + // ToDo: Currently we still create scvs also for Fe dofs + numScv_ += geometryHelper.numElementDofs(); // construct the sub control volumes - cache_.scvs_[eIdx].resize(geometryHelper.numScv()); + cache_.scvs_[eIdx].resize(geometryHelper.numElementDofs()); + + // Scvs related to control volumes for (LocalIndexType scvLocalIdx = 0; scvLocalIdx < geometryHelper.numScv(); ++scvLocalIdx) { auto corners = geometryHelper.getScvCorners(scvLocalIdx); @@ -299,6 +326,23 @@ private: ); } + // Hybrid scvs, i.e. Fem dofs + if constexpr (enableHybridCVFE) + { + // We add the additional Fe dof + // ToDo: get rid of building scvs for Fe dofs + LocalIndexType scvLocalIdx = geometryHelper.numScv(); + cache_.scvs_[eIdx][scvLocalIdx] = SubControlVolume( + elementGeometry.volume(), + elementGeometry.center(), + elementGeometry.center(), + scvLocalIdx, + eIdx, + geometryHelper.dofIndex(this->dofMapper(), element, scvLocalIdx), + true + ); + } + // construct the sub control volume faces numScvf_ += geometryHelper.numInteriorScvf(); cache_.scvfs_[eIdx].resize(geometryHelper.numInteriorScvf()); diff --git a/dumux/discretization/pq1bubble/geometryhelper.hh b/dumux/discretization/pq1bubble/geometryhelper.hh index 47a4e36e0b..3745becc83 100644 --- a/dumux/discretization/pq1bubble/geometryhelper.hh +++ b/dumux/discretization/pq1bubble/geometryhelper.hh @@ -364,10 +364,22 @@ public: ); } + //! number of element dofs + std::size_t numElementDofs() const + { + return numScv(); + } + + //! number of hybrid dofs + static std::size_t numHybridDofs(Dune::GeometryType type) + { + return 0; + } + template<class DofMapper> auto dofIndex(const DofMapper& dofMapper, const Element& element, unsigned int localScvIdx) const { - if (localScvIdx < numScv()-1) + if (localScvIdx < numElementDofs()-1) return dofMapper.subIndex(element, localScvIdx, dim); else return dofMapper.index(element); @@ -375,7 +387,7 @@ public: GlobalPosition dofPosition(unsigned int localScvIdx) const { - if (localScvIdx < numScv()-1) + if (localScvIdx < numElementDofs()-1) return geo_.corner(localScvIdx); else return geo_.center(); @@ -391,7 +403,7 @@ public: }; else return { - static_cast<LocalIndexType>(numScv()-1), + static_cast<LocalIndexType>(numElementDofs()-1), static_cast<LocalIndexType>(localScvfIndex-numEdges) }; } @@ -438,6 +450,210 @@ private: Dumux::BoxGeometryHelper<GridView, dim, ScvType, ScvfType> boxHelper_; }; +template <class GridView, class ScvType, class ScvfType> +class HybridPQ1BubbleGeometryHelper +{ + using Scalar = typename GridView::ctype; + using GlobalPosition = typename Dune::FieldVector<Scalar, GridView::dimensionworld>; + using ScvCornerStorage = typename ScvType::Traits::CornerStorage; + using ScvfCornerStorage = typename ScvfType::Traits::CornerStorage; + using LocalIndexType = typename ScvType::Traits::LocalIndexType; + + using Element = typename GridView::template Codim<0>::Entity; + using Intersection = typename GridView::Intersection; + + static constexpr auto dim = GridView::dimension; + static constexpr auto dimWorld = GridView::dimensionworld; +public: + + HybridPQ1BubbleGeometryHelper(const typename Element::Geometry& geometry) + : geo_(geometry) + , boxHelper_(geometry) + {} + + //! Create a vector with the scv corners + ScvCornerStorage getScvCorners(unsigned int localScvIdx) const + { + // proceed according to number of corners of the element + const auto numBoxScv = boxHelper_.numScv(); + // reuse box geometry helper for the corner scvs + if (localScvIdx < numBoxScv) + return boxHelper_.getScvCorners(localScvIdx); + + DUNE_THROW(Dune::NotImplemented, "PQ1Bubble scv corners call for hybrid dofs"); + } + + Dune::GeometryType getScvGeometryType(unsigned int localScvIdx) const + { + // proceed according to number of corners of the element + const auto numBoxScv = boxHelper_.numScv(); + + if (localScvIdx < numBoxScv) + return Dune::GeometryTypes::cube(dim); + + DUNE_THROW(Dune::NotImplemented, "PQ1Bubble scv geometry call for hybrid dofs"); + } + + //! Create a vector with the corners of sub control volume faces + ScvfCornerStorage getScvfCorners(unsigned int localScvfIdx) const + { + // proceed according to number of corners + const auto numBoxScvf = boxHelper_.numInteriorScvf(); + // reuse box geometry helper for the corner scvs + if (localScvfIdx < numBoxScvf) + return boxHelper_.getScvfCorners(localScvfIdx); + + DUNE_THROW(Dune::NotImplemented, "PQ1Bubble scvf corners call for hybrid dofs"); + } + + Dune::GeometryType getInteriorScvfGeometryType(unsigned int localScvfIdx) const + { + const auto numBoxScvf = boxHelper_.numInteriorScvf(); + if (localScvfIdx < numBoxScvf) + return Dune::GeometryTypes::cube(dim-1); + + DUNE_THROW(Dune::NotImplemented, "PQ1Bubble interior scvf geometry type call for hybrid dofs"); + } + + //! Create the sub control volume face geometries on the boundary + ScvfCornerStorage getBoundaryScvfCorners(unsigned int localFacetIndex, + unsigned int indexInFacet) const + { + return boxHelper_.getBoundaryScvfCorners(localFacetIndex, indexInFacet); + } + + Dune::GeometryType getBoundaryScvfGeometryType(unsigned int localScvfIdx) const + { + return Dune::GeometryTypes::cube(dim-1); + } + + template<int d = dimWorld, std::enable_if_t<(d==3), int> = 0> + GlobalPosition normal(const ScvfCornerStorage& p, const std::array<LocalIndexType, 2>& scvPair) + { + auto normal = Dumux::crossProduct(p[1]-p[0], p[2]-p[0]); + normal /= normal.two_norm(); + + GlobalPosition v = dofPosition(scvPair[1]) - dofPosition(scvPair[0]); + + const auto s = v*normal; + if (std::signbit(s)) + normal *= -1; + + return normal; + } + + template<int d = dimWorld, std::enable_if_t<(d==2), int> = 0> + GlobalPosition normal(const ScvfCornerStorage& p, const std::array<LocalIndexType, 2>& scvPair) + { + //! obtain normal vector by 90° counter-clockwise rotation of t + const auto t = p[1] - p[0]; + GlobalPosition normal({-t[1], t[0]}); + normal /= normal.two_norm(); + + GlobalPosition v = dofPosition(scvPair[1]) - dofPosition(scvPair[0]); + + const auto s = v*normal; + if (std::signbit(s)) + normal *= -1; + + return normal; + } + + //! the wrapped element geometry + const typename Element::Geometry& elementGeometry() const + { return geo_; } + + //! number of interior sub control volume faces + std::size_t numInteriorScvf() const + { + return boxHelper_.numInteriorScvf(); + } + + //! number of boundary sub control volume faces for face localFacetIndex + std::size_t numBoundaryScvf(unsigned int localFacetIndex) const + { + return referenceElement(geo_).size(localFacetIndex, 1, dim); + } + + //! number of sub control volumes (number of codim-1 entities) + std::size_t numScv() const + { + return boxHelper_.numScv(); + } + + //! get scv volume + Scalar scvVolume(unsigned int localScvIdx, const ScvCornerStorage& p) const + { + const auto scvType = getScvGeometryType(localScvIdx); + + return Dumux::convexPolytopeVolume<dim>( + scvType, + [&](unsigned int i){ return p[i]; } + ); + } + + //! number of element dofs + std::size_t numElementDofs() const + { + return boxHelper_.numScv() + 1; + } + + //! number of hybrid dofs + static std::size_t numHybridDofs(Dune::GeometryType type) + { + return 1; + } + + template<class DofMapper> + auto dofIndex(const DofMapper& dofMapper, const Element& element, unsigned int localScvIdx) const + { + if (localScvIdx < numElementDofs()-1) + return dofMapper.subIndex(element, localScvIdx, dim); + else + return dofMapper.index(element); + } + + GlobalPosition dofPosition(unsigned int localScvIdx) const + { + if (localScvIdx < numElementDofs()-1) + return geo_.corner(localScvIdx); + else + return geo_.center(); + } + + std::array<LocalIndexType, 2> getScvPairForScvf(unsigned int localScvfIndex) const + { + const auto numEdges = referenceElement(geo_).size(dim-1); + if (localScvfIndex < numEdges) + return { + static_cast<LocalIndexType>(referenceElement(geo_).subEntity(localScvfIndex, dim-1, 0, dim)), + static_cast<LocalIndexType>(referenceElement(geo_).subEntity(localScvfIndex, dim-1, 1, dim)) + }; + + DUNE_THROW(Dune::NotImplemented, "PQ1Bubble scv pair call for hybrid dofs"); + } + + std::array<LocalIndexType, 2> getScvPairForBoundaryScvf(unsigned int localFacetIndex, unsigned int localIsScvfIndex) const + { + const LocalIndexType insideScvIdx + = static_cast<LocalIndexType>(referenceElement(geo_).subEntity(localFacetIndex, 1, localIsScvfIndex, dim)); + return { insideScvIdx, insideScvIdx }; + } + + bool isOverlappingScvf(unsigned int localScvfIndex) const + { return false; } + + bool isOverlappingBoundaryScvf(unsigned int localFacetIndex) const + { return false; } + + bool isOverlappingScv(unsigned int localScvIndex) const + { return false; } + +private: + const typename Element::Geometry& geo_; //!< Reference to the element geometry + Dumux::BoxGeometryHelper<GridView, dim, ScvType, ScvfType> boxHelper_; +}; + } // end namespace Dumux #endif -- GitLab From 1255156d7595afbdefc04c95645a59539791ac0b Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Thu, 1 Aug 2024 20:24:26 +0200 Subject: [PATCH 02/24] [disc][pq1bubble] Allow to iterate over dof subsets Co-authored-by: Timo Koch <timokoch@uio.no> --- .../pq1bubble/fvelementgeometry.hh | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/dumux/discretization/pq1bubble/fvelementgeometry.hh b/dumux/discretization/pq1bubble/fvelementgeometry.hh index e72802dc51..326fdfaa8c 100644 --- a/dumux/discretization/pq1bubble/fvelementgeometry.hh +++ b/dumux/discretization/pq1bubble/fvelementgeometry.hh @@ -16,8 +16,10 @@ #include <optional> #include <utility> +#include <ranges> #include <dune/common/exceptions.hh> +#include <dune/common/rangeutilities.hh> #include <dune/geometry/type.hh> #include <dune/localfunctions/lagrange/pqkfactory.hh> @@ -43,6 +45,7 @@ class PQ1BubbleFVElementGeometry; template<class GG> class PQ1BubbleFVElementGeometry<GG, true> { + using ThisType = PQ1BubbleFVElementGeometry<GG, true>; using GridView = typename GG::GridView; static constexpr int dim = GridView::dimension; static constexpr int dimWorld = GridView::dimensionworld; @@ -52,6 +55,25 @@ class PQ1BubbleFVElementGeometry<GG, true> using FeLocalBasis = typename GG::FeCache::FiniteElementType::Traits::LocalBasisType; using GGCache = typename GG::Cache; using GeometryHelper = typename GGCache::GeometryHelper; + + class LocalDof + { + public: + LocalDof(std::size_t dofIndex) : dofIndex_(dofIndex) {} + std::size_t index() const { return dofIndex_; } + private: + std::size_t dofIndex_; + }; + + class FVLocalDof : public LocalDof + { + public: + FVLocalDof(std::size_t dofIndex, const ThisType& fvGeometry) + : LocalDof(dofIndex), fvGeometry_(fvGeometry) {} + const typename GG::SubControlVolume& scv() const { return fvGeometry_.scv(this->index()); } + private: + const ThisType& fvGeometry_; + }; public: //! export the element type using Element = typename GridView::template Codim<0>::Entity; @@ -95,6 +117,33 @@ public: return Dune::IteratorRange<Iter>(s.begin(), s.end()); } + //! iterate over dof indices that belong to dofs associated with control volumes + friend inline auto fvLocalDofs(const PQ1BubbleFVElementGeometry& fvGeometry) + { + return Dune::transformedRangeView( + Dune::range(std::size_t(0), fvGeometry.numScv()-GeometryHelper::numHybridDofs(fvGeometry.element().type())), + [&](const auto i) { return FVLocalDof{ i, fvGeometry }; } + ); + } + + //! iterate over dof indices that are treated as hybrid dofs using the finite element method + friend inline auto hybridLocalDofs(const PQ1BubbleFVElementGeometry& fvGeometry) + { + return Dune::transformedRangeView( + Dune::range(fvGeometry.numScv()-GeometryHelper::numHybridDofs(fvGeometry.element().type()), fvGeometry.numScv()), + [](const auto i) { return LocalDof{ i }; } + ); + } + + //! an iterator over all local dofs + friend inline auto localDofs(const PQ1BubbleFVElementGeometry& fvGeometry) + { + return Dune::transformedRangeView( + Dune::range(std::size_t(0), fvGeometry.numScv()), + [](const auto i) { return LocalDof{ i }; } + ); + } + //! iterator range for sub control volumes faces. Iterates over //! all scvfs of the bound element. //! This is a free function found by means of ADL -- GitLab From 3fcce179532e871e2da81de0f97602e1996b99fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dennis=20Gl=C3=A4ser?= <dennis.glaeser@iws.uni-stuttgart.de> Date: Wed, 24 Jul 2019 17:33:08 +0200 Subject: [PATCH 03/24] [fe] add integration point data class --- .../fem/integrationpointdata.hh | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 dumux/discretization/fem/integrationpointdata.hh diff --git a/dumux/discretization/fem/integrationpointdata.hh b/dumux/discretization/fem/integrationpointdata.hh new file mode 100644 index 0000000000..6014cee000 --- /dev/null +++ b/dumux/discretization/fem/integrationpointdata.hh @@ -0,0 +1,92 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +// +// SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder +// SPDX-License-Identifier: GPL-3.0-or-later +// +/*! + * \file + * \ingroup FEMDiscretization + * \brief Shape functions and gradients at an integration point + */ +#ifndef DUMUX_DISCRETIZATION_FE_INTEGRATION_POINT_DATA_HH +#define DUMUX_DISCRETIZATION_FE_INTEGRATION_POINT_DATA_HH + +#include <vector> + +namespace Dumux { + +template<class GlobalPosition, class LocalBasis> +class FEIntegrationPointData +{ + using LocalPosition = typename LocalBasis::Traits::DomainType; + using RangeType = typename LocalBasis::Traits::RangeType; + using JacobianType = typename LocalBasis::Traits::JacobianType; + + using ShapeValues = std::vector<RangeType>; + using ShapeGradients = std::vector<GlobalPosition>; + +public: + // The default constructor + FEIntegrationPointData() = delete; + + // The constructor + template<class Geometry> + FEIntegrationPointData(const Geometry& geometry, + const LocalPosition& ipLocal, + const LocalBasis& localBasis) + : ipLocal_(ipLocal), + ipGlobal_(geometry.global(ipLocal)) + { + auto numLocalDofs = localBasis.size(); + + // set the shape values + shapeValues_.resize(numLocalDofs); + localBasis.evaluateFunction(ipLocal, shapeValues_); + + // the local shape function gradients + std::vector<JacobianType> shapeGrads(numLocalDofs); + localBasis.evaluateJacobian(ipLocal, shapeGrads); + + // the global shape function gradients + const auto jacInvT = geometry.jacobianInverseTransposed(ipLocal); + shapeGradients_.resize(numLocalDofs, GlobalPosition(0.0)); + for (unsigned int i = 0; i < numLocalDofs; ++i) + jacInvT.umv(shapeGrads[i][0], shapeGradients_[i]); + } + + //! The shape values at the quadrature point + const ShapeValues& shapeValues() const + { return shapeValues_; } + + //! The shape value of a local dof at the quadrature point + const RangeType& shapeValue(int i) const + { return shapeValues_[i]; } + + //! The shape value gradients at the quadrature point + const ShapeGradients& shapeGradients() const + { return shapeGradients_; } + + //! The shape value gradient of a local dof at the quadrature point + const GlobalPosition& gradN(int i) const + { return shapeGradients_[i]; } + + //! The local position of the quadrature point + const LocalPosition& ipLocal() const + { return ipLocal_; } + + //! The global position of the quadrature point + const GlobalPosition& ipGlobal() const + { return ipGlobal_; } + +private: + LocalPosition ipLocal_; + GlobalPosition ipGlobal_; + + ShapeValues shapeValues_; + ShapeGradients shapeGradients_; +}; + +} // end namespace Dumux + +#endif -- GitLab From 155aa94c1481444b91c4bf98b7959c554998125c Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 2 Aug 2024 12:49:38 +0200 Subject: [PATCH 04/24] [ff][momentum] Add interface to evaluate quantaties at given pos --- .../freeflow/navierstokes/momentum/problem.hh | 45 +++++ .../freeflow/couplingmanager_cvfe.hh | 167 +++++++----------- 2 files changed, 112 insertions(+), 100 deletions(-) diff --git a/dumux/freeflow/navierstokes/momentum/problem.hh b/dumux/freeflow/navierstokes/momentum/problem.hh index 914b31eaec..a078f3183d 100644 --- a/dumux/freeflow/navierstokes/momentum/problem.hh +++ b/dumux/freeflow/navierstokes/momentum/problem.hh @@ -558,6 +558,7 @@ class NavierStokesMomentumProblemImpl<TypeTag, DiscretizationMethods::CVFE<DM>> static constexpr int dimWorld = GridView::dimensionworld; using GlobalPosition = typename SubControlVolumeFace::GlobalPosition; + using LocalPosition = typename Element::Geometry::LocalCoordinate; using VelocityVector = Dune::FieldVector<Scalar, dimWorld>; using GravityVector = Dune::FieldVector<Scalar, dimWorld>; using CouplingManager = GetPropType<TypeTag, Properties::CouplingManager>; @@ -779,6 +780,21 @@ public: return couplingManager_->pressure(element, fvGeometry, scv, isPreviousTimeStep); } + /*! + * \brief Returns the pressure at a given position. + * \note Overload this if a fixed pressure shall be prescribed (e.g., given by an analytical solution). + */ + Scalar pressure(const Element& element, + const FVElementGeometry& fvGeometry, + const LocalPosition& pos, + const bool isPreviousTimeStep = false) const + { + if constexpr (std::is_empty_v<CouplingManager>) + return asImp_().pressureAtPos(element.geometry().global(pos)); + else + return couplingManager_->pressure(element, fvGeometry, pos, isPreviousTimeStep); + } + /*! * \brief Returns the pressure at a given position. */ @@ -816,6 +832,20 @@ public: return couplingManager_->density(element, fvGeometry, scv, isPreviousTimeStep); } + /*! + * \brief Returns the density at a given position. + * \note Overload this if a fixed density shall be prescribed. + */ + Scalar density(const Element& element, + const FVElementGeometry& fvGeometry, + const LocalPosition& pos, + const bool isPreviousTimeStep = false) const + { + if constexpr (std::is_empty_v<CouplingManager>) + return asImp_().densityAtPos(element.geometry().global(pos)); + else + return couplingManager_->density(element, fvGeometry, pos, isPreviousTimeStep); + } /*! * \brief Returns the density at a given position. @@ -854,6 +884,21 @@ public: return couplingManager_->effectiveViscosity(element, fvGeometry, scv, isPreviousTimeStep); } + /*! + * \brief Returns the effective dynamic viscosity at a given position. + * \note Overload this if a fixed viscosity shall be prescribed. + */ + Scalar effectiveViscosity(const Element& element, + const FVElementGeometry& fvGeometry, + const LocalPosition& pos, + const bool isPreviousTimeStep = false) const + { + if constexpr (std::is_empty_v<CouplingManager>) + return asImp_().effectiveViscosityAtPos(element.geometry().global(pos)); + else + return couplingManager_->effectiveViscosity(element, fvGeometry, pos, isPreviousTimeStep); + } + /*! * \brief Returns the effective dynamic viscosity at a given position. */ diff --git a/dumux/multidomain/freeflow/couplingmanager_cvfe.hh b/dumux/multidomain/freeflow/couplingmanager_cvfe.hh index 59c6516ca9..82e9fd0261 100644 --- a/dumux/multidomain/freeflow/couplingmanager_cvfe.hh +++ b/dumux/multidomain/freeflow/couplingmanager_cvfe.hh @@ -81,7 +81,9 @@ private: using FluidSystem = typename VolumeVariables<freeFlowMassIndex>::FluidSystem; - using VelocityVector = typename SubControlVolumeFace<freeFlowMassIndex>::GlobalPosition; + using LocalPosition = typename Element<freeFlowMassIndex>::Geometry::LocalCoordinate; + using GlobalPosition = typename SubControlVolumeFace<freeFlowMassIndex>::GlobalPosition; + using VelocityVector = GlobalPosition; using ShapeValue = typename Dune::FieldVector<Scalar, 1>; static_assert(std::is_same_v<VelocityVector, typename SubControlVolumeFace<freeFlowMomentumIndex>::GlobalPosition>); @@ -194,6 +196,22 @@ public: return evalSolution(element, element.geometry(), gg, elemSol, scv.dofPosition())[pressureIdx]; } + /*! + * \brief Returns the pressure at a given position + */ + Scalar pressure(const Element<freeFlowMomentumIndex>& element, + const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry, + const LocalPosition& pos, + const bool considerPreviousTimeStep = false) const + { + assert(!(considerPreviousTimeStep && !this->isTransient_)); + const auto& gg = this->problem(freeFlowMassIndex).gridGeometry(); + const auto& sol = considerPreviousTimeStep ? (*prevSol_)[freeFlowMassIndex] + : this->curSol(freeFlowMassIndex); + const auto elemSol = elementSolution(element, sol, gg); + return evalSolution(element, element.geometry(), gg, elemSol, element.geometry().global(pos))[pressureIdx]; + } + /*! * \brief Returns the density at a given sub control volume face. */ @@ -201,6 +219,28 @@ public: const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry, const SubControlVolumeFace<freeFlowMomentumIndex>& scvf, const bool considerPreviousTimeStep = false) const + { + return this->density(element, fvGeometry, element.geometry().local(scvf.ipGlobal()), considerPreviousTimeStep); + } + + /*! + * \brief Returns the density at a given sub control volume. + */ + Scalar density(const Element<freeFlowMomentumIndex>& element, + const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry, + const SubControlVolume<freeFlowMomentumIndex>& scv, + const bool considerPreviousTimeStep = false) const + { + return this->density(element, fvGeometry, element.geometry().local(scv.dofPosition()), considerPreviousTimeStep); + } + + /*! + * \brief Returns the density at a given position. + */ + Scalar density(const Element<freeFlowMomentumIndex>& element, + const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry, + const LocalPosition& pos, + const bool considerPreviousTimeStep = false) const { assert(!(considerPreviousTimeStep && !this->isTransient_)); bindCouplingContext_(Dune::index_constant<freeFlowMomentumIndex>(), element, fvGeometry.elementIndex()); @@ -223,8 +263,7 @@ public: using ShapeValue = typename Dune::FieldVector<Scalar, 1>; const auto& localBasis = this->momentumCouplingContext_()[0].fvGeometry.feLocalBasis(); std::vector<ShapeValue> shapeValues; - const auto ipLocal = element.geometry().local(scvf.ipGlobal()); - localBasis.evaluateFunction(ipLocal, shapeValues); + localBasis.evaluateFunction(pos, shapeValues); Scalar rho = 0.0; for (const auto& scv : scvs(this->momentumCouplingContext_()[0].fvGeometry)) @@ -244,106 +283,33 @@ public: } /*! - * \brief Returns the density at a given sub control volume. + * \brief Returns the effective viscosity at a given sub control volume face. */ - Scalar density(const Element<freeFlowMomentumIndex>& element, - const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry, - const SubControlVolume<freeFlowMomentumIndex>& scv, - const bool considerPreviousTimeStep = false) const + Scalar effectiveViscosity(const Element<freeFlowMomentumIndex>& element, + const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry, + const SubControlVolumeFace<freeFlowMomentumIndex>& scvf, + const bool considerPreviousTimeStep = false) const { - assert(!(considerPreviousTimeStep && !this->isTransient_)); - bindCouplingContext_(Dune::index_constant<freeFlowMomentumIndex>(), element, scv.elementIndex()); - - if constexpr (MassDiscretizationMethod{} == DiscretizationMethods::cctpfa) - { - const auto eIdx = scv.elementIndex(); - const auto& scvI = this->momentumCouplingContext_()[0].fvGeometry.scv(eIdx); - - const auto& volVars = considerPreviousTimeStep ? - this->momentumCouplingContext_()[0].prevElemVolVars[scvI] - : this->momentumCouplingContext_()[0].curElemVolVars[scvI]; - - return volVars.density(); - } - else if constexpr (MassDiscretizationMethod{} == DiscretizationMethods::box - || MassDiscretizationMethod{} == DiscretizationMethods::fcdiamond) - { - // TODO: cache the shape values when Box method is used - using ShapeValue = typename Dune::FieldVector<Scalar, 1>; - const auto& localBasis = this->momentumCouplingContext_()[0].fvGeometry.feLocalBasis(); - std::vector<ShapeValue> shapeValues; - const auto ipLocal = element.geometry().local(scv.dofPosition()); - localBasis.evaluateFunction(ipLocal, shapeValues); - - Scalar rho = 0.0; - for (const auto& scvI : scvs(this->momentumCouplingContext_()[0].fvGeometry)) - { - const auto& volVars = considerPreviousTimeStep ? - this->momentumCouplingContext_()[0].prevElemVolVars[scvI] - : this->momentumCouplingContext_()[0].curElemVolVars[scvI]; - rho += volVars.density()*shapeValues[scvI.indexInElement()][0]; - } - return rho; - } - else - DUNE_THROW(Dune::NotImplemented, - "Density interpolation for discretization scheme " << MassDiscretizationMethod{} - ); + return this->effectiveViscosity(element, fvGeometry, element.geometry().local(scvf.ipGlobal()), considerPreviousTimeStep); } /*! - * \brief Returns the effective viscosity at a given sub control volume face. + * \brief Returns the effective viscosity at a given sub control volume. */ Scalar effectiveViscosity(const Element<freeFlowMomentumIndex>& element, const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry, - const SubControlVolumeFace<freeFlowMomentumIndex>& scvf, + const SubControlVolume<freeFlowMomentumIndex>& scv, const bool considerPreviousTimeStep = false) const { - assert(!(considerPreviousTimeStep && !this->isTransient_)); - bindCouplingContext_(Dune::index_constant<freeFlowMomentumIndex>(), element, fvGeometry.elementIndex()); - - if constexpr (MassDiscretizationMethod{} == DiscretizationMethods::cctpfa) - { - const auto eIdx = fvGeometry.elementIndex(); - const auto& scv = this->momentumCouplingContext_()[0].fvGeometry.scv(eIdx); - const auto& volVars = considerPreviousTimeStep ? - this->momentumCouplingContext_()[0].prevElemVolVars[scv] - : this->momentumCouplingContext_()[0].curElemVolVars[scv]; - return volVars.viscosity(); - } - else if constexpr (MassDiscretizationMethod{} == DiscretizationMethods::box - || MassDiscretizationMethod{} == DiscretizationMethods::fcdiamond) - { - // TODO: cache the shape values when Box method is used - using ShapeValue = typename Dune::FieldVector<Scalar, 1>; - const auto& localBasis = this->momentumCouplingContext_()[0].fvGeometry.feLocalBasis(); - std::vector<ShapeValue> shapeValues; - const auto ipLocal = element.geometry().local(scvf.ipGlobal()); - localBasis.evaluateFunction(ipLocal, shapeValues); - - Scalar mu = 0.0; - for (const auto& scv : scvs(this->momentumCouplingContext_()[0].fvGeometry)) - { - const auto& volVars = considerPreviousTimeStep ? - this->momentumCouplingContext_()[0].prevElemVolVars[scv] - : this->momentumCouplingContext_()[0].curElemVolVars[scv]; - mu += volVars.viscosity()*shapeValues[scv.indexInElement()][0]; - } - - return mu; - } - else - DUNE_THROW(Dune::NotImplemented, - "Viscosity interpolation for discretization scheme " << MassDiscretizationMethod{} - ); + return this->effectiveViscosity(element, fvGeometry, element.geometry().local(scv.dofPosition()), considerPreviousTimeStep); } /*! - * \brief Returns the effective viscosity at a given sub control volume. + * \brief Returns the effective viscosity at a given position. */ Scalar effectiveViscosity(const Element<freeFlowMomentumIndex>& element, const FVElementGeometry<freeFlowMomentumIndex>& fvGeometry, - const SubControlVolume<freeFlowMomentumIndex>& scv, + const LocalPosition& pos, const bool considerPreviousTimeStep = false) const { assert(!(considerPreviousTimeStep && !this->isTransient_)); @@ -352,11 +318,13 @@ public: if constexpr (MassDiscretizationMethod{} == DiscretizationMethods::cctpfa) { const auto eIdx = fvGeometry.elementIndex(); - const auto& scvI = this->momentumCouplingContext_()[0].fvGeometry.scv(eIdx); + const auto& scv = this->momentumCouplingContext_()[0].fvGeometry.scv(eIdx); + const auto& volVars = considerPreviousTimeStep ? - this->momentumCouplingContext_()[0].prevElemVolVars[scvI] - : this->momentumCouplingContext_()[0].curElemVolVars[scvI]; - return volVars.viscosity(); + this->momentumCouplingContext_()[0].prevElemVolVars[scv] + : this->momentumCouplingContext_()[0].curElemVolVars[scv]; + + return volVars.density(); } else if constexpr (MassDiscretizationMethod{} == DiscretizationMethods::box || MassDiscretizationMethod{} == DiscretizationMethods::fcdiamond) @@ -365,23 +333,22 @@ public: using ShapeValue = typename Dune::FieldVector<Scalar, 1>; const auto& localBasis = this->momentumCouplingContext_()[0].fvGeometry.feLocalBasis(); std::vector<ShapeValue> shapeValues; - const auto ipLocal = element.geometry().local(scv.dofPosition()); - localBasis.evaluateFunction(ipLocal, shapeValues); + localBasis.evaluateFunction(pos, shapeValues); - Scalar mu = 0.0; - for (const auto& scvI : scvs(this->momentumCouplingContext_()[0].fvGeometry)) + Scalar rho = 0.0; + for (const auto& scv : scvs(this->momentumCouplingContext_()[0].fvGeometry)) { const auto& volVars = considerPreviousTimeStep ? - this->momentumCouplingContext_()[0].prevElemVolVars[scvI] - : this->momentumCouplingContext_()[0].curElemVolVars[scvI]; - mu += volVars.viscosity()*shapeValues[scvI.indexInElement()][0]; + this->momentumCouplingContext_()[0].prevElemVolVars[scv] + : this->momentumCouplingContext_()[0].curElemVolVars[scv]; + rho += volVars.density()*shapeValues[scv.indexInElement()][0]; } - return mu; + return rho; } else DUNE_THROW(Dune::NotImplemented, - "Viscosity interpolation for discretization scheme " << MassDiscretizationMethod{} + "Density interpolation for discretization scheme " << MassDiscretizationMethod{} ); } -- GitLab From 29124fd411f9881bf57518ad7aa24ed2988df1ce Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 2 Aug 2024 12:54:16 +0200 Subject: [PATCH 05/24] [assembly][hybridcvfe] Implementation of hybrid cvfe local residual --- dumux/assembly/hybridcvfelocalresidual.hh | 153 ++++++++++++++++ .../momentum/cvfe/localresidual.hh | 163 +++++++++++++++++- 2 files changed, 314 insertions(+), 2 deletions(-) create mode 100644 dumux/assembly/hybridcvfelocalresidual.hh diff --git a/dumux/assembly/hybridcvfelocalresidual.hh b/dumux/assembly/hybridcvfelocalresidual.hh new file mode 100644 index 0000000000..a8d0727d80 --- /dev/null +++ b/dumux/assembly/hybridcvfelocalresidual.hh @@ -0,0 +1,153 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +// +// SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder +// SPDX-License-Identifier: GPL-3.0-or-later +// +/*! + * \file + * \ingroup Assembly + * \ingroup CVFEDiscretization + * \brief Calculates the element-wise residual for hybrid control-volume finite element schemes + */ +#ifndef DUMUX_HYBRID_CVFE_LOCAL_RESIDUAL_HH +#define DUMUX_HYBRID_CVFE_LOCAL_RESIDUAL_HH + +#include <dumux/common/properties.hh> + +#include "cvfelocalresidual.hh" + +namespace Dumux { + +/*! + * \ingroup Assembly + * \ingroup CVFEDiscretization + * \brief The element-wise residual for control-volume finite element schemes + * \tparam TypeTag the TypeTag + */ +template<class TypeTag> +class HybridCVFELocalResidual : public CVFELocalResidual<TypeTag> +{ + using ParentType = CVFELocalResidual<TypeTag>; + using Problem = GetPropType<TypeTag, Properties::Problem>; + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using GridView = typename GridGeometry::GridView; + using Element = typename GridView::template Codim<0>::Entity; + using ElementBoundaryTypes = GetPropType<TypeTag, Properties::ElementBoundaryTypes>; + using FVElementGeometry = typename GridGeometry::LocalView; + using GridVolumeVariables = GetPropType<TypeTag, Properties::GridVolumeVariables>; + using ElementVolumeVariables = typename GridVolumeVariables::LocalView; + using ElementFluxVariablesCache = typename GetPropType<TypeTag, Properties::GridFluxVariablesCache>::LocalView; + +public: + using ElementResidualVector = typename ParentType::ElementResidualVector; + using ParentType::ParentType; + + /*! + * \name Main interface + * \note Methods used by the assembler to compute derivatives and residual + */ + // \{ + + /*! + * \brief Compute the storage local residual, i.e. the deviation of the + * storage term from zero for instationary problems. + * + * \param element The DUNE Codim<0> entity for which the residual + * ought to be calculated + * \param fvGeometry The finite-volume geometry of the element + * \param prevElemVolVars The volume averaged variables for all + * sub-control volumes of the element at the previous time level + * \param curElemVolVars The volume averaged variables for all + * sub-control volumes of the element at the current time level + */ + using ParentType::evalStorage; + ElementResidualVector evalStorage(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars) const + { + assert(!this->isStationary() && "no time loop set for storage term evaluation"); + + // initialize the residual vector for all scvs in this element + ElementResidualVector residual(fvGeometry.numScv()); + + // evaluate the volume terms (storage + source terms) + // forward to the local residual specialized for the discretization methods + for (const auto& localDof : fvLocalDofs(fvGeometry)) + this->asImp().evalStorage(residual, this->problem(), element, fvGeometry, prevElemVolVars, curElemVolVars, localDof.scv()); + + this->asImp().evalElementStorage(residual, this->problem(), element, fvGeometry, prevElemVolVars, curElemVolVars); + + return residual; + } + + /*! + * \brief Compute the flux and source + * + * \param element The DUNE Codim<0> entity for which the residual + * ought to be calculated + * \param fvGeometry The finite-volume geometry of the element + * \param curElemVolVars The volume averaged variables for all + * sub-control volumes of the element at the current time level + * \param elemFluxVarsCache The element flux variables cache + * \param bcTypes The element boundary types + */ + ElementResidualVector evalFluxAndSource(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, + const ElementBoundaryTypes &bcTypes) const + { + // initialize the residual vector for all scvs in this element + ElementResidualVector residual(fvGeometry.numScv()); + + // evaluate the volume terms (storage + source terms) + // forward to the local residual specialized for the discretization methods + for (const auto& localDof : fvLocalDofs(fvGeometry)) + this->asImp().evalSource(residual, this->problem(), element, fvGeometry, elemVolVars, localDof.scv()); + + // forward to the local residual specialized for the discretization methods + for (auto&& scvf : scvfs(fvGeometry)) + this->asImp().evalFlux(residual, this->problem(), element, fvGeometry, elemVolVars, bcTypes, elemFluxVarsCache, scvf); + + // ToDo: Better name? E.g. evalElementRhsTerms + this->asImp().evalElementFluxAndSource(residual, this->problem(), element, fvGeometry, elemVolVars, bcTypes); + + return residual; + } + + // \} + + /*! + * \name Model specific interface to account for hybrid dofs + * \note The following methods are hybrid model specific implementations of the local residual + */ + // \{ + + void evalElementStorage(ElementResidualVector& residual, + const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars) const + { + DUNE_THROW(Dune::NotImplemented, "This hybrid model does not implement an evalElementStorage method!"); + } + + void evalElementFluxAndSource(ElementResidualVector& residual, + const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& curElemVolVars, + const ElementBoundaryTypes &bcTypes) const + { + DUNE_THROW(Dune::NotImplemented, "This hybrid model does not implement an evalElementFluxAndSource method!"); + } + + // \} +}; + +} // end namespace Dumux + +#endif diff --git a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh index b86b91ae74..df23543419 100644 --- a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh +++ b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh @@ -7,18 +7,20 @@ /*! * \file * \ingroup NavierStokesModel - * \copydoc Dumux::NavierStokesResidualImpl + * \copydoc Dumux::NavierStokesMomentumCVFELocalResidual */ #ifndef DUMUX_NAVIERSTOKES_MOMENTUM_CVFE_LOCAL_RESIDUAL_HH #define DUMUX_NAVIERSTOKES_MOMENTUM_CVFE_LOCAL_RESIDUAL_HH #include <dune/common/hybridutilities.hh> +#include <dune/geometry/quadraturerules.hh> #include <dumux/common/properties.hh> #include <dumux/common/numeqvector.hh> #include <dumux/discretization/extrusion.hh> #include <dumux/discretization/method.hh> +#include <dumux/discretization/fem/integrationpointdata.hh> #include <dumux/assembly/cvfelocalresidual.hh> #include <dumux/freeflow/navierstokes/momentum/cvfe/flux.hh> @@ -64,11 +66,16 @@ class NavierStokesMomentumCVFELocalResidual static constexpr auto dim = GridView::dimension; + using LocalBasis = typename GridGeometry::FeCache::FiniteElementType::Traits::LocalBasisType; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + using IpData = FEIntegrationPointData<GlobalPosition, LocalBasis>; using FluxContext = NavierStokesMomentumFluxContext<Problem, FVElementGeometry, ElementVolumeVariables, ElementFluxVariablesCache>; + using FluxFunctionContext = NavierStokesMomentumFluxFunctionContext<Problem, FVElementGeometry, ElementVolumeVariables, IpData>; using FluxHelper = NavierStokesMomentumFluxCVFE<GridGeometry, NumEqVector>; public: //! Use the parent type's constructor + using ElementResidualVector = typename ParentType::ElementResidualVector; using ParentType::ParentType; /*! @@ -135,7 +142,7 @@ public: return source; } - /*! + /*! * \brief Evaluates the mass flux over a face of a sub control volume. * * \param problem The problem @@ -161,6 +168,158 @@ public: flux += fluxHelper.pressureContribution(context); return flux; } + + void evalElementStorage(ElementResidualVector& residual, + const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars) const + { + static const auto intOrder + = getParamFromGroup<int>(problem.paramGroup(), "Assembly.FEIntegrationOrderStorage", 4); + + const auto &localBasis = fvGeometry.feLocalBasis(); + using RangeType = typename LocalBasis::Traits::RangeType; + std::vector<RangeType> integralShapeFunctions(localBasis.size(), RangeType(0.0)); + + // We apply mass lumping such that we only need to calculate the integral of basis functions + // such that we don't evaluate the solution but only integrate the basis functions + const auto& geometry = element.geometry(); + const auto& quadRule = Dune::QuadratureRules<Scalar, dim>::rule(geometry.type(), intOrder); + for (const auto& quadPoint : quadRule) + { + const Scalar qWeight = quadPoint.weight()*Extrusion::integrationElement(geometry, quadPoint.position()); + // Obtain and store shape function values and gradients at the current quad point + IpData ipData(geometry, quadPoint.position(), localBasis); + + // get density from the problem + for (auto localDofIdx : hybridLocalDofs(fvGeometry)) + integralShapeFunctions[localDofIdx] += ipData.shapeValue(localDofIdx)*qWeight; + } + + for (auto localDofIdx : hybridLocalDofs(fvGeometry)) + { + const auto curDensity = problem.density(element, fvGeometry, geometry.local(fvGeometry.scv(localDofIdx).dofPosition()), false); + const auto prevDensity = problem.density(element, fvGeometry, geometry.local(fvGeometry.scv(localDofIdx).dofPosition()), true); + const auto curVelocity = curElemVolVars[localDofIdx].velocity(); + const auto prevVelocity = prevElemVolVars[localDofIdx].velocity(); + auto timeDeriv = (curDensity*curVelocity - prevDensity*prevVelocity); + timeDeriv /= this->timeLoop().timeStepSize(); + + // add storage to residual + for (int eqIdx = 0; eqIdx < NumEqVector::dimension; ++eqIdx) + residual[localDofIdx][eqIdx] += integralShapeFunctions[localDofIdx]*timeDeriv[eqIdx]; + } + } + + void evalElementFluxAndSource(ElementResidualVector& residual, + const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementBoundaryTypes &elemBcTypes) const + { + static const bool enableUnsymmetrizedVelocityGradient + = getParamFromGroup<bool>(problem.paramGroup(), "FreeFlow.EnableUnsymmetrizedVelocityGradient", false); + static const auto intOrder + = getParamFromGroup<int>(problem.paramGroup(), "Assembly.FEIntegrationOrderFluxAndSource", 4); + + const auto &localBasis = fvGeometry.feLocalBasis(); + + const auto& geometry = element.geometry(); + const auto& quadRule = Dune::QuadratureRules<Scalar, dim>::rule(geometry.type(), intOrder); + for (const auto& quadPoint : quadRule) + { + const Scalar qWeight = quadPoint.weight()*Extrusion::integrationElement(geometry, quadPoint.position()); + + // Obtain and store shape function values and gradients at the current quad point + IpData ipData(geometry, quadPoint.position(), localBasis); + FluxFunctionContext context(problem, fvGeometry, elemVolVars, ipData); + const auto& v = context.velocity(); + const auto& gradV = context.gradVelocity(); + + // get viscosity from the problem + const Scalar mu = problem.effectiveViscosity(element, fvGeometry, ipData.ipLocal()); + // get density from the problem + const Scalar density = problem.density(element, fvGeometry, ipData.ipLocal()); + + for (auto localDofIdx : hybridLocalDofs(fvGeometry)) + { + NumEqVector fluxAndSourceTerm(0.0); + // add advection term + if (problem.enableInertiaTerms()) + fluxAndSourceTerm += density*(v*ipData.gradN(localDofIdx))*v; + + // add diffusion term + fluxAndSourceTerm -= enableUnsymmetrizedVelocityGradient ? + mu*mv(gradV, ipData.gradN(localDofIdx)) + : mu*mv(gradV + getTransposed(gradV), ipData.gradN(localDofIdx)); + + // add pressure term + fluxAndSourceTerm += problem.pressure(element, fvGeometry, ipData.ipLocal()) * ipData.gradN(localDofIdx); + + // finally add source and Neumann term and add everything to residual + // ToDo: generalize by not assuming that a sourceAtPos function must exist + const auto sourceAtPos = problem.sourceAtPos(ipData.ipGlobal()); + + for (int eqIdx = 0; eqIdx < NumEqVector::dimension; ++eqIdx) + { + fluxAndSourceTerm[eqIdx] += ipData.shapeValue(localDofIdx) * sourceAtPos[eqIdx]; + residual[localDofIdx][eqIdx] += qWeight*fluxAndSourceTerm[eqIdx]; + } + } + } + + if(elemBcTypes.hasNeumann()) + residual += evalNeumannSegments_(problem, element, fvGeometry, elemVolVars, elemBcTypes); + } + +private: + ElementResidualVector evalNeumannSegments_(const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementBoundaryTypes &elemBcTypes) const + { + ElementResidualVector flux(0.0); + + static const auto intOrder + = getParamFromGroup<int>(problem.paramGroup(), "Assembly.FEIntegrationOrderBoundary", 4); + + const auto &localBasis = fvGeometry.feLocalBasis(); + + const auto& geometry = element.geometry(); + for (const auto& intersection : intersections(fvGeometry.gridGeometry().gridView(), element)) + { + const auto bcTypes = problem.boundaryTypesAtPos(intersection.geometry().center()); + if(!bcTypes.hasNeumann()) + continue; + + // select quadrature rule for intersection faces (dim-1) + auto isGeometry = intersection.geometry(); + const auto& faceRule = Dune::QuadratureRules<Scalar, dim-1>::rule(isGeometry.type(), intOrder); + for (const auto& quadPoint : faceRule) + { + // position of quadrature point in local coordinates of inside element + auto local = geometry.local(isGeometry.global(quadPoint.position())); + + // get quadrature rule weight for intersection + Scalar qWeight = quadPoint.weight() * Extrusion::integrationElement(isGeometry, quadPoint.position()); + IpData ipData(geometry, local, localBasis); + + const auto& neumannFlux = qWeight*problem.neumannAtPos(ipData.ipGlobal()); + + for (auto localDofIdx : hybridLocalDofs(fvGeometry)) + for (int eqIdx = 0; eqIdx < NumEqVector::dimension; ++eqIdx) + flux[localDofIdx] += ipData.shapeValue(localDofIdx) * neumannFlux[eqIdx]; + + } + + } + + return flux; + } }; } // end namespace Dumux -- GitLab From ee33c5217887c00bca2031c52e211574ba4acfcc Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 2 Aug 2024 12:57:13 +0200 Subject: [PATCH 06/24] [cvfe][pq1bubble] Implement hybrid model --- dumux/discretization/pq1bubble.hh | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/dumux/discretization/pq1bubble.hh b/dumux/discretization/pq1bubble.hh index dff52eecf4..6283a6383e 100644 --- a/dumux/discretization/pq1bubble.hh +++ b/dumux/discretization/pq1bubble.hh @@ -23,6 +23,7 @@ #include <dumux/common/typetraits/problem.hh> #include <dumux/assembly/cvfelocalresidual.hh> +#include <dumux/assembly/hybridcvfelocalresidual.hh> #include <dumux/discretization/method.hh> #include <dumux/discretization/fvproperties.hh> @@ -42,7 +43,9 @@ namespace Dumux::Properties { //! Type tag for the pq1bubble scheme. // Create new type tags namespace TTag { -struct PQ1BubbleModel { using InheritsFrom = std::tuple<FiniteVolumeModel>; }; +struct PQ1BubbleBase { using InheritsFrom = std::tuple<FiniteVolumeModel>; }; +struct PQ1BubbleModel { using InheritsFrom = std::tuple<PQ1BubbleBase>; }; +struct PQ1BubbleHybridModel { using InheritsFrom = std::tuple<PQ1BubbleBase>; }; } // end namespace TTag //! Set the default for the grid geometry @@ -57,9 +60,22 @@ public: using type = PQ1BubbleFVGridGeometry<Scalar, GridView, enableCache>; }; +//! Set the default for the grid geometry for hybrid model +template<class TypeTag> +struct GridGeometry<TypeTag, TTag::PQ1BubbleHybridModel> +{ +private: + static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridGeometryCache>(); + using GridView = typename GetPropType<TypeTag, Properties::Grid>::LeafGridView; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using Traits = HybridPQ1BubbleCVFEGridGeometryTraits<PQ1BubbleDefaultGridGeometryTraits<GridView>>; +public: + using type = PQ1BubbleFVGridGeometry<Scalar, GridView, enableCache, Traits>; +}; + //! The grid volume variables vector class template<class TypeTag> -struct GridVolumeVariables<TypeTag, TTag::PQ1BubbleModel> +struct GridVolumeVariables<TypeTag, TTag::PQ1BubbleBase> { private: static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridVolumeVariablesCache>(); @@ -72,7 +88,7 @@ public: //! The flux variables cache class template<class TypeTag> -struct FluxVariablesCache<TypeTag, TTag::PQ1BubbleModel> +struct FluxVariablesCache<TypeTag, TTag::PQ1BubbleBase> { private: using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; @@ -83,7 +99,7 @@ public: //! The grid flux variables cache vector class template<class TypeTag> -struct GridFluxVariablesCache<TypeTag, TTag::PQ1BubbleModel> +struct GridFluxVariablesCache<TypeTag, TTag::PQ1BubbleBase> { private: static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridFluxVariablesCache>(); @@ -99,7 +115,7 @@ public: //! Set the default for the ElementBoundaryTypes template<class TypeTag> -struct ElementBoundaryTypes<TypeTag, TTag::PQ1BubbleModel> +struct ElementBoundaryTypes<TypeTag, TTag::PQ1BubbleBase> { private: using Problem = GetPropType<TypeTag, Properties::Problem>; @@ -113,6 +129,11 @@ template<class TypeTag> struct BaseLocalResidual<TypeTag, TTag::PQ1BubbleModel> { using type = CVFELocalResidual<TypeTag>; }; +//! Set the BaseLocalResidual for hybrid scheme to HybridLocalResidual +template<class TypeTag> +struct BaseLocalResidual<TypeTag, TTag::PQ1BubbleHybridModel> +{ using type = HybridCVFELocalResidual<TypeTag>; }; + } // namespace Dumux::Properties namespace Dumux::Detail { -- GitLab From f8aac16638d8826fe954cf2808e945923b944d3e Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 2 Aug 2024 16:13:21 +0200 Subject: [PATCH 07/24] [ffmomentum][cvfe] Implement fe residual --- .../navierstokes/momentum/cvfe/flux.hh | 83 +++++++++++++++++++ .../momentum/cvfe/localresidual.hh | 14 ++-- 2 files changed, 91 insertions(+), 6 deletions(-) diff --git a/dumux/freeflow/navierstokes/momentum/cvfe/flux.hh b/dumux/freeflow/navierstokes/momentum/cvfe/flux.hh index 2b1f2f5bc5..22671af61f 100644 --- a/dumux/freeflow/navierstokes/momentum/cvfe/flux.hh +++ b/dumux/freeflow/navierstokes/momentum/cvfe/flux.hh @@ -82,6 +82,89 @@ private: const SubControlVolumeFace& scvf_; }; +/*! + * \ingroup NavierStokesModel + * \brief Context for interpolating data on integration points + * + * \tparam Problem the problem type to solve + * \tparam FVElementGeometry the element geometry type + * \tparam ElementVolumeVariables the element volume variables type + * \tparam IpData the integration point data type + */ +template<class Problem, + class FVElementGeometry, + class ElementVolumeVariables, + class IpData> +class NavierStokesMomentumFluxFunctionContext +{ + using Element = typename FVElementGeometry::Element; + using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + + static constexpr int dim = FVElementGeometry::GridGeometry::GridView::dimension; + static constexpr int dimWorld = FVElementGeometry::GridGeometry::GridView::dimensionworld; + + using Tensor = Dune::FieldMatrix<typename GlobalPosition::value_type, dim, dimWorld>; + +public: + + //! Initialize the flux variables storing some temporary pointers + NavierStokesMomentumFluxFunctionContext( + const Problem& problem, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const IpData& ipData + ) + : problem_(problem) + , fvGeometry_(fvGeometry) + , elemVolVars_(elemVolVars) + , ipData_(ipData) + {} + + const Problem& problem() const + { return problem_; } + + const Element& element() const + { return fvGeometry_.element(); } + + const FVElementGeometry& fvGeometry() const + { return fvGeometry_; } + + const ElementVolumeVariables& elemVolVars() const + { return elemVolVars_; } + + const IpData& ipData() const + { return ipData_; } + + GlobalPosition velocity() const + { + GlobalPosition v(0.0); + const auto& shapeValues = ipData_.shapeValues(); + for (const auto& localDof : localDofs(fvGeometry_)) + v.axpy(shapeValues[localDof.index()][0], elemVolVars_[localDof.index()].velocity()); + + return v; + } + + Tensor gradVelocity() const + { + Tensor gradV(0.0); + for (const auto& localDof : localDofs(fvGeometry_)) + { + const auto& volVars = elemVolVars_[localDof.index()]; + for (int dir = 0; dir < dim; ++dir) + gradV[dir].axpy(volVars.velocity(dir), ipData_.gradN(localDof.index())); + } + return gradV; + } + +private: + const Problem& problem_; + const FVElementGeometry& fvGeometry_; + const ElementVolumeVariables& elemVolVars_; + const IpData& ipData_; +}; + /*! * \ingroup NavierStokesModel * \brief The flux variables class for the Navier-Stokes model using control-volume finite element schemes diff --git a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh index df23543419..ee8788d407 100644 --- a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh +++ b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh @@ -194,12 +194,13 @@ public: IpData ipData(geometry, quadPoint.position(), localBasis); // get density from the problem - for (auto localDofIdx : hybridLocalDofs(fvGeometry)) - integralShapeFunctions[localDofIdx] += ipData.shapeValue(localDofIdx)*qWeight; + for (const auto& localDof : hybridLocalDofs(fvGeometry)) + integralShapeFunctions[localDof.index()] += ipData.shapeValue(localDof.index())*qWeight; } - for (auto localDofIdx : hybridLocalDofs(fvGeometry)) + for (const auto& localDof : hybridLocalDofs(fvGeometry)) { + const auto localDofIdx = localDof.index(); const auto curDensity = problem.density(element, fvGeometry, geometry.local(fvGeometry.scv(localDofIdx).dofPosition()), false); const auto prevDensity = problem.density(element, fvGeometry, geometry.local(fvGeometry.scv(localDofIdx).dofPosition()), true); const auto curVelocity = curElemVolVars[localDofIdx].velocity(); @@ -244,8 +245,9 @@ public: // get density from the problem const Scalar density = problem.density(element, fvGeometry, ipData.ipLocal()); - for (auto localDofIdx : hybridLocalDofs(fvGeometry)) + for (const auto& localDof : hybridLocalDofs(fvGeometry)) { + const auto localDofIdx = localDof.index(); NumEqVector fluxAndSourceTerm(0.0); // add advection term if (problem.enableInertiaTerms()) @@ -310,9 +312,9 @@ private: const auto& neumannFlux = qWeight*problem.neumannAtPos(ipData.ipGlobal()); - for (auto localDofIdx : hybridLocalDofs(fvGeometry)) + for (const auto& localDof : hybridLocalDofs(fvGeometry)) for (int eqIdx = 0; eqIdx < NumEqVector::dimension; ++eqIdx) - flux[localDofIdx] += ipData.shapeValue(localDofIdx) * neumannFlux[eqIdx]; + flux[localDof.index()] += ipData.shapeValue(localDof.index()) * neumannFlux[eqIdx]; } -- GitLab From d0e0e83f463a4b47005d83b02599ff7a0571459b Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 2 Aug 2024 16:19:18 +0200 Subject: [PATCH 08/24] [tests][donea] Add hybrid pq1bubble momentum test --- .../navierstokes/donea/CMakeLists.txt | 14 + ...tum_hybrid_pq1bubble_simplex-reference.vtu | 2847 +++++++++++++++++ 2 files changed, 2861 insertions(+) create mode 100644 test/references/test_ff_stokes_donea_momentum_hybrid_pq1bubble_simplex-reference.vtu diff --git a/test/freeflow/navierstokes/donea/CMakeLists.txt b/test/freeflow/navierstokes/donea/CMakeLists.txt index d164ff53a9..76675d9774 100644 --- a/test/freeflow/navierstokes/donea/CMakeLists.txt +++ b/test/freeflow/navierstokes/donea/CMakeLists.txt @@ -194,3 +194,17 @@ dumux_add_test(NAME test_ff_stokes_donea_momentum_pq1bubble_simplex ${CMAKE_CURRENT_BINARY_DIR}/donea_momentum_simplex_pq1bubble_1.vtu --command "${CMAKE_CURRENT_BINARY_DIR}/test_ff_stokes_donea_momentum_pq1bubble_simplex params.input -Problem.Name donea_momentum_simplex -Problem.UseNeumann false -FreeFlow.EnableUnsymmetrizedVelocityGradient false") + +dumux_add_test(NAME test_ff_stokes_donea_momentum_hybrid_pq1bubble_simplex + SOURCES main_momentum.cc + LABELS freeflow navierstokes donea + CMAKE_GUARD "( HAVE_UMFPACK AND dune-alugrid_FOUND )" + COMPILE_DEFINITIONS GRIDTYPE=Dune::ALUGrid<2,2,Dune::simplex,Dune::nonconforming> + COMPILE_DEFINITIONS DISCRETIZATION_MODEL=PQ1BubbleHybridModel + COMPILE_DEFINITIONS NAVIER_STOKES_MODEL=NavierStokesMomentumCVFE + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/test_ff_stokes_donea_momentum_hybrid_pq1bubble_simplex-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/donea_momentum_simplex_hybrid_pq1bubble_1.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_ff_stokes_donea_momentum_hybrid_pq1bubble_simplex params.input + -Problem.Name donea_momentum_simplex_hybrid -Problem.UseNeumann false -FreeFlow.EnableUnsymmetrizedVelocityGradient false") diff --git a/test/references/test_ff_stokes_donea_momentum_hybrid_pq1bubble_simplex-reference.vtu b/test/references/test_ff_stokes_donea_momentum_hybrid_pq1bubble_simplex-reference.vtu new file mode 100644 index 0000000000..e437e40759 --- /dev/null +++ b/test/references/test_ff_stokes_donea_momentum_hybrid_pq1bubble_simplex-reference.vtu @@ -0,0 +1,2847 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian"> + <UnstructuredGrid> + <Piece NumberOfCells="3200" NumberOfPoints="1681"> + <CellData Scalars="rank" Vectors="velocity"> + <DataArray type="Float32" Name="velocity" NumberOfComponents="3" format="ascii"> + 9.64829e-06 -9.18595e-06 0 9.18595e-06 -9.64829e-06 0 4.54986e-05 -2.65498e-05 0 2.65498e-05 -4.54986e-05 0 + 3.61246e-05 -1.62578e-05 0 0.000111783 -4.02591e-05 0 7.63231e-05 -2.19246e-05 0 0.000110968 -9.2482e-05 0 + 0.000250564 -0.000130832 0 1.62578e-05 -3.61246e-05 0 4.02591e-05 -0.000111783 0 9.2482e-05 -0.000110968 0 + 2.19246e-05 -7.63231e-05 0 0.000130832 -0.000250564 0 0.000240376 -0.000172763 0 0.000172763 -0.000240376 0 + 0.00039554 -0.000346413 0 0.000346413 -0.00039554 0 0.000127736 -2.63365e-05 0 0.000202902 -5.11693e-05 0 + 0.00018799 -2.96085e-05 0 0.000313999 -5.95506e-05 0 0.00043558 -0.000161359 0 0.000656799 -0.000184695 0 + 0.000254852 -3.18388e-05 0 0.000440486 -6.56213e-05 0 0.000578055 -6.95735e-05 0 0.000905535 -0.000201395 0 + 0.000447783 -0.000222687 0 0.000692668 -0.000431596 0 0.000703214 -0.000261671 0 0.00104911 -0.000497404 0 + 0.000650614 -0.000513391 0 0.00102637 -0.000606001 0 0.00099584 -0.000290527 0 0.00145073 -0.000545204 0 + 0.00131548 -0.000310005 0 0.00145759 -0.000675106 0 0.0019292 -0.000722357 0 2.63365e-05 -0.000127736 0 + 5.11693e-05 -0.000202902 0 0.000161359 -0.00043558 0 5.95506e-05 -0.000313999 0 2.96085e-05 -0.00018799 0 + 0.000184695 -0.000656799 0 0.000222687 -0.000447783 0 0.000431596 -0.000692668 0 0.000513391 -0.000650614 0 + 0.000261671 -0.000703214 0 0.000497404 -0.00104911 0 0.000606001 -0.00102637 0 6.56213e-05 -0.000440486 0 + 3.18388e-05 -0.000254852 0 0.000201395 -0.000905535 0 6.95735e-05 -0.000578055 0 0.000290527 -0.00099584 0 + 0.000545204 -0.00145073 0 0.000675106 -0.00145759 0 0.000310005 -0.00131548 0 0.000722357 -0.0019292 0 + 0.000902294 -0.000814198 0 0.000814198 -0.000902294 0 0.00128755 -0.00106753 0 0.00136957 -0.000941129 0 + 0.00106753 -0.00128755 0 0.000941129 -0.00136957 0 0.00162263 -0.0014907 0 0.0014907 -0.00162263 0 + 0.00183131 -0.0011913 0 0.00189658 -0.00103388 0 0.00242635 -0.00127644 0 0.00224907 -0.00163961 0 + 0.00212241 -0.00181261 0 0.00281401 -0.00194375 0 0.0011913 -0.00183131 0 0.00103388 -0.00189658 0 + 0.00181261 -0.00212241 0 0.00163961 -0.00224907 0 0.00127644 -0.00242635 0 0.00194375 -0.00281401 0 + 0.00251409 -0.00233622 0 0.00233622 -0.00251409 0 0.00309912 -0.00269745 0 0.00269745 -0.00309912 0 + 0.000326228 -3.31157e-05 0 0.000722675 -7.15834e-05 0 0.000400163 -3.35214e-05 0 0.00117364 -0.000211966 0 + 0.0014535 -0.000216894 0 0.000474847 -3.31344e-05 0 0.000870599 -7.18175e-05 0 0.000548611 -3.203e-05 0 + 0.00101836 -7.04357e-05 0 0.00173806 -0.000216643 0 0.00202079 -0.000211671 0 0.00165264 -0.000320819 0 + 0.00188425 -0.00057629 0 0.0023373 -0.000591919 0 0.00242708 -0.000749351 0 0.00199845 -0.000323658 0 + 0.00279839 -0.000593317 0 0.00234473 -0.000319196 0 0.00325691 -0.000581696 0 0.00293811 -0.000757653 0 + 0.00345018 -0.000748803 0 0.000619934 -3.02815e-05 0 0.00116279 -6.75931e-05 0 0.00130099 -6.34414e-05 0 + 0.00229574 -0.000202423 0 0.000687434 -2.79608e-05 0 0.00143036 -5.81297e-05 0 0.000749877 -2.51383e-05 0 + 0.00255748 -0.000189342 0 0.00280116 -0.000172864 0 0.00268399 -0.000308095 0 0.00370317 -0.000558251 0 + 0.00300938 -0.000291013 0 0.00395215 -0.000724327 0 0.00443388 -0.000685736 0 0.00331472 -0.000268596 0 + 0.00412834 -0.00052417 0 0.00452452 -0.000480632 0 0.00488624 -0.000634536 0 0.00246583 -0.00109483 0 + 0.00305484 -0.00132572 0 0.00306103 -0.00112631 0 0.00292602 -0.00173801 0 0.0035447 -0.00202021 0 + 0.00363405 -0.00178954 0 0.00366704 -0.00113064 0 0.00370018 -0.00134186 0 0.00434703 -0.00132757 0 + 0.0042699 -0.00111007 0 0.00435512 -0.00179784 0 0.00429518 -0.00204612 0 0.00507262 -0.0017665 0 + 0.00504756 -0.00202555 0 0.00327238 -0.00247797 0 0.00390534 -0.00280486 0 0.00406566 -0.00255284 0 + 0.00351238 -0.00328858 0 0.00436509 -0.0033892 0 0.00487372 -0.00256596 0 0.00473355 -0.00284202 0 + 0.0056779 -0.00252244 0 0.005564 -0.00281458 0 0.00523383 -0.00340779 0 0.00609851 -0.00335109 0 + 0.00498131 -0.00128551 0 0.00485683 -0.00106687 0 0.0055902 -0.00121836 0 0.0057713 -0.00169908 0 + 0.00578547 -0.00196258 0 0.00649398 -0.00186124 0 0.00541623 -0.00100329 0 0.00616213 -0.00112876 0 + 0.00593768 -0.000921566 0 0.00643736 -0.00159915 0 0.00715962 -0.00172558 0 0.00705836 -0.00147025 0 + 0.00646112 -0.00242735 0 0.00637859 -0.00272816 0 0.00716084 -0.00258838 0 0.00694077 -0.00322584 0 + 0.00720787 -0.00228576 0 0.00789586 -0.00240082 0 0.00790423 -0.00210273 0 0.00774391 -0.00303875 0 + 0.00849296 -0.00279653 0 3.31157e-05 -0.000326228 0 7.15834e-05 -0.000722675 0 0.000211966 -0.00117364 0 + 3.35214e-05 -0.000400163 0 0.000216894 -0.0014535 0 0.00057629 -0.00188425 0 0.000320819 -0.00165264 0 + 0.000749351 -0.00242708 0 0.000591919 -0.0023373 0 3.31344e-05 -0.000474847 0 7.18175e-05 -0.000870599 0 + 0.000216643 -0.00173806 0 7.04357e-05 -0.00101836 0 3.203e-05 -0.000548611 0 0.000211671 -0.00202079 0 + 0.000323658 -0.00199845 0 0.000593317 -0.00279839 0 0.000757653 -0.00293811 0 0.000319196 -0.00234473 0 + 0.000581696 -0.00325691 0 0.000748803 -0.00345018 0 0.00109483 -0.00246583 0 0.00132572 -0.00305484 0 + 0.00173801 -0.00292602 0 0.00202021 -0.0035447 0 0.00112631 -0.00306103 0 0.00178954 -0.00363405 0 + 0.00247797 -0.00327238 0 0.00280486 -0.00390534 0 0.00328858 -0.00351238 0 0.00255284 -0.00406566 0 + 0.0033892 -0.00436509 0 0.00134186 -0.00370018 0 0.00113064 -0.00366704 0 0.00179784 -0.00435512 0 + 0.00204612 -0.00429518 0 0.00132757 -0.00434703 0 0.00111007 -0.0042699 0 0.00202555 -0.00504756 0 + 0.0017665 -0.00507262 0 0.00256596 -0.00487372 0 0.00284202 -0.00473355 0 0.00340779 -0.00523383 0 + 0.00281458 -0.005564 0 0.00252244 -0.0056779 0 0.00335109 -0.00609851 0 6.75931e-05 -0.00116279 0 + 3.02815e-05 -0.000619934 0 0.000202423 -0.00229574 0 6.34414e-05 -0.00130099 0 0.000308095 -0.00268399 0 + 0.000558251 -0.00370317 0 0.000724327 -0.00395215 0 0.000291013 -0.00300938 0 0.000685736 -0.00443388 0 + 2.79608e-05 -0.000687434 0 5.81297e-05 -0.00143036 0 0.000189342 -0.00255748 0 2.51383e-05 -0.000749877 0 + 0.000172864 -0.00280116 0 0.00052417 -0.00412834 0 0.000268596 -0.00331472 0 0.000634536 -0.00488624 0 + 0.000480632 -0.00452452 0 0.00128551 -0.00498131 0 0.00106687 -0.00485683 0 0.00196258 -0.00578547 0 + 0.00169908 -0.0057713 0 0.00121836 -0.0055902 0 0.00186124 -0.00649398 0 0.00272816 -0.00637859 0 + 0.00242735 -0.00646112 0 0.00322584 -0.00694077 0 0.00258838 -0.00716084 0 0.00100329 -0.00541623 0 + 0.00112876 -0.00616213 0 0.00159915 -0.00643736 0 0.00172558 -0.00715962 0 0.000921566 -0.00593768 0 + 0.00147025 -0.00705836 0 0.00228576 -0.00720787 0 0.00240082 -0.00789586 0 0.00303875 -0.00774391 0 + 0.00210273 -0.00790423 0 0.00279653 -0.00849296 0 0.00414538 -0.00365345 0 0.00365345 -0.00414538 0 + 0.00454153 -0.0042734 0 0.0042734 -0.00454153 0 0.00502569 -0.00370296 0 0.00544642 -0.00429791 0 + 0.00590852 -0.00366825 0 0.00634721 -0.00422742 0 0.00518197 -0.0046041 0 0.00609325 -0.00456192 0 + 0.00370296 -0.00502569 0 0.00429791 -0.00544642 0 0.0046041 -0.00518197 0 0.00366825 -0.00590852 0 + 0.00422742 -0.00634721 0 0.00456192 -0.00609325 0 0.00552243 -0.0052127 0 0.0052127 -0.00552243 0 + 0.00613032 -0.00547274 0 0.00643669 -0.00512816 0 0.00547274 -0.00613032 0 0.00512816 -0.00643669 0 + 0.00637963 -0.00603179 0 0.00603179 -0.00637963 0 0.00677459 -0.00355663 0 0.00722473 -0.00407041 0 + 0.00760637 -0.0033754 0 0.00698734 -0.00442405 0 0.00784613 -0.00419956 0 0.00838804 -0.00313184 0 + 0.00806159 -0.00383534 0 0.00884217 -0.00353063 0 0.00865327 -0.00389748 0 0.00703072 -0.00530823 0 + 0.00732742 -0.00493862 0 0.00789566 -0.00503975 0 0.00726328 -0.00580972 0 0.00691855 -0.00618869 0 + 0.00777048 -0.0058765 0 0.00817698 -0.00465433 0 0.00870867 -0.00467813 0 0.0089695 -0.00428551 0 + 0.00810616 -0.00547615 0 0.00857135 -0.00545569 0 0.00889254 -0.0050431 0 0.00355663 -0.00677459 0 + 0.00407041 -0.00722473 0 0.00442405 -0.00698734 0 0.0033754 -0.00760637 0 0.00419956 -0.00784613 0 + 0.00530823 -0.00703072 0 0.00493862 -0.00732742 0 0.00618869 -0.00691855 0 0.00580972 -0.00726328 0 + 0.00503975 -0.00789566 0 0.0058765 -0.00777048 0 0.00383534 -0.00806159 0 0.00313184 -0.00838804 0 + 0.00389748 -0.00865327 0 0.00353063 -0.00884217 0 0.00465433 -0.00817698 0 0.00467813 -0.00870867 0 + 0.00547615 -0.00810616 0 0.00545569 -0.00857135 0 0.00428551 -0.0089695 0 0.0050431 -0.00889254 0 + 0.00704668 -0.00666465 0 0.00666465 -0.00704668 0 0.00748609 -0.00669199 0 0.00669199 -0.00748609 0 + 0.00786517 -0.00628282 0 0.00825838 -0.00621359 0 0.00862888 -0.00578683 0 0.00747004 -0.00705797 0 + 0.00819609 -0.00650159 0 0.00628282 -0.00786517 0 0.00621359 -0.00825838 0 0.00705797 -0.00747004 0 + 0.00578683 -0.00862888 0 0.00650159 -0.00819609 0 0.00778683 -0.00693678 0 0.00693678 -0.00778683 0 + 0.00761173 -0.00717376 0 0.00717376 -0.00761173 0 0.000806175 -2.18838e-05 0 0.00154858 -5.18053e-05 0 + 0.000855381 -1.82658e-05 0 0.00165364 -4.46137e-05 0 0.00302245 -0.000153423 0 0.00321762 -0.000131449 0 + 0.000896697 -1.43525e-05 0 0.00174378 -3.6699e-05 0 0.00181757 -2.82047e-05 0 0.00338346 -0.000107372 0 + 0.00359455 -0.000241491 0 0.00488468 -0.000428813 0 0.00384403 -0.000210337 0 0.0052027 -0.000369883 0 + 0.00530108 -0.000572223 0 0.00567125 -0.000500291 0 0.00405904 -0.000175775 0 0.00547337 -0.000305008 0 + 0.00423611 -0.000138439 0 0.00599062 -0.000420228 0 0.00625404 -0.00033352 0 0.00092947 -1.02113e-05 0 + 0.00187385 -1.9273e-05 0 0.00095319 -5.9093e-06 0 0.00351731 -8.16182e-05 0 0.00361711 -5.46132e-05 0 + 0.000967495 -1.51286e-06 0 0.00191175 -1.00455e-05 0 0.000972169 2.91192e-06 0 0.0019307 -6.63222e-07 0 + 0.0036813 -2.67814e-05 0 0.00370892 1.45379e-06 0 0.00437246 -9.89653e-05 0 0.00569237 -0.000235354 0 + 0.00585627 -0.000162082 0 0.00645738 -0.000241649 0 0.00446599 -5.79855e-05 0 0.00596256 -8.63522e-05 0 + 0.00451527 -1.61319e-05 0 0.00600963 -9.32444e-06 0 0.00659749 -0.000146096 0 0.00667224 -4.83408e-05 0 + 0.00641193 -0.000823918 0 0.00668682 -0.00101936 0 0.0071552 -0.000892792 0 0.00683092 -0.000712575 0 + 0.0076233 -0.00131591 0 0.00777039 -0.00155961 0 0.00812257 -0.00113968 0 0.00831579 -0.00136736 0 + 0.00755952 -0.000751695 0 0.00718777 -0.000589756 0 0.00789327 -0.000598693 0 0.00854798 -0.000945061 0 + 0.00878675 -0.00115282 0 0.00917568 -0.00092002 0 0.00853784 -0.00188329 0 0.00857043 -0.00217108 0 + 0.00909793 -0.00163247 0 0.0091729 -0.00190471 0 0.00917461 -0.00250585 0 0.00977728 -0.00217341 0 + 0.0095753 -0.00135532 0 0.00969328 -0.00160729 0 0.0101232 -0.00128438 0 0.0102911 -0.00180588 0 + 0.00747679 -0.000457677 0 0.00815119 -0.000436413 0 0.00769346 -0.000318551 0 0.00889272 -0.000735591 0 + 0.00947649 -0.000672945 0 0.00915143 -0.000514783 0 0.00783445 -0.000174589 0 0.00832931 -0.000267476 0 + 0.00842491 -9.45033e-05 0 0.00789763 -2.79992e-05 0 0.00932013 -0.000286154 0 0.00968452 -0.000415599 0 + 0.00939625 -5.32145e-05 0 0.0097966 -0.000151978 0 0.00996233 -0.00105684 0 0.0104559 -0.000941536 0 + 0.010253 -0.000742067 0 0.0107078 -0.00140993 0 0.0110209 -0.000992219 0 0.0104428 -0.000416009 0 + 0.0106862 -0.000584316 0 0.0105288 -8.36833e-05 0 0.0108106 -0.00021827 0 0.0112256 -0.00055942 0 + 0.0113188 -0.000118189 0 0.000967139 7.29936e-06 0 0.00193039 8.73361e-06 0 0.00191085 1.80052e-05 0 + 0.00369955 2.967e-05 0 0.00095248 1.15842e-05 0 0.00187235 2.70123e-05 0 0.000928412 1.57015e-05 0 + 0.00365331 5.74457e-05 0 0.00357091 8.43601e-05 0 0.00451955 2.59652e-05 0 0.00599675 6.78442e-05 0 + 0.00447876 6.76762e-05 0 0.00668049 5.01401e-05 0 0.00662213 0.00014787 0 0.00439351 0.000108372 0 + 0.00592413 0.000143998 0 0.00579284 0.000217981 0 0.00649801 0.000243376 0 0.000895302 1.95867e-05 0 + 0.00181549 3.56163e-05 0 0.000853661 2.31758e-05 0 0.00174113 4.36789e-05 0 0.0034536 0.000109993 0 + 0.00330319 0.000133927 0 0.000804147 2.64048e-05 0 0.00165043 5.10626e-05 0 0.00154487 5.76303e-05 0 + 0.00312203 0.000155741 0 0.0042651 0.000147427 0 0.00560488 0.00028864 0 0.00409548 0.000184212 0 + 0.00536314 0.000354823 0 0.00631002 0.000335182 0 0.00606104 0.000421818 0 0.00388732 0.000218102 0 + 0.00507143 0.000415378 0 0.00364393 0.000248474 0 0.00575496 0.000501814 0 0.00539666 0.000573699 0 + 0.00843656 7.98878e-05 0 0.00788203 0.000119011 0 0.00836406 0.00025308 0 0.00937865 0.000180523 0 + 0.00981106 0.000113925 0 0.00972765 0.000378117 0 0.00778789 0.000264236 0 0.0082085 0.00042246 0 + 0.00761662 0.000405472 0 0.00926758 0.000411551 0 0.00954764 0.000636608 0 0.00906472 0.000636361 0 + 0.0105099 0.000249899 0 0.0108273 0.000151053 0 0.010736 0.000518107 0 0.0112991 0.000324817 0 + 0.0103862 0.000579727 0 0.0105381 0.000877347 0 0.0101596 0.000900794 0 0.0111667 0.000762941 0 + 0.0109238 0.00118953 0 0.00737082 0.000540517 0 0.00797224 0.000585413 0 0.0076589 0.000739328 0 + 0.00705427 0.000667171 0 0.00877314 0.000851449 0 0.00927374 0.000885411 0 0.00839734 0.00105331 0 + 0.00891017 0.00112054 0 0.00727337 0.000881595 0 0.00667196 0.000783234 0 0.0068218 0.00100961 0 + 0.00794323 0.00123845 0 0.00846258 0.00133801 0 0.00793813 0.00153384 0 0.00983359 0.00120809 0 + 0.0102365 0.00122323 0 0.00941315 0.00149662 0 0.00983598 0.00155022 0 0.0105739 0.00159794 0 + 0.0101225 0.00198151 0 0.0089049 0.00176138 0 0.00934265 0.00185277 0 0.00876443 0.00212535 0 + 0.00957663 0.00233361 0 0.00910551 -0.00283321 0 0.00955262 -0.00316474 0 0.00974641 -0.00248677 0 + 0.0101809 -0.00274607 0 0.00939421 -0.00352685 0 0.0100562 -0.00309668 0 0.0103001 -0.00209977 0 + 0.0107165 -0.00228305 0 0.0107577 -0.00167946 0 0.0106282 -0.00261599 0 0.011101 -0.00209378 0 + 0.0096909 -0.00384239 0 0.00945509 -0.00423421 0 0.010122 -0.00371879 0 0.0103289 -0.00333519 0 + 0.00960844 -0.0045226 0 0.00930671 -0.00493887 0 0.0102417 -0.00392664 0 0.00996387 -0.00433864 0 + 0.0106985 -0.00314268 0 0.010873 -0.00277409 0 0.011175 -0.00251668 0 0.0107818 -0.00326723 0 + 0.0105319 -0.0036676 0 0.0110017 -0.00293832 0 0.0111119 -0.00123308 0 0.0111511 -0.00178409 0 + 0.0114779 -0.00125759 0 0.0114672 -0.00153906 0 0.0113574 -0.000767855 0 0.0116917 -0.000711953 0 + 0.0114903 -0.000291033 0 0.0117894 -0.000155586 0 0.0117211 -0.000960827 0 0.011859 -0.000368071 0 + 0.0113146 -0.00216932 0 0.0115443 -0.0018516 0 0.0116467 -0.00153105 0 0.0112203 -0.00255636 0 + 0.0113659 -0.0021634 0 0.0115503 -0.00180601 0 0.0118643 -0.00086948 0 0.0118006 -0.00115822 0 + 0.0119399 -0.000447337 0 0.011964 -0.000194802 0 0.0117666 -0.00102818 0 0.0116187 -0.00135541 0 + 0.0118661 -0.000234838 0 0.0117565 -0.000526937 0 0.00932423 -0.00519046 0 0.00896758 -0.00562582 0 + 0.00993938 -0.00450748 0 0.00960147 -0.00494303 0 0.00885724 -0.00583241 0 0.00944224 -0.0050659 0 + 0.0104642 -0.00375165 0 0.0101495 -0.00417954 0 0.0106028 -0.00334968 0 0.00994147 -0.00421749 0 + 0.00845624 -0.00628141 0 0.00822645 -0.00643621 0 0.00905466 -0.00551992 0 0.00877046 -0.00559124 0 + 0.0077912 -0.00689336 0 0.00834325 -0.00605853 0 0.00957213 -0.00466831 0 0.00923482 -0.00465587 0 + 0.0100003 -0.00374256 0 0.00882074 -0.00512477 0 0.00921597 -0.00410961 0 0.0108904 -0.00293671 0 + 0.0109544 -0.00246778 0 0.0112112 -0.00207643 0 0.010347 -0.00330264 0 0.0106524 -0.00233677 0 + 0.0114218 -0.00118453 0 0.0111987 -0.00154816 0 0.0115189 -0.00027477 0 0.0113321 -0.00060513 0 + 0.010853 -0.00133533 0 0.0109459 -0.00031375 0 0.0103325 -0.00275867 0 0.00961212 -0.00364713 0 + 0.00989645 -0.00258206 0 0.00952273 -0.0030306 0 0.0105635 -0.00173259 0 0.0100835 -0.00147768 0 + 0.0106899 -0.000680327 0 0.0101703 -0.000351005 0 0.00973628 -0.00190525 0 0.00985338 -0.000751095 0 + 0.0115087 0.00019016 0 0.0117695 0.000403117 0 0.0114123 0.000668495 0 0.0118786 0.000230215 0 + 0.0117797 0.000825039 0 0.0112026 0.00113675 0 0.0116322 0.000955761 0 0.0113798 0.00149395 0 + 0.0115638 0.00140742 0 0.0119602 0.000270269 0 0.0119444 0.000482801 0 0.0118613 0.000983811 0 + 0.0118472 0.000562029 0 0.0117771 0.000309456 0 0.0116802 0.0011412 0 0.0118057 0.00115315 0 + 0.0116444 0.00168251 0 0.01155 0.00180605 0 0.0117101 0.00135045 0 0.0114672 0.00195571 0 + 0.0114571 0.00211844 0 0.0108827 0.00158769 0 0.0110159 0.00200931 0 0.0104575 0.0020141 0 + 0.0105462 0.00249343 0 0.0112342 0.00196836 0 0.0107959 0.00249889 0 0.00993365 0.00240876 0 + 0.00997811 0.00293794 0 0.00931954 0.00276446 0 0.0102557 0.00299003 0 0.00962229 0.00343279 0 + 0.0111813 0.00243135 0 0.0113131 0.00235558 0 0.0108723 0.00299225 0 0.0107051 0.00301885 0 + 0.0110919 0.00285404 0 0.0111415 0.00274045 0 0.0106201 0.00354528 0 0.0107079 0.00348283 0 + 0.0103288 0.00358176 0 0.010129 0.00355839 0 0.00969152 0.00411331 0 0.0100492 0.00418019 0 + 0.0101733 0.00417031 0 0.00954611 0.00479032 0 0.0115011 0.000639118 0 0.0113525 0.00034699 0 + 0.0112596 0.00129389 0 0.0109295 0.000712545 0 0.0113686 0.0015434 0 0.0110549 0.00222127 0 + 0.0111235 0.00242433 0 0.0108042 0.00172813 0 0.0105718 0.00271757 0 0.0107097 0.000382164 0 + 0.0101557 0.000780942 0 0.0106227 0.00143891 0 0.00987226 0.00041435 0 0.00979263 0.00157356 0 + 0.0104301 0.00247393 0 0.0100399 0.00190115 0 0.0098245 0.0029926 0 0.0096157 0.00270903 0 + 0.0107695 0.0032682 0 0.0107414 0.00311481 0 0.010312 0.00406126 0 0.0103239 0.00396022 0 + 0.0102359 0.00366545 0 0.0098016 0.00455636 0 0.00975815 0.00478979 0 0.00980905 0.00474319 0 + 0.00920492 0.00544943 0 0.00927578 0.00537487 0 0.0101349 0.00347128 0 0.00951291 0.00403828 0 + 0.00974162 0.00441498 0 0.0091099 0.00502118 0 0.00934415 0.00380323 0 0.00898214 0.00483865 0 + 0.00925635 0.00528908 0 0.00862179 0.00592431 0 0.00868686 0.00607761 0 0.00853531 0.00579779 0 + 0.0080108 0.00666315 0 2.18838e-05 -0.000806175 0 5.18053e-05 -0.00154858 0 0.000153423 -0.00302245 0 + 4.46137e-05 -0.00165364 0 1.82658e-05 -0.000855381 0 0.000131449 -0.00321762 0 0.000241491 -0.00359455 0 + 0.000428813 -0.00488468 0 0.000572223 -0.00530108 0 0.000210337 -0.00384403 0 0.000369883 -0.0052027 0 + 0.000500291 -0.00567125 0 3.6699e-05 -0.00174378 0 1.43525e-05 -0.000896697 0 0.000107372 -0.00338346 0 + 2.82047e-05 -0.00181757 0 0.000175775 -0.00405904 0 0.000305008 -0.00547337 0 0.000420228 -0.00599062 0 + 0.000138439 -0.00423611 0 0.00033352 -0.00625404 0 0.00101936 -0.00668682 0 0.000823918 -0.00641193 0 + 0.00131591 -0.0076233 0 0.00155961 -0.00777039 0 0.000892792 -0.0071552 0 0.000712575 -0.00683092 0 + 0.00136736 -0.00831579 0 0.00113968 -0.00812257 0 0.00188329 -0.00853784 0 0.00217108 -0.00857043 0 + 0.00250585 -0.00917461 0 0.00190471 -0.0091729 0 0.00163247 -0.00909793 0 0.00217341 -0.00977728 0 + 0.000751695 -0.00755952 0 0.000589756 -0.00718777 0 0.00115282 -0.00878675 0 0.000945061 -0.00854798 0 + 0.000598693 -0.00789327 0 0.00092002 -0.00917568 0 0.00160729 -0.00969328 0 0.00135532 -0.0095753 0 + 0.00180588 -0.0102911 0 0.00128438 -0.0101232 0 1.02113e-05 -0.00092947 0 1.9273e-05 -0.00187385 0 + 8.16182e-05 -0.00351731 0 5.9093e-06 -0.00095319 0 5.46132e-05 -0.00361711 0 0.000235354 -0.00569237 0 + 9.89653e-05 -0.00437246 0 0.000241649 -0.00645738 0 0.000162082 -0.00585627 0 1.51286e-06 -0.000967495 0 + 1.00455e-05 -0.00191175 0 2.67814e-05 -0.0036813 0 6.63222e-07 -0.0019307 0 -2.91192e-06 -0.000972169 0 + -1.45379e-06 -0.00370892 0 5.79855e-05 -0.00446599 0 8.63522e-05 -0.00596256 0 0.000146096 -0.00659749 0 + 1.61319e-05 -0.00451527 0 9.32444e-06 -0.00600963 0 4.83408e-05 -0.00667224 0 0.000457677 -0.00747679 0 + 0.000436413 -0.00815119 0 0.000735591 -0.00889272 0 0.000672945 -0.00947649 0 0.000318551 -0.00769346 0 + 0.000514783 -0.00915143 0 0.00105684 -0.00996233 0 0.000941536 -0.0104559 0 0.00140993 -0.0107078 0 + 0.000742067 -0.010253 0 0.000992219 -0.0110209 0 0.000267476 -0.00832931 0 0.000174589 -0.00783445 0 + 0.000286154 -0.00932013 0 0.000415599 -0.00968452 0 9.45033e-05 -0.00842491 0 2.79992e-05 -0.00789763 0 + 0.000151978 -0.0097966 0 5.32145e-05 -0.00939625 0 0.000416009 -0.0104428 0 0.000584316 -0.0106862 0 + 0.00055942 -0.0112256 0 0.00021827 -0.0108106 0 8.36833e-05 -0.0105288 0 0.000118189 -0.0113188 0 + 0.00283321 -0.00910551 0 0.00316474 -0.00955262 0 0.00352685 -0.00939421 0 0.00248677 -0.00974641 0 + 0.00274607 -0.0101809 0 0.00309668 -0.0100562 0 0.00423421 -0.00945509 0 0.00384239 -0.0096909 0 + 0.0045226 -0.00960844 0 0.00493887 -0.00930671 0 0.00371879 -0.010122 0 0.00333519 -0.0103289 0 + 0.00433864 -0.00996387 0 0.00392664 -0.0102417 0 0.00209977 -0.0103001 0 0.00228305 -0.0107165 0 + 0.00261599 -0.0106282 0 0.00167946 -0.0107577 0 0.00209378 -0.011101 0 0.00314268 -0.0106985 0 + 0.00277409 -0.010873 0 0.0036676 -0.0105319 0 0.00326723 -0.0107818 0 0.00251668 -0.011175 0 + 0.00293832 -0.0110017 0 0.00519046 -0.00932423 0 0.00562582 -0.00896758 0 0.00583241 -0.00885724 0 + 0.00494303 -0.00960147 0 0.00450748 -0.00993938 0 0.0050659 -0.00944224 0 0.00628141 -0.00845624 0 + 0.00643621 -0.00822645 0 0.00689336 -0.0077912 0 0.00551992 -0.00905466 0 0.00559124 -0.00877046 0 + 0.00605853 -0.00834325 0 0.00417954 -0.0101495 0 0.00375165 -0.0104642 0 0.00421749 -0.00994147 0 + 0.00334968 -0.0106028 0 0.00466831 -0.00957213 0 0.00465587 -0.00923482 0 0.00512477 -0.00882074 0 + 0.00374256 -0.0100003 0 0.00410961 -0.00921597 0 0.00178409 -0.0111511 0 0.00123308 -0.0111119 0 + 0.00153906 -0.0114672 0 0.00125759 -0.0114779 0 0.00216932 -0.0113146 0 0.0018516 -0.0115443 0 + 0.00255636 -0.0112203 0 0.0021634 -0.0113659 0 0.00153105 -0.0116467 0 0.00180601 -0.0115503 0 + 0.000767855 -0.0113574 0 0.000711953 -0.0116917 0 0.000960827 -0.0117211 0 0.000291033 -0.0114903 0 + 0.000155586 -0.0117894 0 0.000368071 -0.011859 0 0.00115822 -0.0118006 0 0.00086948 -0.0118643 0 + 0.00102818 -0.0117666 0 0.00135541 -0.0116187 0 0.000447337 -0.0119399 0 0.000194802 -0.011964 0 + 0.000526937 -0.0117565 0 0.000234838 -0.0118661 0 0.00293671 -0.0108904 0 0.00246778 -0.0109544 0 + 0.00330264 -0.010347 0 0.00207643 -0.0112112 0 0.00233677 -0.0106524 0 0.00364713 -0.00961212 0 + 0.00275867 -0.0103325 0 0.0030306 -0.00952273 0 0.00258206 -0.00989645 0 0.00118453 -0.0114218 0 + 0.00154816 -0.0111987 0 0.00133533 -0.010853 0 0.00060513 -0.0113321 0 0.00027477 -0.0115189 0 + 0.00031375 -0.0109459 0 0.00173259 -0.0105635 0 0.00147768 -0.0100835 0 0.00190525 -0.00973628 0 + 0.000680327 -0.0106899 0 0.000351005 -0.0101703 0 0.000751095 -0.00985338 0 -8.73361e-06 -0.00193039 0 + -7.29936e-06 -0.000967139 0 -2.967e-05 -0.00369955 0 -1.80052e-05 -0.00191085 0 -2.59652e-05 -0.00451955 0 + -6.78442e-05 -0.00599675 0 -5.01401e-05 -0.00668049 0 -6.76762e-05 -0.00447876 0 -0.00014787 -0.00662213 0 + -1.15842e-05 -0.00095248 0 -2.70123e-05 -0.00187235 0 -5.74457e-05 -0.00365331 0 -1.57015e-05 -0.000928412 0 + -8.43601e-05 -0.00357091 0 -0.000143998 -0.00592413 0 -0.000108372 -0.00439351 0 -0.000243376 -0.00649801 0 + -0.000217981 -0.00579284 0 -7.98878e-05 -0.00843656 0 -0.000119011 -0.00788203 0 -0.000113925 -0.00981106 0 + -0.000180523 -0.00937865 0 -0.00025308 -0.00836406 0 -0.000378117 -0.00972765 0 -0.000151053 -0.0108273 0 + -0.000249899 -0.0105099 0 -0.000324817 -0.0112991 0 -0.000518107 -0.010736 0 -0.000264236 -0.00778789 0 + -0.00042246 -0.0082085 0 -0.000411551 -0.00926758 0 -0.000636608 -0.00954764 0 -0.000405472 -0.00761662 0 + -0.000636361 -0.00906472 0 -0.000579727 -0.0103862 0 -0.000877347 -0.0105381 0 -0.000762941 -0.0111667 0 + -0.000900794 -0.0101596 0 -0.00118953 -0.0109238 0 -1.95867e-05 -0.000895302 0 -3.56163e-05 -0.00181549 0 + -0.000109993 -0.0034536 0 -4.36789e-05 -0.00174113 0 -2.31758e-05 -0.000853661 0 -0.000133927 -0.00330319 0 + -0.000147427 -0.0042651 0 -0.00028864 -0.00560488 0 -0.000335182 -0.00631002 0 -0.000184212 -0.00409548 0 + -0.000354823 -0.00536314 0 -0.000421818 -0.00606104 0 -5.10626e-05 -0.00165043 0 -2.64048e-05 -0.000804147 0 + -0.000155741 -0.00312203 0 -5.76303e-05 -0.00154487 0 -0.000218102 -0.00388732 0 -0.000415378 -0.00507143 0 + -0.000501814 -0.00575496 0 -0.000248474 -0.00364393 0 -0.000573699 -0.00539666 0 -0.000585413 -0.00797224 0 + -0.000540517 -0.00737082 0 -0.000851449 -0.00877314 0 -0.000885411 -0.00927374 0 -0.000739328 -0.0076589 0 + -0.000667171 -0.00705427 0 -0.00112054 -0.00891017 0 -0.00105331 -0.00839734 0 -0.00120809 -0.00983359 0 + -0.00122323 -0.0102365 0 -0.00159794 -0.0105739 0 -0.00155022 -0.00983598 0 -0.00149662 -0.00941315 0 + -0.00198151 -0.0101225 0 -0.000881595 -0.00727337 0 -0.000783234 -0.00667196 0 -0.00133801 -0.00846258 0 + -0.00123845 -0.00794323 0 -0.00100961 -0.0068218 0 -0.00153384 -0.00793813 0 -0.00185277 -0.00934265 0 + -0.00176138 -0.0089049 0 -0.00233361 -0.00957663 0 -0.00212535 -0.00876443 0 -0.00019016 -0.0115087 0 + -0.000403117 -0.0117695 0 -0.000230215 -0.0118786 0 -0.000668495 -0.0114123 0 -0.000825039 -0.0117797 0 + -0.000270269 -0.0119602 0 -0.000482801 -0.0119444 0 -0.000309456 -0.0117771 0 -0.000562029 -0.0118472 0 + -0.000983811 -0.0118613 0 -0.0011412 -0.0116802 0 -0.000955761 -0.0116322 0 -0.00113675 -0.0112026 0 + -0.00140742 -0.0115638 0 -0.00149395 -0.0113798 0 -0.00115315 -0.0118057 0 -0.00168251 -0.0116444 0 + -0.00135045 -0.0117101 0 -0.00195571 -0.0114672 0 -0.00180605 -0.01155 0 -0.00211844 -0.0114571 0 + -0.00034699 -0.0113525 0 -0.000639118 -0.0115011 0 -0.000712545 -0.0109295 0 -0.00129389 -0.0112596 0 + -0.000382164 -0.0107097 0 -0.000780942 -0.0101557 0 -0.00041435 -0.00987226 0 -0.00143891 -0.0106227 0 + -0.00157356 -0.00979263 0 -0.0015434 -0.0113686 0 -0.00222127 -0.0110549 0 -0.00172813 -0.0108042 0 + -0.00242433 -0.0111235 0 -0.00271757 -0.0105718 0 -0.00190115 -0.0100399 0 -0.00247393 -0.0104301 0 + -0.00270903 -0.0096157 0 -0.0029926 -0.0098245 0 -0.00158769 -0.0108827 0 -0.00200931 -0.0110159 0 + -0.00196836 -0.0112342 0 -0.0020141 -0.0104575 0 -0.00249343 -0.0105462 0 -0.00249889 -0.0107959 0 + -0.00235558 -0.0113131 0 -0.00243135 -0.0111813 0 -0.00285404 -0.0110919 0 -0.00274045 -0.0111415 0 + -0.00299225 -0.0108723 0 -0.00301885 -0.0107051 0 -0.00348283 -0.0107079 0 -0.00354528 -0.0106201 0 + -0.00240876 -0.00993365 0 -0.00293794 -0.00997811 0 -0.00299003 -0.0102557 0 -0.00276446 -0.00931954 0 + -0.00343279 -0.00962229 0 -0.00358176 -0.0103288 0 -0.00355839 -0.010129 0 -0.00417031 -0.0101733 0 + -0.00418019 -0.0100492 0 -0.00411331 -0.00969152 0 -0.00479032 -0.00954611 0 -0.0032682 -0.0107695 0 + -0.00311481 -0.0107414 0 -0.00366545 -0.0102359 0 -0.00396022 -0.0103239 0 -0.00406126 -0.010312 0 + -0.00455636 -0.0098016 0 -0.00347128 -0.0101349 0 -0.00403828 -0.00951291 0 -0.00380323 -0.00934415 0 + -0.00441498 -0.00974162 0 -0.00502118 -0.0091099 0 -0.00483865 -0.00898214 0 -0.00474319 -0.00980905 0 + -0.00478979 -0.00975815 0 -0.00537487 -0.00927578 0 -0.00544943 -0.00920492 0 -0.00528908 -0.00925635 0 + -0.00592431 -0.00862179 0 -0.00579779 -0.00853531 0 -0.00607761 -0.00868686 0 -0.00666315 -0.0080108 0 + 0.00745081 -0.00699095 0 0.00699095 -0.00745081 0 0.00748705 -0.00654927 0 0.00794424 -0.006074 0 + 0.00654927 -0.00748705 0 0.006074 -0.00794424 0 0.00698378 -0.00650585 0 0.00650585 -0.00698378 0 + 0.00791626 -0.00554078 0 0.00836555 -0.00505884 0 0.00827166 -0.00444429 0 0.0073549 -0.00541946 0 + 0.00687961 -0.00590926 0 0.00718925 -0.00474088 0 0.00554078 -0.00791626 0 0.00505884 -0.00836555 0 + 0.00590926 -0.00687961 0 0.00541946 -0.0073549 0 0.00444429 -0.00827166 0 0.00474088 -0.00718925 0 + 0.00622414 -0.00573171 0 0.00573171 -0.00622414 0 0.00599056 -0.0049945 0 0.0049945 -0.00599056 0 + 0.008708 -0.00396396 0 0.00854767 -0.00327873 0 0.00896625 -0.00280785 0 0.00765672 -0.00424765 0 + 0.00742989 -0.00349882 0 0.0078845 -0.00301022 0 0.00913633 -0.00160898 0 0.00874002 -0.00206304 0 + 0.0088458 -0.000816154 0 0.00921566 -0.00038584 0 0.00803477 -0.00172696 0 0.00759783 -0.00220326 0 + 0.00810523 -0.000417636 0 0.0076905 -0.000874381 0 0.00648038 -0.00449347 0 0.00619194 -0.00368724 0 + 0.00667398 -0.00318581 0 0.00520109 -0.00469746 0 0.00535743 -0.00333177 0 0.00680197 -0.00182963 0 + 0.00633274 -0.00232359 0 0.00686241 -0.000445852 0 0.00641082 -0.000924805 0 0.00546111 -0.00191535 0 + 0.00551056 -0.000470024 0 0.00396396 -0.008708 0 0.00327873 -0.00854767 0 0.00424765 -0.00765672 0 + 0.00349882 -0.00742989 0 0.00280785 -0.00896625 0 0.00301022 -0.0078845 0 0.00449347 -0.00648038 0 + 0.00368724 -0.00619194 0 0.00469746 -0.00520109 0 0.00318581 -0.00667398 0 0.00333177 -0.00535743 0 + 0.00206304 -0.00874002 0 0.00160898 -0.00913633 0 0.00172696 -0.00803477 0 0.00220326 -0.00759783 0 + 0.000816154 -0.0088458 0 0.00038584 -0.00921566 0 0.000874381 -0.0076905 0 0.000417636 -0.00810523 0 + 0.00182963 -0.00680197 0 0.00232359 -0.00633274 0 0.00191535 -0.00546111 0 0.000924805 -0.00641082 0 + 0.000445852 -0.00686241 0 0.000470024 -0.00551056 0 0.0048564 -0.00384097 0 0.00384097 -0.0048564 0 + 0.00395761 -0.00344581 0 0.00344581 -0.00395761 0 0.00496784 -0.00242211 0 0.00403536 -0.00198275 0 + 0.00503008 -0.000966613 0 0.00407305 -0.000489767 0 0.00352617 -0.00249726 0 0.00357161 -0.000999148 0 + 0.00242211 -0.00496784 0 0.00198275 -0.00403536 0 0.00249726 -0.00352617 0 0.000966613 -0.00503008 0 + 0.000489767 -0.00407305 0 0.000999148 -0.00357161 0 0.0025479 -0.00203079 0 0.00203079 -0.0025479 0 + 0.00205875 -0.00102191 0 0.00257326 -0.000504773 0 0.00102191 -0.00205875 0 0.000504773 -0.00257326 0 + 0.00103454 -0.000514811 0 0.000514811 -0.00103454 0 0.0088634 0.000442999 0 0.00920305 0.000843099 0 + 0.00879255 0.00169549 0 0.00809483 0.000897962 0 0.00770652 0.000467641 0 0.00764564 0.00180263 0 + 0.00909868 0.00205936 0 0.00863434 0.00292239 0 0.00890414 0.00324447 0 0.00800372 0.00220006 0 + 0.00750878 0.00311041 0 0.00783327 0.00346887 0 0.00685438 0.000944631 0 0.006425 0.000487883 0 + 0.00637506 0.00189323 0 0.00550504 0.000982365 0 0.00677801 0.00232091 0 0.00626176 0.00327001 0 + 0.00663445 0.00366208 0 0.00544462 0.00241998 0 0.00533022 0.003821 0 0.00862237 0.00437996 0 + 0.00839115 0.00410478 0 0.00806671 0.00522373 0 0.00825772 0.00544737 0 0.00758608 0.00468464 0 + 0.00729801 0.00437081 0 0.00726596 0.00582758 0 0.00701656 0.00556367 0 0.00766608 0.00626033 0 + 0.00781592 0.00642822 0 0.00719565 0.00719565 0 0.00687792 0.00687792 0 0.00666881 0.00666881 0 + 0.00626033 0.00766608 0 0.00642588 0.00494725 0 0.00608681 0.00459698 0 0.0061555 0.0061555 0 + 0.0058529 0.0058529 0 0.00516357 0.00516357 0 0.00494725 0.00642588 0 0.00582758 0.00726596 0 + 0.00556367 0.00701656 0 0.00522373 0.00806671 0 0.00468464 0.00758608 0 0.00504219 0.00050341 0 + 0.00407011 0.00101058 0 0.00500398 0.00196586 0 0.00358146 0.000513987 0 0.00355557 0.00201939 0 + 0.00491603 0.00339865 0 0.00402659 0.00249573 0 0.00394312 0.00394312 0 0.00349432 0.00349432 0 + 0.00206619 0.000519454 0 0.00257295 0.00102883 0 0.002053 0.002053 0 0.00103686 0.00103686 0 + 0.00051973 0.00051973 0 0.000519454 0.00206619 0 0.00254697 0.00254697 0 0.00201939 0.00355557 0 + 0.00249573 0.00402659 0 0.00102883 0.00257295 0 0.000513987 0.00358146 0 0.00101058 0.00407011 0 + 0.00477966 0.00477966 0 0.003821 0.00533022 0 0.00459698 0.00608681 0 0.00366208 0.00663445 0 + 0.00339865 0.00491603 0 0.00327001 0.00626176 0 0.00437081 0.00729801 0 0.00346887 0.00783327 0 + 0.00410478 0.00839115 0 0.00311041 0.00750878 0 0.00292239 0.00863434 0 0.00241998 0.00544462 0 + 0.00196586 0.00500398 0 0.00189323 0.00637506 0 0.00232091 0.00677801 0 0.000982365 0.00550504 0 + 0.00050341 0.00504219 0 0.000944631 0.00685438 0 0.000487883 0.006425 0 0.00180263 0.00764564 0 + 0.00220006 0.00800372 0 0.00169549 0.00879255 0 0.000897962 0.00809483 0 0.000467641 0.00770652 0 + 0.000442999 0.0088634 0 -0.000442999 -0.0088634 0 -0.000843099 -0.00920305 0 -0.000467641 -0.00770652 0 + -0.000897962 -0.00809483 0 -0.00169549 -0.00879255 0 -0.00180263 -0.00764564 0 -0.000487883 -0.006425 0 + -0.000944631 -0.00685438 0 -0.000982365 -0.00550504 0 -0.00189323 -0.00637506 0 -0.00205936 -0.00909868 0 + -0.00292239 -0.00863434 0 -0.00220006 -0.00800372 0 -0.00311041 -0.00750878 0 -0.00324447 -0.00890414 0 + -0.00346887 -0.00783327 0 -0.00232091 -0.00677801 0 -0.00327001 -0.00626176 0 -0.00241998 -0.00544462 0 + -0.00366208 -0.00663445 0 -0.003821 -0.00533022 0 -0.00050341 -0.00504219 0 -0.00101058 -0.00407011 0 + -0.000513987 -0.00358146 0 -0.00196586 -0.00500398 0 -0.00201939 -0.00355557 0 -0.000519454 -0.00206619 0 + -0.00102883 -0.00257295 0 -0.00051973 -0.00051973 0 -0.00103686 -0.00103686 0 -0.002053 -0.002053 0 + -0.00206619 -0.000519454 0 -0.00249573 -0.00402659 0 -0.00339865 -0.00491603 0 -0.00349432 -0.00349432 0 + -0.00394312 -0.00394312 0 -0.00254697 -0.00254697 0 -0.00355557 -0.00201939 0 -0.00257295 -0.00102883 0 + -0.00358146 -0.000513987 0 -0.00402659 -0.00249573 0 -0.00407011 -0.00101058 0 -0.00410478 -0.00839115 0 + -0.00437996 -0.00862237 0 -0.00468464 -0.00758608 0 -0.00437081 -0.00729801 0 -0.00522373 -0.00806671 0 + -0.00544737 -0.00825772 0 -0.00556367 -0.00701656 0 -0.00582758 -0.00726596 0 -0.00494725 -0.00642588 0 + -0.00459698 -0.00608681 0 -0.00516357 -0.00516357 0 -0.0058529 -0.0058529 0 -0.0061555 -0.0061555 0 + -0.00642588 -0.00494725 0 -0.00626033 -0.00766608 0 -0.00642822 -0.00781592 0 -0.00666881 -0.00666881 0 + -0.00687792 -0.00687792 0 -0.00719565 -0.00719565 0 -0.00766608 -0.00626033 0 -0.00701656 -0.00556367 0 + -0.00726596 -0.00582758 0 -0.00758608 -0.00468464 0 -0.00806671 -0.00522373 0 -0.00477966 -0.00477966 0 + -0.00533022 -0.003821 0 -0.00491603 -0.00339865 0 -0.00608681 -0.00459698 0 -0.00663445 -0.00366208 0 + -0.00626176 -0.00327001 0 -0.00500398 -0.00196586 0 -0.00544462 -0.00241998 0 -0.00550504 -0.000982365 0 + -0.00504219 -0.00050341 0 -0.00637506 -0.00189323 0 -0.00677801 -0.00232091 0 -0.006425 -0.000487883 0 + -0.00685438 -0.000944631 0 -0.00729801 -0.00437081 0 -0.00783327 -0.00346887 0 -0.00750878 -0.00311041 0 + -0.00839115 -0.00410478 0 -0.00863434 -0.00292239 0 -0.00764564 -0.00180263 0 -0.00800372 -0.00220006 0 + -0.00770652 -0.000467641 0 -0.00809483 -0.000897962 0 -0.00879255 -0.00169549 0 -0.0088634 -0.000442999 0 + -0.000514811 0.00103454 0 -0.00103454 0.000514811 0 -0.00102191 0.00205875 0 -0.00205875 0.00102191 0 + -0.000504773 0.00257326 0 -0.000999148 0.00357161 0 -0.000489767 0.00407305 0 -0.00203079 0.0025479 0 + -0.00198275 0.00403536 0 -0.00257326 0.000504773 0 -0.00357161 0.000999148 0 -0.0025479 0.00203079 0 + -0.00407305 0.000489767 0 -0.00403536 0.00198275 0 -0.00249726 0.00352617 0 -0.00352617 0.00249726 0 + -0.00344581 0.00395761 0 -0.00395761 0.00344581 0 -0.000470024 0.00551056 0 -0.000966613 0.00503008 0 + -0.000445852 0.00686241 0 -0.000924805 0.00641082 0 -0.00191535 0.00546111 0 -0.00182963 0.00680197 0 + -0.000417636 0.00810523 0 -0.000874381 0.0076905 0 -0.000816154 0.0088458 0 -0.00172696 0.00803477 0 + -0.00242211 0.00496784 0 -0.00333177 0.00535743 0 -0.00232359 0.00633274 0 -0.00318581 0.00667398 0 + -0.00384097 0.0048564 0 -0.00368724 0.00619194 0 -0.00220326 0.00759783 0 -0.00301022 0.0078845 0 + -0.00206304 0.00874002 0 -0.00349882 0.00742989 0 -0.00327873 0.00854767 0 -0.00551056 0.000470024 0 + -0.00503008 0.000966613 0 -0.00546111 0.00191535 0 -0.00641082 0.000924805 0 -0.00686241 0.000445852 0 + -0.00680197 0.00182963 0 -0.00496784 0.00242211 0 -0.00535743 0.00333177 0 -0.0048564 0.00384097 0 + -0.00633274 0.00232359 0 -0.00667398 0.00318581 0 -0.00619194 0.00368724 0 -0.0076905 0.000874381 0 + -0.00810523 0.000417636 0 -0.00803477 0.00172696 0 -0.0088458 0.000816154 0 -0.00759783 0.00220326 0 + -0.0078845 0.00301022 0 -0.00742989 0.00349882 0 -0.00874002 0.00206304 0 -0.00854767 0.00327873 0 + -0.00469746 0.00520109 0 -0.00520109 0.00469746 0 -0.0049945 0.00599056 0 -0.00449347 0.00648038 0 + -0.00599056 0.0049945 0 -0.00648038 0.00449347 0 -0.00573171 0.00622414 0 -0.00622414 0.00573171 0 + -0.00474088 0.00718925 0 -0.00424765 0.00765672 0 -0.00444429 0.00827166 0 -0.00541946 0.0073549 0 + -0.00590926 0.00687961 0 -0.00554078 0.00791626 0 -0.00718925 0.00474088 0 -0.00765672 0.00424765 0 + -0.00687961 0.00590926 0 -0.0073549 0.00541946 0 -0.00827166 0.00444429 0 -0.00791626 0.00554078 0 + -0.00650585 0.00698378 0 -0.00698378 0.00650585 0 -0.00654927 0.00748705 0 -0.00748705 0.00654927 0 + 0.000747564 2.92106e-05 0 0.00142616 6.32457e-05 0 0.000684861 3.15302e-05 0 0.00291306 0.000175021 0 + 0.00267974 0.000191348 0 0.000617134 3.33012e-05 0 0.00129636 6.77731e-05 0 0.000545623 3.44617e-05 0 + 0.00115779 7.10776e-05 0 0.00242612 0.000204309 0 0.00215679 0.00021349 0 0.00336933 0.000274704 0 + 0.00473445 0.000469156 0 0.0043578 0.000515009 0 0.00499204 0.000636008 0 0.0030682 0.000296169 0 + 0.00394799 0.00055179 0 0.0027459 0.00031225 0 0.00351242 0.000578358 0 0.004548 0.000687275 0 + 0.00407243 0.000726038 0 0.000471716 3.49506e-05 0 0.00101306 7.30253e-05 0 0.000865072 7.34836e-05 0 + 0.00187691 0.00021848 0 0.000396945 3.47073e-05 0 0.00071703 7.23211e-05 0 0.00032299 3.36723e-05 0 + 0.00159217 0.000218869 0 0.00130884 0.00021425 0 0.00240848 0.00032233 0 0.00305941 0.00059357 0 + 0.00206267 0.000325791 0 0.00357424 0.000750838 0 0.00306335 0.00076022 0 0.00171586 0.000322022 0 + 0.00259817 0.00059629 0 0.00213882 0.000585386 0 0.00255065 0.000752732 0 0.00623003 0.000886509 0 + 0.00631163 0.00112076 0 0.00573585 0.000974803 0 0.00741811 0.00140336 0 0.00734543 0.00170405 0 + 0.00683072 0.00154455 0 0.00519793 0.00104592 0 0.00575153 0.00121245 0 0.00515148 0.00128208 0 + 0.00462599 0.00109768 0 0.00619118 0.00165853 0 0.00669459 0.00184467 0 0.00551106 0.0017418 0 + 0.00599716 0.00195172 0 0.00831701 0.00199737 0 0.00811084 0.00236244 0 0.00765927 0.0021996 0 + 0.0089451 0.00264759 0 0.0082384 0.00291682 0 0.00694302 0.00236307 0 0.00739299 0.0025585 0 + 0.00618119 0.0024828 0 0.00662364 0.00270801 0 0.00746873 0.00313465 0 0.00664997 0.00329447 0 + 0.00452269 0.00132705 0 0.00403095 0.00112789 0 0.00387766 0.00134478 0 0.00480331 0.0017909 0 + 0.0052662 0.00202125 0 0.0045162 0.00204928 0 0.00342489 0.00113438 0 0.00323015 0.00133268 0 + 0.00282108 0.00111497 0 0.00408229 0.00180233 0 0.00376317 0.00203188 0 0.00336379 0.00177264 0 + 0.00538828 0.00255381 0 0.00581717 0.00280545 0 0.00498959 0.00284532 0 0.00579771 0.00338965 0 + 0.0045804 0.00257114 0 0.00415852 0.00282211 0 0.0037752 0.00252981 0 0.00492924 0.00341358 0 + 0.00406354 0.00335966 0 0.000251673 3.1787e-05 0 0.000572416 6.9408e-05 0 0.000184966 2.89941e-05 0 + 0.000435007 6.46169e-05 0 0.00103375 0.00020422 0 0.000774257 0.000188381 0 0.00012498 2.52383e-05 0 + 0.000308865 5.78232e-05 0 0.000198345 4.8906e-05 0 0.000538304 0.000166339 0 0.00137613 0.000310414 0 + 0.00169238 0.000559731 0 0.00105226 0.000290364 0 0.00127075 0.000518206 0 0.00204806 0.000726931 0 + 0.00156849 0.00068138 0 0.000753656 0.000261275 0 0.000886762 0.000459703 0 0.000490443 0.000222558 0 + 0.00112586 0.000614653 0 0.000735078 0.000525337 0 7.39772e-05 2.04662e-05 0 0.000108084 3.77501e-05 0 + 3.43583e-05 1.46282e-05 0 0.000334367 0.000137709 0 0.000171479 0.000102119 0 8.66746e-06 7.67993e-06 0 + 4.30053e-05 2.42487e-05 0 -4.14191e-07 -4.14191e-07 0 8.30914e-06 8.30914e-06 0 5.92134e-05 5.92134e-05 0 + 7.67993e-06 8.66746e-06 0 0.000273397 0.00017364 0 0.00055411 0.000383127 0 0.000287401 0.000287401 0 + 0.00041204 0.00041204 0 0.000113964 0.000113964 0 0.000102119 0.000171479 0 2.42487e-05 4.30053e-05 0 + 1.46282e-05 3.43583e-05 0 0.00017364 0.000273397 0 3.77501e-05 0.000108084 0 0.00223398 0.00106749 0 + 0.00259518 0.00128818 0 0.00198904 0.00120871 0 0.00167923 0.000989797 0 0.002665 0.00169836 0 + 0.00302454 0.0019651 0 0.00200449 0.00157605 0 0.00231925 0.00184501 0 0.00142927 0.00109172 0 + 0.00117364 0.000879747 0 0.000934678 0.000934678 0 0.00140227 0.00140227 0 0.00166769 0.00166769 0 + 0.00109172 0.00142927 0 0.00299193 0.00242488 0 0.00334321 0.00273035 0 0.00225141 0.00225141 0 + 0.00256454 0.00256454 0 0.0032213 0.0032213 0 0.00242488 0.00299193 0 0.00157605 0.00200449 0 + 0.00184501 0.00231925 0 0.00120871 0.00198904 0 0.00169836 0.002665 0 0.000735216 0.000735216 0 + 0.000525337 0.000735078 0 0.000383127 0.00055411 0 0.000879747 0.00117364 0 0.000614653 0.00112586 0 + 0.000459703 0.000886762 0 0.000137709 0.000334367 0 0.000222558 0.000490443 0 4.8906e-05 0.000198345 0 + 2.04662e-05 7.39772e-05 0 0.000166339 0.000538304 0 0.000261275 0.000753656 0 2.52383e-05 0.00012498 0 + 5.78232e-05 0.000308865 0 0.000989797 0.00167923 0 0.00068138 0.00156849 0 0.000518206 0.00127075 0 + 0.00106749 0.00223398 0 0.000559731 0.00169238 0 0.000188381 0.000774257 0 0.000290364 0.00105226 0 + 2.89941e-05 0.000184966 0 6.46169e-05 0.000435007 0 0.00020422 0.00103375 0 3.1787e-05 0.000251673 0 + 0.00862524 0.00307399 0 0.00932074 0.00333446 0 0.00858501 0.00367462 0 0.00890607 0.00381822 0 + 0.00786258 0.00333013 0 0.00778362 0.00395003 0 0.00704509 0.00352568 0 0.00693103 0.00415234 0 + 0.00811922 0.00413735 0 0.00727571 0.00438121 0 0.00946233 0.0040398 0 0.00897075 0.00457617 0 + 0.00871603 0.00445292 0 0.00938827 0.00474681 0 0.00883673 0.00533032 0 0.0086484 0.00523319 0 + 0.00790304 0.00478759 0 0.0081788 0.00495956 0 0.00732973 0.00525273 0 0.007038 0.00503366 0 + 0.00784232 0.00562738 0 0.00805721 0.00577776 0 0.00698454 0.00591742 0 0.00722137 0.00612011 0 + 0.00618805 0.00365346 0 0.00604345 0.00427318 0 0.00530847 0.00370627 0 0.0063913 0.00454085 0 + 0.00548353 0.00460732 0 0.00442507 0.00367694 0 0.00513889 0.00430422 0 0.00423712 0.00423712 0 + 0.00457171 0.00457171 0 0.00643939 0.00544494 0 0.00613738 0.00518099 0 0.00552544 0.00552544 0 + 0.0060914 0.0060914 0 0.00634482 0.00634482 0 0.00544494 0.00643939 0 0.00521944 0.00521944 0 + 0.00460732 0.00548353 0 0.00430422 0.00513889 0 0.00518099 0.00613738 0 0.00454085 0.0063913 0 + 0.00427318 0.00604345 0 0.00911698 0.00544008 0 0.00852149 0.00606465 0 0.00839908 0.0059984 0 + 0.00866689 0.00610557 0 0.00798503 0.00673307 0 0.00761683 0.00645106 0 0.00777037 0.00657457 0 + 0.00678433 0.00678433 0 0.0069649 0.0069649 0 0.00724195 0.00724195 0 0.00645106 0.00761683 0 + 0.00804249 0.00676464 0 0.00805644 0.00673066 0 0.00742323 0.00742323 0 0.00741721 0.00741721 0 + 0.0073342 0.0073342 0 0.00673307 0.00798503 0 0.00657457 0.00777037 0 0.0059984 0.00839908 0 + 0.00676464 0.00804249 0 0.00606465 0.00852149 0 0.00591742 0.00698454 0 0.00612011 0.00722137 0 + 0.00525273 0.00732973 0 0.00562738 0.00784232 0 0.00503366 0.007038 0 0.00438121 0.00727571 0 + 0.00415234 0.00693103 0 0.00478759 0.00790304 0 0.00395003 0.00778362 0 0.00577776 0.00805721 0 + 0.00523319 0.0086484 0 0.00495956 0.0081788 0 0.00533032 0.00883673 0 0.00457617 0.00897075 0 + 0.00413735 0.00811922 0 0.00445292 0.00871603 0 0.00367462 0.00858501 0 0.00381822 0.00890607 0 + 0.0035583 0.0035583 0 0.00335966 0.00406354 0 0.00273035 0.00334321 0 0.00252981 0.0037752 0 + 0.00367694 0.00442507 0 0.00282211 0.00415852 0 0.0019651 0.00302454 0 0.00177264 0.00336379 0 + 0.00128818 0.00259518 0 0.00203188 0.00376317 0 0.00133268 0.00323015 0 0.00341358 0.00492924 0 + 0.00370627 0.00530847 0 0.00284532 0.00498959 0 0.00257114 0.0045804 0 0.00338965 0.00579771 0 + 0.00365346 0.00618805 0 0.00255381 0.00538828 0 0.00280545 0.00581717 0 0.00204928 0.0045162 0 + 0.00180233 0.00408229 0 0.00134478 0.00387766 0 0.0017909 0.00480331 0 0.00202125 0.0052662 0 + 0.00132705 0.00452269 0 0.000726931 0.00204806 0 0.00111497 0.00282108 0 0.000585386 0.00213882 0 + 0.000752732 0.00255065 0 0.000310414 0.00137613 0 0.00021425 0.00130884 0 6.9408e-05 0.000572416 0 + 3.36723e-05 0.00032299 0 0.000322022 0.00171586 0 7.23211e-05 0.00071703 0 0.00113438 0.00342489 0 + 0.00076022 0.00306335 0 0.00059629 0.00259817 0 0.00112789 0.00403095 0 0.000750838 0.00357424 0 + 0.00059357 0.00305941 0 0.000218869 0.00159217 0 0.000325791 0.00206267 0 7.34836e-05 0.000865072 0 + 3.47073e-05 0.000396945 0 0.00021848 0.00187691 0 0.00032233 0.00240848 0 3.49506e-05 0.000471716 0 + 7.30253e-05 0.00101306 0 0.00329447 0.00664997 0 0.00352568 0.00704509 0 0.0024828 0.00618119 0 + 0.00270801 0.00662364 0 0.00313465 0.00746873 0 0.00236307 0.00694302 0 0.0017418 0.00551106 0 + 0.00195172 0.00599716 0 0.00128208 0.00515148 0 0.00165853 0.00619118 0 0.00333013 0.00786258 0 + 0.00291682 0.0082384 0 0.0025585 0.00739299 0 0.0021996 0.00765927 0 0.00307399 0.00862524 0 + 0.00236244 0.00811084 0 0.00184467 0.00669459 0 0.00154455 0.00683072 0 0.00121245 0.00575153 0 + 0.00170405 0.00734543 0 0.00112076 0.00631163 0 0.00109768 0.00462599 0 0.000726038 0.00407243 0 + 0.000578358 0.00351242 0 0.00104592 0.00519793 0 0.00055179 0.00394799 0 0.00021349 0.00215679 0 + 0.00031225 0.0027459 0 3.44617e-05 0.000545623 0 7.10776e-05 0.00115779 0 0.000204309 0.00242612 0 + 3.33012e-05 0.000617134 0 0.000687275 0.004548 0 0.000974803 0.00573585 0 0.000515009 0.0043578 0 + 0.000636008 0.00499204 0 0.000296169 0.0030682 0 0.000191348 0.00267974 0 6.77731e-05 0.00129636 0 + 3.15302e-05 0.000684861 0 0.000274704 0.00336933 0 6.32457e-05 0.00142616 0 0.00730406 0.00730406 0 + 0.00666315 0.0080108 0 0.00673066 0.00805644 0 0.00642822 0.00781592 0 0.00579779 0.00853531 0 + 0.00592431 0.00862179 0 0.00610557 0.00866689 0 0.00607761 0.00868686 0 0.00544943 0.00920492 0 + 0.00544008 0.00911698 0 0.00537487 0.00927578 0 0.00528908 0.00925635 0 0.00478979 0.00975815 0 + 0.00474319 0.00980905 0 0.00544737 0.00825772 0 0.00483865 0.00898214 0 0.00502118 0.0091099 0 + 0.00437996 0.00862237 0 0.00403828 0.00951291 0 0.00455636 0.0098016 0 0.00441498 0.00974162 0 + 0.00406126 0.010312 0 0.00396022 0.0103239 0 0.00366545 0.0102359 0 0.0032682 0.0107695 0 + 0.00479032 0.00954611 0 0.00474681 0.00938827 0 0.00411331 0.00969152 0 0.00418019 0.0100492 0 + 0.00417031 0.0101733 0 0.00358176 0.0103288 0 0.0040398 0.00946233 0 0.00343279 0.00962229 0 + 0.00333446 0.00932074 0 0.00355839 0.010129 0 0.00299003 0.0102557 0 0.00293794 0.00997811 0 + 0.00354528 0.0106201 0 0.00348283 0.0107079 0 0.00299225 0.0108723 0 0.00285404 0.0110919 0 + 0.00301885 0.0107051 0 0.00249889 0.0107959 0 0.00249343 0.0105462 0 0.00243135 0.0111813 0 + 0.00200931 0.0110159 0 0.00380323 0.00934415 0 0.00324447 0.00890414 0 0.0029926 0.0098245 0 + 0.00270903 0.0096157 0 0.00347128 0.0101349 0 0.00271757 0.0105718 0 0.00311481 0.0107414 0 + 0.00242433 0.0111235 0 0.00247393 0.0104301 0 0.00222127 0.0110549 0 0.00205936 0.00909868 0 + 0.00157356 0.00979263 0 0.00190115 0.0100399 0 0.000843099 0.00920305 0 0.00041435 0.00987226 0 + 0.000780942 0.0101557 0 0.00172813 0.0108042 0 0.00143891 0.0106227 0 0.00129389 0.0112596 0 + 0.0015434 0.0113686 0 0.000712545 0.0109295 0 0.000382164 0.0107097 0 0.000639118 0.0115011 0 + 0.00034699 0.0113525 0 0.00274045 0.0111415 0 0.00211844 0.0114571 0 0.00235558 0.0113131 0 + 0.00195571 0.0114672 0 0.00168251 0.0116444 0 0.00196836 0.0112342 0 0.00180605 0.01155 0 + 0.00149395 0.0113798 0 0.00140742 0.0115638 0 0.0011412 0.0116802 0 0.00135045 0.0117101 0 + 0.000983811 0.0118613 0 0.000562029 0.0118472 0 0.000309456 0.0117771 0 0.000270269 0.0119602 0 + 0.00115315 0.0118057 0 0.000825039 0.0117797 0 0.000955761 0.0116322 0 0.000482801 0.0119444 0 + 0.000230215 0.0118786 0 0.000403117 0.0117695 0 0.00264759 0.0089451 0 0.00276446 0.00931954 0 + 0.00212535 0.00876443 0 0.00199737 0.00831701 0 0.00233361 0.00957663 0 0.00240876 0.00993365 0 + 0.00176138 0.0089049 0 0.00185277 0.00934265 0 0.00153384 0.00793813 0 0.00140336 0.00741811 0 + 0.00100961 0.0068218 0 0.00123845 0.00794323 0 0.00133801 0.00846258 0 0.000881595 0.00727337 0 + 0.00198151 0.0101225 0 0.0020141 0.0104575 0 0.00149662 0.00941315 0 0.00155022 0.00983598 0 + 0.00159794 0.0105739 0 0.00120809 0.00983359 0 0.00105331 0.00839734 0 0.00112054 0.00891017 0 + 0.000739328 0.0076589 0 0.000851449 0.00877314 0 0.000886509 0.00623003 0 0.000573699 0.00539666 0 + 0.000469156 0.00473445 0 0.000783234 0.00667196 0 0.000501814 0.00575496 0 0.000415378 0.00507143 0 + 0.000175021 0.00291306 0 0.000248474 0.00364393 0 5.76303e-05 0.00154487 0 2.92106e-05 0.000747564 0 + 0.000155741 0.00312203 0 0.000218102 0.00388732 0 2.64048e-05 0.000804147 0 5.10626e-05 0.00165043 0 + 0.000667171 0.00705427 0 0.000421818 0.00606104 0 0.000354823 0.00536314 0 0.000540517 0.00737082 0 + 0.00028864 0.00560488 0 0.000133927 0.00330319 0 0.000184212 0.00409548 0 2.31758e-05 0.000853661 0 + 4.36789e-05 0.00174113 0 0.000109993 0.0034536 0 1.95867e-05 0.000895302 0 0.00158769 0.0108827 0 + 0.00118953 0.0109238 0 0.00122323 0.0102365 0 0.000900794 0.0101596 0 0.00113675 0.0112026 0 + 0.000877347 0.0105381 0 0.000885411 0.00927374 0 0.000636361 0.00906472 0 0.000585413 0.00797224 0 + 0.000636608 0.00954764 0 0.00042246 0.0082085 0 0.000762941 0.0111667 0 0.000668495 0.0114123 0 + 0.000518107 0.010736 0 0.000579727 0.0103862 0 0.000324817 0.0112991 0 0.00019016 0.0115087 0 + 0.000249899 0.0105099 0 0.000151053 0.0108273 0 0.000378117 0.00972765 0 0.000411551 0.00926758 0 + 0.00025308 0.00836406 0 0.000180523 0.00937865 0 0.000113925 0.00981106 0 7.98878e-05 0.00843656 0 + 0.000335182 0.00631002 0 0.000405472 0.00761662 0 0.000217981 0.00579284 0 0.000243376 0.00649801 0 + 0.000147427 0.0042651 0 8.43601e-05 0.00357091 0 3.56163e-05 0.00181549 0 1.57015e-05 0.000928412 0 + 0.000108372 0.00439351 0 2.70123e-05 0.00187235 0 0.000264236 0.00778789 0 0.00014787 0.00662213 0 + 0.000143998 0.00592413 0 0.000119011 0.00788203 0 5.01401e-05 0.00668049 0 6.78442e-05 0.00599675 0 + 5.74457e-05 0.00365331 0 6.76762e-05 0.00447876 0 1.80052e-05 0.00191085 0 1.15842e-05 0.00095248 0 + 2.967e-05 0.00369955 0 2.59652e-05 0.00451955 0 7.29936e-06 0.000967139 0 8.73361e-06 0.00193039 0 + -0.00038584 0.00921566 0 -0.000751095 0.00985338 0 -0.000351005 0.0101703 0 -0.00160898 0.00913633 0 + -0.00147768 0.0100835 0 -0.00031375 0.0109459 0 -0.000680327 0.0106899 0 -0.00027477 0.0115189 0 + -0.00060513 0.0113321 0 -0.00133533 0.010853 0 -0.00118453 0.0114218 0 -0.00190525 0.00973628 0 + -0.00280785 0.00896625 0 -0.00258206 0.00989645 0 -0.0030306 0.00952273 0 -0.00173259 0.0105635 0 + -0.00233677 0.0106524 0 -0.00154816 0.0111987 0 -0.00207643 0.0112112 0 -0.00275867 0.0103325 0 + -0.00246778 0.0109544 0 -0.000234838 0.0118661 0 -0.000526937 0.0117565 0 -0.000447337 0.0119399 0 + -0.00102818 0.0117666 0 -0.000194802 0.011964 0 -0.000368071 0.011859 0 -0.000155586 0.0117894 0 + -0.00086948 0.0118643 0 -0.000711953 0.0116917 0 -0.00135541 0.0116187 0 -0.00180601 0.0115503 0 + -0.00115822 0.0118006 0 -0.0021634 0.0113659 0 -0.0018516 0.0115443 0 -0.000960827 0.0117211 0 + -0.00153105 0.0116467 0 -0.00125759 0.0114779 0 -0.00153906 0.0114672 0 -0.00396396 0.008708 0 + -0.00410961 0.00921597 0 -0.00364713 0.00961212 0 -0.00505884 0.00836555 0 -0.00512477 0.00882074 0 + -0.00465587 0.00923482 0 -0.00330264 0.010347 0 -0.00374256 0.0100003 0 -0.00334968 0.0106028 0 + -0.00293671 0.0108904 0 -0.00421749 0.00994147 0 -0.00466831 0.00957213 0 -0.00375165 0.0104642 0 + -0.00417954 0.0101495 0 -0.006074 0.00794424 0 -0.00605853 0.00834325 0 -0.00559124 0.00877046 0 + -0.00699095 0.00745081 0 -0.00643621 0.00822645 0 -0.0050659 0.00944224 0 -0.00551992 0.00905466 0 + -0.00450748 0.00993938 0 -0.00494303 0.00960147 0 -0.00583241 0.00885724 0 -0.00519046 0.00932423 0 + -0.00293832 0.0110017 0 -0.00255636 0.0112203 0 -0.00251668 0.011175 0 -0.00326723 0.0107818 0 + -0.0036676 0.0105319 0 -0.00314268 0.0106985 0 -0.00216932 0.0113146 0 -0.00209378 0.011101 0 + -0.00178409 0.0111511 0 -0.00277409 0.010873 0 -0.00261599 0.0106282 0 -0.00228305 0.0107165 0 + -0.00392664 0.0102417 0 -0.00433864 0.00996387 0 -0.00371879 0.010122 0 -0.0045226 0.00960844 0 + -0.00333519 0.0103289 0 -0.00309668 0.0100562 0 -0.00274607 0.0101809 0 -0.00384239 0.0096909 0 + -0.00316474 0.00955262 0 -0.000118189 0.0113188 0 -0.000291033 0.0114903 0 -8.36833e-05 0.0105288 0 + -0.00021827 0.0108106 0 -0.00055942 0.0112256 0 -0.000416009 0.0104428 0 -5.32145e-05 0.00939625 0 + -0.000151978 0.0097966 0 -9.45033e-05 0.00842491 0 -0.000286154 0.00932013 0 -0.000767855 0.0113574 0 + -0.000992219 0.0110209 0 -0.000584316 0.0106862 0 -0.000742067 0.010253 0 -0.00123308 0.0111119 0 + -0.000941536 0.0104559 0 -0.000415599 0.00968452 0 -0.000514783 0.00915143 0 -0.000267476 0.00832931 0 + -0.000672945 0.00947649 0 -0.000436413 0.00815119 0 -2.79992e-05 0.00789763 0 -4.83408e-05 0.00667224 0 + -9.32444e-06 0.00600963 0 -0.000174589 0.00783445 0 -8.63522e-05 0.00596256 0 1.45379e-06 0.00370892 0 + -1.61319e-05 0.00451527 0 2.91192e-06 0.000972169 0 -6.63222e-07 0.0019307 0 -2.67814e-05 0.0036813 0 + -1.51286e-06 0.000967495 0 -0.000146096 0.00659749 0 -0.000318551 0.00769346 0 -0.000162082 0.00585627 0 + -0.000241649 0.00645738 0 -5.79855e-05 0.00446599 0 -5.46132e-05 0.00361711 0 -1.00455e-05 0.00191175 0 + -5.9093e-06 0.00095319 0 -9.89653e-05 0.00437246 0 -1.9273e-05 0.00187385 0 -0.00140993 0.0107078 0 + -0.00167946 0.0107577 0 -0.00128438 0.0101232 0 -0.00105684 0.00996233 0 -0.00180588 0.0102911 0 + -0.00209977 0.0103001 0 -0.00135532 0.0095753 0 -0.00160729 0.00969328 0 -0.00092002 0.00917568 0 + -0.000735591 0.00889272 0 -0.000598693 0.00789327 0 -0.000945061 0.00854798 0 -0.00115282 0.00878675 0 + -0.000751695 0.00755952 0 -0.00217341 0.00977728 0 -0.00248677 0.00974641 0 -0.00163247 0.00909793 0 + -0.00190471 0.0091729 0 -0.00250585 0.00917461 0 -0.00188329 0.00853784 0 -0.00113968 0.00812257 0 + -0.00136736 0.00831579 0 -0.000892792 0.0071552 0 -0.00131591 0.0076233 0 -0.000457677 0.00747679 0 + -0.00033352 0.00625404 0 -0.000235354 0.00569237 0 -0.000589756 0.00718777 0 -0.000420228 0.00599062 0 + -0.000305008 0.00547337 0 -8.16182e-05 0.00351731 0 -0.000138439 0.00423611 0 -2.82047e-05 0.00181757 0 + -1.02113e-05 0.00092947 0 -0.000107372 0.00338346 0 -0.000175775 0.00405904 0 -1.43525e-05 0.000896697 0 + -3.6699e-05 0.00174378 0 -0.000712575 0.00683092 0 -0.000500291 0.00567125 0 -0.000369883 0.0052027 0 + -0.000823918 0.00641193 0 -0.000428813 0.00488468 0 -0.000131449 0.00321762 0 -0.000210337 0.00384403 0 + -1.82658e-05 0.000855381 0 -4.46137e-05 0.00165364 0 -0.000153423 0.00302245 0 -2.18838e-05 0.000806175 0 + -2.92106e-05 -0.000747564 0 -6.32457e-05 -0.00142616 0 -0.000175021 -0.00291306 0 -3.15302e-05 -0.000684861 0 + -0.000191348 -0.00267974 0 -0.000469156 -0.00473445 0 -0.000274704 -0.00336933 0 -0.000636008 -0.00499204 0 + -0.000515009 -0.0043578 0 -3.33012e-05 -0.000617134 0 -6.77731e-05 -0.00129636 0 -0.000204309 -0.00242612 0 + -7.10776e-05 -0.00115779 0 -3.44617e-05 -0.000545623 0 -0.00021349 -0.00215679 0 -0.000296169 -0.0030682 0 + -0.00055179 -0.00394799 0 -0.000687275 -0.004548 0 -0.00031225 -0.0027459 0 -0.000578358 -0.00351242 0 + -0.000726038 -0.00407243 0 -0.000886509 -0.00623003 0 -0.00112076 -0.00631163 0 -0.00140336 -0.00741811 0 + -0.00170405 -0.00734543 0 -0.000974803 -0.00573585 0 -0.00154455 -0.00683072 0 -0.00199737 -0.00831701 0 + -0.00236244 -0.00811084 0 -0.00264759 -0.0089451 0 -0.0021996 -0.00765927 0 -0.00291682 -0.0082384 0 + -0.00121245 -0.00575153 0 -0.00104592 -0.00519793 0 -0.00165853 -0.00619118 0 -0.00184467 -0.00669459 0 + -0.00128208 -0.00515148 0 -0.00109768 -0.00462599 0 -0.00195172 -0.00599716 0 -0.0017418 -0.00551106 0 + -0.00236307 -0.00694302 0 -0.0025585 -0.00739299 0 -0.00313465 -0.00746873 0 -0.00270801 -0.00662364 0 + -0.0024828 -0.00618119 0 -0.00329447 -0.00664997 0 -7.30253e-05 -0.00101306 0 -3.49506e-05 -0.000471716 0 + -0.00021848 -0.00187691 0 -7.34836e-05 -0.000865072 0 -0.00032233 -0.00240848 0 -0.00059357 -0.00305941 0 + -0.000750838 -0.00357424 0 -0.000325791 -0.00206267 0 -0.00076022 -0.00306335 0 -3.47073e-05 -0.000396945 0 + -7.23211e-05 -0.00071703 0 -0.000218869 -0.00159217 0 -3.36723e-05 -0.00032299 0 -0.00021425 -0.00130884 0 + -0.00059629 -0.00259817 0 -0.000322022 -0.00171586 0 -0.000752732 -0.00255065 0 -0.000585386 -0.00213882 0 + -0.00132705 -0.00452269 0 -0.00112789 -0.00403095 0 -0.00202125 -0.0052662 0 -0.0017909 -0.00480331 0 + -0.00134478 -0.00387766 0 -0.00204928 -0.0045162 0 -0.00280545 -0.00581717 0 -0.00255381 -0.00538828 0 + -0.00338965 -0.00579771 0 -0.00284532 -0.00498959 0 -0.00113438 -0.00342489 0 -0.00133268 -0.00323015 0 + -0.00180233 -0.00408229 0 -0.00203188 -0.00376317 0 -0.00111497 -0.00282108 0 -0.00177264 -0.00336379 0 + -0.00257114 -0.0045804 0 -0.00282211 -0.00415852 0 -0.00341358 -0.00492924 0 -0.00252981 -0.0037752 0 + -0.00335966 -0.00406354 0 -0.00333446 -0.00932074 0 -0.00307399 -0.00862524 0 -0.00381822 -0.00890607 0 + -0.00367462 -0.00858501 0 -0.0040398 -0.00946233 0 -0.00457617 -0.00897075 0 -0.00474681 -0.00938827 0 + -0.00533032 -0.00883673 0 -0.00445292 -0.00871603 0 -0.00523319 -0.0086484 0 -0.00333013 -0.00786258 0 + -0.00395003 -0.00778362 0 -0.00413735 -0.00811922 0 -0.00352568 -0.00704509 0 -0.00415234 -0.00693103 0 + -0.00438121 -0.00727571 0 -0.00495956 -0.0081788 0 -0.00478759 -0.00790304 0 -0.00562738 -0.00784232 0 + -0.00577776 -0.00805721 0 -0.00525273 -0.00732973 0 -0.00503366 -0.007038 0 -0.00612011 -0.00722137 0 + -0.00591742 -0.00698454 0 -0.00544008 -0.00911698 0 -0.00606465 -0.00852149 0 -0.00610557 -0.00866689 0 + -0.0059984 -0.00839908 0 -0.00673307 -0.00798503 0 -0.00673066 -0.00805644 0 -0.00676464 -0.00804249 0 + -0.00741721 -0.00741721 0 -0.00742323 -0.00742323 0 -0.00645106 -0.00761683 0 -0.00657457 -0.00777037 0 + -0.00724195 -0.00724195 0 -0.0069649 -0.0069649 0 -0.00678433 -0.00678433 0 -0.00761683 -0.00645106 0 + -0.0073342 -0.0073342 0 -0.00798503 -0.00673307 0 -0.00804249 -0.00676464 0 -0.00777037 -0.00657457 0 + -0.00839908 -0.0059984 0 -0.00852149 -0.00606465 0 -0.00365346 -0.00618805 0 -0.00427318 -0.00604345 0 + -0.00454085 -0.0063913 0 -0.00370627 -0.00530847 0 -0.00460732 -0.00548353 0 -0.00544494 -0.00643939 0 + -0.00518099 -0.00613738 0 -0.00634482 -0.00634482 0 -0.0060914 -0.0060914 0 -0.00552544 -0.00552544 0 + -0.00643939 -0.00544494 0 -0.00430422 -0.00513889 0 -0.00367694 -0.00442507 0 -0.00457171 -0.00457171 0 + -0.00423712 -0.00423712 0 -0.00521944 -0.00521944 0 -0.00548353 -0.00460732 0 -0.00613738 -0.00518099 0 + -0.0063913 -0.00454085 0 -0.00513889 -0.00430422 0 -0.00604345 -0.00427318 0 -0.00722137 -0.00612011 0 + -0.00698454 -0.00591742 0 -0.00784232 -0.00562738 0 -0.00732973 -0.00525273 0 -0.00805721 -0.00577776 0 + -0.0086484 -0.00523319 0 -0.00883673 -0.00533032 0 -0.0081788 -0.00495956 0 -0.00897075 -0.00457617 0 + -0.007038 -0.00503366 0 -0.00727571 -0.00438121 0 -0.00790304 -0.00478759 0 -0.00693103 -0.00415234 0 + -0.00778362 -0.00395003 0 -0.00871603 -0.00445292 0 -0.00811922 -0.00413735 0 -0.00890607 -0.00381822 0 + -0.00858501 -0.00367462 0 -3.1787e-05 -0.000251673 0 -6.9408e-05 -0.000572416 0 -0.00020422 -0.00103375 0 + -6.46169e-05 -0.000435007 0 -2.89941e-05 -0.000184966 0 -0.000188381 -0.000774257 0 -0.000310414 -0.00137613 0 + -0.000559731 -0.00169238 0 -0.000726931 -0.00204806 0 -0.000290364 -0.00105226 0 -0.000518206 -0.00127075 0 + -0.00068138 -0.00156849 0 -5.78232e-05 -0.000308865 0 -2.52383e-05 -0.00012498 0 -0.000166339 -0.000538304 0 + -4.8906e-05 -0.000198345 0 -0.000261275 -0.000753656 0 -0.000459703 -0.000886762 0 -0.000614653 -0.00112586 0 + -0.000222558 -0.000490443 0 -0.000525337 -0.000735078 0 -0.00128818 -0.00259518 0 -0.00106749 -0.00223398 0 + -0.00169836 -0.002665 0 -0.0019651 -0.00302454 0 -0.00120871 -0.00198904 0 -0.000989797 -0.00167923 0 + -0.00184501 -0.00231925 0 -0.00157605 -0.00200449 0 -0.00242488 -0.00299193 0 -0.00273035 -0.00334321 0 + -0.0032213 -0.0032213 0 -0.00256454 -0.00256454 0 -0.00225141 -0.00225141 0 -0.00299193 -0.00242488 0 + -0.00109172 -0.00142927 0 -0.000879747 -0.00117364 0 -0.00166769 -0.00166769 0 -0.00140227 -0.00140227 0 + -0.000934678 -0.000934678 0 -0.00142927 -0.00109172 0 -0.00231925 -0.00184501 0 -0.00200449 -0.00157605 0 + -0.002665 -0.00169836 0 -0.00198904 -0.00120871 0 -2.04662e-05 -7.39772e-05 0 -3.77501e-05 -0.000108084 0 + -0.000137709 -0.000334367 0 -1.46282e-05 -3.43583e-05 0 -0.000102119 -0.000171479 0 -0.000383127 -0.00055411 0 + -0.00017364 -0.000273397 0 -0.00041204 -0.00041204 0 -0.000287401 -0.000287401 0 -7.67993e-06 -8.66746e-06 0 + -2.42487e-05 -4.30053e-05 0 -5.92134e-05 -5.92134e-05 0 -8.30914e-06 -8.30914e-06 0 4.14191e-07 4.14191e-07 0 + -8.66746e-06 -7.67993e-06 0 -0.000113964 -0.000113964 0 -0.000171479 -0.000102119 0 -0.000273397 -0.00017364 0 + -4.30053e-05 -2.42487e-05 0 -3.43583e-05 -1.46282e-05 0 -0.000108084 -3.77501e-05 0 -0.000735216 -0.000735216 0 + -0.000735078 -0.000525337 0 -0.00117364 -0.000879747 0 -0.00112586 -0.000614653 0 -0.00055411 -0.000383127 0 + -0.000886762 -0.000459703 0 -0.00167923 -0.000989797 0 -0.00156849 -0.00068138 0 -0.00223398 -0.00106749 0 + -0.00127075 -0.000518206 0 -0.00169238 -0.000559731 0 -0.000490443 -0.000222558 0 -0.000334367 -0.000137709 0 + -0.000538304 -0.000166339 0 -0.000753656 -0.000261275 0 -0.000198345 -4.8906e-05 0 -7.39772e-05 -2.04662e-05 0 + -0.000308865 -5.78232e-05 0 -0.00012498 -2.52383e-05 0 -0.000774257 -0.000188381 0 -0.00105226 -0.000290364 0 + -0.00103375 -0.00020422 0 -0.000435007 -6.46169e-05 0 -0.000184966 -2.89941e-05 0 -0.000251673 -3.1787e-05 0 + -0.0035583 -0.0035583 0 -0.00406354 -0.00335966 0 -0.00442507 -0.00367694 0 -0.00334321 -0.00273035 0 + -0.0037752 -0.00252981 0 -0.00415852 -0.00282211 0 -0.00530847 -0.00370627 0 -0.00492924 -0.00341358 0 + -0.00579771 -0.00338965 0 -0.00618805 -0.00365346 0 -0.00498959 -0.00284532 0 -0.0045804 -0.00257114 0 + -0.00581717 -0.00280545 0 -0.00538828 -0.00255381 0 -0.00302454 -0.0019651 0 -0.00336379 -0.00177264 0 + -0.00376317 -0.00203188 0 -0.00259518 -0.00128818 0 -0.00323015 -0.00133268 0 -0.0045162 -0.00204928 0 + -0.00408229 -0.00180233 0 -0.0052662 -0.00202125 0 -0.00480331 -0.0017909 0 -0.00387766 -0.00134478 0 + -0.00452269 -0.00132705 0 -0.00664997 -0.00329447 0 -0.00704509 -0.00352568 0 -0.00746873 -0.00313465 0 + -0.00662364 -0.00270801 0 -0.00618119 -0.0024828 0 -0.00694302 -0.00236307 0 -0.00786258 -0.00333013 0 + -0.0082384 -0.00291682 0 -0.00862524 -0.00307399 0 -0.00739299 -0.0025585 0 -0.00765927 -0.0021996 0 + -0.00811084 -0.00236244 0 -0.00599716 -0.00195172 0 -0.00551106 -0.0017418 0 -0.00619118 -0.00165853 0 + -0.00515148 -0.00128208 0 -0.00669459 -0.00184467 0 -0.00683072 -0.00154455 0 -0.00734543 -0.00170405 0 + -0.00575153 -0.00121245 0 -0.00631163 -0.00112076 0 -0.00282108 -0.00111497 0 -0.00204806 -0.000726931 0 + -0.00255065 -0.000752732 0 -0.00213882 -0.000585386 0 -0.00342489 -0.00113438 0 -0.00306335 -0.00076022 0 + -0.00403095 -0.00112789 0 -0.00357424 -0.000750838 0 -0.00259817 -0.00059629 0 -0.00305941 -0.00059357 0 + -0.00137613 -0.000310414 0 -0.00130884 -0.00021425 0 -0.00171586 -0.000322022 0 -0.000572416 -6.9408e-05 0 + -0.00032299 -3.36723e-05 0 -0.00071703 -7.23211e-05 0 -0.00206267 -0.000325791 0 -0.00159217 -0.000218869 0 + -0.00187691 -0.00021848 0 -0.00240848 -0.00032233 0 -0.000865072 -7.34836e-05 0 -0.000396945 -3.47073e-05 0 + -0.00101306 -7.30253e-05 0 -0.000471716 -3.49506e-05 0 -0.00462599 -0.00109768 0 -0.00407243 -0.000726038 0 + -0.00519793 -0.00104592 0 -0.00351242 -0.000578358 0 -0.00394799 -0.00055179 0 -0.00573585 -0.000974803 0 + -0.004548 -0.000687275 0 -0.00499204 -0.000636008 0 -0.0043578 -0.000515009 0 -0.00215679 -0.00021349 0 + -0.0027459 -0.00031225 0 -0.00242612 -0.000204309 0 -0.00115779 -7.10776e-05 0 -0.000545623 -3.44617e-05 0 + -0.000617134 -3.33012e-05 0 -0.0030682 -0.000296169 0 -0.00267974 -0.000191348 0 -0.00336933 -0.000274704 0 + -0.00129636 -6.77731e-05 0 -0.000684861 -3.15302e-05 0 -0.00142616 -6.32457e-05 0 -0.00730406 -0.00730406 0 + -0.0080108 -0.00666315 0 -0.00781592 -0.00642822 0 -0.00853531 -0.00579779 0 -0.00805644 -0.00673066 0 + -0.00862179 -0.00592431 0 -0.00825772 -0.00544737 0 -0.00898214 -0.00483865 0 -0.00862237 -0.00437996 0 + -0.0091099 -0.00502118 0 -0.00951291 -0.00403828 0 -0.00868686 -0.00607761 0 -0.00866689 -0.00610557 0 + -0.00927578 -0.00537487 0 -0.00925635 -0.00528908 0 -0.00920492 -0.00544943 0 -0.00911698 -0.00544008 0 + -0.00980905 -0.00474319 0 -0.00975815 -0.00478979 0 -0.0098016 -0.00455636 0 -0.00974162 -0.00441498 0 + -0.0102359 -0.00366545 0 -0.0103239 -0.00396022 0 -0.010312 -0.00406126 0 -0.0107695 -0.0032682 0 + -0.00890414 -0.00324447 0 -0.00934415 -0.00380323 0 -0.0096157 -0.00270903 0 -0.0098245 -0.0029926 0 + -0.00909868 -0.00205936 0 -0.00979263 -0.00157356 0 -0.00920305 -0.000843099 0 -0.00987226 -0.00041435 0 + -0.0100399 -0.00190115 0 -0.0101557 -0.000780942 0 -0.0101349 -0.00347128 0 -0.0105718 -0.00271757 0 + -0.0104301 -0.00247393 0 -0.0107414 -0.00311481 0 -0.0111235 -0.00242433 0 -0.0110549 -0.00222127 0 + -0.0106227 -0.00143891 0 -0.0108042 -0.00172813 0 -0.0109295 -0.000712545 0 -0.0107097 -0.000382164 0 + -0.0112596 -0.00129389 0 -0.0113686 -0.0015434 0 -0.0113525 -0.00034699 0 -0.0115011 -0.000639118 0 + -0.00954611 -0.00479032 0 -0.00938827 -0.00474681 0 -0.0101733 -0.00417031 0 -0.0100492 -0.00418019 0 + -0.00969152 -0.00411331 0 -0.0103288 -0.00358176 0 -0.0107079 -0.00348283 0 -0.0106201 -0.00354528 0 + -0.0110919 -0.00285404 0 -0.0108723 -0.00299225 0 -0.00946233 -0.0040398 0 -0.00962229 -0.00343279 0 + -0.010129 -0.00355839 0 -0.0102557 -0.00299003 0 -0.00932074 -0.00333446 0 -0.00997811 -0.00293794 0 + -0.0107051 -0.00301885 0 -0.0107959 -0.00249889 0 -0.0111813 -0.00243135 0 -0.0105462 -0.00249343 0 + -0.0110159 -0.00200931 0 -0.0111415 -0.00274045 0 -0.0114571 -0.00211844 0 -0.0114672 -0.00195571 0 + -0.0113131 -0.00235558 0 -0.0116444 -0.00168251 0 -0.0116802 -0.0011412 0 -0.0117101 -0.00135045 0 + -0.0117771 -0.000309456 0 -0.0118472 -0.000562029 0 -0.0118613 -0.000983811 0 -0.0119602 -0.000270269 0 + -0.01155 -0.00180605 0 -0.0112342 -0.00196836 0 -0.0115638 -0.00140742 0 -0.0113798 -0.00149395 0 + -0.0118057 -0.00115315 0 -0.0117797 -0.000825039 0 -0.0119444 -0.000482801 0 -0.0118786 -0.000230215 0 + -0.0116322 -0.000955761 0 -0.0117695 -0.000403117 0 -0.00921566 0.00038584 0 -0.00985338 0.000751095 0 + -0.00913633 0.00160898 0 -0.0101703 0.000351005 0 -0.0100835 0.00147768 0 -0.00896625 0.00280785 0 + -0.00973628 0.00190525 0 -0.00952273 0.0030306 0 -0.00989645 0.00258206 0 -0.0109459 0.00031375 0 + -0.0106899 0.000680327 0 -0.010853 0.00133533 0 -0.0113321 0.00060513 0 -0.0115189 0.00027477 0 + -0.0114218 0.00118453 0 -0.0105635 0.00173259 0 -0.0106524 0.00233677 0 -0.0103325 0.00275867 0 + -0.0111987 0.00154816 0 -0.0112112 0.00207643 0 -0.0109544 0.00246778 0 -0.008708 0.00396396 0 + -0.00921597 0.00410961 0 -0.00836555 0.00505884 0 -0.00882074 0.00512477 0 -0.00961212 0.00364713 0 + -0.00923482 0.00465587 0 -0.00794424 0.006074 0 -0.00834325 0.00605853 0 -0.00745081 0.00699095 0 + -0.00877046 0.00559124 0 -0.00822645 0.00643621 0 -0.0100003 0.00374256 0 -0.010347 0.00330264 0 + -0.00994147 0.00421749 0 -0.00957213 0.00466831 0 -0.0106028 0.00334968 0 -0.0108904 0.00293671 0 + -0.0101495 0.00417954 0 -0.0104642 0.00375165 0 -0.00944224 0.0050659 0 -0.00905466 0.00551992 0 + -0.00885724 0.00583241 0 -0.00960147 0.00494303 0 -0.00993938 0.00450748 0 -0.00932423 0.00519046 0 + -0.0117565 0.000526937 0 -0.0118661 0.000234838 0 -0.0117666 0.00102818 0 -0.0119399 0.000447337 0 + -0.0116187 0.00135541 0 -0.0115503 0.00180601 0 -0.0113659 0.0021634 0 -0.0118006 0.00115822 0 + -0.0115443 0.0018516 0 -0.011964 0.000194802 0 -0.011859 0.000368071 0 -0.0118643 0.00086948 0 + -0.0117894 0.000155586 0 -0.0116917 0.000711953 0 -0.0116467 0.00153105 0 -0.0117211 0.000960827 0 + -0.0114672 0.00153906 0 -0.0114779 0.00125759 0 -0.0110017 0.00293832 0 -0.0112203 0.00255636 0 + -0.0105319 0.0036676 0 -0.0107818 0.00326723 0 -0.011175 0.00251668 0 -0.0106985 0.00314268 0 + -0.00996387 0.00433864 0 -0.0102417 0.00392664 0 -0.00960844 0.0045226 0 -0.010122 0.00371879 0 + -0.0113146 0.00216932 0 -0.011101 0.00209378 0 -0.010873 0.00277409 0 -0.0106282 0.00261599 0 + -0.0111511 0.00178409 0 -0.0107165 0.00228305 0 -0.0103289 0.00333519 0 -0.0100562 0.00309668 0 + -0.0096909 0.00384239 0 -0.0101809 0.00274607 0 -0.00955262 0.00316474 0 -0.00931954 -0.00276446 0 + -0.0089451 -0.00264759 0 -0.00957663 -0.00233361 0 -0.00993365 -0.00240876 0 -0.00876443 -0.00212535 0 + -0.00831701 -0.00199737 0 -0.00934265 -0.00185277 0 -0.0089049 -0.00176138 0 -0.0101225 -0.00198151 0 + -0.0104575 -0.0020141 0 -0.0105739 -0.00159794 0 -0.00983598 -0.00155022 0 -0.00941315 -0.00149662 0 + -0.00983359 -0.00120809 0 -0.00793813 -0.00153384 0 -0.00741811 -0.00140336 0 -0.00846258 -0.00133801 0 + -0.00794323 -0.00123845 0 -0.0068218 -0.00100961 0 -0.00727337 -0.000881595 0 -0.00891017 -0.00112054 0 + -0.00839734 -0.00105331 0 -0.00877314 -0.000851449 0 -0.0076589 -0.000739328 0 -0.0108827 -0.00158769 0 + -0.0109238 -0.00118953 0 -0.0112026 -0.00113675 0 -0.0102365 -0.00122323 0 -0.0101596 -0.000900794 0 + -0.0105381 -0.000877347 0 -0.0114123 -0.000668495 0 -0.0111667 -0.000762941 0 -0.0112991 -0.000324817 0 + -0.0115087 -0.00019016 0 -0.010736 -0.000518107 0 -0.0103862 -0.000579727 0 -0.0108273 -0.000151053 0 + -0.0105099 -0.000249899 0 -0.00927374 -0.000885411 0 -0.00906472 -0.000636361 0 -0.00954764 -0.000636608 0 + -0.00797224 -0.000585413 0 -0.0082085 -0.00042246 0 -0.00972765 -0.000378117 0 -0.00926758 -0.000411551 0 + -0.00981106 -0.000113925 0 -0.00937865 -0.000180523 0 -0.00836406 -0.00025308 0 -0.00843656 -7.98878e-05 0 + -0.00623003 -0.000886509 0 -0.00539666 -0.000573699 0 -0.00667196 -0.000783234 0 -0.00575496 -0.000501814 0 + -0.00473445 -0.000469156 0 -0.00507143 -0.000415378 0 -0.00705427 -0.000667171 0 -0.00606104 -0.000421818 0 + -0.00737082 -0.000540517 0 -0.00536314 -0.000354823 0 -0.00560488 -0.00028864 0 -0.00364393 -0.000248474 0 + -0.00291306 -0.000175021 0 -0.00312203 -0.000155741 0 -0.00388732 -0.000218102 0 -0.00154487 -5.76303e-05 0 + -0.000747564 -2.92106e-05 0 -0.00165043 -5.10626e-05 0 -0.000804147 -2.64048e-05 0 -0.00330319 -0.000133927 0 + -0.00409548 -0.000184212 0 -0.0034536 -0.000109993 0 -0.00174113 -4.36789e-05 0 -0.000853661 -2.31758e-05 0 + -0.000895302 -1.95867e-05 0 -0.00761662 -0.000405472 0 -0.00631002 -0.000335182 0 -0.00649801 -0.000243376 0 + -0.00579284 -0.000217981 0 -0.00778789 -0.000264236 0 -0.00662213 -0.00014787 0 -0.00788203 -0.000119011 0 + -0.00668049 -5.01401e-05 0 -0.00592413 -0.000143998 0 -0.00599675 -6.78442e-05 0 -0.0042651 -0.000147427 0 + -0.00357091 -8.43601e-05 0 -0.00439351 -0.000108372 0 -0.00181549 -3.56163e-05 0 -0.000928412 -1.57015e-05 0 + -0.00187235 -2.70123e-05 0 -0.00447876 -6.76762e-05 0 -0.00365331 -5.74457e-05 0 -0.00369955 -2.967e-05 0 + -0.00451955 -2.59652e-05 0 -0.00191085 -1.80052e-05 0 -0.00095248 -1.15842e-05 0 -0.00193039 -8.73361e-06 0 + -0.000967139 -7.29936e-06 0 -0.0113188 0.000118189 0 -0.0114903 0.000291033 0 -0.0112256 0.00055942 0 + -0.0108106 0.00021827 0 -0.0105288 8.36833e-05 0 -0.0104428 0.000416009 0 -0.0113574 0.000767855 0 + -0.0110209 0.000992219 0 -0.0111119 0.00123308 0 -0.0106862 0.000584316 0 -0.010253 0.000742067 0 + -0.0104559 0.000941536 0 -0.0097966 0.000151978 0 -0.00939625 5.32145e-05 0 -0.00932013 0.000286154 0 + -0.00842491 9.45033e-05 0 -0.00968452 0.000415599 0 -0.00915143 0.000514783 0 -0.00947649 0.000672945 0 + -0.00832931 0.000267476 0 -0.00815119 0.000436413 0 -0.0107577 0.00167946 0 -0.0107078 0.00140993 0 + -0.0102911 0.00180588 0 -0.0103001 0.00209977 0 -0.0101232 0.00128438 0 -0.00996233 0.00105684 0 + -0.00969328 0.00160729 0 -0.0095753 0.00135532 0 -0.00977728 0.00217341 0 -0.00974641 0.00248677 0 + -0.00917461 0.00250585 0 -0.0091729 0.00190471 0 -0.00909793 0.00163247 0 -0.00853784 0.00188329 0 + -0.00917568 0.00092002 0 -0.00889272 0.000735591 0 -0.00878675 0.00115282 0 -0.00854798 0.000945061 0 + -0.00789327 0.000598693 0 -0.00755952 0.000751695 0 -0.00831579 0.00136736 0 -0.00812257 0.00113968 0 + -0.0076233 0.00131591 0 -0.0071552 0.000892792 0 -0.00789763 2.79992e-05 0 -0.00667224 4.83408e-05 0 + -0.00783445 0.000174589 0 -0.00600963 9.32444e-06 0 -0.00596256 8.63522e-05 0 -0.00769346 0.000318551 0 + -0.00659749 0.000146096 0 -0.00645738 0.000241649 0 -0.00585627 0.000162082 0 -0.00370892 -1.45379e-06 0 + -0.00451527 1.61319e-05 0 -0.0036813 2.67814e-05 0 -0.0019307 6.63222e-07 0 -0.000972169 -2.91192e-06 0 + -0.000967495 1.51286e-06 0 -0.00446599 5.79855e-05 0 -0.00361711 5.46132e-05 0 -0.00437246 9.89653e-05 0 + -0.00191175 1.00455e-05 0 -0.00095319 5.9093e-06 0 -0.00187385 1.9273e-05 0 -0.00747679 0.000457677 0 + -0.00625404 0.00033352 0 -0.00718777 0.000589756 0 -0.00599062 0.000420228 0 -0.00569237 0.000235354 0 + -0.00547337 0.000305008 0 -0.00683092 0.000712575 0 -0.00567125 0.000500291 0 -0.00641193 0.000823918 0 + -0.0052027 0.000369883 0 -0.00488468 0.000428813 0 -0.00423611 0.000138439 0 -0.00351731 8.16182e-05 0 + -0.00338346 0.000107372 0 -0.00405904 0.000175775 0 -0.00181757 2.82047e-05 0 -0.00092947 1.02113e-05 0 + -0.00174378 3.6699e-05 0 -0.000896697 1.43525e-05 0 -0.00321762 0.000131449 0 -0.00384403 0.000210337 0 + -0.00302245 0.000153423 0 -0.00165364 4.46137e-05 0 -0.000855381 1.82658e-05 0 -0.000806175 2.18838e-05 0 + -0.00689336 0.0077912 0 -0.0077912 0.00689336 0 -0.00717376 0.00761173 0 -0.00761173 0.00717376 0 + -0.00628141 0.00845624 0 -0.00650159 0.00819609 0 -0.00562582 0.00896758 0 -0.00578683 0.00862888 0 + -0.00693678 0.00778683 0 -0.00621359 0.00825838 0 -0.00845624 0.00628141 0 -0.00819609 0.00650159 0 + -0.00778683 0.00693678 0 -0.00896758 0.00562582 0 -0.00862888 0.00578683 0 -0.00825838 0.00621359 0 + -0.00705797 0.00747004 0 -0.00747004 0.00705797 0 -0.00669199 0.00748609 0 -0.00628282 0.00786517 0 + -0.00748609 0.00669199 0 -0.00786517 0.00628282 0 -0.00666465 0.00704668 0 -0.00704668 0.00666465 0 + -0.00493887 0.00930671 0 -0.0050431 0.00889254 0 -0.00423421 0.00945509 0 -0.00545569 0.00857135 0 + -0.00467813 0.00870867 0 -0.00352685 0.00939421 0 -0.00428551 0.0089695 0 -0.00353063 0.00884217 0 + -0.00389748 0.00865327 0 -0.0058765 0.00777048 0 -0.00547615 0.00810616 0 -0.00503975 0.00789566 0 + -0.00580972 0.00726328 0 -0.00618869 0.00691855 0 -0.00530823 0.00703072 0 -0.00465433 0.00817698 0 + -0.00419956 0.00784613 0 -0.00383534 0.00806159 0 -0.00493862 0.00732742 0 -0.00442405 0.00698734 0 + -0.00407041 0.00722473 0 -0.00930671 0.00493887 0 -0.00889254 0.0050431 0 -0.00857135 0.00545569 0 + -0.00945509 0.00423421 0 -0.00870867 0.00467813 0 -0.00777048 0.0058765 0 -0.00810616 0.00547615 0 + -0.00691855 0.00618869 0 -0.00726328 0.00580972 0 -0.00789566 0.00503975 0 -0.00703072 0.00530823 0 + -0.0089695 0.00428551 0 -0.00939421 0.00352685 0 -0.00865327 0.00389748 0 -0.00884217 0.00353063 0 + -0.00817698 0.00465433 0 -0.00784613 0.00419956 0 -0.00732742 0.00493862 0 -0.00698734 0.00442405 0 + -0.00806159 0.00383534 0 -0.00722473 0.00407041 0 -0.00603179 0.00637963 0 -0.00637963 0.00603179 0 + -0.00547274 0.00613032 0 -0.00613032 0.00547274 0 -0.00512816 0.00643669 0 -0.00456192 0.00609325 0 + -0.00422742 0.00634721 0 -0.0052127 0.00552243 0 -0.00429791 0.00544642 0 -0.00643669 0.00512816 0 + -0.00609325 0.00456192 0 -0.00552243 0.0052127 0 -0.00634721 0.00422742 0 -0.00544642 0.00429791 0 + -0.0046041 0.00518197 0 -0.00518197 0.0046041 0 -0.0042734 0.00454153 0 -0.00454153 0.0042734 0 + -0.00283321 0.00910551 0 -0.00279653 0.00849296 0 -0.00217108 0.00857043 0 -0.00210273 0.00790423 0 + -0.00313184 0.00838804 0 -0.00240082 0.00789586 0 -0.00155961 0.00777039 0 -0.00147025 0.00705836 0 + -0.00101936 0.00668682 0 -0.00172558 0.00715962 0 -0.00112876 0.00616213 0 -0.00303875 0.00774391 0 + -0.0033754 0.00760637 0 -0.00258838 0.00716084 0 -0.00228576 0.00720787 0 -0.00322584 0.00694077 0 + -0.00355663 0.00677459 0 -0.00242735 0.00646112 0 -0.00272816 0.00637859 0 -0.00186124 0.00649398 0 + -0.00159915 0.00643736 0 -0.00121836 0.0055902 0 -0.00169908 0.0057713 0 -0.00196258 0.00578547 0 + -0.00128551 0.00498131 0 -0.000572223 0.00530108 0 -0.000921566 0.00593768 0 -0.000480632 0.00452452 0 + -0.000634536 0.00488624 0 -0.000241491 0.00359455 0 -0.000172864 0.00280116 0 -5.18053e-05 0.00154858 0 + -2.51383e-05 0.000749877 0 -0.000268596 0.00331472 0 -5.81297e-05 0.00143036 0 -0.00100329 0.00541623 0 + -0.000685736 0.00443388 0 -0.00052417 0.00412834 0 -0.00106687 0.00485683 0 -0.000724327 0.00395215 0 + -0.000558251 0.00370317 0 -0.000189342 0.00255748 0 -0.000291013 0.00300938 0 -6.34414e-05 0.00130099 0 + -2.79608e-05 0.000687434 0 -0.000202423 0.00229574 0 -0.000308095 0.00268399 0 -3.02815e-05 0.000619934 0 + -6.75931e-05 0.00116279 0 -0.00335109 0.00609851 0 -0.00366825 0.00590852 0 -0.00252244 0.0056779 0 + -0.00281458 0.005564 0 -0.00340779 0.00523383 0 -0.00256596 0.00487372 0 -0.0017665 0.00507262 0 + -0.00202555 0.00504756 0 -0.00132757 0.00434703 0 -0.00179784 0.00435512 0 -0.00370296 0.00502569 0 + -0.0033892 0.00436509 0 -0.00284202 0.00473355 0 -0.00255284 0.00406566 0 -0.00365345 0.00414538 0 + -0.00280486 0.00390534 0 -0.00204612 0.00429518 0 -0.00178954 0.00363405 0 -0.00134186 0.00370018 0 + -0.00202021 0.0035447 0 -0.00132572 0.00305484 0 -0.00111007 0.0042699 0 -0.000748803 0.00345018 0 + -0.000581696 0.00325691 0 -0.00113064 0.00366704 0 -0.000593317 0.00279839 0 -0.000211671 0.00202079 0 + -0.000319196 0.00234473 0 -3.203e-05 0.000548611 0 -7.04357e-05 0.00101836 0 -0.000216643 0.00173806 0 + -3.31344e-05 0.000474847 0 -0.000757653 0.00293811 0 -0.00112631 0.00306103 0 -0.000591919 0.0023373 0 + -0.000749351 0.00242708 0 -0.000323658 0.00199845 0 -0.000216894 0.0014535 0 -7.18175e-05 0.000870599 0 + -3.35214e-05 0.000400163 0 -0.000320819 0.00165264 0 -7.15834e-05 0.000722675 0 -0.00910551 0.00283321 0 + -0.00849296 0.00279653 0 -0.00838804 0.00313184 0 -0.00857043 0.00217108 0 -0.00790423 0.00210273 0 + -0.00789586 0.00240082 0 -0.00760637 0.0033754 0 -0.00774391 0.00303875 0 -0.00694077 0.00322584 0 + -0.00677459 0.00355663 0 -0.00716084 0.00258838 0 -0.00720787 0.00228576 0 -0.00637859 0.00272816 0 + -0.00646112 0.00242735 0 -0.00777039 0.00155961 0 -0.00705836 0.00147025 0 -0.00715962 0.00172558 0 + -0.00668682 0.00101936 0 -0.00616213 0.00112876 0 -0.00649398 0.00186124 0 -0.00643736 0.00159915 0 + -0.00578547 0.00196258 0 -0.0057713 0.00169908 0 -0.0055902 0.00121836 0 -0.00498131 0.00128551 0 + -0.00609851 0.00335109 0 -0.00590852 0.00366825 0 -0.00523383 0.00340779 0 -0.005564 0.00281458 0 + -0.0056779 0.00252244 0 -0.00487372 0.00256596 0 -0.00502569 0.00370296 0 -0.00436509 0.0033892 0 + -0.00414538 0.00365345 0 -0.00473355 0.00284202 0 -0.00406566 0.00255284 0 -0.00390534 0.00280486 0 + -0.00504756 0.00202555 0 -0.00507262 0.0017665 0 -0.00435512 0.00179784 0 -0.00434703 0.00132757 0 + -0.00429518 0.00204612 0 -0.00363405 0.00178954 0 -0.0035447 0.00202021 0 -0.00370018 0.00134186 0 + -0.00305484 0.00132572 0 -0.00593768 0.000921566 0 -0.00530108 0.000572223 0 -0.00488624 0.000634536 0 + -0.00452452 0.000480632 0 -0.00541623 0.00100329 0 -0.00443388 0.000685736 0 -0.00485683 0.00106687 0 + -0.00395215 0.000724327 0 -0.00412834 0.00052417 0 -0.00370317 0.000558251 0 -0.00359455 0.000241491 0 + -0.00280116 0.000172864 0 -0.00331472 0.000268596 0 -0.00154858 5.18053e-05 0 -0.000749877 2.51383e-05 0 + -0.00143036 5.81297e-05 0 -0.00300938 0.000291013 0 -0.00255748 0.000189342 0 -0.00229574 0.000202423 0 + -0.00268399 0.000308095 0 -0.00130099 6.34414e-05 0 -0.000687434 2.79608e-05 0 -0.00116279 6.75931e-05 0 + -0.000619934 3.02815e-05 0 -0.0042699 0.00111007 0 -0.00345018 0.000748803 0 -0.00366704 0.00113064 0 + -0.00325691 0.000581696 0 -0.00279839 0.000593317 0 -0.00306103 0.00112631 0 -0.00293811 0.000757653 0 + -0.00242708 0.000749351 0 -0.0023373 0.000591919 0 -0.00202079 0.000211671 0 -0.00234473 0.000319196 0 + -0.00173806 0.000216643 0 -0.00101836 7.04357e-05 0 -0.000548611 3.203e-05 0 -0.000474847 3.31344e-05 0 + -0.00199845 0.000323658 0 -0.0014535 0.000216894 0 -0.00165264 0.000320819 0 -0.000870599 7.18175e-05 0 + -0.000400163 3.35214e-05 0 -0.000722675 7.15834e-05 0 -0.00328858 0.00351238 0 -0.00351238 0.00328858 0 + -0.00269745 0.00309912 0 -0.00247797 0.00327238 0 -0.00309912 0.00269745 0 -0.00327238 0.00247797 0 + -0.00233622 0.00251409 0 -0.00251409 0.00233622 0 -0.00194375 0.00281401 0 -0.00173801 0.00292602 0 + -0.00127644 0.00242635 0 -0.00163961 0.00224907 0 -0.00181261 0.00212241 0 -0.0011913 0.00183131 0 + -0.00281401 0.00194375 0 -0.00292602 0.00173801 0 -0.00212241 0.00181261 0 -0.00224907 0.00163961 0 + -0.00242635 0.00127644 0 -0.00183131 0.0011913 0 -0.0014907 0.00162263 0 -0.00162263 0.0014907 0 + -0.00106753 0.00128755 0 -0.00128755 0.00106753 0 -0.00109483 0.00246583 0 -0.000722357 0.0019292 0 + -0.00057629 0.00188425 0 -0.00103388 0.00189658 0 -0.000675106 0.00145759 0 -0.000545204 0.00145073 0 + -0.000211966 0.00117364 0 -0.000310005 0.00131548 0 -6.95735e-05 0.000578055 0 -3.31157e-05 0.000326228 0 + -0.000201395 0.000905535 0 -0.000290527 0.00099584 0 -3.18388e-05 0.000254852 0 -6.56213e-05 0.000440486 0 + -0.000941129 0.00136957 0 -0.000606001 0.00102637 0 -0.000497404 0.00104911 0 -0.000814198 0.000902294 0 + -0.000431596 0.000692668 0 -0.000184695 0.000656799 0 -0.000261671 0.000703214 0 -2.96085e-05 0.00018799 0 + -5.95506e-05 0.000313999 0 -0.000161359 0.00043558 0 -2.63365e-05 0.000127736 0 -0.00246583 0.00109483 0 + -0.0019292 0.000722357 0 -0.00189658 0.00103388 0 -0.00145759 0.000675106 0 -0.00188425 0.00057629 0 + -0.00145073 0.000545204 0 -0.00136957 0.000941129 0 -0.00102637 0.000606001 0 -0.000902294 0.000814198 0 + -0.00104911 0.000497404 0 -0.000692668 0.000431596 0 -0.00131548 0.000310005 0 -0.00117364 0.000211966 0 + -0.000905535 0.000201395 0 -0.00099584 0.000290527 0 -0.000578055 6.95735e-05 0 -0.000326228 3.31157e-05 0 + -0.000440486 6.56213e-05 0 -0.000254852 3.18388e-05 0 -0.000656799 0.000184695 0 -0.000703214 0.000261671 0 + -0.00043558 0.000161359 0 -0.000313999 5.95506e-05 0 -0.00018799 2.96085e-05 0 -0.000127736 2.63365e-05 0 + -0.000513391 0.000650614 0 -0.000650614 0.000513391 0 -0.000346413 0.00039554 0 -0.00039554 0.000346413 0 + -0.000222687 0.000447783 0 -0.000130832 0.000250564 0 -5.11693e-05 0.000202902 0 -2.19246e-05 7.63231e-05 0 + -0.000172763 0.000240376 0 -4.02591e-05 0.000111783 0 -0.000447783 0.000222687 0 -0.000250564 0.000130832 0 + -0.000240376 0.000172763 0 -0.000202902 5.11693e-05 0 -7.63231e-05 2.19246e-05 0 -0.000111783 4.02591e-05 0 + -9.2482e-05 0.000110968 0 -0.000110968 9.2482e-05 0 -2.65498e-05 4.54986e-05 0 -1.62578e-05 3.61246e-05 0 + -4.54986e-05 2.65498e-05 0 -3.61246e-05 1.62578e-05 0 -9.18595e-06 9.64829e-06 0 -9.64829e-06 9.18595e-06 0 + </DataArray> + <DataArray type="Float32" Name="rank" NumberOfComponents="1" format="ascii"> + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + </DataArray> + </CellData> + <Points> + <DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii"> + 0.025 0.025 0 0.025 0 0 0 0 0 0 0.025 0 + 0.05 0.025 0 0.025 0.05 0 0.05 0 0 0.075 0.025 0 + 0.075 0 0 0.05 0.05 0 0.075 0.05 0 0 0.05 0 + 0.025 0.075 0 0 0.075 0 0.05 0.075 0 0.075 0.075 0 + 0.1 0.025 0 0.1 0 0 0.125 0.025 0 0.125 0 0 + 0.1 0.05 0 0.125 0.05 0 0.15 0.025 0 0.15 0 0 + 0.175 0.025 0 0.15 0.05 0 0.1 0.075 0 0.125 0.075 0 + 0.15 0.075 0 0.175 0.05 0 0.175 0.075 0 0 0.1 0 + 0.025 0.1 0 0.05 0.1 0 0.025 0.125 0 0 0.125 0 + 0.05 0.125 0 0.075 0.1 0 0.075 0.125 0 0.025 0.15 0 + 0 0.15 0 0.05 0.15 0 0.025 0.175 0 0.075 0.15 0 + 0.05 0.175 0 0.075 0.175 0 0.1 0.1 0 0.125 0.1 0 + 0.1 0.125 0 0.125 0.125 0 0.15 0.1 0 0.175 0.1 0 + 0.15 0.125 0 0.175 0.125 0 0.1 0.15 0 0.125 0.15 0 + 0.1 0.175 0 0.125 0.175 0 0.15 0.15 0 0.175 0.15 0 + 0.15 0.175 0 0.175 0 0 0.2 0.025 0 0.2 0 0 + 0.2 0.05 0 0.225 0.025 0 0.225 0 0 0.25 0.025 0 + 0.25 0 0 0.225 0.05 0 0.25 0.05 0 0.2 0.075 0 + 0.225 0.075 0 0.25 0.075 0 0.275 0.025 0 0.275 0 0 + 0.3 0.025 0 0.275 0.05 0 0.3 0 0 0.325 0.025 0 + 0.325 0 0 0.3 0.05 0 0.325 0.05 0 0.275 0.075 0 + 0.3 0.075 0 0.325 0.075 0 0.2 0.1 0 0.2 0.125 0 + 0.225 0.1 0 0.25 0.1 0 0.225 0.125 0 0.25 0.125 0 + 0.2 0.15 0 0.175 0.175 0 0.2 0.175 0 0.225 0.15 0 + 0.25 0.15 0 0.225 0.175 0 0.25 0.175 0 0.275 0.1 0 + 0.3 0.1 0 0.275 0.125 0 0.3 0.125 0 0.325 0.1 0 + 0.325 0.125 0 0.275 0.15 0 0.3 0.15 0 0.275 0.175 0 + 0.325 0.15 0 0.3 0.175 0 0.325 0.175 0 0 0.175 0 + 0.025 0.2 0 0 0.2 0 0.05 0.2 0 0.075 0.2 0 + 0 0.225 0 0.025 0.225 0 0.05 0.225 0 0.025 0.25 0 + 0 0.25 0 0.05 0.25 0 0.075 0.225 0 0.075 0.25 0 + 0.1 0.2 0 0.125 0.2 0 0.15 0.2 0 0.175 0.2 0 + 0.1 0.225 0 0.125 0.225 0 0.1 0.25 0 0.125 0.25 0 + 0.15 0.225 0 0.175 0.225 0 0.15 0.25 0 0.175 0.25 0 + 0.025 0.275 0 0 0.275 0 0.05 0.275 0 0.025 0.3 0 + 0.075 0.275 0 0.05 0.3 0 0.075 0.3 0 0 0.3 0 + 0.025 0.325 0 0 0.325 0 0.05 0.325 0 0.075 0.325 0 + 0.1 0.275 0 0.125 0.275 0 0.1 0.3 0 0.125 0.3 0 + 0.15 0.275 0 0.175 0.275 0 0.15 0.3 0 0.1 0.325 0 + 0.125 0.325 0 0.15 0.325 0 0.175 0.3 0 0.175 0.325 0 + 0.2 0.2 0 0.225 0.2 0 0.25 0.2 0 0.2 0.225 0 + 0.2 0.25 0 0.225 0.225 0 0.25 0.225 0 0.225 0.25 0 + 0.25 0.25 0 0.275 0.2 0 0.3 0.2 0 0.325 0.2 0 + 0.275 0.225 0 0.3 0.225 0 0.275 0.25 0 0.3 0.25 0 + 0.325 0.225 0 0.325 0.25 0 0.2 0.275 0 0.2 0.3 0 + 0.225 0.275 0 0.25 0.275 0 0.225 0.3 0 0.25 0.3 0 + 0.2 0.325 0 0.225 0.325 0 0.25 0.325 0 0.275 0.275 0 + 0.3 0.275 0 0.275 0.3 0 0.325 0.275 0 0.3 0.3 0 + 0.325 0.3 0 0.275 0.325 0 0.3 0.325 0 0.325 0.325 0 + 0.35 0.025 0 0.35 0 0 0.375 0.025 0 0.375 0 0 + 0.35 0.05 0 0.375 0.05 0 0.4 0.025 0 0.4 0 0 + 0.425 0.025 0 0.4 0.05 0 0.35 0.075 0 0.375 0.075 0 + 0.4 0.075 0 0.425 0.05 0 0.425 0.075 0 0.425 0 0 + 0.45 0.025 0 0.45 0 0 0.45 0.05 0 0.475 0.025 0 + 0.475 0 0 0.5 0.025 0 0.5 0 0 0.475 0.05 0 + 0.5 0.05 0 0.45 0.075 0 0.475 0.075 0 0.5 0.075 0 + 0.35 0.1 0 0.375 0.1 0 0.35 0.125 0 0.375 0.125 0 + 0.4 0.1 0 0.425 0.1 0 0.4 0.125 0 0.425 0.125 0 + 0.35 0.15 0 0.375 0.15 0 0.35 0.175 0 0.375 0.175 0 + 0.4 0.15 0 0.425 0.15 0 0.4 0.175 0 0.45 0.1 0 + 0.45 0.125 0 0.475 0.1 0 0.5 0.1 0 0.475 0.125 0 + 0.5 0.125 0 0.45 0.15 0 0.425 0.175 0 0.45 0.175 0 + 0.475 0.15 0 0.5 0.15 0 0.475 0.175 0 0.5 0.175 0 + 0.525 0.025 0 0.525 0 0 0.55 0.025 0 0.525 0.05 0 + 0.55 0 0 0.575 0.025 0 0.575 0 0 0.55 0.05 0 + 0.575 0.05 0 0.525 0.075 0 0.55 0.075 0 0.575 0.075 0 + 0.6 0.025 0 0.6 0 0 0.625 0.025 0 0.625 0 0 + 0.6 0.05 0 0.625 0.05 0 0.65 0.025 0 0.65 0 0 + 0.675 0.025 0 0.65 0.05 0 0.6 0.075 0 0.625 0.075 0 + 0.65 0.075 0 0.675 0.05 0 0.675 0.075 0 0.525 0.1 0 + 0.55 0.1 0 0.525 0.125 0 0.55 0.125 0 0.575 0.1 0 + 0.575 0.125 0 0.525 0.15 0 0.55 0.15 0 0.525 0.175 0 + 0.575 0.15 0 0.55 0.175 0 0.575 0.175 0 0.6 0.1 0 + 0.625 0.1 0 0.6 0.125 0 0.625 0.125 0 0.65 0.1 0 + 0.675 0.1 0 0.65 0.125 0 0.675 0.125 0 0.6 0.15 0 + 0.625 0.15 0 0.6 0.175 0 0.625 0.175 0 0.65 0.15 0 + 0.675 0.15 0 0.65 0.175 0 0.35 0.2 0 0.375 0.2 0 + 0.4 0.2 0 0.425 0.2 0 0.35 0.225 0 0.375 0.225 0 + 0.35 0.25 0 0.375 0.25 0 0.4 0.225 0 0.425 0.225 0 + 0.4 0.25 0 0.425 0.25 0 0.45 0.2 0 0.475 0.2 0 + 0.5 0.2 0 0.45 0.225 0 0.45 0.25 0 0.475 0.225 0 + 0.5 0.225 0 0.475 0.25 0 0.5 0.25 0 0.35 0.275 0 + 0.375 0.275 0 0.35 0.3 0 0.375 0.3 0 0.4 0.275 0 + 0.425 0.275 0 0.4 0.3 0 0.35 0.325 0 0.375 0.325 0 + 0.4 0.325 0 0.425 0.3 0 0.425 0.325 0 0.45 0.275 0 + 0.45 0.3 0 0.475 0.275 0 0.5 0.275 0 0.475 0.3 0 + 0.5 0.3 0 0.45 0.325 0 0.475 0.325 0 0.5 0.325 0 + 0.525 0.2 0 0.55 0.2 0 0.575 0.2 0 0.525 0.225 0 + 0.55 0.225 0 0.525 0.25 0 0.55 0.25 0 0.575 0.225 0 + 0.575 0.25 0 0.6 0.2 0 0.625 0.2 0 0.65 0.2 0 + 0.675 0.175 0 0.675 0.2 0 0.6 0.225 0 0.625 0.225 0 + 0.6 0.25 0 0.625 0.25 0 0.65 0.225 0 0.675 0.225 0 + 0.65 0.25 0 0.675 0.25 0 0.525 0.275 0 0.55 0.275 0 + 0.525 0.3 0 0.575 0.275 0 0.55 0.3 0 0.575 0.3 0 + 0.525 0.325 0 0.55 0.325 0 0.575 0.325 0 0.6 0.275 0 + 0.625 0.275 0 0.6 0.3 0 0.625 0.3 0 0.65 0.275 0 + 0.675 0.275 0 0.65 0.3 0 0.6 0.325 0 0.625 0.325 0 + 0.65 0.325 0 0.675 0.3 0 0.675 0.325 0 0 0.35 0 + 0.025 0.35 0 0.05 0.35 0 0.025 0.375 0 0 0.375 0 + 0.05 0.375 0 0.075 0.35 0 0.075 0.375 0 0.025 0.4 0 + 0 0.4 0 0.05 0.4 0 0.025 0.425 0 0.075 0.4 0 + 0.05 0.425 0 0.075 0.425 0 0.1 0.35 0 0.125 0.35 0 + 0.1 0.375 0 0.125 0.375 0 0.15 0.35 0 0.175 0.35 0 + 0.15 0.375 0 0.175 0.375 0 0.1 0.4 0 0.125 0.4 0 + 0.1 0.425 0 0.125 0.425 0 0.15 0.4 0 0.175 0.4 0 + 0.15 0.425 0 0 0.425 0 0.025 0.45 0 0 0.45 0 + 0.05 0.45 0 0.075 0.45 0 0 0.475 0 0.025 0.475 0 + 0.05 0.475 0 0.025 0.5 0 0 0.5 0 0.05 0.5 0 + 0.075 0.475 0 0.075 0.5 0 0.1 0.45 0 0.125 0.45 0 + 0.15 0.45 0 0.175 0.425 0 0.175 0.45 0 0.1 0.475 0 + 0.125 0.475 0 0.1 0.5 0 0.125 0.5 0 0.15 0.475 0 + 0.175 0.475 0 0.15 0.5 0 0.175 0.5 0 0.2 0.35 0 + 0.2 0.375 0 0.225 0.35 0 0.25 0.35 0 0.225 0.375 0 + 0.25 0.375 0 0.2 0.4 0 0.2 0.425 0 0.225 0.4 0 + 0.25 0.4 0 0.225 0.425 0 0.25 0.425 0 0.275 0.35 0 + 0.3 0.35 0 0.275 0.375 0 0.3 0.375 0 0.325 0.35 0 + 0.325 0.375 0 0.275 0.4 0 0.3 0.4 0 0.275 0.425 0 + 0.325 0.4 0 0.3 0.425 0 0.325 0.425 0 0.2 0.45 0 + 0.225 0.45 0 0.25 0.45 0 0.2 0.475 0 0.2 0.5 0 + 0.225 0.475 0 0.25 0.475 0 0.225 0.5 0 0.25 0.5 0 + 0.275 0.45 0 0.3 0.45 0 0.325 0.45 0 0.275 0.475 0 + 0.3 0.475 0 0.275 0.5 0 0.3 0.5 0 0.325 0.475 0 + 0.325 0.5 0 0.025 0.525 0 0 0.525 0 0.05 0.525 0 + 0.025 0.55 0 0.075 0.525 0 0.05 0.55 0 0.075 0.55 0 + 0 0.55 0 0.025 0.575 0 0 0.575 0 0.05 0.575 0 + 0.075 0.575 0 0.1 0.525 0 0.125 0.525 0 0.1 0.55 0 + 0.125 0.55 0 0.15 0.525 0 0.175 0.525 0 0.15 0.55 0 + 0.1 0.575 0 0.125 0.575 0 0.15 0.575 0 0.175 0.55 0 + 0.175 0.575 0 0 0.6 0 0.025 0.6 0 0.05 0.6 0 + 0.025 0.625 0 0 0.625 0 0.05 0.625 0 0.075 0.6 0 + 0.075 0.625 0 0.025 0.65 0 0 0.65 0 0.05 0.65 0 + 0.025 0.675 0 0.075 0.65 0 0.05 0.675 0 0.075 0.675 0 + 0.1 0.6 0 0.125 0.6 0 0.1 0.625 0 0.125 0.625 0 + 0.15 0.6 0 0.175 0.6 0 0.15 0.625 0 0.175 0.625 0 + 0.1 0.65 0 0.125 0.65 0 0.1 0.675 0 0.125 0.675 0 + 0.15 0.65 0 0.175 0.65 0 0.15 0.675 0 0.2 0.525 0 + 0.2 0.55 0 0.225 0.525 0 0.25 0.525 0 0.225 0.55 0 + 0.25 0.55 0 0.2 0.575 0 0.225 0.575 0 0.25 0.575 0 + 0.275 0.525 0 0.3 0.525 0 0.275 0.55 0 0.325 0.525 0 + 0.3 0.55 0 0.325 0.55 0 0.275 0.575 0 0.3 0.575 0 + 0.325 0.575 0 0.2 0.6 0 0.2 0.625 0 0.225 0.6 0 + 0.25 0.6 0 0.225 0.625 0 0.25 0.625 0 0.2 0.65 0 + 0.175 0.675 0 0.2 0.675 0 0.225 0.65 0 0.25 0.65 0 + 0.225 0.675 0 0.25 0.675 0 0.275 0.6 0 0.3 0.6 0 + 0.275 0.625 0 0.3 0.625 0 0.325 0.6 0 0.325 0.625 0 + 0.275 0.65 0 0.3 0.65 0 0.275 0.675 0 0.325 0.65 0 + 0.3 0.675 0 0.325 0.675 0 0.35 0.35 0 0.375 0.35 0 + 0.35 0.375 0 0.375 0.375 0 0.4 0.35 0 0.425 0.35 0 + 0.4 0.375 0 0.425 0.375 0 0.35 0.4 0 0.375 0.4 0 + 0.35 0.425 0 0.375 0.425 0 0.4 0.4 0 0.425 0.4 0 + 0.4 0.425 0 0.45 0.35 0 0.45 0.375 0 0.475 0.35 0 + 0.5 0.35 0 0.475 0.375 0 0.5 0.375 0 0.45 0.4 0 + 0.425 0.425 0 0.45 0.425 0 0.475 0.4 0 0.5 0.4 0 + 0.475 0.425 0 0.5 0.425 0 0.35 0.45 0 0.375 0.45 0 + 0.4 0.45 0 0.425 0.45 0 0.35 0.475 0 0.375 0.475 0 + 0.35 0.5 0 0.375 0.5 0 0.4 0.475 0 0.425 0.475 0 + 0.4 0.5 0 0.425 0.5 0 0.45 0.45 0 0.475 0.45 0 + 0.5 0.45 0 0.45 0.475 0 0.45 0.5 0 0.475 0.475 0 + 0.5 0.475 0 0.475 0.5 0 0.5 0.5 0 0.525 0.35 0 + 0.55 0.35 0 0.525 0.375 0 0.55 0.375 0 0.575 0.35 0 + 0.575 0.375 0 0.525 0.4 0 0.55 0.4 0 0.525 0.425 0 + 0.575 0.4 0 0.55 0.425 0 0.575 0.425 0 0.6 0.35 0 + 0.625 0.35 0 0.6 0.375 0 0.625 0.375 0 0.65 0.35 0 + 0.675 0.35 0 0.65 0.375 0 0.675 0.375 0 0.6 0.4 0 + 0.625 0.4 0 0.6 0.425 0 0.625 0.425 0 0.65 0.4 0 + 0.675 0.4 0 0.65 0.425 0 0.525 0.45 0 0.55 0.45 0 + 0.575 0.45 0 0.525 0.475 0 0.55 0.475 0 0.525 0.5 0 + 0.55 0.5 0 0.575 0.475 0 0.575 0.5 0 0.6 0.45 0 + 0.625 0.45 0 0.65 0.45 0 0.675 0.425 0 0.675 0.45 0 + 0.6 0.475 0 0.625 0.475 0 0.6 0.5 0 0.625 0.5 0 + 0.65 0.475 0 0.675 0.475 0 0.65 0.5 0 0.675 0.5 0 + 0.35 0.525 0 0.375 0.525 0 0.35 0.55 0 0.375 0.55 0 + 0.4 0.525 0 0.425 0.525 0 0.4 0.55 0 0.35 0.575 0 + 0.375 0.575 0 0.4 0.575 0 0.425 0.55 0 0.425 0.575 0 + 0.45 0.525 0 0.45 0.55 0 0.475 0.525 0 0.5 0.525 0 + 0.475 0.55 0 0.5 0.55 0 0.45 0.575 0 0.475 0.575 0 + 0.5 0.575 0 0.35 0.6 0 0.375 0.6 0 0.35 0.625 0 + 0.375 0.625 0 0.4 0.6 0 0.425 0.6 0 0.4 0.625 0 + 0.425 0.625 0 0.35 0.65 0 0.375 0.65 0 0.35 0.675 0 + 0.375 0.675 0 0.4 0.65 0 0.425 0.65 0 0.4 0.675 0 + 0.45 0.6 0 0.45 0.625 0 0.475 0.6 0 0.5 0.6 0 + 0.475 0.625 0 0.5 0.625 0 0.45 0.65 0 0.425 0.675 0 + 0.45 0.675 0 0.475 0.65 0 0.5 0.65 0 0.475 0.675 0 + 0.5 0.675 0 0.525 0.525 0 0.55 0.525 0 0.525 0.55 0 + 0.575 0.525 0 0.55 0.55 0 0.575 0.55 0 0.525 0.575 0 + 0.55 0.575 0 0.575 0.575 0 0.6 0.525 0 0.625 0.525 0 + 0.6 0.55 0 0.625 0.55 0 0.65 0.525 0 0.675 0.525 0 + 0.65 0.55 0 0.6 0.575 0 0.625 0.575 0 0.65 0.575 0 + 0.675 0.55 0 0.675 0.575 0 0.525 0.6 0 0.55 0.6 0 + 0.525 0.625 0 0.55 0.625 0 0.575 0.6 0 0.575 0.625 0 + 0.525 0.65 0 0.55 0.65 0 0.525 0.675 0 0.575 0.65 0 + 0.55 0.675 0 0.575 0.675 0 0.6 0.6 0 0.625 0.6 0 + 0.6 0.625 0 0.625 0.625 0 0.65 0.6 0 0.675 0.6 0 + 0.65 0.625 0 0.675 0.625 0 0.6 0.65 0 0.625 0.65 0 + 0.6 0.675 0 0.625 0.675 0 0.65 0.65 0 0.675 0.65 0 + 0.65 0.675 0 0.675 0 0 0.7 0.025 0 0.7 0 0 + 0.7 0.05 0 0.725 0.025 0 0.725 0 0 0.75 0.025 0 + 0.75 0 0 0.725 0.05 0 0.75 0.05 0 0.7 0.075 0 + 0.725 0.075 0 0.75 0.075 0 0.775 0.025 0 0.775 0 0 + 0.8 0.025 0 0.775 0.05 0 0.8 0 0 0.825 0.025 0 + 0.825 0 0 0.8 0.05 0 0.825 0.05 0 0.775 0.075 0 + 0.8 0.075 0 0.825 0.075 0 0.7 0.1 0 0.7 0.125 0 + 0.725 0.1 0 0.75 0.1 0 0.725 0.125 0 0.75 0.125 0 + 0.7 0.15 0 0.7 0.175 0 0.725 0.15 0 0.75 0.15 0 + 0.725 0.175 0 0.75 0.175 0 0.775 0.1 0 0.8 0.1 0 + 0.775 0.125 0 0.8 0.125 0 0.825 0.1 0 0.825 0.125 0 + 0.775 0.15 0 0.8 0.15 0 0.775 0.175 0 0.825 0.15 0 + 0.8 0.175 0 0.825 0.175 0 0.85 0.025 0 0.85 0 0 + 0.875 0.025 0 0.875 0 0 0.85 0.05 0 0.875 0.05 0 + 0.9 0.025 0 0.9 0 0 0.925 0.025 0 0.9 0.05 0 + 0.85 0.075 0 0.875 0.075 0 0.9 0.075 0 0.925 0.05 0 + 0.925 0.075 0 0.925 0 0 0.95 0.025 0 0.95 0 0 + 0.95 0.05 0 0.975 0.025 0 0.975 0 0 1 0.025 0 + 1 0 0 0.975 0.05 0 1 0.05 0 0.95 0.075 0 + 0.975 0.075 0 1 0.075 0 0.85 0.1 0 0.875 0.1 0 + 0.85 0.125 0 0.875 0.125 0 0.9 0.1 0 0.925 0.1 0 + 0.9 0.125 0 0.925 0.125 0 0.85 0.15 0 0.875 0.15 0 + 0.85 0.175 0 0.875 0.175 0 0.9 0.15 0 0.925 0.15 0 + 0.9 0.175 0 0.95 0.1 0 0.95 0.125 0 0.975 0.1 0 + 1 0.1 0 0.975 0.125 0 1 0.125 0 0.95 0.15 0 + 0.925 0.175 0 0.95 0.175 0 0.975 0.15 0 1 0.15 0 + 0.975 0.175 0 1 0.175 0 0.7 0.2 0 0.725 0.2 0 + 0.75 0.2 0 0.7 0.225 0 0.7 0.25 0 0.725 0.225 0 + 0.75 0.225 0 0.725 0.25 0 0.75 0.25 0 0.775 0.2 0 + 0.8 0.2 0 0.825 0.2 0 0.775 0.225 0 0.8 0.225 0 + 0.775 0.25 0 0.8 0.25 0 0.825 0.225 0 0.825 0.25 0 + 0.7 0.275 0 0.7 0.3 0 0.725 0.275 0 0.75 0.275 0 + 0.725 0.3 0 0.75 0.3 0 0.7 0.325 0 0.725 0.325 0 + 0.75 0.325 0 0.775 0.275 0 0.8 0.275 0 0.775 0.3 0 + 0.825 0.275 0 0.8 0.3 0 0.825 0.3 0 0.775 0.325 0 + 0.8 0.325 0 0.825 0.325 0 0.85 0.2 0 0.875 0.2 0 + 0.9 0.2 0 0.925 0.2 0 0.85 0.225 0 0.875 0.225 0 + 0.85 0.25 0 0.875 0.25 0 0.9 0.225 0 0.925 0.225 0 + 0.9 0.25 0 0.925 0.25 0 0.95 0.2 0 0.975 0.2 0 + 1 0.2 0 0.95 0.225 0 0.95 0.25 0 0.975 0.225 0 + 1 0.225 0 0.975 0.25 0 1 0.25 0 0.85 0.275 0 + 0.875 0.275 0 0.85 0.3 0 0.875 0.3 0 0.9 0.275 0 + 0.925 0.275 0 0.9 0.3 0 0.85 0.325 0 0.875 0.325 0 + 0.9 0.325 0 0.925 0.3 0 0.925 0.325 0 0.95 0.275 0 + 0.95 0.3 0 0.975 0.275 0 1 0.275 0 0.975 0.3 0 + 1 0.3 0 0.95 0.325 0 0.975 0.325 0 1 0.325 0 + 0.7 0.35 0 0.7 0.375 0 0.725 0.35 0 0.75 0.35 0 + 0.725 0.375 0 0.75 0.375 0 0.7 0.4 0 0.7 0.425 0 + 0.725 0.4 0 0.75 0.4 0 0.725 0.425 0 0.75 0.425 0 + 0.775 0.35 0 0.8 0.35 0 0.775 0.375 0 0.8 0.375 0 + 0.825 0.35 0 0.825 0.375 0 0.775 0.4 0 0.8 0.4 0 + 0.775 0.425 0 0.825 0.4 0 0.8 0.425 0 0.825 0.425 0 + 0.7 0.45 0 0.725 0.45 0 0.75 0.45 0 0.7 0.475 0 + 0.7 0.5 0 0.725 0.475 0 0.75 0.475 0 0.725 0.5 0 + 0.75 0.5 0 0.775 0.45 0 0.8 0.45 0 0.825 0.45 0 + 0.775 0.475 0 0.8 0.475 0 0.775 0.5 0 0.8 0.5 0 + 0.825 0.475 0 0.825 0.5 0 0.85 0.35 0 0.875 0.35 0 + 0.85 0.375 0 0.875 0.375 0 0.9 0.35 0 0.925 0.35 0 + 0.9 0.375 0 0.925 0.375 0 0.85 0.4 0 0.875 0.4 0 + 0.85 0.425 0 0.875 0.425 0 0.9 0.4 0 0.925 0.4 0 + 0.9 0.425 0 0.95 0.35 0 0.95 0.375 0 0.975 0.35 0 + 1 0.35 0 0.975 0.375 0 1 0.375 0 0.95 0.4 0 + 0.925 0.425 0 0.95 0.425 0 0.975 0.4 0 1 0.4 0 + 0.975 0.425 0 1 0.425 0 0.85 0.45 0 0.875 0.45 0 + 0.9 0.45 0 0.925 0.45 0 0.85 0.475 0 0.875 0.475 0 + 0.85 0.5 0 0.875 0.5 0 0.9 0.475 0 0.925 0.475 0 + 0.9 0.5 0 0.925 0.5 0 0.95 0.45 0 0.975 0.45 0 + 1 0.45 0 0.95 0.475 0 0.95 0.5 0 0.975 0.475 0 + 1 0.475 0 0.975 0.5 0 1 0.5 0 0.7 0.525 0 + 0.7 0.55 0 0.725 0.525 0 0.75 0.525 0 0.725 0.55 0 + 0.75 0.55 0 0.7 0.575 0 0.725 0.575 0 0.75 0.575 0 + 0.775 0.525 0 0.8 0.525 0 0.775 0.55 0 0.825 0.525 0 + 0.8 0.55 0 0.825 0.55 0 0.775 0.575 0 0.8 0.575 0 + 0.825 0.575 0 0.7 0.6 0 0.7 0.625 0 0.725 0.6 0 + 0.75 0.6 0 0.725 0.625 0 0.75 0.625 0 0.7 0.65 0 + 0.675 0.675 0 0.7 0.675 0 0.725 0.65 0 0.75 0.65 0 + 0.725 0.675 0 0.75 0.675 0 0.775 0.6 0 0.8 0.6 0 + 0.775 0.625 0 0.8 0.625 0 0.825 0.6 0 0.825 0.625 0 + 0.775 0.65 0 0.8 0.65 0 0.775 0.675 0 0.825 0.65 0 + 0.8 0.675 0 0.825 0.675 0 0.85 0.525 0 0.875 0.525 0 + 0.85 0.55 0 0.875 0.55 0 0.9 0.525 0 0.925 0.525 0 + 0.9 0.55 0 0.85 0.575 0 0.875 0.575 0 0.9 0.575 0 + 0.925 0.55 0 0.925 0.575 0 0.95 0.525 0 0.95 0.55 0 + 0.975 0.525 0 1 0.525 0 0.975 0.55 0 1 0.55 0 + 0.95 0.575 0 0.975 0.575 0 1 0.575 0 0.85 0.6 0 + 0.875 0.6 0 0.85 0.625 0 0.875 0.625 0 0.9 0.6 0 + 0.925 0.6 0 0.9 0.625 0 0.925 0.625 0 0.85 0.65 0 + 0.875 0.65 0 0.85 0.675 0 0.875 0.675 0 0.9 0.65 0 + 0.925 0.65 0 0.9 0.675 0 0.95 0.6 0 0.95 0.625 0 + 0.975 0.6 0 1 0.6 0 0.975 0.625 0 1 0.625 0 + 0.95 0.65 0 0.925 0.675 0 0.95 0.675 0 0.975 0.65 0 + 1 0.65 0 0.975 0.675 0 1 0.675 0 0 0.675 0 + 0.025 0.7 0 0 0.7 0 0.05 0.7 0 0.075 0.7 0 + 0 0.725 0 0.025 0.725 0 0.05 0.725 0 0.025 0.75 0 + 0 0.75 0 0.05 0.75 0 0.075 0.725 0 0.075 0.75 0 + 0.1 0.7 0 0.125 0.7 0 0.15 0.7 0 0.175 0.7 0 + 0.1 0.725 0 0.125 0.725 0 0.1 0.75 0 0.125 0.75 0 + 0.15 0.725 0 0.175 0.725 0 0.15 0.75 0 0.175 0.75 0 + 0.025 0.775 0 0 0.775 0 0.05 0.775 0 0.025 0.8 0 + 0.075 0.775 0 0.05 0.8 0 0.075 0.8 0 0 0.8 0 + 0.025 0.825 0 0 0.825 0 0.05 0.825 0 0.075 0.825 0 + 0.1 0.775 0 0.125 0.775 0 0.1 0.8 0 0.125 0.8 0 + 0.15 0.775 0 0.175 0.775 0 0.15 0.8 0 0.1 0.825 0 + 0.125 0.825 0 0.15 0.825 0 0.175 0.8 0 0.175 0.825 0 + 0.2 0.7 0 0.225 0.7 0 0.25 0.7 0 0.2 0.725 0 + 0.2 0.75 0 0.225 0.725 0 0.25 0.725 0 0.225 0.75 0 + 0.25 0.75 0 0.275 0.7 0 0.3 0.7 0 0.325 0.7 0 + 0.275 0.725 0 0.3 0.725 0 0.275 0.75 0 0.3 0.75 0 + 0.325 0.725 0 0.325 0.75 0 0.2 0.775 0 0.2 0.8 0 + 0.225 0.775 0 0.25 0.775 0 0.225 0.8 0 0.25 0.8 0 + 0.2 0.825 0 0.225 0.825 0 0.25 0.825 0 0.275 0.775 0 + 0.3 0.775 0 0.275 0.8 0 0.325 0.775 0 0.3 0.8 0 + 0.325 0.8 0 0.275 0.825 0 0.3 0.825 0 0.325 0.825 0 + 0 0.85 0 0.025 0.85 0 0.05 0.85 0 0.025 0.875 0 + 0 0.875 0 0.05 0.875 0 0.075 0.85 0 0.075 0.875 0 + 0.025 0.9 0 0 0.9 0 0.05 0.9 0 0.025 0.925 0 + 0.075 0.9 0 0.05 0.925 0 0.075 0.925 0 0.1 0.85 0 + 0.125 0.85 0 0.1 0.875 0 0.125 0.875 0 0.15 0.85 0 + 0.175 0.85 0 0.15 0.875 0 0.175 0.875 0 0.1 0.9 0 + 0.125 0.9 0 0.1 0.925 0 0.125 0.925 0 0.15 0.9 0 + 0.175 0.9 0 0.15 0.925 0 0 0.925 0 0.025 0.95 0 + 0 0.95 0 0.05 0.95 0 0.075 0.95 0 0 0.975 0 + 0.025 0.975 0 0.05 0.975 0 0.025 1 0 0 1 0 + 0.05 1 0 0.075 0.975 0 0.075 1 0 0.1 0.95 0 + 0.125 0.95 0 0.15 0.95 0 0.175 0.925 0 0.175 0.95 0 + 0.1 0.975 0 0.125 0.975 0 0.1 1 0 0.125 1 0 + 0.15 0.975 0 0.175 0.975 0 0.15 1 0 0.175 1 0 + 0.2 0.85 0 0.2 0.875 0 0.225 0.85 0 0.25 0.85 0 + 0.225 0.875 0 0.25 0.875 0 0.2 0.9 0 0.2 0.925 0 + 0.225 0.9 0 0.25 0.9 0 0.225 0.925 0 0.25 0.925 0 + 0.275 0.85 0 0.3 0.85 0 0.275 0.875 0 0.3 0.875 0 + 0.325 0.85 0 0.325 0.875 0 0.275 0.9 0 0.3 0.9 0 + 0.275 0.925 0 0.325 0.9 0 0.3 0.925 0 0.325 0.925 0 + 0.2 0.95 0 0.225 0.95 0 0.25 0.95 0 0.2 0.975 0 + 0.2 1 0 0.225 0.975 0 0.25 0.975 0 0.225 1 0 + 0.25 1 0 0.275 0.95 0 0.3 0.95 0 0.325 0.95 0 + 0.275 0.975 0 0.3 0.975 0 0.275 1 0 0.3 1 0 + 0.325 0.975 0 0.325 1 0 0.35 0.7 0 0.375 0.7 0 + 0.4 0.7 0 0.425 0.7 0 0.35 0.725 0 0.375 0.725 0 + 0.35 0.75 0 0.375 0.75 0 0.4 0.725 0 0.425 0.725 0 + 0.4 0.75 0 0.425 0.75 0 0.45 0.7 0 0.475 0.7 0 + 0.5 0.7 0 0.45 0.725 0 0.45 0.75 0 0.475 0.725 0 + 0.5 0.725 0 0.475 0.75 0 0.5 0.75 0 0.35 0.775 0 + 0.375 0.775 0 0.35 0.8 0 0.375 0.8 0 0.4 0.775 0 + 0.425 0.775 0 0.4 0.8 0 0.35 0.825 0 0.375 0.825 0 + 0.4 0.825 0 0.425 0.8 0 0.425 0.825 0 0.45 0.775 0 + 0.45 0.8 0 0.475 0.775 0 0.5 0.775 0 0.475 0.8 0 + 0.5 0.8 0 0.45 0.825 0 0.475 0.825 0 0.5 0.825 0 + 0.525 0.7 0 0.55 0.7 0 0.575 0.7 0 0.525 0.725 0 + 0.55 0.725 0 0.525 0.75 0 0.55 0.75 0 0.575 0.725 0 + 0.575 0.75 0 0.6 0.7 0 0.625 0.7 0 0.65 0.7 0 + 0.675 0.7 0 0.6 0.725 0 0.625 0.725 0 0.6 0.75 0 + 0.625 0.75 0 0.65 0.725 0 0.675 0.725 0 0.65 0.75 0 + 0.675 0.75 0 0.525 0.775 0 0.55 0.775 0 0.525 0.8 0 + 0.575 0.775 0 0.55 0.8 0 0.575 0.8 0 0.525 0.825 0 + 0.55 0.825 0 0.575 0.825 0 0.6 0.775 0 0.625 0.775 0 + 0.6 0.8 0 0.625 0.8 0 0.65 0.775 0 0.675 0.775 0 + 0.65 0.8 0 0.6 0.825 0 0.625 0.825 0 0.65 0.825 0 + 0.675 0.8 0 0.675 0.825 0 0.35 0.85 0 0.375 0.85 0 + 0.35 0.875 0 0.375 0.875 0 0.4 0.85 0 0.425 0.85 0 + 0.4 0.875 0 0.425 0.875 0 0.35 0.9 0 0.375 0.9 0 + 0.35 0.925 0 0.375 0.925 0 0.4 0.9 0 0.425 0.9 0 + 0.4 0.925 0 0.45 0.85 0 0.45 0.875 0 0.475 0.85 0 + 0.5 0.85 0 0.475 0.875 0 0.5 0.875 0 0.45 0.9 0 + 0.425 0.925 0 0.45 0.925 0 0.475 0.9 0 0.5 0.9 0 + 0.475 0.925 0 0.5 0.925 0 0.35 0.95 0 0.375 0.95 0 + 0.4 0.95 0 0.425 0.95 0 0.35 0.975 0 0.375 0.975 0 + 0.35 1 0 0.375 1 0 0.4 0.975 0 0.425 0.975 0 + 0.4 1 0 0.425 1 0 0.45 0.95 0 0.475 0.95 0 + 0.5 0.95 0 0.45 0.975 0 0.45 1 0 0.475 0.975 0 + 0.5 0.975 0 0.475 1 0 0.5 1 0 0.525 0.85 0 + 0.55 0.85 0 0.525 0.875 0 0.55 0.875 0 0.575 0.85 0 + 0.575 0.875 0 0.525 0.9 0 0.55 0.9 0 0.525 0.925 0 + 0.575 0.9 0 0.55 0.925 0 0.575 0.925 0 0.6 0.85 0 + 0.625 0.85 0 0.6 0.875 0 0.625 0.875 0 0.65 0.85 0 + 0.675 0.85 0 0.65 0.875 0 0.675 0.875 0 0.6 0.9 0 + 0.625 0.9 0 0.6 0.925 0 0.625 0.925 0 0.65 0.9 0 + 0.675 0.9 0 0.65 0.925 0 0.525 0.95 0 0.55 0.95 0 + 0.575 0.95 0 0.525 0.975 0 0.55 0.975 0 0.525 1 0 + 0.55 1 0 0.575 0.975 0 0.575 1 0 0.6 0.95 0 + 0.625 0.95 0 0.65 0.95 0 0.675 0.925 0 0.675 0.95 0 + 0.6 0.975 0 0.625 0.975 0 0.6 1 0 0.625 1 0 + 0.65 0.975 0 0.675 0.975 0 0.65 1 0 0.675 1 0 + 0.7 0.7 0 0.725 0.7 0 0.75 0.7 0 0.7 0.725 0 + 0.7 0.75 0 0.725 0.725 0 0.75 0.725 0 0.725 0.75 0 + 0.75 0.75 0 0.775 0.7 0 0.8 0.7 0 0.825 0.7 0 + 0.775 0.725 0 0.8 0.725 0 0.775 0.75 0 0.8 0.75 0 + 0.825 0.725 0 0.825 0.75 0 0.7 0.775 0 0.7 0.8 0 + 0.725 0.775 0 0.75 0.775 0 0.725 0.8 0 0.75 0.8 0 + 0.7 0.825 0 0.725 0.825 0 0.75 0.825 0 0.775 0.775 0 + 0.8 0.775 0 0.775 0.8 0 0.825 0.775 0 0.8 0.8 0 + 0.825 0.8 0 0.775 0.825 0 0.8 0.825 0 0.825 0.825 0 + 0.85 0.7 0 0.875 0.7 0 0.9 0.7 0 0.925 0.7 0 + 0.85 0.725 0 0.875 0.725 0 0.85 0.75 0 0.875 0.75 0 + 0.9 0.725 0 0.925 0.725 0 0.9 0.75 0 0.925 0.75 0 + 0.95 0.7 0 0.975 0.7 0 1 0.7 0 0.95 0.725 0 + 0.95 0.75 0 0.975 0.725 0 1 0.725 0 0.975 0.75 0 + 1 0.75 0 0.85 0.775 0 0.875 0.775 0 0.85 0.8 0 + 0.875 0.8 0 0.9 0.775 0 0.925 0.775 0 0.9 0.8 0 + 0.85 0.825 0 0.875 0.825 0 0.9 0.825 0 0.925 0.8 0 + 0.925 0.825 0 0.95 0.775 0 0.95 0.8 0 0.975 0.775 0 + 1 0.775 0 0.975 0.8 0 1 0.8 0 0.95 0.825 0 + 0.975 0.825 0 1 0.825 0 0.7 0.85 0 0.7 0.875 0 + 0.725 0.85 0 0.75 0.85 0 0.725 0.875 0 0.75 0.875 0 + 0.7 0.9 0 0.7 0.925 0 0.725 0.9 0 0.75 0.9 0 + 0.725 0.925 0 0.75 0.925 0 0.775 0.85 0 0.8 0.85 0 + 0.775 0.875 0 0.8 0.875 0 0.825 0.85 0 0.825 0.875 0 + 0.775 0.9 0 0.8 0.9 0 0.775 0.925 0 0.825 0.9 0 + 0.8 0.925 0 0.825 0.925 0 0.7 0.95 0 0.725 0.95 0 + 0.75 0.95 0 0.7 0.975 0 0.7 1 0 0.725 0.975 0 + 0.75 0.975 0 0.725 1 0 0.75 1 0 0.775 0.95 0 + 0.8 0.95 0 0.825 0.95 0 0.775 0.975 0 0.8 0.975 0 + 0.775 1 0 0.8 1 0 0.825 0.975 0 0.825 1 0 + 0.85 0.85 0 0.875 0.85 0 0.85 0.875 0 0.875 0.875 0 + 0.9 0.85 0 0.925 0.85 0 0.9 0.875 0 0.925 0.875 0 + 0.85 0.9 0 0.875 0.9 0 0.85 0.925 0 0.875 0.925 0 + 0.9 0.9 0 0.925 0.9 0 0.9 0.925 0 0.95 0.85 0 + 0.95 0.875 0 0.975 0.85 0 1 0.85 0 0.975 0.875 0 + 1 0.875 0 0.95 0.9 0 0.925 0.925 0 0.95 0.925 0 + 0.975 0.9 0 1 0.9 0 0.975 0.925 0 1 0.925 0 + 0.85 0.95 0 0.875 0.95 0 0.9 0.95 0 0.925 0.95 0 + 0.85 0.975 0 0.875 0.975 0 0.85 1 0 0.875 1 0 + 0.9 0.975 0 0.925 0.975 0 0.9 1 0 0.925 1 0 + 0.95 0.95 0 0.975 0.95 0 1 0.95 0 0.95 0.975 0 + 0.95 1 0 0.975 0.975 0 1 0.975 0 0.975 1 0 + 1 1 0 + </DataArray> + </Points> + <Cells> + <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii"> + 0 1 2 2 3 0 1 0 4 5 0 3 + 4 6 1 6 4 7 7 8 6 9 4 0 + 10 7 4 3 11 5 12 5 11 0 5 9 + 11 13 12 5 12 14 4 9 10 14 9 5 + 15 10 9 9 14 15 16 17 8 8 7 16 + 18 19 17 17 16 18 20 16 7 21 18 16 + 22 23 19 19 18 22 23 22 24 25 22 18 + 7 10 20 26 20 10 16 20 21 27 21 20 + 10 15 26 20 26 27 18 21 25 28 25 21 + 22 25 29 21 27 28 25 28 30 13 31 32 + 32 12 13 12 32 33 34 32 31 31 35 34 + 32 34 36 33 14 12 14 33 37 37 15 14 + 36 33 32 33 36 38 38 37 33 39 34 35 + 35 40 39 34 39 41 42 39 40 41 36 34 + 36 41 43 43 38 36 44 41 39 45 43 41 + 46 26 15 15 37 46 26 46 47 47 27 26 + 48 46 37 37 38 48 49 47 46 46 48 49 + 27 47 50 50 28 27 28 50 51 52 50 47 + 47 49 52 50 52 53 54 48 38 38 43 54 + 55 49 48 48 54 55 56 54 43 57 55 54 + 58 52 49 49 55 58 52 58 59 60 58 55 + 24 61 23 61 24 62 62 63 61 29 24 22 + 64 62 24 65 66 63 63 62 65 67 68 66 + 66 65 67 69 65 62 70 67 65 24 29 64 + 30 29 25 71 64 29 29 30 71 62 64 69 + 72 69 64 65 69 70 73 70 69 64 71 72 + 69 72 73 74 75 68 68 67 74 75 74 76 + 77 74 67 76 78 75 78 76 79 79 80 78 + 81 76 74 82 79 76 67 70 77 83 77 70 + 74 77 81 70 73 83 77 83 84 76 81 82 + 84 81 77 85 82 81 81 84 85 51 30 28 + 30 51 86 86 71 30 53 51 50 51 53 87 + 87 86 51 88 72 71 71 86 88 72 88 89 + 89 73 72 90 88 86 86 87 90 91 89 88 + 88 90 91 59 53 52 53 59 92 92 87 53 + 93 59 58 94 92 59 95 90 87 87 92 95 + 96 91 90 90 95 96 97 95 92 98 96 95 + 73 89 99 99 83 73 83 99 100 101 99 89 + 89 91 101 99 101 102 100 84 83 84 100 103 + 103 85 84 102 100 99 100 102 104 104 103 100 + 105 101 91 91 96 105 101 105 106 107 105 96 + 106 102 101 102 106 108 108 104 102 109 106 105 + 110 108 106 40 111 42 112 42 111 39 42 44 + 111 113 112 42 112 114 41 44 45 114 44 42 + 115 45 44 44 114 115 113 116 117 117 112 113 + 112 117 118 119 117 116 116 120 119 117 119 121 + 118 114 112 114 118 122 122 115 114 121 118 117 + 118 121 123 123 122 118 43 45 56 124 56 45 + 54 56 57 125 57 56 45 115 124 56 124 125 + 55 57 60 126 60 57 58 60 93 57 125 126 + 60 126 127 128 124 115 115 122 128 124 128 129 + 129 125 124 130 128 122 122 123 130 131 129 128 + 128 130 131 125 129 132 132 126 125 126 132 133 + 134 132 129 129 131 134 132 134 135 136 119 120 + 120 137 136 119 136 138 139 136 137 138 121 119 + 121 138 140 140 123 121 141 138 136 142 140 138 + 137 143 139 144 139 143 136 139 141 143 145 144 + 139 144 146 138 141 142 146 141 139 147 142 141 + 141 146 147 148 130 123 123 140 148 149 131 130 + 130 148 149 150 148 140 151 149 148 152 134 131 + 131 149 152 134 152 153 154 152 149 140 142 150 + 155 150 142 148 150 151 156 151 150 142 147 155 + 150 155 156 149 151 154 157 154 151 152 154 158 + 151 156 157 154 157 159 59 93 94 127 93 60 + 160 94 93 93 127 160 92 94 97 161 97 94 + 95 97 98 162 98 97 94 160 161 97 161 162 + 133 127 126 127 133 163 163 160 127 135 133 132 + 133 135 164 164 163 133 165 161 160 160 163 165 + 161 165 166 166 162 161 167 165 163 163 164 167 + 168 166 165 165 167 168 96 98 107 169 107 98 + 105 107 109 98 162 169 107 169 170 106 109 110 + 170 109 107 171 110 109 109 170 171 162 166 172 + 172 169 162 169 172 173 174 172 166 166 168 174 + 172 174 175 173 170 169 170 173 176 176 171 170 + 175 173 172 173 175 177 177 176 173 153 135 134 + 135 153 178 178 164 135 158 153 152 179 178 153 + 180 167 164 164 178 180 181 168 167 167 180 181 + 182 180 178 183 181 180 153 158 179 159 158 154 + 184 179 158 158 159 184 178 179 182 185 182 179 + 180 182 183 186 183 182 179 184 185 182 185 186 + 187 174 168 168 181 187 174 187 188 189 187 181 + 188 175 174 175 188 190 190 177 175 191 188 187 + 192 190 188 181 183 189 193 189 183 187 189 191 + 183 186 193 189 193 194 188 191 192 194 191 189 + 195 192 191 191 194 195 196 197 80 80 79 196 + 198 199 197 197 196 198 200 196 79 201 198 196 + 202 203 199 199 198 202 203 202 204 205 202 198 + 79 82 200 206 200 82 196 200 201 207 201 200 + 82 85 206 200 206 207 198 201 205 208 205 201 + 202 205 209 201 207 208 205 208 210 204 211 203 + 211 204 212 212 213 211 209 204 202 214 212 204 + 215 216 213 213 212 215 217 218 216 216 215 217 + 219 215 212 220 217 215 204 209 214 210 209 205 + 221 214 209 209 210 221 212 214 219 222 219 214 + 215 219 220 223 220 219 214 221 222 219 222 223 + 224 206 85 85 103 224 206 224 225 225 207 206 + 226 224 103 103 104 226 227 225 224 224 226 227 + 207 225 228 228 208 207 208 228 229 230 228 225 + 225 227 230 228 230 231 232 226 104 104 108 232 + 233 227 226 226 232 233 234 232 108 235 233 232 + 236 230 227 227 233 236 230 236 237 238 236 233 + 229 210 208 210 229 239 239 221 210 231 229 228 + 229 231 240 240 239 229 241 222 221 221 239 241 + 222 241 242 242 223 222 243 241 239 239 240 243 + 244 242 241 241 243 244 237 231 230 231 237 245 + 245 240 231 246 237 236 247 245 237 248 243 240 + 240 245 248 249 244 243 243 248 249 250 248 245 + 251 249 248 252 253 218 218 217 252 253 252 254 + 255 252 217 254 256 253 256 254 257 257 258 256 + 259 254 252 260 257 254 217 220 255 261 255 220 + 252 255 259 220 223 261 255 261 262 254 259 260 + 262 259 255 263 260 259 259 262 263 264 265 258 + 258 257 264 266 267 265 265 264 266 268 264 257 + 269 266 264 270 271 267 267 266 270 271 270 272 + 273 270 266 257 260 268 274 268 260 264 268 269 + 275 269 268 260 263 274 268 274 275 266 269 273 + 276 273 269 270 273 277 269 275 276 273 276 278 + 223 242 279 279 261 223 261 279 280 281 279 242 + 242 244 281 279 281 282 280 262 261 262 280 283 + 283 263 262 282 280 279 280 282 284 284 283 280 + 285 281 244 244 249 285 281 285 286 287 285 249 + 286 282 281 282 286 288 288 284 282 289 286 285 + 290 288 286 291 274 263 263 283 291 274 291 292 + 292 275 274 293 291 283 283 284 293 294 292 291 + 291 293 294 275 292 295 295 276 275 276 295 296 + 297 295 292 292 294 297 295 297 298 299 293 284 + 284 288 299 300 294 293 293 299 300 301 299 288 + 302 300 299 303 297 294 294 300 303 297 303 304 + 305 303 300 108 110 234 306 234 110 232 234 235 + 307 235 234 110 171 306 234 306 307 233 235 238 + 308 238 235 236 238 246 235 307 308 238 308 309 + 310 306 171 171 176 310 306 310 311 311 307 306 + 312 310 176 176 177 312 313 311 310 310 312 313 + 307 311 314 314 308 307 308 314 315 316 314 311 + 311 313 316 314 316 317 237 246 247 309 246 238 + 318 247 246 246 309 318 245 247 250 319 250 247 + 248 250 251 320 251 250 247 318 319 250 319 320 + 315 309 308 309 315 321 321 318 309 317 315 314 + 315 317 322 322 321 315 323 319 318 318 321 323 + 319 323 324 324 320 319 325 323 321 321 322 325 + 326 324 323 323 325 326 327 312 177 177 190 327 + 328 313 312 312 327 328 329 327 190 330 328 327 + 331 316 313 313 328 331 316 331 332 333 331 328 + 190 192 329 334 329 192 327 329 330 335 330 329 + 192 195 334 329 334 335 328 330 333 336 333 330 + 331 333 337 330 335 336 333 336 338 332 317 316 + 317 332 339 339 322 317 337 332 331 340 339 332 + 341 325 322 322 339 341 342 326 325 325 341 342 + 343 341 339 344 342 341 332 337 340 338 337 333 + 345 340 337 337 338 345 339 340 343 346 343 340 + 341 343 344 347 344 343 340 345 346 343 346 347 + 249 251 287 348 287 251 285 287 289 251 320 348 + 287 348 349 286 289 290 349 289 287 350 290 289 + 289 349 350 320 324 351 351 348 320 348 351 352 + 353 351 324 324 326 353 351 353 354 352 349 348 + 349 352 355 355 350 349 354 352 351 352 354 356 + 356 355 352 288 290 301 357 301 290 299 301 302 + 358 302 301 290 350 357 301 357 358 300 302 305 + 359 305 302 303 305 360 302 358 359 305 359 361 + 362 357 350 350 355 362 357 362 363 363 358 357 + 364 362 355 355 356 364 365 363 362 362 364 365 + 358 363 366 366 359 358 359 366 367 368 366 363 + 363 365 368 366 368 369 370 353 326 326 342 370 + 353 370 371 372 370 342 371 354 353 354 371 373 + 373 356 354 374 371 370 375 373 371 342 344 372 + 376 372 344 370 372 374 344 347 376 372 376 377 + 371 374 375 377 374 372 378 375 374 374 377 378 + 379 364 356 356 373 379 380 365 364 364 379 380 + 381 379 373 382 380 379 383 368 365 365 380 383 + 368 383 384 385 383 380 373 375 381 386 381 375 + 379 381 382 387 382 381 375 378 386 381 386 387 + 380 382 385 388 385 382 383 385 389 382 387 388 + 385 388 390 145 391 392 392 144 145 144 392 393 + 394 392 391 391 395 394 392 394 396 393 146 144 + 146 393 397 397 147 146 396 393 392 393 396 398 + 398 397 393 399 394 395 395 400 399 394 399 401 + 402 399 400 401 396 394 396 401 403 403 398 396 + 404 401 399 405 403 401 406 155 147 147 397 406 + 155 406 407 407 156 155 408 406 397 397 398 408 + 409 407 406 406 408 409 156 407 410 410 157 156 + 157 410 411 412 410 407 407 409 412 410 412 413 + 414 408 398 398 403 414 415 409 408 408 414 415 + 416 414 403 417 415 414 418 412 409 409 415 418 + 412 418 419 420 418 415 400 421 402 422 402 421 + 399 402 404 421 423 422 402 422 424 401 404 405 + 424 404 402 425 405 404 404 424 425 423 426 427 + 427 422 423 422 427 428 429 427 426 426 430 429 + 427 429 431 428 424 422 424 428 432 432 425 424 + 431 428 427 428 431 433 433 432 428 403 405 416 + 434 416 405 414 416 417 435 417 416 405 425 434 + 416 434 435 415 417 420 436 420 417 418 420 437 + 417 435 436 420 436 438 439 434 425 425 432 439 + 434 439 440 440 435 434 441 439 432 432 433 441 + 442 440 439 439 441 442 435 440 443 443 436 435 + 436 443 444 445 443 440 440 442 445 443 445 446 + 411 159 157 159 411 447 447 184 159 413 411 410 + 411 413 448 448 447 411 449 185 184 184 447 449 + 185 449 450 450 186 185 451 449 447 447 448 451 + 452 450 449 449 451 452 419 413 412 413 419 453 + 453 448 413 437 419 418 454 453 419 455 451 448 + 448 453 455 456 452 451 451 455 456 457 455 453 + 458 456 455 186 450 459 459 193 186 193 459 460 + 461 459 450 450 452 461 459 461 462 460 194 193 + 194 460 463 463 195 194 462 460 459 460 462 464 + 464 463 460 465 461 452 452 456 465 461 465 466 + 467 465 456 466 462 461 462 466 468 468 464 462 + 469 466 465 470 468 466 419 437 454 438 437 420 + 471 454 437 437 438 471 453 454 457 472 457 454 + 455 457 458 473 458 457 454 471 472 457 472 473 + 444 438 436 438 444 474 474 471 438 446 444 443 + 444 446 475 475 474 444 476 472 471 471 474 476 + 472 476 477 477 473 472 478 476 474 474 475 478 + 479 477 476 476 478 479 456 458 467 480 467 458 + 465 467 469 458 473 480 467 480 481 466 469 470 + 481 469 467 482 470 469 469 481 482 473 477 483 + 483 480 473 480 483 484 485 483 477 477 479 485 + 483 485 486 484 481 480 481 484 487 487 482 481 + 486 484 483 484 486 488 488 487 484 489 429 430 + 430 490 489 429 489 491 492 489 490 491 431 429 + 431 491 493 493 433 431 494 491 489 495 493 491 + 490 496 492 497 492 496 489 492 494 496 498 497 + 492 497 499 491 494 495 499 494 492 500 495 494 + 494 499 500 501 441 433 433 493 501 502 442 441 + 441 501 502 503 501 493 504 502 501 505 445 442 + 442 502 505 445 505 506 507 505 502 493 495 503 + 508 503 495 501 503 504 509 504 503 495 500 508 + 503 508 509 502 504 507 510 507 504 505 507 511 + 504 509 510 507 510 512 498 513 514 514 497 498 + 497 514 515 516 514 513 513 517 516 514 516 518 + 515 499 497 499 515 519 519 500 499 518 515 514 + 515 518 520 520 519 515 521 516 517 517 522 521 + 516 521 523 524 521 522 523 518 516 518 523 525 + 525 520 518 526 523 521 527 525 523 528 508 500 + 500 519 528 508 528 529 529 509 508 530 528 519 + 519 520 530 531 529 528 528 530 531 509 529 532 + 532 510 509 510 532 533 534 532 529 529 531 534 + 532 534 535 536 530 520 520 525 536 537 531 530 + 530 536 537 538 536 525 539 537 536 540 534 531 + 531 537 540 534 540 541 542 540 537 506 446 445 + 446 506 543 543 475 446 511 506 505 544 543 506 + 545 478 475 475 543 545 546 479 478 478 545 546 + 547 545 543 548 546 545 506 511 544 512 511 507 + 549 544 511 511 512 549 543 544 547 550 547 544 + 545 547 548 551 548 547 544 549 550 547 550 551 + 552 485 479 479 546 552 485 552 553 554 552 546 + 553 486 485 486 553 555 555 488 486 556 553 552 + 557 555 553 546 548 554 558 554 548 552 554 556 + 548 551 558 554 558 559 553 556 557 559 556 554 + 560 557 556 556 559 560 533 512 510 512 533 561 + 561 549 512 535 533 532 533 535 562 562 561 533 + 563 550 549 549 561 563 550 563 564 564 551 550 + 565 563 561 561 562 565 566 564 563 563 565 566 + 541 535 534 535 541 567 567 562 535 568 541 540 + 569 567 541 570 565 562 562 567 570 571 566 565 + 565 570 571 572 570 567 573 571 570 551 564 574 + 574 558 551 558 574 575 576 574 564 564 566 576 + 574 576 577 575 559 558 559 575 578 578 560 559 + 577 575 574 575 577 579 579 578 575 580 576 566 + 566 571 580 576 580 581 582 580 571 581 577 576 + 577 581 583 583 579 577 584 581 580 585 583 581 + 586 334 195 195 463 586 334 586 587 587 335 334 + 588 586 463 463 464 588 589 587 586 586 588 589 + 335 587 590 590 336 335 336 590 591 592 590 587 + 587 589 592 590 592 593 594 588 464 464 468 594 + 595 589 588 588 594 595 596 594 468 597 595 594 + 598 592 589 589 595 598 592 598 599 600 598 595 + 591 338 336 338 591 601 601 345 338 593 591 590 + 591 593 602 602 601 591 603 346 345 345 601 603 + 346 603 604 604 347 346 605 603 601 601 602 605 + 606 604 603 603 605 606 599 593 592 593 599 607 + 607 602 593 608 599 598 609 607 599 610 605 602 + 602 607 610 611 606 605 605 610 611 612 610 607 + 613 611 610 468 470 596 614 596 470 594 596 597 + 615 597 596 470 482 614 596 614 615 595 597 600 + 616 600 597 598 600 608 597 615 616 600 616 617 + 618 614 482 482 487 618 614 618 619 619 615 614 + 620 618 487 487 488 620 621 619 618 618 620 621 + 615 619 622 622 616 615 616 622 623 624 622 619 + 619 621 624 622 624 625 599 608 609 617 608 600 + 626 609 608 608 617 626 607 609 612 627 612 609 + 610 612 613 628 613 612 609 626 627 612 627 628 + 623 617 616 617 623 629 629 626 617 625 623 622 + 623 625 630 630 629 623 631 627 626 626 629 631 + 627 631 632 632 628 627 633 631 629 629 630 633 + 634 632 631 631 633 634 347 604 635 635 376 347 + 376 635 636 637 635 604 604 606 637 635 637 638 + 636 377 376 377 636 639 639 378 377 638 636 635 + 636 638 640 640 639 636 641 637 606 606 611 641 + 637 641 642 643 641 611 642 638 637 638 642 644 + 644 640 638 645 642 641 646 644 642 647 386 378 + 378 639 647 386 647 648 648 387 386 649 647 639 + 639 640 649 650 648 647 647 649 650 387 648 651 + 651 388 387 388 651 652 653 651 648 648 650 653 + 651 653 654 655 649 640 640 644 655 656 650 649 + 649 655 656 657 655 644 658 656 655 659 653 650 + 650 656 659 653 659 660 661 659 656 611 613 643 + 662 643 613 641 643 645 613 628 662 643 662 663 + 642 645 646 663 645 643 664 646 645 645 663 664 + 628 632 665 665 662 628 662 665 666 667 665 632 + 632 634 667 665 667 668 666 663 662 663 666 669 + 669 664 663 668 666 665 666 668 670 670 669 666 + 644 646 657 671 657 646 655 657 658 672 658 657 + 646 664 671 657 671 672 656 658 661 673 661 658 + 659 661 674 658 672 673 661 673 675 676 671 664 + 664 669 676 671 676 677 677 672 671 678 676 669 + 669 670 678 679 677 676 676 678 679 672 677 680 + 680 673 672 673 680 681 682 680 677 677 679 682 + 680 682 683 684 620 488 488 555 684 685 621 620 + 620 684 685 686 684 555 687 685 684 688 624 621 + 621 685 688 624 688 689 690 688 685 555 557 686 + 691 686 557 684 686 687 692 687 686 557 560 691 + 686 691 692 685 687 690 693 690 687 688 690 694 + 687 692 693 690 693 695 689 625 624 625 689 696 + 696 630 625 694 689 688 697 696 689 698 633 630 + 630 696 698 699 634 633 633 698 699 700 698 696 + 701 699 698 689 694 697 695 694 690 702 697 694 + 694 695 702 696 697 700 703 700 697 698 700 701 + 704 701 700 697 702 703 700 703 704 705 691 560 + 560 578 705 691 705 706 706 692 691 707 705 578 + 578 579 707 708 706 705 705 707 708 692 706 709 + 709 693 692 693 709 710 711 709 706 706 708 711 + 709 711 712 713 707 579 579 583 713 714 708 707 + 707 713 714 715 713 583 716 714 713 717 711 708 + 708 714 717 711 717 718 719 717 714 710 695 693 + 695 710 720 720 702 695 712 710 709 710 712 721 + 721 720 710 722 703 702 702 720 722 703 722 723 + 723 704 703 724 722 720 720 721 724 725 723 722 + 722 724 725 718 712 711 712 718 726 726 721 712 + 727 718 717 728 726 718 729 724 721 721 726 729 + 730 725 724 724 729 730 731 729 726 732 730 729 + 733 667 634 634 699 733 667 733 734 735 733 699 + 734 668 667 668 734 736 736 670 668 737 734 733 + 738 736 734 699 701 735 739 735 701 733 735 737 + 701 704 739 735 739 740 734 737 738 740 737 735 + 741 738 737 737 740 741 742 678 670 670 736 742 + 743 679 678 678 742 743 744 742 736 745 743 742 + 746 682 679 679 743 746 682 746 747 748 746 743 + 736 738 744 749 744 738 742 744 745 750 745 744 + 738 741 749 744 749 750 743 745 748 751 748 745 + 746 748 752 745 750 751 748 751 753 704 723 754 + 754 739 704 739 754 755 756 754 723 723 725 756 + 754 756 757 755 740 739 740 755 758 758 741 740 + 757 755 754 755 757 759 759 758 755 760 756 725 + 725 730 760 756 760 761 762 760 730 761 757 756 + 757 761 763 763 759 757 764 761 760 765 763 761 + 766 749 741 741 758 766 749 766 767 767 750 749 + 768 766 758 758 759 768 769 767 766 766 768 769 + 750 767 770 770 751 750 751 770 771 772 770 767 + 767 769 772 770 772 773 774 768 759 759 763 774 + 775 769 768 768 774 775 776 774 763 777 775 774 + 778 772 769 769 775 778 772 778 779 780 778 775 + 272 781 271 781 272 782 782 783 781 277 272 270 + 784 782 272 785 786 783 783 782 785 787 788 786 + 786 785 787 789 785 782 790 787 785 272 277 784 + 278 277 273 791 784 277 277 278 791 782 784 789 + 792 789 784 785 789 790 793 790 789 784 791 792 + 789 792 793 794 795 788 788 787 794 795 794 796 + 797 794 787 796 798 795 798 796 799 799 800 798 + 801 796 794 802 799 796 787 790 797 803 797 790 + 794 797 801 790 793 803 797 803 804 796 801 802 + 804 801 797 805 802 801 801 804 805 296 278 276 + 278 296 806 806 791 278 298 296 295 296 298 807 + 807 806 296 808 792 791 791 806 808 792 808 809 + 809 793 792 810 808 806 806 807 810 811 809 808 + 808 810 811 304 298 297 298 304 812 812 807 298 + 360 304 303 813 812 304 814 810 807 807 812 814 + 815 811 810 810 814 815 816 814 812 817 815 814 + 793 809 818 818 803 793 803 818 819 820 818 809 + 809 811 820 818 820 821 819 804 803 804 819 822 + 822 805 804 821 819 818 819 821 823 823 822 819 + 824 820 811 811 815 824 820 824 825 826 824 815 + 825 821 820 821 825 827 827 823 821 828 825 824 + 829 827 825 830 831 800 800 799 830 832 833 831 + 831 830 832 834 830 799 835 832 830 836 837 833 + 833 832 836 837 836 838 839 836 832 799 802 834 + 840 834 802 830 834 835 841 835 834 802 805 840 + 834 840 841 832 835 839 842 839 835 836 839 843 + 835 841 842 839 842 844 838 845 837 845 838 846 + 846 847 845 843 838 836 848 846 838 849 850 847 + 847 846 849 851 852 850 850 849 851 853 849 846 + 854 851 849 838 843 848 844 843 839 855 848 843 + 843 844 855 846 848 853 856 853 848 849 853 854 + 857 854 853 848 855 856 853 856 857 858 840 805 + 805 822 858 840 858 859 859 841 840 860 858 822 + 822 823 860 861 859 858 858 860 861 841 859 862 + 862 842 841 842 862 863 864 862 859 859 861 864 + 862 864 865 866 860 823 823 827 866 867 861 860 + 860 866 867 868 866 827 869 867 866 870 864 861 + 861 867 870 864 870 871 872 870 867 863 844 842 + 844 863 873 873 855 844 865 863 862 863 865 874 + 874 873 863 875 856 855 855 873 875 856 875 876 + 876 857 856 877 875 873 873 874 877 878 876 875 + 875 877 878 871 865 864 865 871 879 879 874 865 + 880 871 870 881 879 871 882 877 874 874 879 882 + 883 878 877 877 882 883 884 882 879 885 883 882 + 304 360 813 361 360 305 886 813 360 360 361 886 + 812 813 816 887 816 813 814 816 817 888 817 816 + 813 886 887 816 887 888 367 361 359 361 367 889 + 889 886 361 369 367 366 367 369 890 890 889 367 + 891 887 886 886 889 891 887 891 892 892 888 887 + 893 891 889 889 890 893 894 892 891 891 893 894 + 815 817 826 895 826 817 824 826 828 817 888 895 + 826 895 896 825 828 829 896 828 826 897 829 828 + 828 896 897 888 892 898 898 895 888 895 898 899 + 900 898 892 892 894 900 898 900 901 899 896 895 + 896 899 902 902 897 896 901 899 898 899 901 903 + 903 902 899 384 369 368 369 384 904 904 890 369 + 389 384 383 905 904 384 906 893 890 890 904 906 + 907 894 893 893 906 907 908 906 904 909 907 906 + 384 389 905 390 389 385 910 905 389 389 390 910 + 904 905 908 911 908 905 906 908 909 912 909 908 + 905 910 911 908 911 912 913 900 894 894 907 913 + 900 913 914 915 913 907 914 901 900 901 914 916 + 916 903 901 917 914 913 918 916 914 907 909 915 + 919 915 909 913 915 917 909 912 919 915 919 920 + 914 917 918 920 917 915 921 918 917 917 920 921 + 827 829 868 922 868 829 866 868 869 923 869 868 + 829 897 922 868 922 923 867 869 872 924 872 869 + 870 872 880 869 923 924 872 924 925 926 922 897 + 897 902 926 922 926 927 927 923 922 928 926 902 + 902 903 928 929 927 926 926 928 929 923 927 930 + 930 924 923 924 930 931 932 930 927 927 929 932 + 930 932 933 871 880 881 925 880 872 934 881 880 + 880 925 934 879 881 884 935 884 881 882 884 885 + 936 885 884 881 934 935 884 935 936 931 925 924 + 925 931 937 937 934 925 933 931 930 931 933 938 + 938 937 931 939 935 934 934 937 939 935 939 940 + 940 936 935 941 939 937 937 938 941 942 940 939 + 939 941 942 943 928 903 903 916 943 944 929 928 + 928 943 944 945 943 916 946 944 943 947 932 929 + 929 944 947 932 947 948 949 947 944 916 918 945 + 950 945 918 943 945 946 951 946 945 918 921 950 + 945 950 951 944 946 949 952 949 946 947 949 953 + 946 951 952 949 952 954 948 933 932 933 948 955 + 955 938 933 953 948 947 956 955 948 957 941 938 + 938 955 957 958 942 941 941 957 958 959 957 955 + 960 958 957 948 953 956 954 953 949 961 956 953 + 953 954 961 955 956 959 962 959 956 957 959 960 + 963 960 959 956 961 962 959 962 963 652 390 388 + 390 652 964 964 910 390 654 652 651 652 654 965 + 965 964 652 966 911 910 910 964 966 911 966 967 + 967 912 911 968 966 964 964 965 968 969 967 966 + 966 968 969 660 654 653 654 660 970 970 965 654 + 674 660 659 971 970 660 972 968 965 965 970 972 + 973 969 968 968 972 973 974 972 970 975 973 972 + 912 967 976 976 919 912 919 976 977 978 976 967 + 967 969 978 976 978 979 977 920 919 920 977 980 + 980 921 920 979 977 976 977 979 981 981 980 977 + 982 978 969 969 973 982 978 982 983 984 982 973 + 983 979 978 979 983 985 985 981 979 986 983 982 + 987 985 983 660 674 971 675 674 661 988 971 674 + 674 675 988 970 971 974 989 974 971 972 974 975 + 990 975 974 971 988 989 974 989 990 681 675 673 + 675 681 991 991 988 675 683 681 680 681 683 992 + 992 991 681 993 989 988 988 991 993 989 993 994 + 994 990 989 995 993 991 991 992 995 996 994 993 + 993 995 996 973 975 984 997 984 975 982 984 986 + 975 990 997 984 997 998 983 986 987 998 986 984 + 999 987 986 986 998 999 990 994 1000 1000 997 990 + 997 1000 1001 1002 1000 994 994 996 1002 1000 1002 1003 + 1001 998 997 998 1001 1004 1004 999 998 1003 1001 1000 + 1001 1003 1005 1005 1004 1001 1006 950 921 921 980 1006 + 950 1006 1007 1007 951 950 1008 1006 980 980 981 1008 + 1009 1007 1006 1006 1008 1009 951 1007 1010 1010 952 951 + 952 1010 1011 1012 1010 1007 1007 1009 1012 1010 1012 1013 + 1014 1008 981 981 985 1014 1015 1009 1008 1008 1014 1015 + 1016 1014 985 1017 1015 1014 1018 1012 1009 1009 1015 1018 + 1012 1018 1019 1020 1018 1015 1011 954 952 954 1011 1021 + 1021 961 954 1013 1011 1010 1011 1013 1022 1022 1021 1011 + 1023 962 961 961 1021 1023 962 1023 1024 1024 963 962 + 1025 1023 1021 1021 1022 1025 1026 1024 1023 1023 1025 1026 + 1019 1013 1012 1013 1019 1027 1027 1022 1013 1028 1019 1018 + 1029 1027 1019 1030 1025 1022 1022 1027 1030 1031 1026 1025 + 1025 1030 1031 1032 1030 1027 1033 1031 1030 985 987 1016 + 1034 1016 987 1014 1016 1017 1035 1017 1016 987 999 1034 + 1016 1034 1035 1015 1017 1020 1036 1020 1017 1018 1020 1028 + 1017 1035 1036 1020 1036 1037 1038 1034 999 999 1004 1038 + 1034 1038 1039 1039 1035 1034 1040 1038 1004 1004 1005 1040 + 1041 1039 1038 1038 1040 1041 1035 1039 1042 1042 1036 1035 + 1036 1042 1043 1044 1042 1039 1039 1041 1044 1042 1044 1045 + 1019 1028 1029 1037 1028 1020 1046 1029 1028 1028 1037 1046 + 1027 1029 1032 1047 1032 1029 1030 1032 1033 1048 1033 1032 + 1029 1046 1047 1032 1047 1048 1043 1037 1036 1037 1043 1049 + 1049 1046 1037 1045 1043 1042 1043 1045 1050 1050 1049 1043 + 1051 1047 1046 1046 1049 1051 1047 1051 1052 1052 1048 1047 + 1053 1051 1049 1049 1050 1053 1054 1052 1051 1051 1053 1054 + 747 683 682 683 747 1055 1055 992 683 752 747 746 + 1056 1055 747 1057 995 992 992 1055 1057 1058 996 995 + 995 1057 1058 1059 1057 1055 1060 1058 1057 747 752 1056 + 753 752 748 1061 1056 752 752 753 1061 1055 1056 1059 + 1062 1059 1056 1057 1059 1060 1063 1060 1059 1056 1061 1062 + 1059 1062 1063 1064 1002 996 996 1058 1064 1002 1064 1065 + 1066 1064 1058 1065 1003 1002 1003 1065 1067 1067 1005 1003 + 1068 1065 1064 1069 1067 1065 1058 1060 1066 1070 1066 1060 + 1064 1066 1068 1060 1063 1070 1066 1070 1071 1065 1068 1069 + 1071 1068 1066 1072 1069 1068 1068 1071 1072 771 753 751 + 753 771 1073 1073 1061 753 773 771 770 771 773 1074 + 1074 1073 771 1075 1062 1061 1061 1073 1075 1062 1075 1076 + 1076 1063 1062 1077 1075 1073 1073 1074 1077 1078 1076 1075 + 1075 1077 1078 779 773 772 773 779 1079 1079 1074 773 + 1080 779 778 1081 1079 779 1082 1077 1074 1074 1079 1082 + 1083 1078 1077 1077 1082 1083 1084 1082 1079 1085 1083 1082 + 1063 1076 1086 1086 1070 1063 1070 1086 1087 1088 1086 1076 + 1076 1078 1088 1086 1088 1089 1087 1071 1070 1071 1087 1090 + 1090 1072 1071 1089 1087 1086 1087 1089 1091 1091 1090 1087 + 1092 1088 1078 1078 1083 1092 1088 1092 1093 1094 1092 1083 + 1093 1089 1088 1089 1093 1095 1095 1091 1089 1096 1093 1092 + 1097 1095 1093 1098 1040 1005 1005 1067 1098 1099 1041 1040 + 1040 1098 1099 1100 1098 1067 1101 1099 1098 1102 1044 1041 + 1041 1099 1102 1044 1102 1103 1104 1102 1099 1067 1069 1100 + 1105 1100 1069 1098 1100 1101 1106 1101 1100 1069 1072 1105 + 1100 1105 1106 1099 1101 1104 1107 1104 1101 1102 1104 1108 + 1101 1106 1107 1104 1107 1109 1103 1045 1044 1045 1103 1110 + 1110 1050 1045 1108 1103 1102 1111 1110 1103 1112 1053 1050 + 1050 1110 1112 1113 1054 1053 1053 1112 1113 1114 1112 1110 + 1115 1113 1112 1103 1108 1111 1109 1108 1104 1116 1111 1108 + 1108 1109 1116 1110 1111 1114 1117 1114 1111 1112 1114 1115 + 1118 1115 1114 1111 1116 1117 1114 1117 1118 1119 1105 1072 + 1072 1090 1119 1105 1119 1120 1120 1106 1105 1121 1119 1090 + 1090 1091 1121 1122 1120 1119 1119 1121 1122 1106 1120 1123 + 1123 1107 1106 1107 1123 1124 1125 1123 1120 1120 1122 1125 + 1123 1125 1126 1127 1121 1091 1091 1095 1127 1128 1122 1121 + 1121 1127 1128 1129 1127 1095 1130 1128 1127 1131 1125 1122 + 1122 1128 1131 1125 1131 1132 1133 1131 1128 1124 1109 1107 + 1109 1124 1134 1134 1116 1109 1126 1124 1123 1124 1126 1135 + 1135 1134 1124 1136 1117 1116 1116 1134 1136 1117 1136 1137 + 1137 1118 1117 1138 1136 1134 1134 1135 1138 1139 1137 1136 + 1136 1138 1139 1132 1126 1125 1126 1132 1140 1140 1135 1126 + 1141 1132 1131 1142 1140 1132 1143 1138 1135 1135 1140 1143 + 1144 1139 1138 1138 1143 1144 1145 1143 1140 1146 1144 1143 + 522 1147 524 1148 524 1147 521 524 526 1147 1149 1148 + 524 1148 1150 523 526 527 1150 526 524 1151 527 526 + 526 1150 1151 1149 1152 1153 1153 1148 1149 1148 1153 1154 + 1155 1153 1152 1152 1156 1155 1153 1155 1157 1154 1150 1148 + 1150 1154 1158 1158 1151 1150 1157 1154 1153 1154 1157 1159 + 1159 1158 1154 525 527 538 1160 538 527 536 538 539 + 1161 539 538 527 1151 1160 538 1160 1161 537 539 542 + 1162 542 539 540 542 568 539 1161 1162 542 1162 1163 + 1164 1160 1151 1151 1158 1164 1160 1164 1165 1165 1161 1160 + 1166 1164 1158 1158 1159 1166 1167 1165 1164 1164 1166 1167 + 1161 1165 1168 1168 1162 1161 1162 1168 1169 1170 1168 1165 + 1165 1167 1170 1168 1170 1171 1172 1155 1156 1156 1173 1172 + 1155 1172 1174 1175 1172 1173 1174 1157 1155 1157 1174 1176 + 1176 1159 1157 1177 1174 1172 1178 1176 1174 1173 1179 1175 + 1180 1175 1179 1172 1175 1177 1179 1181 1180 1175 1180 1182 + 1174 1177 1178 1182 1177 1175 1183 1178 1177 1177 1182 1183 + 1184 1166 1159 1159 1176 1184 1185 1167 1166 1166 1184 1185 + 1186 1184 1176 1187 1185 1184 1188 1170 1167 1167 1185 1188 + 1170 1188 1189 1190 1188 1185 1176 1178 1186 1191 1186 1178 + 1184 1186 1187 1192 1187 1186 1178 1183 1191 1186 1191 1192 + 1185 1187 1190 1193 1190 1187 1188 1190 1194 1187 1192 1193 + 1190 1193 1195 541 568 569 1163 568 542 1196 569 568 + 568 1163 1196 567 569 572 1197 572 569 570 572 573 + 1198 573 572 569 1196 1197 572 1197 1198 1169 1163 1162 + 1163 1169 1199 1199 1196 1163 1171 1169 1168 1169 1171 1200 + 1200 1199 1169 1201 1197 1196 1196 1199 1201 1197 1201 1202 + 1202 1198 1197 1203 1201 1199 1199 1200 1203 1204 1202 1201 + 1201 1203 1204 571 573 582 1205 582 573 580 582 584 + 573 1198 1205 582 1205 1206 581 584 585 1206 584 582 + 1207 585 584 584 1206 1207 1198 1202 1208 1208 1205 1198 + 1205 1208 1209 1210 1208 1202 1202 1204 1210 1208 1210 1211 + 1209 1206 1205 1206 1209 1212 1212 1207 1206 1211 1209 1208 + 1209 1211 1213 1213 1212 1209 1189 1171 1170 1171 1189 1214 + 1214 1200 1171 1194 1189 1188 1215 1214 1189 1216 1203 1200 + 1200 1214 1216 1217 1204 1203 1203 1216 1217 1218 1216 1214 + 1219 1217 1216 1189 1194 1215 1195 1194 1190 1220 1215 1194 + 1194 1195 1220 1214 1215 1218 1221 1218 1215 1216 1218 1219 + 1222 1219 1218 1215 1220 1221 1218 1221 1222 1223 1210 1204 + 1204 1217 1223 1210 1223 1224 1225 1223 1217 1224 1211 1210 + 1211 1224 1226 1226 1213 1211 1227 1224 1223 1228 1226 1224 + 1217 1219 1225 1229 1225 1219 1223 1225 1227 1219 1222 1229 + 1225 1229 1230 1224 1227 1228 1230 1227 1225 1231 1228 1227 + 1227 1230 1231 1181 1232 1233 1233 1180 1181 1180 1233 1234 + 1235 1233 1232 1232 1236 1235 1233 1235 1237 1234 1182 1180 + 1182 1234 1238 1238 1183 1182 1237 1234 1233 1234 1237 1239 + 1239 1238 1234 1240 1235 1236 1236 1241 1240 1235 1240 1242 + 1243 1240 1241 1242 1237 1235 1237 1242 1244 1244 1239 1237 + 1245 1242 1240 1246 1244 1242 1247 1191 1183 1183 1238 1247 + 1191 1247 1248 1248 1192 1191 1249 1247 1238 1238 1239 1249 + 1250 1248 1247 1247 1249 1250 1192 1248 1251 1251 1193 1192 + 1193 1251 1252 1253 1251 1248 1248 1250 1253 1251 1253 1254 + 1255 1249 1239 1239 1244 1255 1256 1250 1249 1249 1255 1256 + 1257 1255 1244 1258 1256 1255 1259 1253 1250 1250 1256 1259 + 1253 1259 1260 1261 1259 1256 1241 1262 1243 1263 1243 1262 + 1240 1243 1245 1262 1264 1263 1243 1263 1265 1242 1245 1246 + 1265 1245 1243 1266 1246 1245 1245 1265 1266 1264 1267 1268 + 1268 1263 1264 1263 1268 1269 1270 1268 1267 1267 1271 1270 + 1268 1270 1272 1269 1265 1263 1265 1269 1273 1273 1266 1265 + 1272 1269 1268 1269 1272 1274 1274 1273 1269 1244 1246 1257 + 1275 1257 1246 1255 1257 1258 1276 1258 1257 1246 1266 1275 + 1257 1275 1276 1256 1258 1261 1277 1261 1258 1259 1261 1278 + 1258 1276 1277 1261 1277 1279 1280 1275 1266 1266 1273 1280 + 1275 1280 1281 1281 1276 1275 1282 1280 1273 1273 1274 1282 + 1283 1281 1280 1280 1282 1283 1276 1281 1284 1284 1277 1276 + 1277 1284 1285 1286 1284 1281 1281 1283 1286 1284 1286 1287 + 1252 1195 1193 1195 1252 1288 1288 1220 1195 1254 1252 1251 + 1252 1254 1289 1289 1288 1252 1290 1221 1220 1220 1288 1290 + 1221 1290 1291 1291 1222 1221 1292 1290 1288 1288 1289 1292 + 1293 1291 1290 1290 1292 1293 1260 1254 1253 1254 1260 1294 + 1294 1289 1254 1278 1260 1259 1295 1294 1260 1296 1292 1289 + 1289 1294 1296 1297 1293 1292 1292 1296 1297 1298 1296 1294 + 1299 1297 1296 1222 1291 1300 1300 1229 1222 1229 1300 1301 + 1302 1300 1291 1291 1293 1302 1300 1302 1303 1301 1230 1229 + 1230 1301 1304 1304 1231 1230 1303 1301 1300 1301 1303 1305 + 1305 1304 1301 1306 1302 1293 1293 1297 1306 1302 1306 1307 + 1308 1306 1297 1307 1303 1302 1303 1307 1309 1309 1305 1303 + 1310 1307 1306 1311 1309 1307 1260 1278 1295 1279 1278 1261 + 1312 1295 1278 1278 1279 1312 1294 1295 1298 1313 1298 1295 + 1296 1298 1299 1314 1299 1298 1295 1312 1313 1298 1313 1314 + 1285 1279 1277 1279 1285 1315 1315 1312 1279 1287 1285 1284 + 1285 1287 1316 1316 1315 1285 1317 1313 1312 1312 1315 1317 + 1313 1317 1318 1318 1314 1313 1319 1317 1315 1315 1316 1319 + 1320 1318 1317 1317 1319 1320 1297 1299 1308 1321 1308 1299 + 1306 1308 1310 1299 1314 1321 1308 1321 1322 1307 1310 1311 + 1322 1310 1308 1323 1311 1310 1310 1322 1323 1314 1318 1324 + 1324 1321 1314 1321 1324 1325 1326 1324 1318 1318 1320 1326 + 1324 1326 1327 1325 1322 1321 1322 1325 1328 1328 1323 1322 + 1327 1325 1324 1325 1327 1329 1329 1328 1325 583 585 715 + 1330 715 585 713 715 716 1331 716 715 585 1207 1330 + 715 1330 1331 714 716 719 1332 719 716 717 719 727 + 716 1331 1332 719 1332 1333 1334 1330 1207 1207 1212 1334 + 1330 1334 1335 1335 1331 1330 1336 1334 1212 1212 1213 1336 + 1337 1335 1334 1334 1336 1337 1331 1335 1338 1338 1332 1331 + 1332 1338 1339 1340 1338 1335 1335 1337 1340 1338 1340 1341 + 718 727 728 1333 727 719 1342 728 727 727 1333 1342 + 726 728 731 1343 731 728 729 731 732 1344 732 731 + 728 1342 1343 731 1343 1344 1339 1333 1332 1333 1339 1345 + 1345 1342 1333 1341 1339 1338 1339 1341 1346 1346 1345 1339 + 1347 1343 1342 1342 1345 1347 1343 1347 1348 1348 1344 1343 + 1349 1347 1345 1345 1346 1349 1350 1348 1347 1347 1349 1350 + 1351 1336 1213 1213 1226 1351 1352 1337 1336 1336 1351 1352 + 1353 1351 1226 1354 1352 1351 1355 1340 1337 1337 1352 1355 + 1340 1355 1356 1357 1355 1352 1226 1228 1353 1358 1353 1228 + 1351 1353 1354 1359 1354 1353 1228 1231 1358 1353 1358 1359 + 1352 1354 1357 1360 1357 1354 1355 1357 1361 1354 1359 1360 + 1357 1360 1362 1356 1341 1340 1341 1356 1363 1363 1346 1341 + 1361 1356 1355 1364 1363 1356 1365 1349 1346 1346 1363 1365 + 1366 1350 1349 1349 1365 1366 1367 1365 1363 1368 1366 1365 + 1356 1361 1364 1362 1361 1357 1369 1364 1361 1361 1362 1369 + 1363 1364 1367 1370 1367 1364 1365 1367 1368 1371 1368 1367 + 1364 1369 1370 1367 1370 1371 730 732 762 1372 762 732 + 760 762 764 732 1344 1372 762 1372 1373 761 764 765 + 1373 764 762 1374 765 764 764 1373 1374 1344 1348 1375 + 1375 1372 1344 1372 1375 1376 1377 1375 1348 1348 1350 1377 + 1375 1377 1378 1376 1373 1372 1373 1376 1379 1379 1374 1373 + 1378 1376 1375 1376 1378 1380 1380 1379 1376 763 765 776 + 1381 776 765 774 776 777 1382 777 776 765 1374 1381 + 776 1381 1382 775 777 780 1383 780 777 778 780 1080 + 777 1382 1383 780 1383 1384 1385 1381 1374 1374 1379 1385 + 1381 1385 1386 1386 1382 1381 1387 1385 1379 1379 1380 1387 + 1388 1386 1385 1385 1387 1388 1382 1386 1389 1389 1383 1382 + 1383 1389 1390 1391 1389 1386 1386 1388 1391 1389 1391 1392 + 1393 1377 1350 1350 1366 1393 1377 1393 1394 1395 1393 1366 + 1394 1378 1377 1378 1394 1396 1396 1380 1378 1397 1394 1393 + 1398 1396 1394 1366 1368 1395 1399 1395 1368 1393 1395 1397 + 1368 1371 1399 1395 1399 1400 1394 1397 1398 1400 1397 1395 + 1401 1398 1397 1397 1400 1401 1402 1387 1380 1380 1396 1402 + 1403 1388 1387 1387 1402 1403 1404 1402 1396 1405 1403 1402 + 1406 1391 1388 1388 1403 1406 1391 1406 1407 1408 1406 1403 + 1396 1398 1404 1409 1404 1398 1402 1404 1405 1410 1405 1404 + 1398 1401 1409 1404 1409 1410 1403 1405 1408 1411 1408 1405 + 1406 1408 1412 1405 1410 1411 1408 1411 1413 1414 1358 1231 + 1231 1304 1414 1358 1414 1415 1415 1359 1358 1416 1414 1304 + 1304 1305 1416 1417 1415 1414 1414 1416 1417 1359 1415 1418 + 1418 1360 1359 1360 1418 1419 1420 1418 1415 1415 1417 1420 + 1418 1420 1421 1422 1416 1305 1305 1309 1422 1423 1417 1416 + 1416 1422 1423 1424 1422 1309 1425 1423 1422 1426 1420 1417 + 1417 1423 1426 1420 1426 1427 1428 1426 1423 1419 1362 1360 + 1362 1419 1429 1429 1369 1362 1421 1419 1418 1419 1421 1430 + 1430 1429 1419 1431 1370 1369 1369 1429 1431 1370 1431 1432 + 1432 1371 1370 1433 1431 1429 1429 1430 1433 1434 1432 1431 + 1431 1433 1434 1427 1421 1420 1421 1427 1435 1435 1430 1421 + 1436 1427 1426 1437 1435 1427 1438 1433 1430 1430 1435 1438 + 1439 1434 1433 1433 1438 1439 1440 1438 1435 1441 1439 1438 + 1309 1311 1424 1442 1424 1311 1422 1424 1425 1443 1425 1424 + 1311 1323 1442 1424 1442 1443 1423 1425 1428 1444 1428 1425 + 1426 1428 1436 1425 1443 1444 1428 1444 1445 1446 1442 1323 + 1323 1328 1446 1442 1446 1447 1447 1443 1442 1448 1446 1328 + 1328 1329 1448 1449 1447 1446 1446 1448 1449 1443 1447 1450 + 1450 1444 1443 1444 1450 1451 1452 1450 1447 1447 1449 1452 + 1450 1452 1453 1427 1436 1437 1445 1436 1428 1454 1437 1436 + 1436 1445 1454 1435 1437 1440 1455 1440 1437 1438 1440 1441 + 1456 1441 1440 1437 1454 1455 1440 1455 1456 1451 1445 1444 + 1445 1451 1457 1457 1454 1445 1453 1451 1450 1451 1453 1458 + 1458 1457 1451 1459 1455 1454 1454 1457 1459 1455 1459 1460 + 1460 1456 1455 1461 1459 1457 1457 1458 1461 1462 1460 1459 + 1459 1461 1462 1371 1432 1463 1463 1399 1371 1399 1463 1464 + 1465 1463 1432 1432 1434 1465 1463 1465 1466 1464 1400 1399 + 1400 1464 1467 1467 1401 1400 1466 1464 1463 1464 1466 1468 + 1468 1467 1464 1469 1465 1434 1434 1439 1469 1465 1469 1470 + 1471 1469 1439 1470 1466 1465 1466 1470 1472 1472 1468 1466 + 1473 1470 1469 1474 1472 1470 1475 1409 1401 1401 1467 1475 + 1409 1475 1476 1476 1410 1409 1477 1475 1467 1467 1468 1477 + 1478 1476 1475 1475 1477 1478 1410 1476 1479 1479 1411 1410 + 1411 1479 1480 1481 1479 1476 1476 1478 1481 1479 1481 1482 + 1483 1477 1468 1468 1472 1483 1484 1478 1477 1477 1483 1484 + 1485 1483 1472 1486 1484 1483 1487 1481 1478 1478 1484 1487 + 1481 1487 1488 1489 1487 1484 1439 1441 1471 1490 1471 1441 + 1469 1471 1473 1441 1456 1490 1471 1490 1491 1470 1473 1474 + 1491 1473 1471 1492 1474 1473 1473 1491 1492 1456 1460 1493 + 1493 1490 1456 1490 1493 1494 1495 1493 1460 1460 1462 1495 + 1493 1495 1496 1494 1491 1490 1491 1494 1497 1497 1492 1491 + 1496 1494 1493 1494 1496 1498 1498 1497 1494 1472 1474 1485 + 1499 1485 1474 1483 1485 1486 1500 1486 1485 1474 1492 1499 + 1485 1499 1500 1484 1486 1489 1501 1489 1486 1487 1489 1502 + 1486 1500 1501 1489 1501 1503 1504 1499 1492 1492 1497 1504 + 1499 1504 1505 1505 1500 1499 1506 1504 1497 1497 1498 1506 + 1507 1505 1504 1504 1506 1507 1500 1505 1508 1508 1501 1500 + 1501 1508 1509 1510 1508 1505 1505 1507 1510 1508 1510 1511 + 779 1080 1081 1384 1080 780 1512 1081 1080 1080 1384 1512 + 1079 1081 1084 1513 1084 1081 1082 1084 1085 1514 1085 1084 + 1081 1512 1513 1084 1513 1514 1390 1384 1383 1384 1390 1515 + 1515 1512 1384 1392 1390 1389 1390 1392 1516 1516 1515 1390 + 1517 1513 1512 1512 1515 1517 1513 1517 1518 1518 1514 1513 + 1519 1517 1515 1515 1516 1519 1520 1518 1517 1517 1519 1520 + 1083 1085 1094 1521 1094 1085 1092 1094 1096 1085 1514 1521 + 1094 1521 1522 1093 1096 1097 1522 1096 1094 1523 1097 1096 + 1096 1522 1523 1514 1518 1524 1524 1521 1514 1521 1524 1525 + 1526 1524 1518 1518 1520 1526 1524 1526 1527 1525 1522 1521 + 1522 1525 1528 1528 1523 1522 1527 1525 1524 1525 1527 1529 + 1529 1528 1525 1407 1392 1391 1392 1407 1530 1530 1516 1392 + 1412 1407 1406 1531 1530 1407 1532 1519 1516 1516 1530 1532 + 1533 1520 1519 1519 1532 1533 1534 1532 1530 1535 1533 1532 + 1407 1412 1531 1413 1412 1408 1536 1531 1412 1412 1413 1536 + 1530 1531 1534 1537 1534 1531 1532 1534 1535 1538 1535 1534 + 1531 1536 1537 1534 1537 1538 1539 1526 1520 1520 1533 1539 + 1526 1539 1540 1541 1539 1533 1540 1527 1526 1527 1540 1542 + 1542 1529 1527 1543 1540 1539 1544 1542 1540 1533 1535 1541 + 1545 1541 1535 1539 1541 1543 1535 1538 1545 1541 1545 1546 + 1540 1543 1544 1546 1543 1541 1547 1544 1543 1543 1546 1547 + 1095 1097 1129 1548 1129 1097 1127 1129 1130 1549 1130 1129 + 1097 1523 1548 1129 1548 1549 1128 1130 1133 1550 1133 1130 + 1131 1133 1141 1130 1549 1550 1133 1550 1551 1552 1548 1523 + 1523 1528 1552 1548 1552 1553 1553 1549 1548 1554 1552 1528 + 1528 1529 1554 1555 1553 1552 1552 1554 1555 1549 1553 1556 + 1556 1550 1549 1550 1556 1557 1558 1556 1553 1553 1555 1558 + 1556 1558 1559 1132 1141 1142 1551 1141 1133 1560 1142 1141 + 1141 1551 1560 1140 1142 1145 1561 1145 1142 1143 1145 1146 + 1562 1146 1145 1142 1560 1561 1145 1561 1562 1557 1551 1550 + 1551 1557 1563 1563 1560 1551 1559 1557 1556 1557 1559 1564 + 1564 1563 1557 1565 1561 1560 1560 1563 1565 1561 1565 1566 + 1566 1562 1561 1567 1565 1563 1563 1564 1567 1568 1566 1565 + 1565 1567 1568 1569 1554 1529 1529 1542 1569 1570 1555 1554 + 1554 1569 1570 1571 1569 1542 1572 1570 1569 1573 1558 1555 + 1555 1570 1573 1558 1573 1574 1575 1573 1570 1542 1544 1571 + 1576 1571 1544 1569 1571 1572 1577 1572 1571 1544 1547 1576 + 1571 1576 1577 1570 1572 1575 1578 1575 1572 1573 1575 1579 + 1572 1577 1578 1575 1578 1580 1574 1559 1558 1559 1574 1581 + 1581 1564 1559 1579 1574 1573 1582 1581 1574 1583 1567 1564 + 1564 1581 1583 1584 1568 1567 1567 1583 1584 1585 1583 1581 + 1586 1584 1583 1574 1579 1582 1580 1579 1575 1587 1582 1579 + 1579 1580 1587 1581 1582 1585 1588 1585 1582 1583 1585 1586 + 1589 1586 1585 1582 1587 1588 1585 1588 1589 1480 1413 1411 + 1413 1480 1590 1590 1536 1413 1482 1480 1479 1480 1482 1591 + 1591 1590 1480 1592 1537 1536 1536 1590 1592 1537 1592 1593 + 1593 1538 1537 1594 1592 1590 1590 1591 1594 1595 1593 1592 + 1592 1594 1595 1488 1482 1481 1482 1488 1596 1596 1591 1482 + 1502 1488 1487 1597 1596 1488 1598 1594 1591 1591 1596 1598 + 1599 1595 1594 1594 1598 1599 1600 1598 1596 1601 1599 1598 + 1538 1593 1602 1602 1545 1538 1545 1602 1603 1604 1602 1593 + 1593 1595 1604 1602 1604 1605 1603 1546 1545 1546 1603 1606 + 1606 1547 1546 1605 1603 1602 1603 1605 1607 1607 1606 1603 + 1608 1604 1595 1595 1599 1608 1604 1608 1609 1610 1608 1599 + 1609 1605 1604 1605 1609 1611 1611 1607 1605 1612 1609 1608 + 1613 1611 1609 1488 1502 1597 1503 1502 1489 1614 1597 1502 + 1502 1503 1614 1596 1597 1600 1615 1600 1597 1598 1600 1601 + 1616 1601 1600 1597 1614 1615 1600 1615 1616 1509 1503 1501 + 1503 1509 1617 1617 1614 1503 1511 1509 1508 1509 1511 1618 + 1618 1617 1509 1619 1615 1614 1614 1617 1619 1615 1619 1620 + 1620 1616 1615 1621 1619 1617 1617 1618 1621 1622 1620 1619 + 1619 1621 1622 1599 1601 1610 1623 1610 1601 1608 1610 1612 + 1601 1616 1623 1610 1623 1624 1609 1612 1613 1624 1612 1610 + 1625 1613 1612 1612 1624 1625 1616 1620 1626 1626 1623 1616 + 1623 1626 1627 1628 1626 1620 1620 1622 1628 1626 1628 1629 + 1627 1624 1623 1624 1627 1630 1630 1625 1624 1629 1627 1626 + 1627 1629 1631 1631 1630 1627 1632 1576 1547 1547 1606 1632 + 1576 1632 1633 1633 1577 1576 1634 1632 1606 1606 1607 1634 + 1635 1633 1632 1632 1634 1635 1577 1633 1636 1636 1578 1577 + 1578 1636 1637 1638 1636 1633 1633 1635 1638 1636 1638 1639 + 1640 1634 1607 1607 1611 1640 1641 1635 1634 1634 1640 1641 + 1642 1640 1611 1643 1641 1640 1644 1638 1635 1635 1641 1644 + 1638 1644 1645 1646 1644 1641 1637 1580 1578 1580 1637 1647 + 1647 1587 1580 1639 1637 1636 1637 1639 1648 1648 1647 1637 + 1649 1588 1587 1587 1647 1649 1588 1649 1650 1650 1589 1588 + 1651 1649 1647 1647 1648 1651 1652 1650 1649 1649 1651 1652 + 1645 1639 1638 1639 1645 1653 1653 1648 1639 1654 1645 1644 + 1655 1653 1645 1656 1651 1648 1648 1653 1656 1657 1652 1651 + 1651 1656 1657 1658 1656 1653 1659 1657 1656 1611 1613 1642 + 1660 1642 1613 1640 1642 1643 1661 1643 1642 1613 1625 1660 + 1642 1660 1661 1641 1643 1646 1662 1646 1643 1644 1646 1654 + 1643 1661 1662 1646 1662 1663 1664 1660 1625 1625 1630 1664 + 1660 1664 1665 1665 1661 1660 1666 1664 1630 1630 1631 1666 + 1667 1665 1664 1664 1666 1667 1661 1665 1668 1668 1662 1661 + 1662 1668 1669 1670 1668 1665 1665 1667 1670 1668 1670 1671 + 1645 1654 1655 1663 1654 1646 1672 1655 1654 1654 1663 1672 + 1653 1655 1658 1673 1658 1655 1656 1658 1659 1674 1659 1658 + 1655 1672 1673 1658 1673 1674 1669 1663 1662 1663 1669 1675 + 1675 1672 1663 1671 1669 1668 1669 1671 1676 1676 1675 1669 + 1677 1673 1672 1672 1675 1677 1673 1677 1678 1678 1674 1673 + 1679 1677 1675 1675 1676 1679 1680 1678 1677 1677 1679 1680 + </DataArray> + <DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii"> + 3 6 9 12 15 18 21 24 27 30 33 36 + 39 42 45 48 51 54 57 60 63 66 69 72 + 75 78 81 84 87 90 93 96 99 102 105 108 + 111 114 117 120 123 126 129 132 135 138 141 144 + 147 150 153 156 159 162 165 168 171 174 177 180 + 183 186 189 192 195 198 201 204 207 210 213 216 + 219 222 225 228 231 234 237 240 243 246 249 252 + 255 258 261 264 267 270 273 276 279 282 285 288 + 291 294 297 300 303 306 309 312 315 318 321 324 + 327 330 333 336 339 342 345 348 351 354 357 360 + 363 366 369 372 375 378 381 384 387 390 393 396 + 399 402 405 408 411 414 417 420 423 426 429 432 + 435 438 441 444 447 450 453 456 459 462 465 468 + 471 474 477 480 483 486 489 492 495 498 501 504 + 507 510 513 516 519 522 525 528 531 534 537 540 + 543 546 549 552 555 558 561 564 567 570 573 576 + 579 582 585 588 591 594 597 600 603 606 609 612 + 615 618 621 624 627 630 633 636 639 642 645 648 + 651 654 657 660 663 666 669 672 675 678 681 684 + 687 690 693 696 699 702 705 708 711 714 717 720 + 723 726 729 732 735 738 741 744 747 750 753 756 + 759 762 765 768 771 774 777 780 783 786 789 792 + 795 798 801 804 807 810 813 816 819 822 825 828 + 831 834 837 840 843 846 849 852 855 858 861 864 + 867 870 873 876 879 882 885 888 891 894 897 900 + 903 906 909 912 915 918 921 924 927 930 933 936 + 939 942 945 948 951 954 957 960 963 966 969 972 + 975 978 981 984 987 990 993 996 999 1002 1005 1008 + 1011 1014 1017 1020 1023 1026 1029 1032 1035 1038 1041 1044 + 1047 1050 1053 1056 1059 1062 1065 1068 1071 1074 1077 1080 + 1083 1086 1089 1092 1095 1098 1101 1104 1107 1110 1113 1116 + 1119 1122 1125 1128 1131 1134 1137 1140 1143 1146 1149 1152 + 1155 1158 1161 1164 1167 1170 1173 1176 1179 1182 1185 1188 + 1191 1194 1197 1200 1203 1206 1209 1212 1215 1218 1221 1224 + 1227 1230 1233 1236 1239 1242 1245 1248 1251 1254 1257 1260 + 1263 1266 1269 1272 1275 1278 1281 1284 1287 1290 1293 1296 + 1299 1302 1305 1308 1311 1314 1317 1320 1323 1326 1329 1332 + 1335 1338 1341 1344 1347 1350 1353 1356 1359 1362 1365 1368 + 1371 1374 1377 1380 1383 1386 1389 1392 1395 1398 1401 1404 + 1407 1410 1413 1416 1419 1422 1425 1428 1431 1434 1437 1440 + 1443 1446 1449 1452 1455 1458 1461 1464 1467 1470 1473 1476 + 1479 1482 1485 1488 1491 1494 1497 1500 1503 1506 1509 1512 + 1515 1518 1521 1524 1527 1530 1533 1536 1539 1542 1545 1548 + 1551 1554 1557 1560 1563 1566 1569 1572 1575 1578 1581 1584 + 1587 1590 1593 1596 1599 1602 1605 1608 1611 1614 1617 1620 + 1623 1626 1629 1632 1635 1638 1641 1644 1647 1650 1653 1656 + 1659 1662 1665 1668 1671 1674 1677 1680 1683 1686 1689 1692 + 1695 1698 1701 1704 1707 1710 1713 1716 1719 1722 1725 1728 + 1731 1734 1737 1740 1743 1746 1749 1752 1755 1758 1761 1764 + 1767 1770 1773 1776 1779 1782 1785 1788 1791 1794 1797 1800 + 1803 1806 1809 1812 1815 1818 1821 1824 1827 1830 1833 1836 + 1839 1842 1845 1848 1851 1854 1857 1860 1863 1866 1869 1872 + 1875 1878 1881 1884 1887 1890 1893 1896 1899 1902 1905 1908 + 1911 1914 1917 1920 1923 1926 1929 1932 1935 1938 1941 1944 + 1947 1950 1953 1956 1959 1962 1965 1968 1971 1974 1977 1980 + 1983 1986 1989 1992 1995 1998 2001 2004 2007 2010 2013 2016 + 2019 2022 2025 2028 2031 2034 2037 2040 2043 2046 2049 2052 + 2055 2058 2061 2064 2067 2070 2073 2076 2079 2082 2085 2088 + 2091 2094 2097 2100 2103 2106 2109 2112 2115 2118 2121 2124 + 2127 2130 2133 2136 2139 2142 2145 2148 2151 2154 2157 2160 + 2163 2166 2169 2172 2175 2178 2181 2184 2187 2190 2193 2196 + 2199 2202 2205 2208 2211 2214 2217 2220 2223 2226 2229 2232 + 2235 2238 2241 2244 2247 2250 2253 2256 2259 2262 2265 2268 + 2271 2274 2277 2280 2283 2286 2289 2292 2295 2298 2301 2304 + 2307 2310 2313 2316 2319 2322 2325 2328 2331 2334 2337 2340 + 2343 2346 2349 2352 2355 2358 2361 2364 2367 2370 2373 2376 + 2379 2382 2385 2388 2391 2394 2397 2400 2403 2406 2409 2412 + 2415 2418 2421 2424 2427 2430 2433 2436 2439 2442 2445 2448 + 2451 2454 2457 2460 2463 2466 2469 2472 2475 2478 2481 2484 + 2487 2490 2493 2496 2499 2502 2505 2508 2511 2514 2517 2520 + 2523 2526 2529 2532 2535 2538 2541 2544 2547 2550 2553 2556 + 2559 2562 2565 2568 2571 2574 2577 2580 2583 2586 2589 2592 + 2595 2598 2601 2604 2607 2610 2613 2616 2619 2622 2625 2628 + 2631 2634 2637 2640 2643 2646 2649 2652 2655 2658 2661 2664 + 2667 2670 2673 2676 2679 2682 2685 2688 2691 2694 2697 2700 + 2703 2706 2709 2712 2715 2718 2721 2724 2727 2730 2733 2736 + 2739 2742 2745 2748 2751 2754 2757 2760 2763 2766 2769 2772 + 2775 2778 2781 2784 2787 2790 2793 2796 2799 2802 2805 2808 + 2811 2814 2817 2820 2823 2826 2829 2832 2835 2838 2841 2844 + 2847 2850 2853 2856 2859 2862 2865 2868 2871 2874 2877 2880 + 2883 2886 2889 2892 2895 2898 2901 2904 2907 2910 2913 2916 + 2919 2922 2925 2928 2931 2934 2937 2940 2943 2946 2949 2952 + 2955 2958 2961 2964 2967 2970 2973 2976 2979 2982 2985 2988 + 2991 2994 2997 3000 3003 3006 3009 3012 3015 3018 3021 3024 + 3027 3030 3033 3036 3039 3042 3045 3048 3051 3054 3057 3060 + 3063 3066 3069 3072 3075 3078 3081 3084 3087 3090 3093 3096 + 3099 3102 3105 3108 3111 3114 3117 3120 3123 3126 3129 3132 + 3135 3138 3141 3144 3147 3150 3153 3156 3159 3162 3165 3168 + 3171 3174 3177 3180 3183 3186 3189 3192 3195 3198 3201 3204 + 3207 3210 3213 3216 3219 3222 3225 3228 3231 3234 3237 3240 + 3243 3246 3249 3252 3255 3258 3261 3264 3267 3270 3273 3276 + 3279 3282 3285 3288 3291 3294 3297 3300 3303 3306 3309 3312 + 3315 3318 3321 3324 3327 3330 3333 3336 3339 3342 3345 3348 + 3351 3354 3357 3360 3363 3366 3369 3372 3375 3378 3381 3384 + 3387 3390 3393 3396 3399 3402 3405 3408 3411 3414 3417 3420 + 3423 3426 3429 3432 3435 3438 3441 3444 3447 3450 3453 3456 + 3459 3462 3465 3468 3471 3474 3477 3480 3483 3486 3489 3492 + 3495 3498 3501 3504 3507 3510 3513 3516 3519 3522 3525 3528 + 3531 3534 3537 3540 3543 3546 3549 3552 3555 3558 3561 3564 + 3567 3570 3573 3576 3579 3582 3585 3588 3591 3594 3597 3600 + 3603 3606 3609 3612 3615 3618 3621 3624 3627 3630 3633 3636 + 3639 3642 3645 3648 3651 3654 3657 3660 3663 3666 3669 3672 + 3675 3678 3681 3684 3687 3690 3693 3696 3699 3702 3705 3708 + 3711 3714 3717 3720 3723 3726 3729 3732 3735 3738 3741 3744 + 3747 3750 3753 3756 3759 3762 3765 3768 3771 3774 3777 3780 + 3783 3786 3789 3792 3795 3798 3801 3804 3807 3810 3813 3816 + 3819 3822 3825 3828 3831 3834 3837 3840 3843 3846 3849 3852 + 3855 3858 3861 3864 3867 3870 3873 3876 3879 3882 3885 3888 + 3891 3894 3897 3900 3903 3906 3909 3912 3915 3918 3921 3924 + 3927 3930 3933 3936 3939 3942 3945 3948 3951 3954 3957 3960 + 3963 3966 3969 3972 3975 3978 3981 3984 3987 3990 3993 3996 + 3999 4002 4005 4008 4011 4014 4017 4020 4023 4026 4029 4032 + 4035 4038 4041 4044 4047 4050 4053 4056 4059 4062 4065 4068 + 4071 4074 4077 4080 4083 4086 4089 4092 4095 4098 4101 4104 + 4107 4110 4113 4116 4119 4122 4125 4128 4131 4134 4137 4140 + 4143 4146 4149 4152 4155 4158 4161 4164 4167 4170 4173 4176 + 4179 4182 4185 4188 4191 4194 4197 4200 4203 4206 4209 4212 + 4215 4218 4221 4224 4227 4230 4233 4236 4239 4242 4245 4248 + 4251 4254 4257 4260 4263 4266 4269 4272 4275 4278 4281 4284 + 4287 4290 4293 4296 4299 4302 4305 4308 4311 4314 4317 4320 + 4323 4326 4329 4332 4335 4338 4341 4344 4347 4350 4353 4356 + 4359 4362 4365 4368 4371 4374 4377 4380 4383 4386 4389 4392 + 4395 4398 4401 4404 4407 4410 4413 4416 4419 4422 4425 4428 + 4431 4434 4437 4440 4443 4446 4449 4452 4455 4458 4461 4464 + 4467 4470 4473 4476 4479 4482 4485 4488 4491 4494 4497 4500 + 4503 4506 4509 4512 4515 4518 4521 4524 4527 4530 4533 4536 + 4539 4542 4545 4548 4551 4554 4557 4560 4563 4566 4569 4572 + 4575 4578 4581 4584 4587 4590 4593 4596 4599 4602 4605 4608 + 4611 4614 4617 4620 4623 4626 4629 4632 4635 4638 4641 4644 + 4647 4650 4653 4656 4659 4662 4665 4668 4671 4674 4677 4680 + 4683 4686 4689 4692 4695 4698 4701 4704 4707 4710 4713 4716 + 4719 4722 4725 4728 4731 4734 4737 4740 4743 4746 4749 4752 + 4755 4758 4761 4764 4767 4770 4773 4776 4779 4782 4785 4788 + 4791 4794 4797 4800 4803 4806 4809 4812 4815 4818 4821 4824 + 4827 4830 4833 4836 4839 4842 4845 4848 4851 4854 4857 4860 + 4863 4866 4869 4872 4875 4878 4881 4884 4887 4890 4893 4896 + 4899 4902 4905 4908 4911 4914 4917 4920 4923 4926 4929 4932 + 4935 4938 4941 4944 4947 4950 4953 4956 4959 4962 4965 4968 + 4971 4974 4977 4980 4983 4986 4989 4992 4995 4998 5001 5004 + 5007 5010 5013 5016 5019 5022 5025 5028 5031 5034 5037 5040 + 5043 5046 5049 5052 5055 5058 5061 5064 5067 5070 5073 5076 + 5079 5082 5085 5088 5091 5094 5097 5100 5103 5106 5109 5112 + 5115 5118 5121 5124 5127 5130 5133 5136 5139 5142 5145 5148 + 5151 5154 5157 5160 5163 5166 5169 5172 5175 5178 5181 5184 + 5187 5190 5193 5196 5199 5202 5205 5208 5211 5214 5217 5220 + 5223 5226 5229 5232 5235 5238 5241 5244 5247 5250 5253 5256 + 5259 5262 5265 5268 5271 5274 5277 5280 5283 5286 5289 5292 + 5295 5298 5301 5304 5307 5310 5313 5316 5319 5322 5325 5328 + 5331 5334 5337 5340 5343 5346 5349 5352 5355 5358 5361 5364 + 5367 5370 5373 5376 5379 5382 5385 5388 5391 5394 5397 5400 + 5403 5406 5409 5412 5415 5418 5421 5424 5427 5430 5433 5436 + 5439 5442 5445 5448 5451 5454 5457 5460 5463 5466 5469 5472 + 5475 5478 5481 5484 5487 5490 5493 5496 5499 5502 5505 5508 + 5511 5514 5517 5520 5523 5526 5529 5532 5535 5538 5541 5544 + 5547 5550 5553 5556 5559 5562 5565 5568 5571 5574 5577 5580 + 5583 5586 5589 5592 5595 5598 5601 5604 5607 5610 5613 5616 + 5619 5622 5625 5628 5631 5634 5637 5640 5643 5646 5649 5652 + 5655 5658 5661 5664 5667 5670 5673 5676 5679 5682 5685 5688 + 5691 5694 5697 5700 5703 5706 5709 5712 5715 5718 5721 5724 + 5727 5730 5733 5736 5739 5742 5745 5748 5751 5754 5757 5760 + 5763 5766 5769 5772 5775 5778 5781 5784 5787 5790 5793 5796 + 5799 5802 5805 5808 5811 5814 5817 5820 5823 5826 5829 5832 + 5835 5838 5841 5844 5847 5850 5853 5856 5859 5862 5865 5868 + 5871 5874 5877 5880 5883 5886 5889 5892 5895 5898 5901 5904 + 5907 5910 5913 5916 5919 5922 5925 5928 5931 5934 5937 5940 + 5943 5946 5949 5952 5955 5958 5961 5964 5967 5970 5973 5976 + 5979 5982 5985 5988 5991 5994 5997 6000 6003 6006 6009 6012 + 6015 6018 6021 6024 6027 6030 6033 6036 6039 6042 6045 6048 + 6051 6054 6057 6060 6063 6066 6069 6072 6075 6078 6081 6084 + 6087 6090 6093 6096 6099 6102 6105 6108 6111 6114 6117 6120 + 6123 6126 6129 6132 6135 6138 6141 6144 6147 6150 6153 6156 + 6159 6162 6165 6168 6171 6174 6177 6180 6183 6186 6189 6192 + 6195 6198 6201 6204 6207 6210 6213 6216 6219 6222 6225 6228 + 6231 6234 6237 6240 6243 6246 6249 6252 6255 6258 6261 6264 + 6267 6270 6273 6276 6279 6282 6285 6288 6291 6294 6297 6300 + 6303 6306 6309 6312 6315 6318 6321 6324 6327 6330 6333 6336 + 6339 6342 6345 6348 6351 6354 6357 6360 6363 6366 6369 6372 + 6375 6378 6381 6384 6387 6390 6393 6396 6399 6402 6405 6408 + 6411 6414 6417 6420 6423 6426 6429 6432 6435 6438 6441 6444 + 6447 6450 6453 6456 6459 6462 6465 6468 6471 6474 6477 6480 + 6483 6486 6489 6492 6495 6498 6501 6504 6507 6510 6513 6516 + 6519 6522 6525 6528 6531 6534 6537 6540 6543 6546 6549 6552 + 6555 6558 6561 6564 6567 6570 6573 6576 6579 6582 6585 6588 + 6591 6594 6597 6600 6603 6606 6609 6612 6615 6618 6621 6624 + 6627 6630 6633 6636 6639 6642 6645 6648 6651 6654 6657 6660 + 6663 6666 6669 6672 6675 6678 6681 6684 6687 6690 6693 6696 + 6699 6702 6705 6708 6711 6714 6717 6720 6723 6726 6729 6732 + 6735 6738 6741 6744 6747 6750 6753 6756 6759 6762 6765 6768 + 6771 6774 6777 6780 6783 6786 6789 6792 6795 6798 6801 6804 + 6807 6810 6813 6816 6819 6822 6825 6828 6831 6834 6837 6840 + 6843 6846 6849 6852 6855 6858 6861 6864 6867 6870 6873 6876 + 6879 6882 6885 6888 6891 6894 6897 6900 6903 6906 6909 6912 + 6915 6918 6921 6924 6927 6930 6933 6936 6939 6942 6945 6948 + 6951 6954 6957 6960 6963 6966 6969 6972 6975 6978 6981 6984 + 6987 6990 6993 6996 6999 7002 7005 7008 7011 7014 7017 7020 + 7023 7026 7029 7032 7035 7038 7041 7044 7047 7050 7053 7056 + 7059 7062 7065 7068 7071 7074 7077 7080 7083 7086 7089 7092 + 7095 7098 7101 7104 7107 7110 7113 7116 7119 7122 7125 7128 + 7131 7134 7137 7140 7143 7146 7149 7152 7155 7158 7161 7164 + 7167 7170 7173 7176 7179 7182 7185 7188 7191 7194 7197 7200 + 7203 7206 7209 7212 7215 7218 7221 7224 7227 7230 7233 7236 + 7239 7242 7245 7248 7251 7254 7257 7260 7263 7266 7269 7272 + 7275 7278 7281 7284 7287 7290 7293 7296 7299 7302 7305 7308 + 7311 7314 7317 7320 7323 7326 7329 7332 7335 7338 7341 7344 + 7347 7350 7353 7356 7359 7362 7365 7368 7371 7374 7377 7380 + 7383 7386 7389 7392 7395 7398 7401 7404 7407 7410 7413 7416 + 7419 7422 7425 7428 7431 7434 7437 7440 7443 7446 7449 7452 + 7455 7458 7461 7464 7467 7470 7473 7476 7479 7482 7485 7488 + 7491 7494 7497 7500 7503 7506 7509 7512 7515 7518 7521 7524 + 7527 7530 7533 7536 7539 7542 7545 7548 7551 7554 7557 7560 + 7563 7566 7569 7572 7575 7578 7581 7584 7587 7590 7593 7596 + 7599 7602 7605 7608 7611 7614 7617 7620 7623 7626 7629 7632 + 7635 7638 7641 7644 7647 7650 7653 7656 7659 7662 7665 7668 + 7671 7674 7677 7680 7683 7686 7689 7692 7695 7698 7701 7704 + 7707 7710 7713 7716 7719 7722 7725 7728 7731 7734 7737 7740 + 7743 7746 7749 7752 7755 7758 7761 7764 7767 7770 7773 7776 + 7779 7782 7785 7788 7791 7794 7797 7800 7803 7806 7809 7812 + 7815 7818 7821 7824 7827 7830 7833 7836 7839 7842 7845 7848 + 7851 7854 7857 7860 7863 7866 7869 7872 7875 7878 7881 7884 + 7887 7890 7893 7896 7899 7902 7905 7908 7911 7914 7917 7920 + 7923 7926 7929 7932 7935 7938 7941 7944 7947 7950 7953 7956 + 7959 7962 7965 7968 7971 7974 7977 7980 7983 7986 7989 7992 + 7995 7998 8001 8004 8007 8010 8013 8016 8019 8022 8025 8028 + 8031 8034 8037 8040 8043 8046 8049 8052 8055 8058 8061 8064 + 8067 8070 8073 8076 8079 8082 8085 8088 8091 8094 8097 8100 + 8103 8106 8109 8112 8115 8118 8121 8124 8127 8130 8133 8136 + 8139 8142 8145 8148 8151 8154 8157 8160 8163 8166 8169 8172 + 8175 8178 8181 8184 8187 8190 8193 8196 8199 8202 8205 8208 + 8211 8214 8217 8220 8223 8226 8229 8232 8235 8238 8241 8244 + 8247 8250 8253 8256 8259 8262 8265 8268 8271 8274 8277 8280 + 8283 8286 8289 8292 8295 8298 8301 8304 8307 8310 8313 8316 + 8319 8322 8325 8328 8331 8334 8337 8340 8343 8346 8349 8352 + 8355 8358 8361 8364 8367 8370 8373 8376 8379 8382 8385 8388 + 8391 8394 8397 8400 8403 8406 8409 8412 8415 8418 8421 8424 + 8427 8430 8433 8436 8439 8442 8445 8448 8451 8454 8457 8460 + 8463 8466 8469 8472 8475 8478 8481 8484 8487 8490 8493 8496 + 8499 8502 8505 8508 8511 8514 8517 8520 8523 8526 8529 8532 + 8535 8538 8541 8544 8547 8550 8553 8556 8559 8562 8565 8568 + 8571 8574 8577 8580 8583 8586 8589 8592 8595 8598 8601 8604 + 8607 8610 8613 8616 8619 8622 8625 8628 8631 8634 8637 8640 + 8643 8646 8649 8652 8655 8658 8661 8664 8667 8670 8673 8676 + 8679 8682 8685 8688 8691 8694 8697 8700 8703 8706 8709 8712 + 8715 8718 8721 8724 8727 8730 8733 8736 8739 8742 8745 8748 + 8751 8754 8757 8760 8763 8766 8769 8772 8775 8778 8781 8784 + 8787 8790 8793 8796 8799 8802 8805 8808 8811 8814 8817 8820 + 8823 8826 8829 8832 8835 8838 8841 8844 8847 8850 8853 8856 + 8859 8862 8865 8868 8871 8874 8877 8880 8883 8886 8889 8892 + 8895 8898 8901 8904 8907 8910 8913 8916 8919 8922 8925 8928 + 8931 8934 8937 8940 8943 8946 8949 8952 8955 8958 8961 8964 + 8967 8970 8973 8976 8979 8982 8985 8988 8991 8994 8997 9000 + 9003 9006 9009 9012 9015 9018 9021 9024 9027 9030 9033 9036 + 9039 9042 9045 9048 9051 9054 9057 9060 9063 9066 9069 9072 + 9075 9078 9081 9084 9087 9090 9093 9096 9099 9102 9105 9108 + 9111 9114 9117 9120 9123 9126 9129 9132 9135 9138 9141 9144 + 9147 9150 9153 9156 9159 9162 9165 9168 9171 9174 9177 9180 + 9183 9186 9189 9192 9195 9198 9201 9204 9207 9210 9213 9216 + 9219 9222 9225 9228 9231 9234 9237 9240 9243 9246 9249 9252 + 9255 9258 9261 9264 9267 9270 9273 9276 9279 9282 9285 9288 + 9291 9294 9297 9300 9303 9306 9309 9312 9315 9318 9321 9324 + 9327 9330 9333 9336 9339 9342 9345 9348 9351 9354 9357 9360 + 9363 9366 9369 9372 9375 9378 9381 9384 9387 9390 9393 9396 + 9399 9402 9405 9408 9411 9414 9417 9420 9423 9426 9429 9432 + 9435 9438 9441 9444 9447 9450 9453 9456 9459 9462 9465 9468 + 9471 9474 9477 9480 9483 9486 9489 9492 9495 9498 9501 9504 + 9507 9510 9513 9516 9519 9522 9525 9528 9531 9534 9537 9540 + 9543 9546 9549 9552 9555 9558 9561 9564 9567 9570 9573 9576 + 9579 9582 9585 9588 9591 9594 9597 9600 + </DataArray> + <DataArray type="UInt8" Name="types" NumberOfComponents="1" format="ascii"> + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 + </DataArray> + </Cells> + </Piece> + </UnstructuredGrid> +</VTKFile> -- GitLab From 905ce1d9658211e3e054215bd5093d614679544a Mon Sep 17 00:00:00 2001 From: Timo Koch <timokoch@uio.no> Date: Sat, 3 Aug 2024 00:41:31 +0200 Subject: [PATCH 09/24] [cvfe] Add a separate header for LocalDof --- dumux/discretization/cvfe/localdof.hh | 54 +++++++++++++++++++ .../pq1bubble/fvelementgeometry.hh | 25 ++------- 2 files changed, 58 insertions(+), 21 deletions(-) create mode 100644 dumux/discretization/cvfe/localdof.hh diff --git a/dumux/discretization/cvfe/localdof.hh b/dumux/discretization/cvfe/localdof.hh new file mode 100644 index 0000000000..1d2302cf7e --- /dev/null +++ b/dumux/discretization/cvfe/localdof.hh @@ -0,0 +1,54 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +// +// SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder +// SPDX-License-Identifier: GPL-3.0-or-later +// +/*! + * \file + * \ingroup CVFEDiscretization + * \brief Classes representing dofs on elements for control-volume finite element schemes + */ +#ifndef DUMUX_CVFE_LOCAL_DOF_HH +#define DUMUX_CVFE_LOCAL_DOF_HH + +#include <dumux/common/indextraits.hh> + +namespace Dumux::CVFE { + +/*! + * \ingroup CVFEDiscretization + * \brief A local degree of freedom from an element perspective + */ +template<class LocalIndex> +class LocalDof +{ +public: + LocalDof(LocalIndex index) : index_(index) {} + LocalIndex index() const { return index_; } +private: + LocalIndex index_; +}; + +/*! + * \ingroup CVFEDiscretization + * \brief A local degree of freedom associated with a (sub-)control volume from an element perspective + */ +template<class FVElementGeometry> +class FVLocalDof : public LocalDof<typename IndexTraits<typename FVElementGeometry::GridGeometry::GridView>::LocalIndex> +{ + using LocalIndex = typename IndexTraits<typename FVElementGeometry::GridGeometry::GridView>::LocalIndex; + using ParentType = LocalDof<LocalIndex>; +public: + FVLocalDof(LocalIndex dofIndex, const FVElementGeometry& fvGeometry) + : ParentType(dofIndex), fvGeometry_(fvGeometry) {} + + const typename FVElementGeometry::SubControlVolume& scv() const + { return fvGeometry_.scv(this->index()); } +private: + const FVElementGeometry& fvGeometry_; +}; + +} // end namespace Dumux::CVFE + +#endif diff --git a/dumux/discretization/pq1bubble/fvelementgeometry.hh b/dumux/discretization/pq1bubble/fvelementgeometry.hh index 326fdfaa8c..3cbf4f5155 100644 --- a/dumux/discretization/pq1bubble/fvelementgeometry.hh +++ b/dumux/discretization/pq1bubble/fvelementgeometry.hh @@ -26,6 +26,7 @@ #include <dumux/common/indextraits.hh> #include <dumux/discretization/scvandscvfiterators.hh> +#include <dumux/discretization/cvfe/localdof.hh> #include <dumux/discretization/pq1bubble/geometryhelper.hh> namespace Dumux { @@ -56,24 +57,6 @@ class PQ1BubbleFVElementGeometry<GG, true> using GGCache = typename GG::Cache; using GeometryHelper = typename GGCache::GeometryHelper; - class LocalDof - { - public: - LocalDof(std::size_t dofIndex) : dofIndex_(dofIndex) {} - std::size_t index() const { return dofIndex_; } - private: - std::size_t dofIndex_; - }; - - class FVLocalDof : public LocalDof - { - public: - FVLocalDof(std::size_t dofIndex, const ThisType& fvGeometry) - : LocalDof(dofIndex), fvGeometry_(fvGeometry) {} - const typename GG::SubControlVolume& scv() const { return fvGeometry_.scv(this->index()); } - private: - const ThisType& fvGeometry_; - }; public: //! export the element type using Element = typename GridView::template Codim<0>::Entity; @@ -122,7 +105,7 @@ public: { return Dune::transformedRangeView( Dune::range(std::size_t(0), fvGeometry.numScv()-GeometryHelper::numHybridDofs(fvGeometry.element().type())), - [&](const auto i) { return FVLocalDof{ i, fvGeometry }; } + [&](const auto i) { return CVFE::FVLocalDof{ static_cast<LocalIndexType>(i), fvGeometry }; } ); } @@ -131,7 +114,7 @@ public: { return Dune::transformedRangeView( Dune::range(fvGeometry.numScv()-GeometryHelper::numHybridDofs(fvGeometry.element().type()), fvGeometry.numScv()), - [](const auto i) { return LocalDof{ i }; } + [](const auto i) { return CVFE::LocalDof{ static_cast<LocalIndexType>(i) }; } ); } @@ -140,7 +123,7 @@ public: { return Dune::transformedRangeView( Dune::range(std::size_t(0), fvGeometry.numScv()), - [](const auto i) { return LocalDof{ i }; } + [](const auto i) { return CVFE::LocalDof{ static_cast<LocalIndexType>(i) }; } ); } -- GitLab From f98261c68f1b2d1d060e0deff759bd433b5a07cd Mon Sep 17 00:00:00 2001 From: Timo Koch <timokoch@uio.no> Date: Sat, 3 Aug 2024 00:47:09 +0200 Subject: [PATCH 10/24] [cvfe] Add iterators over localDofs for box and fcdiamond --- dumux/discretization/box/fvelementgeometry.hh | 38 +++++++++++++++++++ .../facecentered/diamond/fvelementgeometry.hh | 20 ++++++++++ 2 files changed, 58 insertions(+) diff --git a/dumux/discretization/box/fvelementgeometry.hh b/dumux/discretization/box/fvelementgeometry.hh index 24318626de..82df6786ed 100644 --- a/dumux/discretization/box/fvelementgeometry.hh +++ b/dumux/discretization/box/fvelementgeometry.hh @@ -20,11 +20,13 @@ #include <array> #include <vector> +#include <dune/common/rangeutilities.hh> #include <dune/geometry/type.hh> #include <dune/localfunctions/lagrange/pqkfactory.hh> #include <dumux/common/indextraits.hh> #include <dumux/discretization/scvandscvfiterators.hh> +#include <dumux/discretization/cvfe/localdof.hh> #include <dumux/discretization/box/boxgeometryhelper.hh> namespace Dumux { @@ -97,6 +99,24 @@ public: return Dune::IteratorRange<Iter>(s.begin(), s.end()); } + //! iterate over dof indices that belong to dofs associated with control volumes + friend inline auto fvLocalDofs(const BoxFVElementGeometry& fvGeometry) + { + return Dune::transformedRangeView( + Dune::range(fvGeometry.numScv()), + [&](const auto i) { return CVFE::FVLocalDof{ static_cast<LocalIndexType>(i), fvGeometry }; } + ); + } + + //! an iterator over all local dofs + friend inline auto localDofs(const BoxFVElementGeometry& fvGeometry) + { + return Dune::transformedRangeView( + Dune::range(fvGeometry.numScv()), + [](const auto i) { return CVFE::LocalDof{ static_cast<LocalIndexType>(i) }; } + ); + } + //! iterator range for sub control volumes faces. Iterates over //! all scvfs of the bound element. //! This is a free function found by means of ADL @@ -273,6 +293,24 @@ public: return Dune::IteratorRange<Iter>(fvGeometry.scvs_.begin(), fvGeometry.scvs_.end()); } + //! iterate over dof indices that belong to dofs associated with control volumes + friend inline auto fvLocalDofs(const BoxFVElementGeometry& fvGeometry) + { + return Dune::transformedRangeView( + Dune::range(fvGeometry.numScv()), + [&](const auto i) { return CVFE::FVLocalDof{ static_cast<LocalIndexType>(i), fvGeometry }; } + ); + } + + //! an iterator over all local dofs + friend inline auto localDofs(const BoxFVElementGeometry& fvGeometry) + { + return Dune::transformedRangeView( + Dune::range(fvGeometry.numScv()), + [](const auto i) { return CVFE::LocalDof{ static_cast<LocalIndexType>(i) }; } + ); + } + //! iterator range for sub control volumes faces. Iterates over //! all scvfs of the bound element. //! This is a free function found by means of ADL diff --git a/dumux/discretization/facecentered/diamond/fvelementgeometry.hh b/dumux/discretization/facecentered/diamond/fvelementgeometry.hh index ed90779ac8..6e986bc87e 100644 --- a/dumux/discretization/facecentered/diamond/fvelementgeometry.hh +++ b/dumux/discretization/facecentered/diamond/fvelementgeometry.hh @@ -17,9 +17,11 @@ #include <dune/common/reservedvector.hh> #include <dune/common/iteratorrange.hh> +#include <dune/common/rangeutilities.hh> #include <dumux/common/indextraits.hh> #include <dumux/discretization/scvandscvfiterators.hh> +#include <dumux/discretization/cvfe/localdof.hh> #include <dumux/discretization/facecentered/diamond/geometryhelper.hh> namespace Dumux { @@ -81,6 +83,24 @@ public: return Dune::IteratorRange<Iter>(s.begin(), s.end()); } + //! iterate over dof indices that belong to dofs associated with control volumes + friend inline auto fvLocalDofs(const FaceCenteredDiamondFVElementGeometry& fvGeometry) + { + return Dune::transformedRangeView( + Dune::range(fvGeometry.numScv()), + [&](const auto i) { return CVFE::FVLocalDof{ static_cast<LocalIndexType>(i), fvGeometry }; } + ); + } + + //! an iterator over all local dofs + friend inline auto localDofs(const FaceCenteredDiamondFVElementGeometry& fvGeometry) + { + return Dune::transformedRangeView( + Dune::range(fvGeometry.numScv()), + [](const auto i) { return CVFE::LocalDof{ static_cast<LocalIndexType>(i) }; } + ); + } + //! iterator range for sub control volumes faces. Iterates over //! all scvfs of the bound element. //! This is a free function found by means of ADL -- GitLab From c6342a0fe474416fccb1651146e4feb54e18a8dc Mon Sep 17 00:00:00 2001 From: Timo Koch <timokoch@uio.no> Date: Sat, 3 Aug 2024 00:56:05 +0200 Subject: [PATCH 11/24] [cvfe] Iterate over fvDofs instead of scvs directly --- dumux/assembly/cvfelocalresidual.hh | 88 ++++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/dumux/assembly/cvfelocalresidual.hh b/dumux/assembly/cvfelocalresidual.hh index 1993e62e52..300ffe19d5 100644 --- a/dumux/assembly/cvfelocalresidual.hh +++ b/dumux/assembly/cvfelocalresidual.hh @@ -81,6 +81,93 @@ public: using ElementResidualVector = typename ParentType::ElementResidualVector; using ParentType::ParentType; + /*! + * \brief Compute the storage local residual, i.e. the deviation of the + * storage term from zero for instationary problems. + * + * \param element The DUNE Codim<0> entity for which the residual + * ought to be calculated + * \param fvGeometry The finite-volume geometry of the element + * \param prevElemVolVars The volume averaged variables for all + * sub-control volumes of the element at the previous time level + * \param curElemVolVars The volume averaged variables for all + * sub-control volumes of the element at the current time level + */ + using ParentType::evalStorage; + ElementResidualVector evalStorage(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars) const + { + assert(!this->isStationary() && "no time loop set for storage term evaluation"); + + // initialize the residual vector for all scvs in this element + ElementResidualVector residual(fvGeometry.numScv()); + + // evaluate the volume terms (storage + source terms) + // forward to the local residual specialized for the discretization methods + for (const auto& localDof : fvLocalDofs(fvGeometry)) + this->asImp().evalStorage(residual, this->problem(), element, fvGeometry, prevElemVolVars, curElemVolVars, localDof.scv()); + + // allow for additional contributions (e.g. hybrid CVFE schemes) + this->asImp().addToElementStorageResidual(residual, this->problem(), element, fvGeometry, prevElemVolVars, curElemVolVars); + + return residual; + } + + /*! + * \brief Compute the flux and source + * + * \param element The DUNE Codim<0> entity for which the residual + * ought to be calculated + * \param fvGeometry The finite-volume geometry of the element + * \param curElemVolVars The volume averaged variables for all + * sub-control volumes of the element at the current time level + * \param elemFluxVarsCache The element flux variables cache + * \param bcTypes The element boundary types + */ + ElementResidualVector evalFluxAndSource(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, + const ElementBoundaryTypes &bcTypes) const + { + // initialize the residual vector for all scvs in this element + ElementResidualVector residual(fvGeometry.numScv()); + + // evaluate the volume terms (storage + source terms) + // forward to the local residual specialized for the discretization methods + for (const auto& localDof : fvLocalDofs(fvGeometry)) + this->asImp().evalSource(residual, this->problem(), element, fvGeometry, elemVolVars, localDof.scv()); + + // forward to the local residual specialized for the discretization methods + for (auto&& scvf : scvfs(fvGeometry)) + this->asImp().evalFlux(residual, this->problem(), element, fvGeometry, elemVolVars, bcTypes, elemFluxVarsCache, scvf); + + // allow for additional contributions (e.g. hybrid CVFE schemes) + this->asImp().addToElementFluxAndSourceResidual(residual, this->problem(), element, fvGeometry, elemVolVars, bcTypes); + + return residual; + } + + //! add additional storage contributions (e.g. hybrid CVFE schemes) + void addToElementStorageResidual(ElementResidualVector& residual, + const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars) const + {} + + //! add additional flux and source contributions (e.g. hybrid CVFE schemes) + void addToElementFluxAndSourceResidual(ElementResidualVector& residual, + const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& curElemVolVars, + const ElementBoundaryTypes &bcTypes) const + {} + //! evaluate flux residuals for one sub control volume face and add to residual void evalFlux(ElementResidualVector& residual, const Problem& problem, @@ -155,7 +242,6 @@ public: return flux; } - using ParentType::evalStorage; /*! * \brief Compute the storage local residual, i.e. the deviation of the * storage term from zero for instationary problems. -- GitLab From bee5056cd4cc7dd6767a8ee82e7837c7429ffdc6 Mon Sep 17 00:00:00 2001 From: Timo Koch <timokoch@uio.no> Date: Sat, 3 Aug 2024 00:57:30 +0200 Subject: [PATCH 12/24] [cvfe][pq1bubble] Remove obsolete hybrid base residual --- dumux/assembly/hybridcvfelocalresidual.hh | 153 ------------------ dumux/discretization/pq1bubble.hh | 8 +- .../momentum/cvfe/localresidual.hh | 24 +-- 3 files changed, 13 insertions(+), 172 deletions(-) delete mode 100644 dumux/assembly/hybridcvfelocalresidual.hh diff --git a/dumux/assembly/hybridcvfelocalresidual.hh b/dumux/assembly/hybridcvfelocalresidual.hh deleted file mode 100644 index a8d0727d80..0000000000 --- a/dumux/assembly/hybridcvfelocalresidual.hh +++ /dev/null @@ -1,153 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -// vi: set et ts=4 sw=4 sts=4: -// -// SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder -// SPDX-License-Identifier: GPL-3.0-or-later -// -/*! - * \file - * \ingroup Assembly - * \ingroup CVFEDiscretization - * \brief Calculates the element-wise residual for hybrid control-volume finite element schemes - */ -#ifndef DUMUX_HYBRID_CVFE_LOCAL_RESIDUAL_HH -#define DUMUX_HYBRID_CVFE_LOCAL_RESIDUAL_HH - -#include <dumux/common/properties.hh> - -#include "cvfelocalresidual.hh" - -namespace Dumux { - -/*! - * \ingroup Assembly - * \ingroup CVFEDiscretization - * \brief The element-wise residual for control-volume finite element schemes - * \tparam TypeTag the TypeTag - */ -template<class TypeTag> -class HybridCVFELocalResidual : public CVFELocalResidual<TypeTag> -{ - using ParentType = CVFELocalResidual<TypeTag>; - using Problem = GetPropType<TypeTag, Properties::Problem>; - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using GridView = typename GridGeometry::GridView; - using Element = typename GridView::template Codim<0>::Entity; - using ElementBoundaryTypes = GetPropType<TypeTag, Properties::ElementBoundaryTypes>; - using FVElementGeometry = typename GridGeometry::LocalView; - using GridVolumeVariables = GetPropType<TypeTag, Properties::GridVolumeVariables>; - using ElementVolumeVariables = typename GridVolumeVariables::LocalView; - using ElementFluxVariablesCache = typename GetPropType<TypeTag, Properties::GridFluxVariablesCache>::LocalView; - -public: - using ElementResidualVector = typename ParentType::ElementResidualVector; - using ParentType::ParentType; - - /*! - * \name Main interface - * \note Methods used by the assembler to compute derivatives and residual - */ - // \{ - - /*! - * \brief Compute the storage local residual, i.e. the deviation of the - * storage term from zero for instationary problems. - * - * \param element The DUNE Codim<0> entity for which the residual - * ought to be calculated - * \param fvGeometry The finite-volume geometry of the element - * \param prevElemVolVars The volume averaged variables for all - * sub-control volumes of the element at the previous time level - * \param curElemVolVars The volume averaged variables for all - * sub-control volumes of the element at the current time level - */ - using ParentType::evalStorage; - ElementResidualVector evalStorage(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& prevElemVolVars, - const ElementVolumeVariables& curElemVolVars) const - { - assert(!this->isStationary() && "no time loop set for storage term evaluation"); - - // initialize the residual vector for all scvs in this element - ElementResidualVector residual(fvGeometry.numScv()); - - // evaluate the volume terms (storage + source terms) - // forward to the local residual specialized for the discretization methods - for (const auto& localDof : fvLocalDofs(fvGeometry)) - this->asImp().evalStorage(residual, this->problem(), element, fvGeometry, prevElemVolVars, curElemVolVars, localDof.scv()); - - this->asImp().evalElementStorage(residual, this->problem(), element, fvGeometry, prevElemVolVars, curElemVolVars); - - return residual; - } - - /*! - * \brief Compute the flux and source - * - * \param element The DUNE Codim<0> entity for which the residual - * ought to be calculated - * \param fvGeometry The finite-volume geometry of the element - * \param curElemVolVars The volume averaged variables for all - * sub-control volumes of the element at the current time level - * \param elemFluxVarsCache The element flux variables cache - * \param bcTypes The element boundary types - */ - ElementResidualVector evalFluxAndSource(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const ElementFluxVariablesCache& elemFluxVarsCache, - const ElementBoundaryTypes &bcTypes) const - { - // initialize the residual vector for all scvs in this element - ElementResidualVector residual(fvGeometry.numScv()); - - // evaluate the volume terms (storage + source terms) - // forward to the local residual specialized for the discretization methods - for (const auto& localDof : fvLocalDofs(fvGeometry)) - this->asImp().evalSource(residual, this->problem(), element, fvGeometry, elemVolVars, localDof.scv()); - - // forward to the local residual specialized for the discretization methods - for (auto&& scvf : scvfs(fvGeometry)) - this->asImp().evalFlux(residual, this->problem(), element, fvGeometry, elemVolVars, bcTypes, elemFluxVarsCache, scvf); - - // ToDo: Better name? E.g. evalElementRhsTerms - this->asImp().evalElementFluxAndSource(residual, this->problem(), element, fvGeometry, elemVolVars, bcTypes); - - return residual; - } - - // \} - - /*! - * \name Model specific interface to account for hybrid dofs - * \note The following methods are hybrid model specific implementations of the local residual - */ - // \{ - - void evalElementStorage(ElementResidualVector& residual, - const Problem& problem, - const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& prevElemVolVars, - const ElementVolumeVariables& curElemVolVars) const - { - DUNE_THROW(Dune::NotImplemented, "This hybrid model does not implement an evalElementStorage method!"); - } - - void evalElementFluxAndSource(ElementResidualVector& residual, - const Problem& problem, - const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& curElemVolVars, - const ElementBoundaryTypes &bcTypes) const - { - DUNE_THROW(Dune::NotImplemented, "This hybrid model does not implement an evalElementFluxAndSource method!"); - } - - // \} -}; - -} // end namespace Dumux - -#endif diff --git a/dumux/discretization/pq1bubble.hh b/dumux/discretization/pq1bubble.hh index 6283a6383e..9cffaaf3d9 100644 --- a/dumux/discretization/pq1bubble.hh +++ b/dumux/discretization/pq1bubble.hh @@ -23,7 +23,6 @@ #include <dumux/common/typetraits/problem.hh> #include <dumux/assembly/cvfelocalresidual.hh> -#include <dumux/assembly/hybridcvfelocalresidual.hh> #include <dumux/discretization/method.hh> #include <dumux/discretization/fvproperties.hh> @@ -126,14 +125,9 @@ public: //! Set the BaseLocalResidual to CVFELocalResidual template<class TypeTag> -struct BaseLocalResidual<TypeTag, TTag::PQ1BubbleModel> +struct BaseLocalResidual<TypeTag, TTag::PQ1BubbleBase> { using type = CVFELocalResidual<TypeTag>; }; -//! Set the BaseLocalResidual for hybrid scheme to HybridLocalResidual -template<class TypeTag> -struct BaseLocalResidual<TypeTag, TTag::PQ1BubbleHybridModel> -{ using type = HybridCVFELocalResidual<TypeTag>; }; - } // namespace Dumux::Properties namespace Dumux::Detail { diff --git a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh index ee8788d407..6b8a6f9f62 100644 --- a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh +++ b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh @@ -169,12 +169,12 @@ public: return flux; } - void evalElementStorage(ElementResidualVector& residual, - const Problem& problem, - const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& prevElemVolVars, - const ElementVolumeVariables& curElemVolVars) const + void addToElementStorageResidual(ElementResidualVector& residual, + const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars) const { static const auto intOrder = getParamFromGroup<int>(problem.paramGroup(), "Assembly.FEIntegrationOrderStorage", 4); @@ -214,12 +214,12 @@ public: } } - void evalElementFluxAndSource(ElementResidualVector& residual, - const Problem& problem, - const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const ElementBoundaryTypes &elemBcTypes) const + void addToElementFluxAndSourceResidual(ElementResidualVector& residual, + const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementBoundaryTypes &elemBcTypes) const { static const bool enableUnsymmetrizedVelocityGradient = getParamFromGroup<bool>(problem.paramGroup(), "FreeFlow.EnableUnsymmetrizedVelocityGradient", false); -- GitLab From 7503b8b9c27881b81faee098dffbe8c00d559cfe Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Thu, 19 Dec 2024 19:37:20 +0100 Subject: [PATCH 13/24] [disc][cvfe] Add header for integration point data --- .../cvfe/integrationpointdata.hh | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 dumux/discretization/cvfe/integrationpointdata.hh diff --git a/dumux/discretization/cvfe/integrationpointdata.hh b/dumux/discretization/cvfe/integrationpointdata.hh new file mode 100644 index 0000000000..4e891ba678 --- /dev/null +++ b/dumux/discretization/cvfe/integrationpointdata.hh @@ -0,0 +1,80 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +// +// SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder +// SPDX-License-Identifier: GPL-3.0-or-later +// +/*! + * \file + * \ingroup CVFEDiscretization + * \brief Classes representing integration point data for control-volume finite element schemes + */ +#ifndef DUMUX_CVFE_IP_DATA_HH +#define DUMUX_CVFE_IP_DATA_HH + +namespace Dumux::CVFE { + +/*! + * \ingroup CVFEDiscretization + * \brief An integration point related to an element + */ +template<class GlobalPosition> +class IntegrationPointData +{ +public: + IntegrationPointData(GlobalPosition&& pos) : ipGlobal_(std::move(pos)) {} + IntegrationPointData(const GlobalPosition& pos) : ipGlobal_(pos) {} + + //! The global position of the quadrature point + const GlobalPosition& ipGlobal() const + { return ipGlobal_; } + +private: + GlobalPosition ipGlobal_; +}; + +/*! + * \ingroup CVFEDiscretization + * \brief An integration point related to a face of an element + */ +template<class GlobalPosition> +class FaceIntegrationPointData : public IntegrationPointData<GlobalPosition> +{ + using ParentType = IntegrationPointData<GlobalPosition>; +public: + FaceIntegrationPointData(GlobalPosition&& pos, GlobalPosition&& n) : ParentType(pos), normal_(std::move(n)) {} + FaceIntegrationPointData(const GlobalPosition& pos, const GlobalPosition& n) : ParentType(pos), normal_(n) {} + + //! The unit outer normal vector at the quadrature point + const GlobalPosition& unitOuterNormal() const + { return normal_; } + +private: + GlobalPosition normal_; +}; + +/*! + * \ingroup CVFEDiscretization + * \brief An integration point related to a face of an element, specific to finite volume schemes + */ +template<class SubControlVolumeFace> +class FVFaceIntegrationPointData : public FaceIntegrationPointData<typename SubControlVolumeFace::GlobalPosition> +{ + using GlobalPosition = typename SubControlVolumeFace::GlobalPosition; + using ParentType = FaceIntegrationPointData<GlobalPosition>; +public: + FVFaceIntegrationPointData(const auto& scvf) + : ParentType(scvf.ipGlobal(), scvf.unitOuterNormal()), scvf_(scvf) + {} + + //! The sub-control volume face + const SubControlVolumeFace& scvf() const + { return scvf_; } + +private: + const SubControlVolumeFace& scvf_; +}; + +} // end namespace Dumux::CVFE + +#endif -- GitLab From 3eb493593d4973fbf9d8f8e6feb42bff1b5edc4a Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 20 Dec 2024 11:41:48 +0100 Subject: [PATCH 14/24] [fem] Add face integration data point that has normal vector --- .../fem/integrationpointdata.hh | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/dumux/discretization/fem/integrationpointdata.hh b/dumux/discretization/fem/integrationpointdata.hh index 6014cee000..4a9f75fa7d 100644 --- a/dumux/discretization/fem/integrationpointdata.hh +++ b/dumux/discretization/fem/integrationpointdata.hh @@ -87,6 +87,37 @@ private: ShapeGradients shapeGradients_; }; +/*! + * \ingroup FEMDiscretization + * \brief Integration point data related to a face of an element + */ +template<class GlobalPosition, class LocalBasis> +class FEFaceIntegrationPointData : public FEIntegrationPointData<GlobalPosition, LocalBasis> +{ + using ParentType = FEIntegrationPointData<GlobalPosition, LocalBasis>; + using LocalPosition = typename LocalBasis::Traits::DomainType; +public: + // The default constructor + FEFaceIntegrationPointData() = delete; + + // The constructor + template<class Geometry> + FEFaceIntegrationPointData(const Geometry& geometry, + const LocalPosition& ipLocal, + const LocalBasis& localBasis, + const GlobalPosition& n) + : ParentType(geometry, ipLocal, localBasis), normal_(n) + {} + + //! The unit outer normal vector at the quadrature point + const GlobalPosition& unitOuterNormal() const + { return normal_; } + +private: + const GlobalPosition& normal_; +}; + + } // end namespace Dumux #endif -- GitLab From c837249cb0547d9dc1c83e548f533708a4cb591a Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 20 Dec 2024 11:43:47 +0100 Subject: [PATCH 15/24] [disc][cvfe] Add localDof function --- dumux/discretization/box/fvelementgeometry.hh | 6 ++++++ .../facecentered/diamond/fvelementgeometry.hh | 6 ++++++ dumux/discretization/pq1bubble/fvelementgeometry.hh | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/dumux/discretization/box/fvelementgeometry.hh b/dumux/discretization/box/fvelementgeometry.hh index 82df6786ed..d6a2389aa0 100644 --- a/dumux/discretization/box/fvelementgeometry.hh +++ b/dumux/discretization/box/fvelementgeometry.hh @@ -117,6 +117,12 @@ public: ); } + //! get local dof + auto localDof(LocalIndexType localDofIdx) const + { + return std::move(CVFE::LocalDof{ static_cast<LocalIndexType>(localDofIdx) }); + } + //! iterator range for sub control volumes faces. Iterates over //! all scvfs of the bound element. //! This is a free function found by means of ADL diff --git a/dumux/discretization/facecentered/diamond/fvelementgeometry.hh b/dumux/discretization/facecentered/diamond/fvelementgeometry.hh index 6e986bc87e..8bf776de51 100644 --- a/dumux/discretization/facecentered/diamond/fvelementgeometry.hh +++ b/dumux/discretization/facecentered/diamond/fvelementgeometry.hh @@ -101,6 +101,12 @@ public: ); } + //! get local dof + auto localDof(LocalIndexType localDofIdx) const + { + return std::move(CVFE::LocalDof{ static_cast<LocalIndexType>(localDofIdx) }); + } + //! iterator range for sub control volumes faces. Iterates over //! all scvfs of the bound element. //! This is a free function found by means of ADL diff --git a/dumux/discretization/pq1bubble/fvelementgeometry.hh b/dumux/discretization/pq1bubble/fvelementgeometry.hh index 3cbf4f5155..f33b899bb2 100644 --- a/dumux/discretization/pq1bubble/fvelementgeometry.hh +++ b/dumux/discretization/pq1bubble/fvelementgeometry.hh @@ -127,6 +127,12 @@ public: ); } + //! get local dof + auto localDof(LocalIndexType localDofIdx) const + { + return std::move(CVFE::LocalDof{ static_cast<LocalIndexType>(localDofIdx) }); + } + //! iterator range for sub control volumes faces. Iterates over //! all scvfs of the bound element. //! This is a free function found by means of ADL -- GitLab From ee5de87da7bb58e887815e1a3c95bdc6a0164aa6 Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 20 Dec 2024 11:51:35 +0100 Subject: [PATCH 16/24] [cvfe] Add elementFluxVarsCache to function call --- dumux/assembly/cvfelocalresidual.hh | 3 ++- dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dumux/assembly/cvfelocalresidual.hh b/dumux/assembly/cvfelocalresidual.hh index 300ffe19d5..f1fba8f7c6 100644 --- a/dumux/assembly/cvfelocalresidual.hh +++ b/dumux/assembly/cvfelocalresidual.hh @@ -145,7 +145,7 @@ public: this->asImp().evalFlux(residual, this->problem(), element, fvGeometry, elemVolVars, bcTypes, elemFluxVarsCache, scvf); // allow for additional contributions (e.g. hybrid CVFE schemes) - this->asImp().addToElementFluxAndSourceResidual(residual, this->problem(), element, fvGeometry, elemVolVars, bcTypes); + this->asImp().addToElementFluxAndSourceResidual(residual, this->problem(), element, fvGeometry, elemVolVars, elemFluxVarsCache, bcTypes); return residual; } @@ -165,6 +165,7 @@ public: const Element& element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& curElemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, const ElementBoundaryTypes &bcTypes) const {} diff --git a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh index 6b8a6f9f62..101f45ea51 100644 --- a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh +++ b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh @@ -219,6 +219,7 @@ public: const Element& element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, const ElementBoundaryTypes &elemBcTypes) const { static const bool enableUnsymmetrizedVelocityGradient @@ -274,7 +275,7 @@ public: } if(elemBcTypes.hasNeumann()) - residual += evalNeumannSegments_(problem, element, fvGeometry, elemVolVars, elemBcTypes); + residual += evalNeumannSegments_(problem, element, fvGeometry, elemVolVars, elemFluxVarsCache, elemBcTypes); } private: @@ -282,6 +283,7 @@ private: const Element& element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, const ElementBoundaryTypes &elemBcTypes) const { ElementResidualVector flux(0.0); -- GitLab From 8dd95bf6312bca50cfb0c68fca613cbf70436555 Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 20 Dec 2024 12:02:21 +0100 Subject: [PATCH 17/24] [cvfe][ffmomentum] Use new source and boundaryFlux interfaces --- .../momentum/cvfe/localresidual.hh | 15 +-- .../freeflow/navierstokes/momentum/problem.hh | 92 ++++++++++++++++++- 2 files changed, 98 insertions(+), 9 deletions(-) diff --git a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh index 101f45ea51..db3a97dd99 100644 --- a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh +++ b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh @@ -69,6 +69,7 @@ class NavierStokesMomentumCVFELocalResidual using LocalBasis = typename GridGeometry::FeCache::FiniteElementType::Traits::LocalBasisType; using GlobalPosition = typename Element::Geometry::GlobalCoordinate; using IpData = FEIntegrationPointData<GlobalPosition, LocalBasis>; + using FaceIpData = FEFaceIntegrationPointData<GlobalPosition, LocalBasis>; using FluxContext = NavierStokesMomentumFluxContext<Problem, FVElementGeometry, ElementVolumeVariables, ElementFluxVariablesCache>; using FluxFunctionContext = NavierStokesMomentumFluxFunctionContext<Problem, FVElementGeometry, ElementVolumeVariables, IpData>; using FluxHelper = NavierStokesMomentumFluxCVFE<GridGeometry, NumEqVector>; @@ -263,12 +264,11 @@ public: fluxAndSourceTerm += problem.pressure(element, fvGeometry, ipData.ipLocal()) * ipData.gradN(localDofIdx); // finally add source and Neumann term and add everything to residual - // ToDo: generalize by not assuming that a sourceAtPos function must exist - const auto sourceAtPos = problem.sourceAtPos(ipData.ipGlobal()); + const auto sourceAtIp = problem.source(element, fvGeometry, elemVolVars, localDof, ipData); for (int eqIdx = 0; eqIdx < NumEqVector::dimension; ++eqIdx) { - fluxAndSourceTerm[eqIdx] += ipData.shapeValue(localDofIdx) * sourceAtPos[eqIdx]; + fluxAndSourceTerm[eqIdx] += ipData.shapeValue(localDofIdx) * sourceAtIp[eqIdx]; residual[localDofIdx][eqIdx] += qWeight*fluxAndSourceTerm[eqIdx]; } } @@ -310,13 +310,14 @@ private: // get quadrature rule weight for intersection Scalar qWeight = quadPoint.weight() * Extrusion::integrationElement(isGeometry, quadPoint.position()); - IpData ipData(geometry, local, localBasis); - - const auto& neumannFlux = qWeight*problem.neumannAtPos(ipData.ipGlobal()); + FaceIpData faceIpData(geometry, local, localBasis, intersection.centerUnitOuterNormal()); for (const auto& localDof : hybridLocalDofs(fvGeometry)) + { + const auto& boundaryFlux = qWeight*problem.boundaryFlux(element, fvGeometry, elemVolVars, elemFluxVarsCache, localDof, faceIpData); for (int eqIdx = 0; eqIdx < NumEqVector::dimension; ++eqIdx) - flux[localDof.index()] += ipData.shapeValue(localDof.index()) * neumannFlux[eqIdx]; + flux[localDof.index()] += faceIpData.shapeValue(localDof.index()) * boundaryFlux[eqIdx]; + } } diff --git a/dumux/freeflow/navierstokes/momentum/problem.hh b/dumux/freeflow/navierstokes/momentum/problem.hh index a078f3183d..8aaa3805b1 100644 --- a/dumux/freeflow/navierstokes/momentum/problem.hh +++ b/dumux/freeflow/navierstokes/momentum/problem.hh @@ -18,6 +18,7 @@ #include <dumux/common/properties.hh> #include <dumux/common/fvproblemwithspatialparams.hh> #include <dumux/discretization/method.hh> +#include <dumux/discretization/cvfe/integrationpointdata.hh> #include <dumux/freeflow/navierstokes/momentum/boundarytypes.hh> namespace Dumux { @@ -612,6 +613,33 @@ public: : NavierStokesMomentumProblemImpl(gridGeometry, {}, paramGroup) {} + /*! + * \brief Evaluate the source term at a given integration point, related to the residual of a local dof + * + * This is the method for the case where the source term is + * potentially solution dependent and requires some quantities that + * are specific to the fully-implicit method. + * + * \param element The element for which the Neumann boundary condition is set + * \param fvGeometry The finite-volume geometry + * \param elemVolVars All volume variables for the element + * \param localDof The local dof + * \param ipData Integration point data + * + * For this method, the return parameter stores the conserved quantity rate + * generated or annihilate per volume unit. Positive values mean + * that the conserved quantity is created, negative ones mean that it vanishes. + */ + template<class LocalDof, class IpData> + Sources source(const Element &element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const LocalDof& localDof, + const IpData& ipData) const + { + return asImp_().sourceAtPos(ipData.ipGlobal()); + } + /*! * \brief Evaluate the source term for all phases within a given * sub-control-volume. @@ -630,14 +658,17 @@ public: * that the conserved quantity is created, negative ones mean that it vanishes. * E.g. for the mass balance that would be a mass rate in \f$ [ kg / (m^3 \cdot s)] \f$. */ - template<class ElementVolumeVariables> Sources source(const Element &element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, const SubControlVolume &scv) const { // forward to solution independent, fully-implicit specific interface - return asImp_().sourceAtPos(scv.center()); + return asImp_().source(element, + fvGeometry, + elemVolVars, + fvGeometry.localDof(scv.localDofIndex()), + Dumux::CVFE::IntegrationPointData<GlobalPosition>(scv.center())); } /*! @@ -727,6 +758,63 @@ public: return asImp_().dirichletAtPos(scvf.ipGlobal()); } + /*! + * \brief Evaluates the boundary flux related to a localDof at a given integration point. + * + * \param element The element for which the Neumann boundary condition is set + * \param fvGeometry The finite-volume geometry + * \param elemVolVars All volume variables for the element + * \param elemFluxVarsCache The element flux variables cache + * \param localDof The local dof + * \param faceIpData Face integration point data + */ + template<class ElementFluxVariablesCache, class LocalDof, class FaceIpData> + BoundaryFluxes boundaryFlux(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, + const LocalDof& localDof, + const FaceIpData& faceIpData) const + { + return asImp_().boundaryFluxAtPos(faceIpData.ipGlobal()); + } + + /*! + * \brief Evaluates the boundary conditions for a Neumann control volume. + * + * \param element The element for which the Neumann boundary condition is set + * \param fvGeometry The fvGeometry + * \param elemVolVars The element volume variables + * \param elemFluxVarsCache The element flux variables cache + * \param scvf The boundary sub control volume face + */ + template<class ElementFluxVariablesCache> + BoundaryFluxes neumann(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, + const SubControlVolumeFace& scvf) const + { + return asImp_().boundaryFlux(element, + fvGeometry, + elemVolVars, + elemFluxVarsCache, + fvGeometry.localDof(fvGeometry.scv(scvf.insideScvIdx()).localDofIndex()), + Dumux::CVFE::FVFaceIntegrationPointData<SubControlVolumeFace>(scvf)); + } + + /*! + * \brief Returns the neumann flux at a given position. + */ + BoundaryFluxes neumannAtPos(const GlobalPosition& globalPos) const + { return asImp_().boundaryFluxAtPos(globalPos); } //! A default, i.e. if the user's does not overload any neumann method + + /*! + * \brief Returns the boundary flux at a given position. + */ + BoundaryFluxes boundaryFluxAtPos(const GlobalPosition& globalPos) const + { return BoundaryFluxes(0.0); } //! A default, i.e. if the user's does not overload any boundaryFlux method + /*! * \brief Returns the acceleration due to gravity. * -- GitLab From 20b9a8a1b69392a687594965b89acf61bede54b3 Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 20 Dec 2024 14:07:02 +0100 Subject: [PATCH 18/24] [cvfe] Add function for localDofs to elementboundarytypes --- .../cvfe/elementboundarytypes.hh | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/dumux/discretization/cvfe/elementboundarytypes.hh b/dumux/discretization/cvfe/elementboundarytypes.hh index ebfc820c59..80e66db090 100644 --- a/dumux/discretization/cvfe/elementboundarytypes.hh +++ b/dumux/discretization/cvfe/elementboundarytypes.hh @@ -92,16 +92,33 @@ public: /* * \brief Access operator * \return BoundaryTypes - * \note yields undefined behaviour of the scv is not on the boundary + * \note yields undefined behaviour if the scv is not on the boundary */ - template<class FVElementGeometry> - const BoundaryTypes& get(const FVElementGeometry&, const typename FVElementGeometry::SubControlVolume& scv) const + template<class FVElementGeometry, + class SubControlVolume, + typename std::enable_if_t<std::is_same<SubControlVolume, typename FVElementGeometry::SubControlVolume>::value, int> = 0 > + const BoundaryTypes& get(const FVElementGeometry&, const SubControlVolume& scv) const { const auto localDofIdx = scv.localDofIndex(); assert(localDofIdx < bcTypes_.size()); return bcTypes_[localDofIdx]; } + /* + * \brief Access operator + * \return BoundaryTypes + * \note yields undefined behaviour if the dof is not on the boundary + */ + template<class FVElementGeometry, + class LocalDof, + typename std::enable_if_t<!std::is_same<LocalDof, typename FVElementGeometry::SubControlVolume>::value, int> = 0 > + const BoundaryTypes& get(const FVElementGeometry&, const LocalDof& localDof) const + { + const auto localDofIdx = localDof.index(); + assert(localDofIdx < bcTypes_.size()); + return bcTypes_[localDofIdx]; + } + private: std::vector<BoundaryTypes> bcTypes_; bool hasDirichlet_ = false; -- GitLab From c2411aabe9a63140ab00f7d6e1a7cebbcc62e9b6 Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 20 Dec 2024 15:17:34 +0100 Subject: [PATCH 19/24] [cvfe] Add range to iterate over intersection dofs --- dumux/discretization/pq1bubble/fvelementgeometry.hh | 11 +++++++++++ dumux/discretization/pq1bubble/geometryhelper.hh | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/dumux/discretization/pq1bubble/fvelementgeometry.hh b/dumux/discretization/pq1bubble/fvelementgeometry.hh index f33b899bb2..e6b2f6c398 100644 --- a/dumux/discretization/pq1bubble/fvelementgeometry.hh +++ b/dumux/discretization/pq1bubble/fvelementgeometry.hh @@ -127,6 +127,17 @@ public: ); } + //! an iterator over all local dofs related to an intersection + template<class Intersection> + friend inline auto localDofs(const PQ1BubbleFVElementGeometry& fvGeometry, const Intersection& intersection) + { + const auto subEntities = GeometryHelper::localDofsIntersection(fvGeometry.element().type(), intersection.indexInInside()); + return Dune::transformedRangeView( + subEntities, + [](const auto subEntity) { return CVFE::LocalDof{ static_cast<LocalIndexType>(subEntity) }; } + ); + } + //! get local dof auto localDof(LocalIndexType localDofIdx) const { diff --git a/dumux/discretization/pq1bubble/geometryhelper.hh b/dumux/discretization/pq1bubble/geometryhelper.hh index 3745becc83..322f4aa31a 100644 --- a/dumux/discretization/pq1bubble/geometryhelper.hh +++ b/dumux/discretization/pq1bubble/geometryhelper.hh @@ -376,6 +376,12 @@ public: return 0; } + //! Local dofs related to an intersection with index iIdx + static auto localDofsIntersection(Dune::GeometryType type, unsigned int iIdx) + { + return Dune::referenceElement<Scalar, dim>(type).subEntities(iIdx, 1, dim); + } + template<class DofMapper> auto dofIndex(const DofMapper& dofMapper, const Element& element, unsigned int localScvIdx) const { @@ -604,6 +610,12 @@ public: return 1; } + //! Local dofs related to an intersection with index iIdx + static auto localDofsIntersection(Dune::GeometryType type, unsigned int iIdx) + { + return Dune::referenceElement<Scalar, dim>(type).subEntities(iIdx, 1, dim); + } + template<class DofMapper> auto dofIndex(const DofMapper& dofMapper, const Element& element, unsigned int localScvIdx) const { -- GitLab From 3bff5c8cb3165f813925ec3b43816662f5249fa4 Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 20 Dec 2024 15:19:03 +0100 Subject: [PATCH 20/24] [cvfe][ffmomentum] Iterate over intersection dofs to check for neumann --- .../freeflow/navierstokes/momentum/cvfe/localresidual.hh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh index db3a97dd99..82d4e9b7b2 100644 --- a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh +++ b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh @@ -296,8 +296,12 @@ private: const auto& geometry = element.geometry(); for (const auto& intersection : intersections(fvGeometry.gridGeometry().gridView(), element)) { - const auto bcTypes = problem.boundaryTypesAtPos(intersection.geometry().center()); - if(!bcTypes.hasNeumann()) + bool intersectionHasNeumannDof = false; + for (const auto& localDof : localDofs(fvGeometry, intersection)) + if(elemBcTypes.get(fvGeometry, localDof).hasNeumann()) + intersectionHasNeumannDof = true; + + if(!intersectionHasNeumannDof) continue; // select quadrature rule for intersection faces (dim-1) -- GitLab From 4858c70d564bb8682542329153c9b1c3c4a6c603 Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 20 Dec 2024 16:13:59 +0100 Subject: [PATCH 21/24] [tests][ff][donea] Use new boundaryFlux interface --- test/freeflow/navierstokes/donea/problem.hh | 31 +++++++++++---------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/test/freeflow/navierstokes/donea/problem.hh b/test/freeflow/navierstokes/donea/problem.hh index 4f2a7f7a01..6aa0409ae5 100644 --- a/test/freeflow/navierstokes/donea/problem.hh +++ b/test/freeflow/navierstokes/donea/problem.hh @@ -151,27 +151,29 @@ public: { return analyticalSolution(globalPos); } /*! - * \brief Evaluates the boundary conditions for a Neumann control volume. + * \brief Evaluates the boundary flux related to a localDof at a given integration point. * * \param element The element for which the Neumann boundary condition is set - * \param fvGeometry The fvGeometry - * \param elemVolVars The element volume variables - * \param elemFaceVars The element face variables - * \param scvf The boundary sub control volume face + * \param fvGeometry The finite-volume geometry + * \param elemVolVars All volume variables for the element + * \param elemFluxVarsCache The element flux variables cache + * \param localDof The local dof + * \param faceIpData Integration point data */ - template<class ElementVolumeVariables, class ElementFluxVariablesCache> - BoundaryFluxes neumann(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const ElementFluxVariablesCache& elemFluxVarsCache, - const SubControlVolumeFace& scvf) const + template<class ElementVolumeVariables, class ElementFluxVariablesCache, class LocalDof, class FaceIpData> + BoundaryFluxes boundaryFlux(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, + const LocalDof& localDof, + const FaceIpData& faceIpData) const { BoundaryFluxes values(0.0); if constexpr (ParentType::isMomentumProblem()) { - const auto x = scvf.ipGlobal()[0]; - const auto y = scvf.ipGlobal()[1]; + const auto x = faceIpData.ipGlobal()[0]; + const auto y = faceIpData.ipGlobal()[1]; Dune::FieldMatrix<Scalar, dimWorld, dimWorld> momentumFlux(0.0); momentumFlux[0][0] = -2.0*mu_*dxU_(x,y) + p_(x); @@ -179,11 +181,12 @@ public: momentumFlux[1][0] = momentumFlux[0][1]; momentumFlux[1][1] = -2.0*mu_*dyV_(x,y) + p_(x); - const auto normal = scvf.unitOuterNormal(); + const auto normal = faceIpData.unitOuterNormal(); momentumFlux.mv(normal, values); } else { + const auto& scvf = faceIpData.scvf(); const auto insideDensity = elemVolVars[scvf.insideScvIdx()].density(); values[Indices::conti0EqIdx] = this->faceVelocity(element, fvGeometry, scvf) * insideDensity * scvf.unitOuterNormal(); if (addBoxStabilization_) -- GitLab From ea1d85e8c213473e3e6cdad3b2b7f7a9fb147d16 Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 20 Dec 2024 16:41:35 +0100 Subject: [PATCH 22/24] [cvfe] Add boundary flag to faceIpData --- dumux/discretization/cvfe/integrationpointdata.hh | 4 ++++ dumux/discretization/fem/integrationpointdata.hh | 12 +++++++++--- .../navierstokes/momentum/cvfe/localresidual.hh | 5 +++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/dumux/discretization/cvfe/integrationpointdata.hh b/dumux/discretization/cvfe/integrationpointdata.hh index 4e891ba678..9a9315314f 100644 --- a/dumux/discretization/cvfe/integrationpointdata.hh +++ b/dumux/discretization/cvfe/integrationpointdata.hh @@ -71,6 +71,10 @@ public: const SubControlVolumeFace& scvf() const { return scvf_; } + //! Return the boundary flag + auto boundaryFlag() const + { return scvf_.boundaryFlag(); } + private: const SubControlVolumeFace& scvf_; }; diff --git a/dumux/discretization/fem/integrationpointdata.hh b/dumux/discretization/fem/integrationpointdata.hh index 4a9f75fa7d..cdf0d891b3 100644 --- a/dumux/discretization/fem/integrationpointdata.hh +++ b/dumux/discretization/fem/integrationpointdata.hh @@ -91,7 +91,7 @@ private: * \ingroup FEMDiscretization * \brief Integration point data related to a face of an element */ -template<class GlobalPosition, class LocalBasis> +template<class GlobalPosition, class LocalBasis, class BoundaryFlag> class FEFaceIntegrationPointData : public FEIntegrationPointData<GlobalPosition, LocalBasis> { using ParentType = FEIntegrationPointData<GlobalPosition, LocalBasis>; @@ -105,16 +105,22 @@ public: FEFaceIntegrationPointData(const Geometry& geometry, const LocalPosition& ipLocal, const LocalBasis& localBasis, - const GlobalPosition& n) - : ParentType(geometry, ipLocal, localBasis), normal_(n) + const GlobalPosition& n, + const BoundaryFlag& bFlag) + : ParentType(geometry, ipLocal, localBasis), normal_(n), boundaryFlag_(bFlag) {} //! The unit outer normal vector at the quadrature point const GlobalPosition& unitOuterNormal() const { return normal_; } + //! Return the boundary flag + typename BoundaryFlag::value_type boundaryFlag() const + { return boundaryFlag_.get(); } + private: const GlobalPosition& normal_; + BoundaryFlag boundaryFlag_; }; diff --git a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh index 82d4e9b7b2..95af78feb0 100644 --- a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh +++ b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh @@ -69,7 +69,7 @@ class NavierStokesMomentumCVFELocalResidual using LocalBasis = typename GridGeometry::FeCache::FiniteElementType::Traits::LocalBasisType; using GlobalPosition = typename Element::Geometry::GlobalCoordinate; using IpData = FEIntegrationPointData<GlobalPosition, LocalBasis>; - using FaceIpData = FEFaceIntegrationPointData<GlobalPosition, LocalBasis>; + using FaceIpData = FEFaceIntegrationPointData<GlobalPosition, LocalBasis, typename SubControlVolumeFace::Traits::BoundaryFlag>; using FluxContext = NavierStokesMomentumFluxContext<Problem, FVElementGeometry, ElementVolumeVariables, ElementFluxVariablesCache>; using FluxFunctionContext = NavierStokesMomentumFluxFunctionContext<Problem, FVElementGeometry, ElementVolumeVariables, IpData>; using FluxHelper = NavierStokesMomentumFluxCVFE<GridGeometry, NumEqVector>; @@ -314,7 +314,8 @@ private: // get quadrature rule weight for intersection Scalar qWeight = quadPoint.weight() * Extrusion::integrationElement(isGeometry, quadPoint.position()); - FaceIpData faceIpData(geometry, local, localBasis, intersection.centerUnitOuterNormal()); + FaceIpData faceIpData(geometry, local, localBasis, intersection.centerUnitOuterNormal(), + typename SubControlVolumeFace::Traits::BoundaryFlag{ intersection }); for (const auto& localDof : hybridLocalDofs(fvGeometry)) { -- GitLab From 30bb1d971b869ea3cc33670eb57522fffc99a580 Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Thu, 2 Jan 2025 15:39:19 +0100 Subject: [PATCH 23/24] [cvfe] Check if fvLocalDofs are supported --- dumux/assembly/cvfelocalresidual.hh | 33 +++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/dumux/assembly/cvfelocalresidual.hh b/dumux/assembly/cvfelocalresidual.hh index f1fba8f7c6..699a8e0373 100644 --- a/dumux/assembly/cvfelocalresidual.hh +++ b/dumux/assembly/cvfelocalresidual.hh @@ -44,6 +44,15 @@ template<class Imp> constexpr inline bool hasScvfIsOverlapping() { return Dune::Std::is_detected<SCVFIsOverlappingDetector, Imp>::value; } +template<class Imp> +using FVLocalDofsDetector = decltype( + fvLocalDofs(std::declval<Imp>()) +); + +template<class Imp> +constexpr inline bool hasFVLocalDofsInterface() +{ return Dune::Std::is_detected<FVLocalDofsDetector, Imp>::value; } + } // end namespace Dumux::Detail @@ -106,8 +115,16 @@ public: // evaluate the volume terms (storage + source terms) // forward to the local residual specialized for the discretization methods - for (const auto& localDof : fvLocalDofs(fvGeometry)) - this->asImp().evalStorage(residual, this->problem(), element, fvGeometry, prevElemVolVars, curElemVolVars, localDof.scv()); + if constexpr (Detail::hasFVLocalDofsInterface<FVElementGeometry>()) + { + for (const auto& localDof : fvLocalDofs(fvGeometry)) + this->asImp().evalStorage(residual, this->problem(), element, fvGeometry, prevElemVolVars, curElemVolVars, localDof.scv()); + } + else + { + for (const auto& scv : scvs(fvGeometry)) + this->asImp().evalStorage(residual, this->problem(), element, fvGeometry, prevElemVolVars, curElemVolVars, scv); + } // allow for additional contributions (e.g. hybrid CVFE schemes) this->asImp().addToElementStorageResidual(residual, this->problem(), element, fvGeometry, prevElemVolVars, curElemVolVars); @@ -137,8 +154,16 @@ public: // evaluate the volume terms (storage + source terms) // forward to the local residual specialized for the discretization methods - for (const auto& localDof : fvLocalDofs(fvGeometry)) - this->asImp().evalSource(residual, this->problem(), element, fvGeometry, elemVolVars, localDof.scv()); + if constexpr (Detail::hasFVLocalDofsInterface<FVElementGeometry>()) + { + for (const auto& localDof : fvLocalDofs(fvGeometry)) + this->asImp().evalSource(residual, this->problem(), element, fvGeometry, elemVolVars, localDof.scv()); + } + else + { + for (const auto& scv : scvs(fvGeometry)) + this->asImp().evalSource(residual, this->problem(), element, fvGeometry, elemVolVars, scv); + } // forward to the local residual specialized for the discretization methods for (auto&& scvf : scvfs(fvGeometry)) -- GitLab From 5f203096762d28a08281995393d1d731d8be99e3 Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Fri, 3 Jan 2025 09:43:00 +0100 Subject: [PATCH 24/24] [cvfe][ffmomentum] Check if there are any hybrid dofs --- .../freeflow/navierstokes/momentum/cvfe/localresidual.hh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh index 95af78feb0..1b94ccb6c7 100644 --- a/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh +++ b/dumux/freeflow/navierstokes/momentum/cvfe/localresidual.hh @@ -177,6 +177,10 @@ public: const ElementVolumeVariables& prevElemVolVars, const ElementVolumeVariables& curElemVolVars) const { + // Make sure we don't iterate over quadrature points if there are no hybrid dofs + if( hybridLocalDofs(fvGeometry).empty() ) + return; + static const auto intOrder = getParamFromGroup<int>(problem.paramGroup(), "Assembly.FEIntegrationOrderStorage", 4); @@ -223,6 +227,10 @@ public: const ElementFluxVariablesCache& elemFluxVarsCache, const ElementBoundaryTypes &elemBcTypes) const { + // Make sure we don't iterate over quadrature points if there are no hybrid dofs + if( hybridLocalDofs(fvGeometry).empty() ) + return; + static const bool enableUnsymmetrizedVelocityGradient = getParamFromGroup<bool>(problem.paramGroup(), "FreeFlow.EnableUnsymmetrizedVelocityGradient", false); static const auto intOrder -- GitLab