diff --git a/CHANGELOG.md b/CHANGELOG.md index f7e47b154239a3938aea9d92bba5360540bb3192..16ed7dbf9b1dbb7eedd2e2c11dae6989ea743e03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Differences Between DuMuX 3.1 and DuMuX 3.0 ### Improvements and Enhancements - Added new porous medium model for the energy balance of a porous solid (general heat equation) +- __Multidomain__: It is now possible to use the facet coupling module together with the mpfa-o scheme in the bulk domain. ### Immediate interface changes not allowing/requiring a deprecation period diff --git a/dumux/discretization/cellcentered/mpfa/dualgridindexset.hh b/dumux/discretization/cellcentered/mpfa/dualgridindexset.hh index eae2b64ac8de896801f31cae0c55c2f1141921b3..c0fa9de3a3ba275383942186204ec778a15d25cf 100644 --- a/dumux/discretization/cellcentered/mpfa/dualgridindexset.hh +++ b/dumux/discretization/cellcentered/mpfa/dualgridindexset.hh @@ -45,7 +45,7 @@ struct NodalIndexSetDefaultTraits { using GridView = GV; using GridIndexType = typename IndexTraits<GV>::GridIndex; - using LocalIndexType = typename IndexTraits<GV>::SmallLocalIndex; + using LocalIndexType = typename IndexTraits<GV>::LocalIndex; //! per default, we use dynamic data containers (iv size unknown) template< class T > using NodalScvDataStorage = std::vector< T >; diff --git a/dumux/discretization/cellcentered/mpfa/fvgridgeometrytraits.hh b/dumux/discretization/cellcentered/mpfa/fvgridgeometrytraits.hh index b3bd755401aa444cef85e7bc6f84803e749b0a9b..6e9b2aa53a5d609c22fd3ddbf5a453de30e6b747 100644 --- a/dumux/discretization/cellcentered/mpfa/fvgridgeometrytraits.hh +++ b/dumux/discretization/cellcentered/mpfa/fvgridgeometrytraits.hh @@ -55,7 +55,7 @@ struct CCMpfaFVGridGeometryTraits : public DefaultMapperTraits<GV> //! Per default, we use high values that are hopefully enough for all cases //! We assume simplex grids where stencils can get quite large but the size is unknown static constexpr int maxElementStencilSize = int(GV::dimension) == 3 ? 150 : - (int(GV::dimension)<int(GV::dimensionworld) ? 45 : 15); + (int(GV::dimension)<int(GV::dimensionworld) ? 45 : 20); //! type definitions depending on the FVGridGeometry itself template< class FVGridGeom > using MpfaHelper = CCMpfaHelper< FVGridGeom >; diff --git a/dumux/discretization/cellcentered/mpfa/localassemblerhelper.hh b/dumux/discretization/cellcentered/mpfa/localassemblerhelper.hh index 536e38db173ac78c6f9e9eb1f8060ecfb90452d8..33e6386c57d386eab296b9721738f2f2b1cc82f1 100644 --- a/dumux/discretization/cellcentered/mpfa/localassemblerhelper.hh +++ b/dumux/discretization/cellcentered/mpfa/localassemblerhelper.hh @@ -26,7 +26,9 @@ #ifndef DUMUX_DISCRETIZATION_CC_MPFA_LOCAL_ASSEMBLER_HELPER_HH #define DUMUX_DISCRETIZATION_CC_MPFA_LOCAL_ASSEMBLER_HELPER_HH +#include <algorithm> #include <vector> +#include <cassert> #include <utility> #include <type_traits> @@ -67,6 +69,86 @@ class InteractionVolumeAssemblerHelper { return decltype( isValid(HasVectorResize())(std::declval<Vector>()) )::value; } public: + /*! + * \brief Solves a previously assembled iv-local system of equations + * and stores the resulting transmissibilities in the provided + * containers within the interaction volume data handle. + * + * \param fvGeometry The bound element finite volume geometry + * \param handle The data handle in which the matrices are stored + * \param iv The interaction volume + */ + template< class FVElementGeometry, class DataHandle, class IV > + static void solveLocalSystem(const FVElementGeometry& fvGeometry, + DataHandle& handle, + IV& iv) + { + assert(iv.numUnknowns() > 0); + + // T = C*(A^-1)*B + D + handle.A().invert(); + handle.CA().rightmultiply(handle.A()); + handle.T() += multiplyMatrices(handle.CA(), handle.AB()); + handle.AB().leftmultiply(handle.A()); + + // On surface grids, compute the "outside" transmissibilities + using GridView = typename IV::Traits::GridView; + static constexpr int dim = GridView::dimension; + static constexpr int dimWorld = GridView::dimensionworld; + if (dim < dimWorld) + { + // bring outside tij container to the right size + auto& tijOut = handle.tijOutside(); + tijOut.resize(iv.numFaces()); + using LocalIndexType = typename IV::Traits::IndexSet::LocalIndexType; + for (LocalIndexType fIdx = 0; fIdx < iv.numFaces(); ++fIdx) + { + const auto& curGlobalScvf = fvGeometry.scvf(iv.localScvf(fIdx).gridScvfIndex()); + const auto numOutsideFaces = curGlobalScvf.boundary() ? 0 : curGlobalScvf.numOutsideScvs(); + // resize each face entry to the right number of outside faces + tijOut[fIdx].resize(numOutsideFaces); + std::for_each(tijOut[fIdx].begin(), + tijOut[fIdx].end(), + [&](auto& v) { resizeVector(v, iv.numKnowns()); }); + } + + // compute outside transmissibilities + for (const auto& localFaceData : iv.localFaceData()) + { + // continue only for "outside" faces + if (!localFaceData.isOutsideFace()) + continue; + + const auto scvIdx = localFaceData.ivLocalInsideScvIndex(); + const auto scvfIdx = localFaceData.ivLocalScvfIndex(); + const auto idxInOut = localFaceData.scvfLocalOutsideScvfIndex(); + + const auto& wijk = handle.omegas()[scvfIdx][idxInOut+1]; + auto& tij = tijOut[scvfIdx][idxInOut]; + + tij = 0.0; + for (unsigned int dir = 0; dir < dim; dir++) + { + // the scvf corresponding to this local direction in the scv + const auto& scvf = iv.localScvf(iv.localScv(scvIdx).localScvfIndex(dir)); + + // on interior faces the coefficients of the AB matrix come into play + if (!scvf.isDirichlet()) + { + auto tmp = handle.AB()[scvf.localDofIndex()]; + tmp *= wijk[dir]; + tij -= tmp; + } + else + tij[scvf.localDofIndex()] -= wijk[dir]; + + // add entry from the scv unknown + tij[scvIdx] += wijk[dir]; + } + } + } + } + /*! * \brief Assembles the vector of face unknowns within an interaction volume. * \note This requires the data handle to be fully assembled already. diff --git a/dumux/discretization/cellcentered/mpfa/omethod/interactionvolume.hh b/dumux/discretization/cellcentered/mpfa/omethod/interactionvolume.hh index c512da8f4d4b31de09c5e645935c4e5bc60904a2..82d737ff958a87422ef58f7dd9f7546cc6605b8c 100644 --- a/dumux/discretization/cellcentered/mpfa/omethod/interactionvolume.hh +++ b/dumux/discretization/cellcentered/mpfa/omethod/interactionvolume.hh @@ -31,9 +31,7 @@ #include <dune/common/fvector.hh> #include <dune/common/reservedvector.hh> -#include <dumux/common/math.hh> #include <dumux/discretization/cellcentered/mpfa/interactionvolumebase.hh> -#include <dumux/discretization/cellcentered/mpfa/dualgridindexset.hh> #include <dumux/discretization/cellcentered/mpfa/localfacedata.hh> #include <dumux/discretization/cellcentered/mpfa/methods.hh> diff --git a/dumux/discretization/cellcentered/mpfa/omethod/interactionvolumeindexset.hh b/dumux/discretization/cellcentered/mpfa/omethod/interactionvolumeindexset.hh index 339c95aae7c664f1fc8e21601a705ab14c9c0e51..f5485a38eb7c0ae77cfd06b2bb38fc1873677378 100644 --- a/dumux/discretization/cellcentered/mpfa/omethod/interactionvolumeindexset.hh +++ b/dumux/discretization/cellcentered/mpfa/omethod/interactionvolumeindexset.hh @@ -141,6 +141,13 @@ public: std::size_t numScvs() const { return nodalIndexSet_.numScvs(); } + //! returns a grid scv idx for a given iv-local scv index + GridIndexType gridScvIndex(LocalIndexType ivLocalScvIdx) const + { + assert(ivLocalScvIdx < numScvs()); + return gridScvIndices()[ivLocalScvIdx]; + } + //! returns a grid scvf idx for a given iv-local scvf index GridIndexType gridScvfIndex(LocalIndexType ivLocalScvfIdx) const { diff --git a/dumux/discretization/cellcentered/mpfa/omethod/localassembler.hh b/dumux/discretization/cellcentered/mpfa/omethod/localassembler.hh index 4903b13395a9f7213daaf405e66f419e96bdf1f5..4a81776e6115331222cf63bfd8bbe36c6a31d82f 100644 --- a/dumux/discretization/cellcentered/mpfa/omethod/localassembler.hh +++ b/dumux/discretization/cellcentered/mpfa/omethod/localassembler.hh @@ -25,16 +25,11 @@ #ifndef DUMUX_DISCRETIZATION_CC_MPFA_O_LOCAL_ASSEMBLER_HH #define DUMUX_DISCRETIZATION_CC_MPFA_O_LOCAL_ASSEMBLER_HH -#include <dune/common/reservedvector.hh> - -#include <dumux/common/math.hh> -#include <dumux/discretization/cellcentered/mpfa/methods.hh> #include <dumux/discretization/cellcentered/mpfa/localassemblerbase.hh> #include <dumux/discretization/cellcentered/mpfa/localassemblerhelper.hh> #include <dumux/discretization/cellcentered/mpfa/computetransmissibility.hh> -namespace Dumux -{ +namespace Dumux { /*! * \ingroup CCMpfaDiscretization @@ -61,10 +56,6 @@ public: * expressions and the local system of equations * within an interaction volume in an mpfa-o type way. * - * \tparam IV The interaction volume type implementation - * \tparam TensorFunc Lambda to obtain the tensor w.r.t. - * which the local system is to be solved - * * \param handle The data handle in which the matrices are stored * \param iv The interaction volume * \param getT Lambda to evaluate the scv-wise tensors @@ -76,79 +67,13 @@ public: // maybe solve the local system if (iv.numUnknowns() > 0) - { - // T = C*(A^-1)*B + D - handle.A().invert(); - handle.CA().rightmultiply(handle.A()); - handle.T() += multiplyMatrices(handle.CA(), handle.AB()); - handle.AB().leftmultiply(handle.A()); - - // On surface grids, compute the "outside" transmissibilities - using GridView = typename IV::Traits::GridView; - static constexpr int dim = GridView::dimension; - static constexpr int dimWorld = GridView::dimensionworld; - if (dim < dimWorld) - { - // bring outside tij container to the right size - auto& tijOut = handle.tijOutside(); - tijOut.resize(iv.numFaces()); - using LocalIndexType = typename IV::Traits::IndexSet::LocalIndexType; - for (LocalIndexType fIdx = 0; fIdx < iv.numFaces(); ++fIdx) - { - const auto& curGlobalScvf = this->fvGeometry().scvf(iv.localScvf(fIdx).gridScvfIndex()); - const auto numOutsideFaces = curGlobalScvf.boundary() ? 0 : curGlobalScvf.numOutsideScvs(); - // resize each face entry to the right number of outside faces - tijOut[fIdx].resize(numOutsideFaces); - std::for_each(tijOut[fIdx].begin(), - tijOut[fIdx].end(), - [&](auto& v) { Helper::resizeVector(v, iv.numKnowns()); }); - } - - // compute outside transmissibilities - for (const auto& localFaceData : iv.localFaceData()) - { - // continue only for "outside" faces - if (!localFaceData.isOutsideFace()) - continue; - - const auto scvIdx = localFaceData.ivLocalInsideScvIndex(); - const auto scvfIdx = localFaceData.ivLocalScvfIndex(); - const auto idxInOut = localFaceData.scvfLocalOutsideScvfIndex(); - - const auto& wijk = handle.omegas()[scvfIdx][idxInOut+1]; - auto& tij = tijOut[scvfIdx][idxInOut]; - - tij = 0.0; - for (unsigned int dir = 0; dir < dim; dir++) - { - // the scvf corresponding to this local direction in the scv - const auto& scvf = iv.localScvf(iv.localScv(scvIdx).localScvfIndex(dir)); - - // on interior faces the coefficients of the AB matrix come into play - if (!scvf.isDirichlet()) - { - auto tmp = handle.AB()[scvf.localDofIndex()]; - tmp *= wijk[dir]; - tij -= tmp; - } - else - tij[scvf.localDofIndex()] -= wijk[dir]; - - // add entry from the scv unknown - tij[scvIdx] += wijk[dir]; - } - } - } - } + Helper::solveLocalSystem(this->fvGeometry(), handle, iv); } /*! * \brief Assembles the vector of primary (cell) unknowns and (maybe) * Dirichlet boundary conditions within an interaction volume. * - * \tparam IV The interaction volume type implementation - * \tparam GetU Lambda to obtain the cell unknowns from grid indices - * * \param handle The data handle in which the vector is stored * \param iv The mpfa-o interaction volume * \param getU Lambda to obtain the desired cell/Dirichlet value from vol vars @@ -181,8 +106,7 @@ private: * \note The matrices are expected to have been resized beforehand. * * \tparam IV The interaction volume type implementation - * \tparam TensorFunc Lambda to obtain the tensor w.r.t. - * which the local system is to be solved + * \tparam TensorFunc Lambda to obtain the tensor w.r.t. which the local system is to be solved * * \param A The A matrix of the iv-local equation system * \param B The B matrix of the iv-local equation system diff --git a/dumux/multidomain/facet/box/couplingmanager.hh b/dumux/multidomain/facet/box/couplingmanager.hh index 2e998d925158d574921b8b7de652c12b1ccc3e43..33c5db7315e1f154b7b072597fd7a7e7a6d9fa4a 100644 --- a/dumux/multidomain/facet/box/couplingmanager.hh +++ b/dumux/multidomain/facet/box/couplingmanager.hh @@ -89,6 +89,8 @@ class FacetCouplingManager<MDTraits, CouplingMapper, bulkDomainId, lowDimDomainI static constexpr auto bulkGridId = CouplingMapper::template gridId<bulkDim>(); static constexpr auto lowDimGridId = CouplingMapper::template gridId<lowDimDim>(); + static constexpr bool lowDimUsesBox = FVGridGeometry<lowDimId>::discMethod == DiscretizationMethod::box; + /*! * \brief The coupling context of the bulk domain. Contains all data of the lower- * dimensional domain which is required for the computation of a bulk element @@ -291,7 +293,7 @@ public: const auto& idxInContext = std::distance( s.begin(), std::find(s.begin(), s.end(), lowDimElemIdx) ); assert(std::find(s.begin(), s.end(), lowDimElemIdx) != s.end()); - if (FVGridGeometry<lowDimId>::discMethod == DiscretizationMethod::box) + if (lowDimUsesBox) return bulkContext_.lowDimElemVolVars[idxInContext][coupledScvIdx]; else return bulkContext_.lowDimElemVolVars[idxInContext][lowDimElemIdx]; @@ -302,13 +304,22 @@ public: */ const Element<lowDimId> getLowDimElement(const Element<bulkId>& element, const SubControlVolumeFace<bulkId>& scvf) const + { + const auto lowDimElemIdx = getLowDimElementIndex(element, scvf); + return this->problem(lowDimId).fvGridGeometry().element(lowDimElemIdx); + } + + /*! + * \brief returns the index of the lower-dimensional element coinciding with a bulk scvf. + */ + const GridIndexType<lowDimId> getLowDimElementIndex(const Element<bulkId>& element, + const SubControlVolumeFace<bulkId>& scvf) const { const auto eIdx = this->problem(bulkId).fvGridGeometry().elementMapper().index(element); - assert(bulkContext_.isSet); - assert(bulkElemIsCoupled_[eIdx]); + assert(bulkElemIsCoupled_[eIdx]); const auto& map = couplingMapperPtr_->couplingMap(bulkGridId, lowDimGridId); - const auto& couplingData = map.find(eIdx)->second; + const auto& couplingData = map.at(eIdx); // search the low dim element idx this scvf is embedded in auto it = std::find_if( couplingData.elementToScvfMap.begin(), @@ -321,8 +332,7 @@ public: } ); assert(it != couplingData.elementToScvfMap.end()); - const auto lowDimElemIdx = it->first; - return this->problem(lowDimId).fvGridGeometry().element(lowDimElemIdx); + return it->first; } /*! @@ -413,7 +423,6 @@ public: return sources; assert(lowDimContext_.isSet); - const auto& bulkMap = couplingMapperPtr_->couplingMap(bulkGridId, lowDimGridId); for (unsigned int i = 0; i < it->second.embedments.size(); ++i) { const auto& embedment = it->second.embedments[i]; @@ -421,8 +430,7 @@ public: // list of scvfs in the bulk domain whose fluxes enter this scv // if low dim domain uses tpfa, this is all scvfs lying on this element // if it uses box, it is the one scvf coinciding with the given scv - static constexpr bool lowDimUsesBox = FVGridGeometry<lowDimId>::discMethod == DiscretizationMethod::box; - const auto& coincidingScvfs = bulkMap.find(embedment.first)->second.elementToScvfMap.at(lowDimContext_.elementIdx); + const auto& coincidingScvfs = embedment.second; const auto& scvfList = lowDimUsesBox ? std::vector<GridIndexType<lowDimId>>{ coincidingScvfs[scv.localDofIndex()] } : coincidingScvfs; @@ -574,7 +582,7 @@ public: // find the low-dim elements in coupling stencil, where this dof is contained in const auto couplingElements = [&] () { - if (FVGridGeometry<lowDimId>::discMethod == DiscretizationMethod::box) + if (lowDimUsesBox) { std::vector< Element<lowDimId> > lowDimElems; std::for_each( couplingElemStencil.begin(), couplingElemStencil.end(), diff --git a/dumux/multidomain/facet/box/couplingmapper.hh b/dumux/multidomain/facet/box/couplingmapper.hh index 9ccb833908dbd286b19ae0ecafa2d88e37ba2aef..a16b93359ca1d31384b4ce699f89ab40fd272762 100644 --- a/dumux/multidomain/facet/box/couplingmapper.hh +++ b/dumux/multidomain/facet/box/couplingmapper.hh @@ -79,9 +79,9 @@ public: using GridAdapter = CodimOneGridAdapter<Embeddings, bulkGridId, facetGridId>; update(bulkFvGridGeometry, lowDimFvGridGeometry, embeddings, GridAdapter(embeddings)); } + /*! - * \brief Update coupling maps. This is the standard - * interface required by any mapper implementation. + * \brief Update coupling maps with a given grid adapter. * * \param bulkFvGridGeometry The finite-volume grid geometry of the bulk grid * \param lowDimFvGridGeometry The finite-volume grid geometry of the lower-dimensional grid @@ -159,7 +159,7 @@ public: if (scvf.interiorBoundary() && scvf.facetIndexInElement() == coupledFacetIndex) { // we want to order the set of scvfs lying on the lower-dimensional element such that the i-th scvf - // coincides with the i-th low dim element corner. This will help later to identify which scvf fluxes + // coincides with the i-th low dim element corner. This will help later to identify which scvf fluxes // enter which scv of the low dim element if the lower-dimensional domain uses the box scheme const auto vIdxLocal = bulkRefElem.subEntity(coupledFacetIndex, 1, scvf.indexInElementFacet(), bulkDim); const auto vIdxGlobal = bulkFvGridGeometry.vertexMapper().vertexIndex(bulkElement, vIdxLocal, bulkDim); @@ -177,9 +177,9 @@ public: // add each dof in the low dim element to coupling stencil of the bulk element auto& bulkData = this->couplingMap_(bulkGridId, facetGridId)[bulkElemIdx]; - const auto lowDimElementDofs = LowDimFVG::discMethod == DiscretizationMethod::cctpfa - ? std::vector<LowDimIndexType>({lowDimElemIdx}) - : this->extractNodalDofs_(lowDimElement, lowDimFvGridGeometry); + const auto lowDimElementDofs = LowDimFVG::discMethod == DiscretizationMethod::box + ? this->extractNodalDofs_(lowDimElement, lowDimFvGridGeometry) + : std::vector<LowDimIndexType>({lowDimElemIdx}); for (auto lowDimDofIdx : lowDimElementDofs) { diff --git a/dumux/multidomain/facet/box/fvgridgeometry.hh b/dumux/multidomain/facet/box/fvgridgeometry.hh index e27d643fa9df5e9d620a8bda4473fbad7060092e..c4019de51cfe952e23aa8f4c7f48e8c31941e3a7 100644 --- a/dumux/multidomain/facet/box/fvgridgeometry.hh +++ b/dumux/multidomain/facet/box/fvgridgeometry.hh @@ -470,7 +470,6 @@ public: if (isOnFacet || boundary) { - const auto isGeometry = intersection.geometry(); numScvf_ += numFaceCorners; numBoundaryScvf_ += int(boundary)*numFaceCorners; diff --git a/dumux/multidomain/facet/cellcentered/CMakeLists.txt b/dumux/multidomain/facet/cellcentered/CMakeLists.txt index b0122c954b922a179db1270f9bd865fe8a01bfcd..c0e2edd755ec49c07feccbe3ff8ddad04ce9d78a 100644 --- a/dumux/multidomain/facet/cellcentered/CMakeLists.txt +++ b/dumux/multidomain/facet/cellcentered/CMakeLists.txt @@ -1,3 +1,4 @@ +add_subdirectory(mpfa) add_subdirectory(tpfa) install(FILES diff --git a/dumux/multidomain/facet/cellcentered/mpfa/CMakeLists.txt b/dumux/multidomain/facet/cellcentered/mpfa/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..29c2e60f59bc48e54df105bbc4d276973e9ac8f8 --- /dev/null +++ b/dumux/multidomain/facet/cellcentered/mpfa/CMakeLists.txt @@ -0,0 +1,8 @@ +install(FILES +couplingmanager.hh +couplingmapper.hh +interactionvolume.hh +localassembler.hh +localsubcontrolentities.hh +properties.hh +DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/multidomain/facet/cellcentered/mpfa) diff --git a/dumux/multidomain/facet/cellcentered/mpfa/couplingmanager.hh b/dumux/multidomain/facet/cellcentered/mpfa/couplingmanager.hh new file mode 100644 index 0000000000000000000000000000000000000000..b894a758b7bb9a5720e4814ea329ccbcf8a1edaf --- /dev/null +++ b/dumux/multidomain/facet/cellcentered/mpfa/couplingmanager.hh @@ -0,0 +1,454 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup FacetCoupling + * \copydoc Dumux::FacetCouplingManager + */ +#ifndef DUMUX_CCMPFA_FACETCOUPLING_MANAGER_HH +#define DUMUX_CCMPFA_FACETCOUPLING_MANAGER_HH + +#include <algorithm> +#include <cassert> + +#include <dumux/common/properties.hh> +#include <dumux/common/indextraits.hh> +#include <dumux/common/numericdifferentiation.hh> +#include <dumux/assembly/numericepsilon.hh> + +#include <dumux/discretization/method.hh> +#include <dumux/discretization/elementsolution.hh> +#include <dumux/multidomain/couplingmanager.hh> +#include <dumux/multidomain/facet/cellcentered/tpfa/couplingmanager.hh> + +namespace Dumux { + +/*! + * \ingroup FacetCoupling + * \brief Manages the coupling between bulk elements and lower dimensional elements + * where the coupling occurs across the facets of the bulk grid. This implementation + * is to be used in conjunction with models using the cell-centered mpfa scheme. + * + * \tparam MDTraits The multidomain traits containing the types on all sub-domains + * \tparam CouplingMapper Class containing maps on the coupling between dofs of different grids + * \tparam bulkDomainId The domain id of the bulk problem + * \tparam lowDimDomainId The domain id of the lower-dimensional problem + */ +template<class MDTraits, class CouplingMapper, std::size_t bulkDomainId, std::size_t lowDimDomainId> +class FacetCouplingManager<MDTraits, CouplingMapper, bulkDomainId, lowDimDomainId, DiscretizationMethod::ccmpfa> +: public FacetCouplingManager<MDTraits, CouplingMapper, bulkDomainId, lowDimDomainId, DiscretizationMethod::cctpfa> +{ + using ParentType = FacetCouplingManager<MDTraits, CouplingMapper, bulkDomainId, lowDimDomainId, DiscretizationMethod::cctpfa>; + + // domain id instances + using BulkIdType = typename MDTraits::template SubDomain<bulkDomainId>::Index; + using LowDimIdType = typename MDTraits::template SubDomain<lowDimDomainId>::Index; + static constexpr auto bulkId = BulkIdType(); + static constexpr auto lowDimId = LowDimIdType(); + + // the sub-domain type tags + template<std::size_t id> using SubDomainTypeTag = typename MDTraits::template SubDomain<id>::TypeTag; + + // further types specific to the sub-problems + template<std::size_t id> using Scalar = GetPropType<SubDomainTypeTag<id>, Properties::Scalar>; + template<std::size_t id> using Problem = GetPropType<SubDomainTypeTag<id>, Properties::Problem>; + template<std::size_t id> using NumEqVector = GetPropType<SubDomainTypeTag<id>, Properties::NumEqVector>; + template<std::size_t id> using FVGridGeometry = GetPropType<SubDomainTypeTag<id>, Properties::FVGridGeometry>; + template<std::size_t id> using FVElementGeometry = typename FVGridGeometry<id>::LocalView; + template<std::size_t id> using SubControlVolume = typename FVGridGeometry<id>::SubControlVolume; + template<std::size_t id> using SubControlVolumeFace = typename FVGridGeometry<id>::SubControlVolumeFace; + template<std::size_t id> using GridView = typename FVGridGeometry<id>::GridView; + template<std::size_t id> using GridIndexType = typename IndexTraits< GridView<id> >::GridIndex; + template<std::size_t id> using Element = typename GridView<id>::template Codim<0>::Entity; + template<std::size_t id> using LocalResidual = GetPropType<SubDomainTypeTag<id>, Properties::LocalResidual>; + + template<std::size_t id> using GridVariables = GetPropType<SubDomainTypeTag<id>, Properties::GridVariables>; + template<std::size_t id> using GridVolumeVariables = typename GridVariables<id>::GridVolumeVariables; + template<std::size_t id> using ElementVolumeVariables = typename GridVolumeVariables<id>::LocalView; + + // grid ids + static constexpr int bulkDim = GridView<bulkDomainId>::dimension; + static constexpr int lowDimDim = GridView<lowDimDomainId>::dimension; + static constexpr auto bulkGridId = CouplingMapper::template gridId<bulkDim>(); + static constexpr auto lowDimGridId = CouplingMapper::template gridId<lowDimDim>(); + + static constexpr bool lowDimUsesBox = FVGridGeometry<lowDimId>::discMethod == DiscretizationMethod::box; + +public: + + //! the type of the solution vector + using SolutionVector = typename MDTraits::SolutionVector; + + /*! + * \brief Initialize the coupling manager. + * + * \param bulkProblem The problem to be solved on the bulk domain + * \param lowDimProblem The problem to be solved on the lower-dimensional domain + * \param couplingMapper The mapper object containing the connectivity between the domains + * \param curSol The current solution + */ + void init(std::shared_ptr< Problem<bulkId> > bulkProblem, + std::shared_ptr< Problem<lowDimId> > lowDimProblem, + std::shared_ptr< CouplingMapper > couplingMapper, + const SolutionVector& curSol) + { + // Initialize the parent class + ParentType::init(bulkProblem, lowDimProblem, couplingMapper, curSol); + + // determine all bulk scvfs that coincide with low dim elements + bulkScvfIsOnFacetElement_.resize(bulkProblem->fvGridGeometry().numScvf(), false); + const auto& bulkMap = couplingMapper->couplingMap(bulkGridId, lowDimGridId); + for (const auto& entry : bulkMap) + for (const auto& couplingEntry : entry.second.elementToScvfMap) + for (const auto& scvfIdx : couplingEntry.second) + bulkScvfIsOnFacetElement_[scvfIdx] = true; + + // store pointer to mapper + couplingMapperPtr_ = couplingMapper; + } + + /*! + * \brief returns true if a bulk scvf coincides with a facet element. + */ + bool isOnInteriorBoundary(const Element<bulkId>& element, + const SubControlVolumeFace<bulkId>& scvf) const + { return bulkScvfIsOnFacetElement_[scvf.index()]; } + + /*! + * \brief returns the tensor within the low dim element coinciding with + * the given bulk scvf according to the provided lambda to obtain + * the tensor. + * + * \tparam TensorFunc lambda to obtain a tensorial or scalar spatial parameter. + */ + template<class TensorFunc> + auto getLowDimTensor(const Element<bulkId>& element, + const SubControlVolumeFace<bulkId>& scvf, + const TensorFunc& getT) const + { + const auto lowDimElemIdx = this->getLowDimElementIndex(element, scvf); + + const auto& map = couplingMapperPtr_->couplingMap(bulkGridId, lowDimGridId); + const auto& s = map.find(this->bulkCouplingContext().elementIdx)->second.couplingElementStencil; + const auto& idxInContext = std::distance( s.begin(), std::find(s.begin(), s.end(), lowDimElemIdx) ); + assert(std::find(s.begin(), s.end(), lowDimElemIdx) != s.end()); + + const auto& lowDimProblem = this->problem(lowDimId); + const auto& lowDimElement = lowDimProblem.fvGridGeometry().element(lowDimElemIdx); + const auto& lowDimVolVars = this->bulkCouplingContext().lowDimVolVars[idxInContext]; + const auto& lowDimFvGeometry = this->bulkCouplingContext().lowDimFvGeometries[idxInContext]; + + // we assume constant parameters on the element and use the first scv within the low dim element. + return getT(lowDimProblem, lowDimElement, lowDimVolVars, lowDimFvGeometry, *scvs(lowDimFvGeometry).begin()); + } + + using ParentType::evalCouplingResidual; + /*! + * \brief Evaluates the coupling element residual of a lower-dimensional domain element + * with respect to a dof in the bulk domain (dofIdxGlobalJ). This is essentially + * the fluxes across the facets of the neighboring bulk elements. + * \note The coupling residual is independent of w.r.t. which bulk dof it is computed + */ + template< class LowDimLocalAssembler > + typename LocalResidual<lowDimId>::ElementResidualVector + evalCouplingResidual(LowDimIdType, + const LowDimLocalAssembler& lowDimLocalAssembler, + BulkIdType, + GridIndexType<bulkId> dofIdxGlobalJ) + { return evalCouplingResidual(lowDimId, lowDimLocalAssembler, bulkId); } + + /*! + * \brief Evaluates the coupling element residual of a lower-dimensional domain element + * with respect to a dof in the bulk domain (dofIdxGlobalJ). This is essentially + * the fluxes across the facets of the neighboring bulk elements. + */ + template< class LowDimLocalAssembler > + typename LocalResidual<lowDimId>::ElementResidualVector + evalCouplingResidual(LowDimIdType, const LowDimLocalAssembler& lowDimLocalAssembler, BulkIdType) + { + // make sure this is called for the element for which the context was set + assert(this->lowDimCouplingContext().isSet); + assert(this->problem(lowDimId).fvGridGeometry().elementMapper().index(lowDimLocalAssembler.element()) == this->lowDimCouplingContext().elementIdx); + + // fill element residual vector with the sources + typename LowDimLocalAssembler::LocalResidual::ElementResidualVector res(lowDimLocalAssembler.fvGeometry().numScv()); + res = 0.0; + for (const auto& scv : scvs(lowDimLocalAssembler.fvGeometry())) + res[scv.localDofIndex()] -= evalSourcesFromBulk(lowDimLocalAssembler.element(), + lowDimLocalAssembler.fvGeometry(), + lowDimLocalAssembler.curElemVolVars(), + scv); + return res; + } + + /*! + * \brief Computes the sources in a lower-dimensional sub-control volume stemming from the bulk domain. + */ + NumEqVector<lowDimId> evalSourcesFromBulk(const Element<lowDimId>& element, + const FVElementGeometry<lowDimId>& fvGeometry, + const ElementVolumeVariables<lowDimId>& elemVolVars, + const SubControlVolume<lowDimId>& scv) + { + // make sure the this is called for the element of the context + assert(this->problem(lowDimId).fvGridGeometry().elementMapper().index(element) == this->lowDimCouplingContext().elementIdx); + + NumEqVector<lowDimId> sources(0.0); + + const auto& map = couplingMapperPtr_->couplingMap(lowDimGridId, bulkGridId); + auto it = map.find(this->lowDimCouplingContext().elementIdx); + if (it == map.end()) + return sources; + + assert(this->lowDimCouplingContext().isSet); + for (const auto& embedment : it->second.embedments) + { + // list of scvfs in the bulk domain whose fluxes enter this scv + // if low dim domain uses a cc scheme, this is all scvfs lying on this element + // if it uses box, it is the one scvf coinciding with the given scv + const auto& coincidingScvfs = embedment.second; + const auto& scvfList = lowDimUsesBox ? std::vector<GridIndexType<lowDimId>>{ coincidingScvfs[scv.localDofIndex()] } + : coincidingScvfs; + + sources += this->evalBulkFluxes(this->problem(bulkId).fvGridGeometry().element(embedment.first), + *this->lowDimCouplingContext().bulkFvGeometry, + *this->lowDimCouplingContext().bulkElemVolVars, + *this->lowDimCouplingContext().bulkElemFluxVarsCache, + *this->lowDimCouplingContext().bulkLocalResidual, + scvfList); + } + + return sources; + } + + /*! + * \brief Extend the jacobian pattern of the diagonal block of the lowdim domain + * by the elements that are in the coupling stencil of the neighboring bulk elements + */ + template<class JacobianPattern> + void extendJacobianPattern(LowDimIdType, JacobianPattern& pattern) const + { + const auto& lowDimFVGridGeometry = this->problem(lowDimId).fvGridGeometry(); + for (const auto& element : elements(lowDimFVGridGeometry.gridView())) + { + + const auto eIdx = lowDimFVGridGeometry.elementMapper().index(element); + const auto& map = couplingMapperPtr_->couplingMap(lowDimGridId, bulkGridId); + auto it = map.find(eIdx); + + // if element is coupled, take one of the neighbors and add coupling stencil to pattern + if (it != map.end()) + { + // coupling stencil of the first neighbor + const auto bulkElemIdx = it->second.embedments[0].first; + const auto& bulkMapEntry = couplingMapperPtr_->couplingMap(bulkGridId, lowDimGridId).at(bulkElemIdx); + const auto& couplingStencil = bulkMapEntry.couplingStencil; + + for (auto globalJ : couplingStencil) + { + if (lowDimUsesBox) + { + for (int i = 0; i < element.subEntities(lowDimDim); ++i) + pattern.add(lowDimFVGridGeometry.vertexMapper().subIndex(element, i, lowDimDim), globalJ); + } + else + pattern.add(eIdx, globalJ); + } + } + } + } + + //! The bulk domain has no extended jacobian pattern + template<class JacobianPattern> + void extendJacobianPattern(BulkIdType, JacobianPattern& pattern) const + {} + + /*! + * \brief evaluate additional derivatives of the element residual of the low-dim domain with respect + * to dofs in the same domain that are not in the regular stencil (see extendJacobianPattern) + * \note Here, this is the change of the source term with respect to changes in the variables of the + * other elements in the coupling stencil of the neighboring bulk elements. + */ + template<class LowDimLocalAssembler, class JacobianMatrixDiagBlock, class GridVariables> + void evalAdditionalDomainDerivatives(LowDimIdType, + const LowDimLocalAssembler& lowDimLocalAssembler, + const typename LowDimLocalAssembler::LocalResidual::ElementResidualVector&, + JacobianMatrixDiagBlock& A, + GridVariables& gridVariables) + { + // Since coupling only occurs via the fluxes, there are no + // additional derivatives for explicit time integration schemes + if (!LowDimLocalAssembler::isImplicit()) + return; + + // lambda to update the coupling context for a given lowDim element/dofIdx + auto updateContext = [&] (auto elemIdx, auto dofIdx, auto priVars, auto pvIdx) + { + // deflect the solution + auto& ldSol = this->curSol()[lowDimId]; + ldSol[dofIdx][pvIdx] = priVars[pvIdx]; + + // update the corresponding vol vars in the bulk context + assert(this->bulkCouplingContext().isSet); + const auto& bulkMap = couplingMapperPtr_->couplingMap(bulkGridId, lowDimGridId); + const auto& couplingElementStencil = bulkMap.find(this->bulkCouplingContext().elementIdx)->second.couplingElementStencil; + + auto it = std::find(couplingElementStencil.begin(), couplingElementStencil.end(), elemIdx); + assert(it != couplingElementStencil.end()); + const auto idxInContext = std::distance(couplingElementStencil.begin(), it); + + auto& volVars = this->bulkCouplingContext().lowDimVolVars[idxInContext]; + const auto& fvGeom = this->bulkCouplingContext().lowDimFvGeometries[idxInContext]; + const auto& element = this->problem(lowDimId).fvGridGeometry().element(elemIdx); + + // if low dim domain uses the box scheme, we have to create interpolated vol vars + if (lowDimUsesBox) + { + const auto elemGeom = element.geometry(); + FacetCoupling::makeInterpolatedVolVars(volVars, this->problem(lowDimId), ldSol, fvGeom, element, elemGeom, elemGeom.center()); + } + // if low dim domain uses a cc scheme we can directly update the vol vars + else + volVars.update( elementSolution(element, ldSol, this->problem(lowDimId).fvGridGeometry()), + this->problem(lowDimId), + element, + fvGeom.scv(this->lowDimCouplingContext().elementIdx) ); + + // update the element flux variables cache (tij depend on low dim values in context) + const auto contextElem = this->problem(bulkId).fvGridGeometry().element(this->bulkCouplingContext().elementIdx); + this->lowDimCouplingContext().bulkElemFluxVarsCache->update(contextElem, + *this->lowDimCouplingContext().bulkFvGeometry, + *this->lowDimCouplingContext().bulkElemVolVars); + }; + + const auto eIdx = this->problem(lowDimId).fvGridGeometry().elementMapper().index(lowDimLocalAssembler.element()); + + // bug tracking + assert(this->lowDimCouplingContext().isSet); + assert(this->lowDimCouplingContext().elementIdx == eIdx); + + // if the element is coupled, evaluate additional source derivatives + const auto& map = couplingMapperPtr_->couplingMap(lowDimGridId, bulkGridId); + auto it = map.find(eIdx); + if (it != map.end()) + evalLowDimSourceDerivatives_(updateContext, lowDimLocalAssembler, A); + } + + //! The bulk domain has no additional derivatives + template<class LocalAssemblerI, class JacobianMatrixDiagBlock, class GridVariables> + void evalAdditionalDomainDerivatives(BulkIdType, + const LocalAssemblerI& localAssemblerI, + const typename LocalAssemblerI::LocalResidual::ElementResidualVector& origResiduals, + JacobianMatrixDiagBlock& A, + GridVariables& gridVariables) + {} + +private: + //! evaluates the additional source derivatives w.r.t. to neighboring elements + template<class UpdateContext, class LowDimLocalAssembler, class JacobianMatrixDiagBlock> + void evalLowDimSourceDerivatives_(const UpdateContext& updateContext, + const LowDimLocalAssembler& lowDimLocalAssembler, + JacobianMatrixDiagBlock& A) + { + const auto& lowDimFVGridGeometry = this->problem(lowDimId).fvGridGeometry(); + const auto eIdx = lowDimFVGridGeometry.elementMapper().index(lowDimLocalAssembler.element()); + + // coupling stencil of the first neighbor + const auto bulkElemIdx = this->bulkCouplingContext().elementIdx; + const auto& bulkMapEntry = couplingMapperPtr_->couplingMap(bulkGridId, lowDimGridId).at(bulkElemIdx); + const auto& couplingStencil = bulkMapEntry.couplingStencil; + const auto& couplingElementStencil = bulkMapEntry.couplingElementStencil; + + // compute the undeflected residual (reuse coupling residual function) + const auto origResidual = evalCouplingResidual(lowDimId, lowDimLocalAssembler, bulkId); + + // container of dofs within this element + std::vector< std::decay_t<decltype(couplingStencil[0])> > elemDofs; + elemDofs.reserve(lowDimLocalAssembler.fvGeometry().numScv()); + for (const auto& scv : scvs(lowDimLocalAssembler.fvGeometry())) + elemDofs.push_back(scv.dofIndex()); + + // compute derivate for all additional dofs in the stencil + for (const auto couplingElemIdx : couplingElementStencil) + { + // skip the same element + if (couplingElemIdx == eIdx) + continue; + + // container of dofs within the other element + std::vector< std::decay_t<decltype(couplingStencil[0])> > elemDofsJ; + if (lowDimUsesBox) + { + const auto& elemJ = lowDimFVGridGeometry.element(couplingElemIdx); + for (int i = 0; i < elemJ.subEntities(lowDimDim); ++i) + elemDofsJ.push_back(lowDimFVGridGeometry.vertexMapper().subIndex(elemJ, i, lowDimDim)); + } + else + elemDofsJ.push_back(couplingElemIdx); + + for (auto dofIndex : elemDofsJ) + { + auto partialDerivs = origResidual; + const auto origPriVars = this->curSol()[lowDimId][dofIndex]; + + // calculate derivatives w.r.t to the privars at the dof at hand + static constexpr auto numEq = std::decay_t<decltype(origPriVars)>::dimension; + for (int pvIdx = 0; pvIdx < numEq; pvIdx++) + { + // reset partial derivatives + partialDerivs = 0.0; + + auto evalResiduals = [&](Scalar<lowDimId> priVar) + { + auto priVars = origPriVars; + priVars[pvIdx] = priVar; + + // Update context to deflected solution and reevaluate residual + updateContext(couplingElemIdx, dofIndex, priVars, pvIdx); + return this->evalCouplingResidual(lowDimId, lowDimLocalAssembler, bulkId); + }; + + static const int numDiffMethod = getParamFromGroup<int>(this->problem(lowDimId).paramGroup(), "Assembly.NumericDifferenceMethod"); + static const NumericEpsilon< Scalar<lowDimId>, numEq > eps{this->problem(lowDimId).paramGroup()}; + NumericDifferentiation::partialDerivative(evalResiduals, origPriVars[pvIdx], partialDerivs, + origResidual, eps(origPriVars, pvIdx), numDiffMethod); + + // update the global stiffness matrix with the current partial derivatives + // A[i][col][eqIdx][pvIdx] is the rate of change of the residual of equation + // 'eqIdx' at dof 'i' depending on the primary variable 'pvIdx' at dof 'col'. + for (const auto& scv : scvs(lowDimLocalAssembler.fvGeometry())) + for (int eqIdx = 0; eqIdx < numEq; eqIdx++) + A[scv.dofIndex()][dofIndex][eqIdx][pvIdx] += partialDerivs[scv.indexInElement()][eqIdx]; + + // restore the original coupling context + updateContext(couplingElemIdx, dofIndex, origPriVars, pvIdx); + } + } + } + } + + //! store which scvfs coincide with facet element + std::vector<bool> bulkScvfIsOnFacetElement_; + + //! store shared_ptr to coupling mapper + std::shared_ptr< CouplingMapper > couplingMapperPtr_; +}; + +} // end namespace Dumux + +#endif diff --git a/dumux/multidomain/facet/cellcentered/mpfa/couplingmapper.hh b/dumux/multidomain/facet/cellcentered/mpfa/couplingmapper.hh new file mode 100644 index 0000000000000000000000000000000000000000..8905592da9b621e6245773ce346c74e67e8a3aab --- /dev/null +++ b/dumux/multidomain/facet/cellcentered/mpfa/couplingmapper.hh @@ -0,0 +1,261 @@ +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup FacetCoupling + * \copydoc Dumux::FacetCouplingMapper + */ +#ifndef DUMUX_CCMPFA_FACETCOUPLING_MAPPER_HH +#define DUMUX_CCMPFA_FACETCOUPLING_MAPPER_HH + +#include <dune/common/indices.hh> +#include <dune/common/float_cmp.hh> + +#include <dumux/common/indextraits.hh> +#include <dumux/discretization/method.hh> +#include <dumux/multidomain/facet/couplingmapper.hh> +#include <dumux/multidomain/facet/couplingmapperbase.hh> +#include <dumux/multidomain/facet/codimonegridadapter.hh> + +namespace Dumux { + +/*! + * \ingroup FacetCoupling + * \brief Base class for the coupling mapper that sets up and stores + * the coupling maps between two domains of dimension d and (d-1). + * This specialization is for the bulk domain using the cell-centered + * scheme with multi-point flux approximation. + * + * \tparam BulkFVG The d-dimensional finite-volume grid geometry + * \tparam LowDimFVG The (d-1)-dimensional finite-volume grid geometry + * \tparam bulkId The index of the bulk grid within the hierarchy of grids + * \tparam lowDimId The index of the facet grid within the hierarchy of grids + */ +template<class BulkFVG, class LowDimFVG, std::size_t bulkId, std::size_t lowDimId> +class FacetCouplingMapper<BulkFVG, LowDimFVG, bulkId, lowDimId, DiscretizationMethod::ccmpfa> +: public virtual FacetCouplingMapperBase<BulkFVG, LowDimFVG, bulkId, lowDimId> +{ + using ParentType = FacetCouplingMapperBase<BulkFVG, LowDimFVG, bulkId, lowDimId>; + + using BulkFVElementGeometry = typename BulkFVG::LocalView; + using BulkSubControlVolumeFace = typename BulkFVG::SubControlVolumeFace; + + using BulkIndexType = typename IndexTraits<typename BulkFVG::GridView>::GridIndex; + using LowDimIndexType = typename IndexTraits<typename LowDimFVG::GridView>::GridIndex; + + using LowDimElement = typename LowDimFVG::GridView::template Codim<0>::Entity; + using GlobalPosition = typename LowDimElement::Geometry::GlobalCoordinate; + static constexpr int lowDimDim = LowDimFVG::GridView::dimension; + +public: + //! export domain ids + using ParentType::bulkGridId; + using ParentType::facetGridId; + + /*! + * \brief Update coupling maps. This is the standard + * interface required by any mapper implementation. + * + * \param bulkFvGridGeometry The finite-volume grid geometry of the bulk grid + * \param lowDimFvGridGeometry The finite-volume grid geometry of the lower-dimensional grid + * \param embeddings Class that contains the embedments among the grids and entity insertion indices + */ + template< class Embeddings > + void update(const BulkFVG& bulkFvGridGeometry, + const LowDimFVG& lowDimFvGridGeometry, + std::shared_ptr<const Embeddings> embeddings) + { + // forward to update function with instantiated vertex adapter + using GridAdapter = CodimOneGridAdapter<Embeddings, bulkGridId, facetGridId>; + update(bulkFvGridGeometry, lowDimFvGridGeometry, embeddings, GridAdapter(embeddings)); + } + + /*! + * \brief Update coupling maps. This is the standard + * interface required by any mapper implementation. + * + * \param bulkFvGridGeometry The finite-volume grid geometry of the bulk grid + * \param lowDimFvGridGeometry The finite-volume grid geometry of the lower-dimensional grid + * \param embeddings Class that contains the embedments among the grids and entity insertion indices + * \param codimOneGridAdapter Allows direct access to data on the bulk grid for lowdim grid entities + */ + template< class Embeddings, class CodimOneGridAdapter > + void update(const BulkFVG& bulkFvGridGeometry, + const LowDimFVG& lowDimFvGridGeometry, + std::shared_ptr<const Embeddings> embeddings, + const CodimOneGridAdapter& codimOneGridAdapter) + { + // define the policy how to add map entries for given lowdim element and adjoined entity indices + auto addCouplingEntryPolicy = [&] (auto&& adjoinedEntityIndices, + const LowDimElement& lowDimElement, + const LowDimFVG& lowDimFvGridGeometry, + const BulkFVG& bulkFvGridGeometry) + { + const auto lowDimElemIdx = lowDimFvGridGeometry.elementMapper().index(lowDimElement); + auto& lowDimData = this->couplingMap_(facetGridId, bulkGridId)[lowDimElemIdx]; + + // determine corner indices (in bulk grid indices) + const auto& lowDimGeometry = lowDimElement.geometry(); + const auto numElementCorners = lowDimElement.subEntities(lowDimDim); + std::vector<BulkIndexType> elemCornerIndices(numElementCorners); + for (int i = 0; i < numElementCorners; ++i) + elemCornerIndices[i] = codimOneGridAdapter.bulkGridVertexIndex(lowDimElement.template subEntity<lowDimDim>(i)); + + // Find the scvfs in the adjoined entities coinciding with the low dim element + for (auto bulkElemIdx : adjoinedEntityIndices) + { + const auto bulkElement = bulkFvGridGeometry.element(bulkElemIdx); + + auto fvGeometry = localView(bulkFvGridGeometry); + fvGeometry.bind(bulkElement); + + std::vector<BulkIndexType> embeddedScvfIndices; + for (const auto& scvf : scvfs(fvGeometry)) + { + // for non-boundary faces, it suffices to check if one + // of the outside scv indices is in the set of embedments + if (!scvf.boundary()) + { + if ( std::count(adjoinedEntityIndices.begin(), adjoinedEntityIndices.end(), scvf.outsideScvIdx()) ) + embeddedScvfIndices.push_back(scvf.index()); + } + + // otherwise, do float comparison of element and scvf facet corner + else + { + const auto eps = lowDimGeometry.volume()*1e-8; + const auto diffVec = lowDimGeometry.center()-scvf.facetCorner(); + + if ( Dune::FloatCmp::eq<GlobalPosition, Dune::FloatCmp::CmpStyle::absolute>(diffVec, GlobalPosition(0.0), eps) ) + embeddedScvfIndices.push_back(scvf.index()); + } + } + + // Error tracking. The boundary scvf detection might has to be improved for very fine grids!? + if ( embeddedScvfIndices.size() != numElementCorners ) + DUNE_THROW(Dune::InvalidStateException, "Could not find all coupling scvfs in embedment"); + + // add each dof in the low dim element to coupling stencil of the bulk element and vice versa + auto& bulkData = this->couplingMap_(bulkGridId, facetGridId)[bulkElemIdx]; + const auto lowDimElementDofs = LowDimFVG::discMethod == DiscretizationMethod::box + ? this->extractNodalDofs_(lowDimElement, lowDimFvGridGeometry) + : std::vector<LowDimIndexType>( {lowDimElemIdx} ); + + // add coupling info to all elements/scvfs in interaction volumes + for (auto dofIdx : lowDimElementDofs) + for (auto scvfIdx : embeddedScvfIndices) + this->addCouplingsFromIV_(bulkFvGridGeometry, fvGeometry.scvf(scvfIdx), fvGeometry, lowDimElemIdx, dofIdx); + + // sort the scvfs according to the corners of the low dim element if box is used + // that allows identifying which scvf flux enters which low dim scv later + if (LowDimFVG::discMethod == DiscretizationMethod::box) + { + const auto copy = embeddedScvfIndices; + + for (unsigned int i = 0; i < numElementCorners; ++i) + { + const auto& scvf = fvGeometry.scvf(copy[i]); + auto it = std::find(elemCornerIndices.begin(), elemCornerIndices.end(), scvf.vertexIndex()); + assert(it != elemCornerIndices.end()); + embeddedScvfIndices[ std::distance(elemCornerIndices.begin(), it) ] = copy[i]; + } + } + + // add info on which scvfs coincide with which low dim element + auto& elemToScvfMap = bulkData.elementToScvfMap[lowDimElemIdx]; + elemToScvfMap.insert(elemToScvfMap.end(), embeddedScvfIndices.begin(), embeddedScvfIndices.end()); + + // add embedment + lowDimData.embedments.emplace_back( bulkElemIdx, std::move(embeddedScvfIndices) ); + } + }; + + // let the parent do the update subject to the execution policy defined above + ParentType::update_(bulkFvGridGeometry, lowDimFvGridGeometry, embeddings, addCouplingEntryPolicy); + + // lambda to make a container unique + auto makeUnique = [] (auto& c) + { + std::sort(c.begin(), c.end()); + c.erase( std::unique(c.begin(), c.end()), c.end() ); + }; + + // lambda to make bulk coupling map entry unique + auto makeBulkMapEntryUnique = [&makeUnique] (auto& data) + { + makeUnique(data.second.couplingStencil); + makeUnique(data.second.couplingElementStencil); + std::for_each(data.second.dofToCouplingScvfMap.begin(), + data.second.dofToCouplingScvfMap.end(), + [&makeUnique] (auto& pair) { makeUnique(pair.second); }); + }; + + // make bulk map unique + auto& bulkCouplingData = this->couplingMap_(bulkGridId, facetGridId); + std::for_each(bulkCouplingData.begin(), bulkCouplingData.end(), makeBulkMapEntryUnique); + + // coupling stencils might not be unique in lowdim domain + auto& lowDimCouplingData = this->couplingMap_(facetGridId, bulkGridId); + std::for_each(lowDimCouplingData.begin(), + lowDimCouplingData.end(), + [&makeUnique] (auto& pair) { makeUnique(pair.second.couplingStencil); }); + } + +private: + void addCouplingsFromIV_(const BulkFVG& bulkFvGridGeometry, + const BulkSubControlVolumeFace& scvf, + const BulkFVElementGeometry& fvGeometry, + LowDimIndexType lowDimElemIdx, + LowDimIndexType lowDimDofIdx) + { + const auto& gridIvIndexSets = bulkFvGridGeometry.gridInteractionVolumeIndexSets(); + if (bulkFvGridGeometry.vertexUsesSecondaryInteractionVolume(scvf.vertexIndex())) + addCouplingsFromIVIndexSet_(gridIvIndexSets.secondaryIndexSet(scvf), fvGeometry, lowDimElemIdx, lowDimDofIdx); + else + addCouplingsFromIVIndexSet_(gridIvIndexSets.primaryIndexSet(scvf), fvGeometry, lowDimElemIdx, lowDimDofIdx); + } + + template< class IVIndexSet > + void addCouplingsFromIVIndexSet_(const IVIndexSet& indexSet, + const BulkFVElementGeometry& fvGeometry, + LowDimIndexType lowDimElemIdx, + LowDimIndexType lowDimDofIdx) + { + auto& lowDimData = this->couplingMap_(facetGridId, bulkGridId)[lowDimElemIdx]; + for (auto bulkElemIdx : indexSet.gridScvIndices()) + { + auto& bulkData = this->couplingMap_(bulkGridId, facetGridId)[bulkElemIdx]; + + lowDimData.couplingStencil.push_back( bulkElemIdx ); + bulkData.couplingStencil.push_back( lowDimDofIdx ); + bulkData.couplingElementStencil.push_back( lowDimElemIdx ); + } + + // insert scvf couplings stemming from this interaction volume + for (auto scvfIdx : indexSet.gridScvfIndices()) + { + const auto& scvf = fvGeometry.scvf(scvfIdx); + auto& bulkData = this->couplingMap_(bulkGridId, facetGridId)[scvf.insideScvIdx()]; + auto& couplingScvfs = bulkData.dofToCouplingScvfMap[lowDimDofIdx]; + couplingScvfs.insert(couplingScvfs.end(), scvfIdx); + } + } +}; + +} // end namespace Dumux + +#endif // DUMUX_FACETCOUPLING_CCMPFA_COUPLING_MAPPER_HH diff --git a/dumux/multidomain/facet/cellcentered/mpfa/interactionvolume.hh b/dumux/multidomain/facet/cellcentered/mpfa/interactionvolume.hh new file mode 100644 index 0000000000000000000000000000000000000000..fbe84ad76f9101d0f77a2dcfb80623afdee43af2 --- /dev/null +++ b/dumux/multidomain/facet/cellcentered/mpfa/interactionvolume.hh @@ -0,0 +1,365 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup FacetCoupling + * \copydoc Dumux::CCMpfaOFacetCouplingInteractionVolume + */ +#ifndef DUMUX_MULTIDOMAIN_FACET_CC_MPFA_O_INTERACTIONVOLUME_HH +#define DUMUX_MULTIDOMAIN_FACET_CC_MPFA_O_INTERACTIONVOLUME_HH + +#include <dumux/discretization/cellcentered/mpfa/omethod/interactionvolume.hh> +#include <dumux/discretization/cellcentered/mpfa/omethod/scvgeometryhelper.hh> +#include <dumux/discretization/cellcentered/mpfa/interactionvolumebase.hh> +#include <dumux/discretization/cellcentered/mpfa/localfacedata.hh> +#include <dumux/discretization/cellcentered/mpfa/methods.hh> + +#include "localassembler.hh" +#include "localsubcontrolentities.hh" + +namespace Dumux { + +//! Forward declaration of the facet coupling MPFA-O interaction volume +template< class Traits > class CCMpfaOFacetCouplingInteractionVolume; + +/*! + * \ingroup FacetCoupling + * \brief The default interaction volume traits class for the mpfa-o method + * in the context of facet coupling. This uses dynamic types types for + * matrices/vectors in order to work on general grids. + * + * \tparam NodalIndexSet The type used for the dual grid's nodal index sets + * \tparam Scalar The Type used for scalar values + */ +template< class NodalIndexSet, class Scalar > +struct CCMpfaOFacetCouplingDefaultInteractionVolumeTraits +: public CCMpfaODefaultInteractionVolumeTraits< NodalIndexSet, Scalar > +{ +private: + //! export the type for the interaction volume index set + using IVIndexSet = CCMpfaOInteractionVolumeIndexSet< NodalIndexSet >; + + static constexpr int dim = NodalIndexSet::Traits::GridView::dimension; + static constexpr int dimWorld = NodalIndexSet::Traits::GridView::dimensionworld; + +public: + //! export the type of interaction-volume local scvs + using LocalScvType = CCMpfaOFacetCouplingInteractionVolumeLocalScv< IVIndexSet, Scalar, dim, dimWorld >; + //! export the type of interaction-volume local scvfs + using LocalScvfType = CCMpfaOFacetCouplingInteractionVolumeLocalScvf< IVIndexSet >; + + //! Use the assembler that considers the coupled domain + template<class Problem, class FVElementGeometry, class ElemVolVars> + using LocalAssembler = MpfaOFacetCouplingInteractionVolumeAssembler<Problem, FVElementGeometry, ElemVolVars>; +}; + +/*! + * \ingroup FacetCoupling + * \brief Class for the interaction volume of the mpfa-o scheme in the + * context of models involving coupling to a lower-dimensional + * domain across the element facets. + */ +template< class Traits > +class CCMpfaOFacetCouplingInteractionVolume +: public CCMpfaInteractionVolumeBase< Traits > +{ + using GridView = typename Traits::GridView; + using Element = typename GridView::template Codim<0>::Entity; + + using IndexSet = typename Traits::IndexSet; + using GridIndexType = typename IndexSet::GridIndexType; + using LocalIndexType = typename IndexSet::LocalIndexType; + using Stencil = typename IndexSet::NodalGridStencilType; + + using LocalScvType = typename Traits::LocalScvType; + using LocalScvfType = typename Traits::LocalScvfType; + using LocalFaceData = typename Traits::LocalFaceData; + +public: + //! Reuse standard o-scheme's Dirichlet Data class + using DirichletData = typename CCMpfaOInteractionVolume<Traits>::DirichletData; + + //! Define data structure to store which scvfs lie on interior boundaries + class InteriorBoundaryData + { + GridIndexType scvfIdx_; + + public: + //! Constructor + InteriorBoundaryData(GridIndexType scvfIdx) : scvfIdx_(scvfIdx) {} + + //! Return corresponding scvf index + GridIndexType scvfIndex() const { return scvfIdx_; } + }; + + //! publicly state the mpfa-scheme this interaction volume is associated with + static constexpr MpfaMethods MpfaMethod = MpfaMethods::oMethod; + + //! Sets up the local scope for a given iv index set + template< class Problem, class FVElementGeometry > + void bind(const IndexSet& indexSet, + const Problem& problem, + const FVElementGeometry& fvGeometry) + { + // for the o-scheme, the stencil is equal to the scv + // index set of the dual grid's nodal index set + stencil_ = &indexSet.nodalIndexSet().gridScvIndices(); + + // find out how many facet elements appear in this iv + std::size_t numFacetElems = 0; + std::size_t numOutsideFaces = 0; + std::vector<bool> isOnInteriorBoundary(indexSet.numFaces(), false); + for (LocalIndexType fIdx = 0; fIdx < indexSet.numFaces(); ++fIdx) + { + const auto& scvf = fvGeometry.scvf(indexSet.gridScvfIndex(fIdx)); + const auto element = fvGeometry.fvGridGeometry().element(scvf.insideScvIdx()); + if (problem.couplingManager().isOnInteriorBoundary(element, scvf)) + { + numFacetElems++; + numOutsideFaces += scvf.numOutsideScvs(); + isOnInteriorBoundary[fIdx] = true; + interiorBoundaryData_.emplace_back( scvf.index() ); + } + } + + // number of interaction-volume-local scvs(=node-local for o-scheme) and scvfs + numFaces_ = indexSet.numFaces() + numOutsideFaces; + const auto numLocalScvs = indexSet.numScvs(); + const auto numGlobalScvfs = indexSet.nodalIndexSet().numScvfs(); + + // reserve memory for local entities + elements_.clear(); elements_.reserve(numLocalScvs); + scvs_.clear(); scvs_.reserve(numLocalScvs); + scvfs_.clear(); scvfs_.reserve(numFaces_); + localFaceData_.clear(); localFaceData_.reserve(numGlobalScvfs); + dirichletData_.clear(); dirichletData_.reserve(numFaces_); + + // keep track of the number of unknowns etc + numUnknowns_ = 0; + numKnowns_ = numLocalScvs + numFacetElems; + + // index map from grid scvf index to local scvf index + std::unordered_map<GridIndexType, LocalIndexType> scvfIndexMap; + + // set up objects related to sub-control volume faces + LocalIndexType facetElementCounter = 0; + for (LocalIndexType faceIdxLocal = 0; faceIdxLocal < indexSet.numFaces(); ++faceIdxLocal) + { + const auto gridScvfIdx = indexSet.gridScvfIndex(faceIdxLocal); + const auto& flipScvfIdxSet = fvGeometry.fvGridGeometry().flipScvfIndexSet()[gridScvfIdx]; + const auto& scvf = fvGeometry.scvf(gridScvfIdx); + const auto element = fvGeometry.fvGridGeometry().element(scvf.insideScvIdx()); + + // the neighboring scvs in local indices (order: 0 - inside scv, 1..n - outside scvs) + const auto& neighborScvIndicesLocal = indexSet.neighboringLocalScvIndices(faceIdxLocal); + const auto numNeighborScvs = neighborScvIndicesLocal.size(); + + // the ÃÂv-local scvf index of the face about to be created + const auto curLocalScvfIdx = scvfs_.size(); + scvfIndexMap[gridScvfIdx] = curLocalScvfIdx; + localFaceData_.emplace_back(curLocalScvfIdx, neighborScvIndicesLocal[0], scvf.index()); + + // on interior boundaries, create local scvfs for inside AND all outside scvfs + if (isOnInteriorBoundary[faceIdxLocal]) + { + const LocalIndexType facetLocalDofIdx = numLocalScvs + facetElementCounter++; + const bool isDirichlet = problem.interiorBoundaryTypes(element, scvf).hasOnlyDirichlet(); + + // create local scvf + if (isDirichlet) + scvfs_.emplace_back(scvf, neighborScvIndicesLocal, facetLocalDofIdx, /*isDirichlet*/true, facetLocalDofIdx); + else + scvfs_.emplace_back(scvf, neighborScvIndicesLocal, numUnknowns_++, /*isDirichlet*/false, facetLocalDofIdx); + + // create "outside" local scvfs + for (LocalIndexType i = 1; i < numNeighborScvs; ++i) + { + const auto outsideGridScvfIdx = flipScvfIdxSet[i-1]; + const auto& flipScvf = fvGeometry.scvf(outsideGridScvfIdx); + const auto& outsideFlipScvfIdxSet = fvGeometry.fvGridGeometry().flipScvfIndexSet()[outsideGridScvfIdx]; + + // rearrange the neighbor scv index vector corresponding to this scvfs flip scvf index set + using std::swap; + auto outsideNeighborScvIdxSet = neighborScvIndicesLocal; + outsideNeighborScvIdxSet[0] = outsideNeighborScvIdxSet[i]; + for (LocalIndexType j = 0; j < outsideFlipScvfIdxSet.size(); ++j) + { + const auto flipScvfIdx = outsideFlipScvfIdxSet[j]; + auto it = std::find(flipScvfIdxSet.begin(), flipScvfIdxSet.end(), flipScvfIdx); + + // if we found the index, use corresponding local scv index + if (it != flipScvfIdxSet.end()) + outsideNeighborScvIdxSet[j+1] = neighborScvIndicesLocal[std::distance(flipScvfIdxSet.begin(), it)+1]; + + // otherwise this must be the "inside" scvf again + else + { + assert(flipScvfIdx == gridScvfIdx); + outsideNeighborScvIdxSet[j+1] = neighborScvIndicesLocal[0]; + } + } + + scvfIndexMap[outsideGridScvfIdx] = curLocalScvfIdx+i; + localFaceData_.emplace_back(curLocalScvfIdx+i, outsideNeighborScvIdxSet[0], flipScvf.index()); + if (isDirichlet) + scvfs_.emplace_back(flipScvf, outsideNeighborScvIdxSet, facetLocalDofIdx, /*isDirichlet*/true, facetLocalDofIdx); + else + scvfs_.emplace_back(flipScvf, outsideNeighborScvIdxSet, numUnknowns_++, /*isDirichlet*/false, facetLocalDofIdx); + } + } + + // otherwise crate boundary scvf ... + else if (scvf.boundary()) + { + if (problem.boundaryTypes(element, scvf).hasOnlyDirichlet()) + { + scvfs_.emplace_back(scvf, neighborScvIndicesLocal, numKnowns_++, /*isDirichlet*/true); + dirichletData_.emplace_back(scvf.outsideScvIdx()); + } + else + scvfs_.emplace_back(scvf, neighborScvIndicesLocal, numUnknowns_++, /*isDirichlet*/false); + } + + // ... or interior scvf + else + { + scvfs_.emplace_back(scvf, neighborScvIndicesLocal, numUnknowns_++, /*isDirichlet*/false); + + // add local face data objects for the outside faces + for (LocalIndexType i = 1; i < numNeighborScvs; ++i) + { + // loop over scvfs in outside scv until we find the one coinciding with current scvf + const auto outsideLocalScvIdx = neighborScvIndicesLocal[i]; + const auto& flipScvfIndex = fvGeometry.fvGridGeometry().flipScvfIndexSet()[scvf.index()][i-1]; + const auto& flipScvf = fvGeometry.scvf(flipScvfIndex); + scvfIndexMap[flipScvfIndex] = curLocalScvfIdx; + localFaceData_.emplace_back(curLocalScvfIdx, // iv-local scvf idx + outsideLocalScvIdx, // iv-local scv index + i-1, // scvf-local index in outside faces + flipScvf.index()); // global scvf index + } + } + } + + // set up stuff related to sub-control volumes + for (LocalIndexType scvIdxLocal = 0; scvIdxLocal < numLocalScvs; scvIdxLocal++) + { + elements_.emplace_back(fvGeometry.fvGridGeometry().element( stencil()[scvIdxLocal] )); + scvs_.emplace_back(fvGeometry.fvGridGeometry().mpfaHelper(), + fvGeometry, + fvGeometry.scv( stencil()[scvIdxLocal] ), + scvIdxLocal, + indexSet, + scvfIndexMap); + } + } + + //! returns the number of primary scvfs of this interaction volume + std::size_t numFaces() const + { return numFaces_; } + + //! returns the number of intermediate unknowns within this interaction volume + std::size_t numUnknowns() const + { return numUnknowns_; } + + //! returns the number of (in this context) known solution values within this interaction volume + std::size_t numKnowns() const + { return numKnowns_; } + + //! returns the number of scvs embedded in this interaction volume + std::size_t numScvs() const + { return scvs_.size(); } + + //! returns the cell-stencil of this interaction volume + const Stencil& stencil() const + { return *stencil_; } + + //! returns the grid element corresponding to a given iv-local scv idx + const Element& element(LocalIndexType ivLocalScvIdx) const + { return elements_[ivLocalScvIdx]; } + + //! returns the local scvf entity corresponding to a given iv-local scvf idx + const LocalScvfType& localScvf(LocalIndexType ivLocalScvfIdx) const + { return scvfs_[ivLocalScvfIdx]; } + + //! returns the local scv entity corresponding to a given iv-local scv idx + const LocalScvType& localScv(LocalIndexType ivLocalScvIdx) const + { return scvs_[ivLocalScvIdx]; } + + //! returns a reference to the container with the local face data + const std::vector<LocalFaceData>& localFaceData() const + { return localFaceData_; } + + //! returns a reference to the information container on Dirichlet BCs within this iv + const std::vector<DirichletData>& dirichletData() const + { return dirichletData_; } + + //! returns a reference to the data container on interior boundaries + const std::vector<InteriorBoundaryData>& interiorBoundaryData() const + { return interiorBoundaryData_; } + + //! returns the geometry of the i-th local scv + template< class FVElementGeometry > + auto getScvGeometry(LocalIndexType ivLocalScvIdx, const FVElementGeometry& fvGeometry) const + { return CCMpfaOScvGeometryHelper<LocalScvType>::computeScvGeometry(ivLocalScvIdx, *this, fvGeometry); } + + //! returns the number of interaction volumes living around a vertex + template< class NI > + static constexpr std::size_t numIVAtVertex(const NI& nodalIndexSet) + { return 1; } + + //! adds the iv index sets living around a vertex to a given container + //! and stores the the corresponding index in a map for each scvf + template< class IvIndexSetContainer, + class ScvfIndexMap, + class NodalIndexSet, + class FlipScvfIndexSet > + static void addIVIndexSets(IvIndexSetContainer& ivIndexSetContainer, + ScvfIndexMap& scvfIndexMap, + const NodalIndexSet& nodalIndexSet, + const FlipScvfIndexSet& flipScvfIndexSet) + { + // reuse the function of the standard mpfa-o interaction volume + CCMpfaOInteractionVolume<Traits>::addIVIndexSets(ivIndexSetContainer, + scvfIndexMap, + nodalIndexSet, + flipScvfIndexSet); + } + +private: + // pointer to cell stencil (in iv index set) + const Stencil* stencil_; + + // Variables defining the local scope + std::vector<Element> elements_; + std::vector<LocalScvType> scvs_; + std::vector<LocalScvfType> scvfs_; + std::vector<LocalFaceData> localFaceData_; + std::vector<DirichletData> dirichletData_; + std::vector<InteriorBoundaryData> interiorBoundaryData_; + + // sizes involved in the local system equations + std::size_t numFaces_; + std::size_t numUnknowns_; + std::size_t numKnowns_; +}; + +} // end namespace + +#endif diff --git a/dumux/multidomain/facet/cellcentered/mpfa/localassembler.hh b/dumux/multidomain/facet/cellcentered/mpfa/localassembler.hh new file mode 100644 index 0000000000000000000000000000000000000000..9933b03148d28dfb33d7faeaae8f3ae492b90b0d --- /dev/null +++ b/dumux/multidomain/facet/cellcentered/mpfa/localassembler.hh @@ -0,0 +1,459 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup FacetCoupling + * \copydoc Dumux::MpfaOFacetCouplingInteractionVolumeAssembler + */ +#ifndef DUMUX_MULTIDOMAIN_FACET_CC_MPFA_O_LOCAL_ASSEMBLER_HH +#define DUMUX_MULTIDOMAIN_FACET_CC_MPFA_O_LOCAL_ASSEMBLER_HH + +#include <dune/common/exceptions.hh> + +#include <dumux/common/math.hh> +#include <dumux/common/parameters.hh> +#include <dumux/discretization/cellcentered/mpfa/methods.hh> +#include <dumux/discretization/cellcentered/mpfa/localassemblerbase.hh> +#include <dumux/discretization/cellcentered/mpfa/localassemblerhelper.hh> +#include <dumux/discretization/cellcentered/mpfa/computetransmissibility.hh> + +namespace Dumux { + +/*! + * \ingroup FacetCoupling + * \brief Specialization of the interaction volume-local + * assembler class for the schemes using an mpfa-o type + * assembly in the context of facet coupling. + * + * \tparam P The problem type + * \tparam EG The element finite volume geometry + * \tparam EV The element volume variables type + */ +template< class P, class EG, class EV > +class MpfaOFacetCouplingInteractionVolumeAssembler +: public InteractionVolumeAssemblerBase< P, EG, EV > +{ + using ParentType = InteractionVolumeAssemblerBase< P, EG, EV >; + using Helper = InteractionVolumeAssemblerHelper; + +public: + //! Pull up constructor of the base class + using ParentType::ParentType; + + /*! + * \brief Assembles the matrices involved in the flux expressions + * and the local system of equations within an interaction volume. + * + * \param handle The data handle in which the matrices are stored + * \param iv The interaction volume + * \param getT Lambda to evaluate the scv-wise tensors + */ + template< class DataHandle, class IV, class TensorFunc > + void assembleMatrices(DataHandle& handle, IV& iv, const TensorFunc& getT) + { + assembleLocalMatrices_(handle.A(), handle.AB(), handle.CA(), handle.T(), handle.omegas(), iv, getT); + + // maybe solve the local system + if (iv.numUnknowns() > 0) + Helper::solveLocalSystem(this->fvGeometry(), handle, iv); + } + + /*! + * \brief Assembles the vector of primary (cell) unknowns and (maybe) + * Dirichlet boundary conditions within an interaction volume. + * + * \param handle The data handle in which the vector is stored + * \param iv The interaction volume + * \param getU Lambda to obtain the desired cell/Dirichlet value from vol vars + */ + template< class DataHandle, class IV, class GetU > + void assembleU(DataHandle& handle, const IV& iv, const GetU& getU) + { + auto& u = handle.uj(); + Helper::resizeVector(u, iv.numKnowns()); + + // put the cell unknowns first ... + typename IV::Traits::IndexSet::LocalIndexType i = 0; + for (; i < iv.numScvs(); i++) + u[i] = getU( this->elemVolVars()[iv.localScv(i).gridScvIndex()] ); + + // ... then put facet unknowns ... + for (const auto& data : iv.interiorBoundaryData()) + { + const auto& scvf = this->fvGeometry().scvf(data.scvfIndex()); + const auto element = this->fvGeometry().fvGridGeometry().element(scvf.insideScvIdx()); + u[i++] = getU( this->problem().couplingManager().getLowDimVolVars(element, scvf) ); + } + + // ... then put the Dirichlet unknowns + for (const auto& data : iv.dirichletData()) + u[i++] = getU( this->elemVolVars()[data.volVarIndex()] ); + } + + /*! + * \brief Assembles the gravitational flux contributions on the scvfs within an + * interaction volume. + * + * \param handle The data handle in which the vector is stored + * \param iv The interaction volume + * \param getRho Lambda to obtain the density from volume variables + */ + template< class DataHandle, class IV, class GetRho > + void assembleGravity(DataHandle& handle, const IV& iv, const GetRho& getRho) + { + using GridView = typename IV::Traits::GridView; + static constexpr int dim = GridView::dimension; + static constexpr int dimWorld = GridView::dimensionworld; + static constexpr bool isSurfaceGrid = dim < dimWorld; + + // resize the gravity vectors + auto& g = handle.g(); + auto& deltaG = handle.deltaG(); + auto& outsideG = handle.gOutside(); + Helper::resizeVector(g, iv.numFaces()); + Helper::resizeVector(deltaG, iv.numUnknowns()); + if (isSurfaceGrid) + Helper::resizeVector(outsideG, iv.numFaces()); + + //! For each face, we... + //! - arithmetically average the phase densities + //! - compute the term \f$ \alpha := \mathbf{A} \rho \ \mathbf{n}^T \mathbf{K} \mathbf{g} \f$ in each neighboring cell + //! - compute \f$ \alpha^* = \sum{\alpha_{outside, i}} - \alpha_{inside} \f$ + using Scalar = typename IV::Traits::MatVecTraits::TMatrix::value_type; + using LocalIndexType = typename IV::Traits::IndexSet::LocalIndexType; + + // xi factor for coupling conditions + static const Scalar xi = getParamFromGroup<Scalar>(this->problem().paramGroup(), "FacetCoupling.Xi", 1.0); + + for (LocalIndexType faceIdx = 0; faceIdx < iv.numFaces(); ++faceIdx) + { + // gravitational acceleration on this face + const auto& curLocalScvf = iv.localScvf(faceIdx); + const auto& curGlobalScvf = this->fvGeometry().scvf(curLocalScvf.gridScvfIndex()); + const auto& gravity = this->problem().gravityAtPos(curGlobalScvf.ipGlobal()); + const auto curIsInteriorBoundary = curLocalScvf.isOnInteriorBoundary(); + const Scalar curXiFactor = curIsInteriorBoundary ? (curGlobalScvf.boundary() ? 1.0 : xi) : 1.0; + + // get permeability tensor in "positive" sub volume + const auto& neighborScvIndices = curLocalScvf.neighboringLocalScvIndices(); + const auto& posGlobalScv = this->fvGeometry().scv(iv.localScv(neighborScvIndices[0]).gridScvIndex()); + const auto& posVolVars = this->elemVolVars()[posGlobalScv]; + const auto alpha_inside = posVolVars.extrusionFactor()*vtmv(curGlobalScvf.unitOuterNormal(), + posVolVars.permeability(), + gravity); + + const auto numOutsideFaces = !curGlobalScvf.boundary() ? curGlobalScvf.numOutsideScvs() : 0; + using OutsideAlphaStorage = std::conditional_t< isSurfaceGrid, + std::vector<Scalar>, + Dune::ReservedVector<Scalar, 1> >; + OutsideAlphaStorage alpha_outside; alpha_outside.resize(numOutsideFaces); + std::fill(alpha_outside.begin(), alpha_outside.end(), 0.0); + Scalar rho; + + if (isSurfaceGrid && !curIsInteriorBoundary) + Helper::resizeVector(outsideG[faceIdx], numOutsideFaces); + + if (!curLocalScvf.isDirichlet()) + { + const auto localDofIdx = curLocalScvf.localDofIndex(); + const Scalar curOneMinusXi = curIsInteriorBoundary ? -(1.0 - xi) : 1.0; + + rho = getRho(posVolVars); + deltaG[localDofIdx] = 0.0; + + if (!curGlobalScvf.boundary()) + { + for (unsigned int idxInOutside = 0; idxInOutside < curGlobalScvf.numOutsideScvs(); ++idxInOutside) + { + // obtain outside tensor + const auto negLocalScvIdx = neighborScvIndices[idxInOutside+1]; + const auto& negGlobalScv = this->fvGeometry().scv(iv.localScv(negLocalScvIdx).gridScvIndex()); + const auto& negVolVars = this->elemVolVars()[negGlobalScv]; + const auto& flipScvf = !isSurfaceGrid ? curGlobalScvf + : this->fvGeometry().flipScvf(curGlobalScvf.index(), idxInOutside); + + alpha_outside[idxInOutside] = negVolVars.extrusionFactor()*vtmv(flipScvf.unitOuterNormal(), + negVolVars.permeability(), + gravity); + if (isSurfaceGrid) + alpha_outside[idxInOutside] *= -1.0; + + if (!curIsInteriorBoundary) + rho += getRho(negVolVars); + + deltaG[localDofIdx] += curOneMinusXi*alpha_outside[idxInOutside]; + } + } + + if (curIsInteriorBoundary) + { + const auto posElement = this->fvGeometry().fvGridGeometry().element(posGlobalScv.elementIndex()); + const auto& facetVolVars = this->problem().couplingManager().getLowDimVolVars(posElement, curGlobalScvf); + rho += getRho(facetVolVars); + rho /= 2.0; + const auto alphaFacet = posVolVars.extrusionFactor()*vtmv(curGlobalScvf.unitOuterNormal(), + facetVolVars.permeability(), + gravity); + deltaG[localDofIdx] += alphaFacet; + } + else + rho /= numOutsideFaces + 1; + + deltaG[localDofIdx] -= curXiFactor*alpha_inside; + deltaG[localDofIdx] *= rho*curGlobalScvf.area(); + } + // use average density between facet and cell density on interior Dirichlet boundaries + else if (curIsInteriorBoundary) + { + const auto posElement = this->fvGeometry().fvGridGeometry().element(posGlobalScv.elementIndex()); + const auto& facetVolVars = this->problem().couplingManager().getLowDimVolVars(posElement, curGlobalScvf); + rho = 0.5*(getRho(facetVolVars) + getRho(posVolVars)); + } + // use density resulting from Dirichlet BCs + else + rho = getRho(this->elemVolVars()[curGlobalScvf.outsideScvIdx()]); + + // add "inside" & "outside" alphas to gravity containers + g[faceIdx] = alpha_inside*rho*curGlobalScvf.area(); + + if (isSurfaceGrid && !curIsInteriorBoundary) + { + unsigned int i = 0; + for (const auto& alpha : alpha_outside) + outsideG[faceIdx][i++] = alpha*rho*curGlobalScvf.area(); + } + } + + // add iv-wide contributions to gravity vectors + handle.CA().umv(deltaG, g); + if (isSurfaceGrid) + { + using FaceVector = typename IV::Traits::MatVecTraits::FaceVector; + FaceVector AG; + Helper::resizeVector(AG, iv.numUnknowns()); + handle.A().mv(deltaG, AG); + + // compute gravitational accelerations + for (const auto& localFaceData : iv.localFaceData()) + { + // continue only for "outside" faces + if (!localFaceData.isOutsideFace()) + continue; + + const auto localScvIdx = localFaceData.ivLocalInsideScvIndex(); + const auto localScvfIdx = localFaceData.ivLocalScvfIndex(); + const auto idxInOutside = localFaceData.scvfLocalOutsideScvfIndex(); + const auto& posLocalScv = iv.localScv(localScvIdx); + const auto& wijk = handle.omegas()[localScvfIdx][idxInOutside+1]; + + // add contributions from all local directions + for (LocalIndexType localDir = 0; localDir < dim; localDir++) + { + // the scvf corresponding to this local direction in the scv + const auto& curLocalScvf = iv.localScvf(posLocalScv.localScvfIndex(localDir)); + if (!curLocalScvf.isDirichlet()) + outsideG[localScvfIdx][idxInOutside] -= wijk[localDir]*AG[curLocalScvf.localDofIndex()]; + } + } + } + } + +private: + /*! + * \copydoc Dumux::MpfaOInteractionVolumeAssembler::assembleLocalMatrices_ + */ + template< class IV, class TensorFunc > + void assembleLocalMatrices_(typename IV::Traits::MatVecTraits::AMatrix& A, + typename IV::Traits::MatVecTraits::BMatrix& B, + typename IV::Traits::MatVecTraits::CMatrix& C, + typename IV::Traits::MatVecTraits::DMatrix& D, + typename IV::Traits::MatVecTraits::OmegaStorage& wijk, + IV& iv, const TensorFunc& getT) + { + using Scalar = typename IV::Traits::MatVecTraits::TMatrix::value_type; + using LocalIndexType = typename IV::Traits::IndexSet::LocalIndexType; + static constexpr int dim = IV::Traits::GridView::dimension; + static constexpr int dimWorld = IV::Traits::GridView::dimensionworld; + + // xi factor for coupling conditions + static const Scalar xi = getParamFromGroup<Scalar>(this->problem().paramGroup(), "FacetCoupling.Xi", 1.0); + + // resize omegas + Helper::resizeVector(wijk, iv.numFaces()); + + // if only Dirichlet faces are present in the iv, + // the matrices A, B & C are undefined and D = T + if (iv.numUnknowns() == 0) + { + // resize & reset D matrix + Helper::resizeMatrix(D, iv.numFaces(), iv.numKnowns()); D = 0.0; + + // Loop over all the faces, in this case these are all dirichlet boundaries + for (LocalIndexType faceIdx = 0; faceIdx < iv.numFaces(); ++faceIdx) + { + const auto& curLocalScvf = iv.localScvf(faceIdx); + const auto& curGlobalScvf = this->fvGeometry().scvf(curLocalScvf.gridScvfIndex()); + const auto& neighborScvIndices = curLocalScvf.neighboringLocalScvIndices(); + + // get tensor in "positive" sub volume + const auto& posLocalScv = iv.localScv(neighborScvIndices[0]); + const auto& posGlobalScv = this->fvGeometry().scv(posLocalScv.gridScvIndex()); + const auto& posVolVars = this->elemVolVars()[posGlobalScv]; + const auto& posElement = iv.element(neighborScvIndices[0]); + const auto tensor = getT(this->problem(), posElement, posVolVars, this->fvGeometry(), posGlobalScv); + + // the omega factors of the "positive" sub volume + Helper::resizeVector(wijk[faceIdx], /*no outside scvs present*/1); + wijk[faceIdx][0] = computeMpfaTransmissibility(posLocalScv, curGlobalScvf, tensor, posVolVars.extrusionFactor()); + + const auto posScvLocalDofIdx = posLocalScv.localDofIndex(); + for (LocalIndexType localDir = 0; localDir < dim; localDir++) + { + const auto& otherLocalScvf = iv.localScvf( posLocalScv.localScvfIndex(localDir) ); + const auto otherLocalDofIdx = otherLocalScvf.localDofIndex(); + D[faceIdx][otherLocalDofIdx] -= wijk[faceIdx][0][localDir]; + D[faceIdx][posScvLocalDofIdx] += wijk[faceIdx][0][localDir]; + } + } + } + else + { + // resize & reset matrices + Helper::resizeMatrix(A, iv.numUnknowns(), iv.numUnknowns()); A = 0.0; + Helper::resizeMatrix(B, iv.numUnknowns(), iv.numKnowns()); B = 0.0; + Helper::resizeMatrix(C, iv.numFaces(), iv.numUnknowns()); C = 0.0; + Helper::resizeMatrix(D, iv.numFaces(), iv.numKnowns()); D = 0.0; + + for (LocalIndexType faceIdx = 0; faceIdx < iv.numFaces(); ++faceIdx) + { + const auto& curLocalScvf = iv.localScvf(faceIdx); + const auto& curGlobalScvf = this->fvGeometry().scvf(curLocalScvf.gridScvfIndex()); + const auto curIsDirichlet = curLocalScvf.isDirichlet(); + const auto curLocalDofIdx = curLocalScvf.localDofIndex(); + const auto curIsInteriorBoundary = curLocalScvf.isOnInteriorBoundary(); + const Scalar curXiFactor = curIsInteriorBoundary ? (curGlobalScvf.boundary() ? 1.0 : xi) : 1.0; + + // get tensor in "positive" sub volume + const auto& neighborScvIndices = curLocalScvf.neighboringLocalScvIndices(); + const auto& posLocalScv = iv.localScv(neighborScvIndices[0]); + const auto& posGlobalScv = this->fvGeometry().scv(posLocalScv.gridScvIndex()); + const auto& posVolVars = this->elemVolVars()[posGlobalScv]; + const auto& posElement = iv.element(neighborScvIndices[0]); + const auto tensor = getT(this->problem(), posElement, posVolVars, this->fvGeometry(), posGlobalScv); + + // the omega factors of the "positive" sub volume + Helper::resizeVector(wijk[faceIdx], neighborScvIndices.size()); + wijk[faceIdx][0] = computeMpfaTransmissibility(posLocalScv, curGlobalScvf, tensor, posVolVars.extrusionFactor()); + + // go over the coordinate directions in the positive sub volume + for (unsigned int localDir = 0; localDir < dim; localDir++) + { + const auto& otherLocalScvf = iv.localScvf( posLocalScv.localScvfIndex(localDir) ); + const auto otherLocalDofIdx = otherLocalScvf.localDofIndex(); + + // if we are not on a Dirichlet face, add entries associated with unknown face pressures + // i.e. in matrix C and maybe A (if current face is not a Dirichlet face) + if (!otherLocalScvf.isDirichlet()) + { + C[faceIdx][otherLocalDofIdx] -= wijk[faceIdx][0][localDir]; + if (!curIsDirichlet) + A[curLocalDofIdx][otherLocalDofIdx] -= curXiFactor*wijk[faceIdx][0][localDir]; + } + // the current face is a Dirichlet face and creates entries in D & maybe B + else + { + D[faceIdx][otherLocalDofIdx] -= wijk[faceIdx][0][localDir]; + if (!curIsDirichlet) + B[curLocalDofIdx][otherLocalDofIdx] += curXiFactor*wijk[faceIdx][0][localDir]; + } + + // add entries related to pressures at the scv centers (dofs) + const auto posScvLocalDofIdx = posLocalScv.localDofIndex(); + D[faceIdx][posScvLocalDofIdx] += wijk[faceIdx][0][localDir]; + + if (!curIsDirichlet) + B[curLocalDofIdx][posScvLocalDofIdx] -= curXiFactor*wijk[faceIdx][0][localDir]; + } + + // handle the entries related to the coupled facet element + if (curIsInteriorBoundary && !curIsDirichlet) + { + const auto facetVolVars = this->problem().couplingManager().getLowDimVolVars(posElement, curGlobalScvf); + const auto facetTensor = this->problem().couplingManager().getLowDimTensor(posElement, curGlobalScvf, getT); + + // On surface grids we use the square root of the extrusion factor as approximation of the aperture + using std::sqrt; + const auto wFacet = 2.0*curGlobalScvf.area()*posVolVars.extrusionFactor() + *vtmv(curGlobalScvf.unitOuterNormal(), facetTensor, curGlobalScvf.unitOuterNormal()) + / (dim < dimWorld ? sqrt(facetVolVars.extrusionFactor()) : facetVolVars.extrusionFactor()); + + A[curLocalDofIdx][curLocalDofIdx] -= wFacet; + B[curLocalDofIdx][curLocalScvf.coupledFacetLocalDofIndex()] -= wFacet; + } + + // If we are on an interior face (which isn't coupled via Dirichlet Bs), add values from negative sub volume + if (!curGlobalScvf.boundary() && !curIsDirichlet) + { + // the minus ensures the right sign of the coupling condition in the matrices + const Scalar curOneMinusXi = curIsInteriorBoundary ? -(1.0 - xi) : 1.0; + + // loop over all the outside neighbors of this face and add entries + for (unsigned int idxInOutside = 0; idxInOutside < curGlobalScvf.numOutsideScvs(); ++idxInOutside) + { + const auto idxOnScvf = idxInOutside+1; + const auto& negLocalScv = iv.localScv( neighborScvIndices[idxOnScvf] ); + const auto& negGlobalScv = this->fvGeometry().scv(negLocalScv.gridScvIndex()); + const auto& negVolVars = this->elemVolVars()[negGlobalScv]; + const auto& negElement = iv.element( neighborScvIndices[idxOnScvf] ); + const auto negTensor = getT(this->problem(), negElement, negVolVars, this->fvGeometry(), negGlobalScv); + + // On surface grids, use outside face for "negative" transmissibility calculation + const auto& scvf = dim < dimWorld ? this->fvGeometry().flipScvf(curGlobalScvf.index(), idxInOutside) + : curGlobalScvf; + wijk[faceIdx][idxOnScvf] = computeMpfaTransmissibility(negLocalScv, scvf, negTensor, negVolVars.extrusionFactor()); + + // flip sign on surface grids (since we used the "outside" normal) + if (dim < dimWorld) + wijk[faceIdx][idxOnScvf] *= -1.0; + + // go over the coordinate directions in the negative sub volume + for (int localDir = 0; localDir < dim; localDir++) + { + const auto otherLocalScvfIdx = negLocalScv.localScvfIndex(localDir); + const auto& otherLocalScvf = iv.localScvf(otherLocalScvfIdx); + const auto otherLocalDofIdx = otherLocalScvf.localDofIndex(); + + if (!otherLocalScvf.isDirichlet()) + A[curLocalDofIdx][otherLocalDofIdx] += curOneMinusXi*wijk[faceIdx][idxOnScvf][localDir]; + else + B[curLocalDofIdx][otherLocalDofIdx] -= curOneMinusXi*wijk[faceIdx][idxOnScvf][localDir]; + + // add entries to matrix B + B[curLocalDofIdx][negLocalScv.localDofIndex()] += curOneMinusXi*wijk[faceIdx][idxOnScvf][localDir]; + } + } + } + } + } + } +}; + +} // end namespace + +#endif diff --git a/dumux/multidomain/facet/cellcentered/mpfa/localsubcontrolentities.hh b/dumux/multidomain/facet/cellcentered/mpfa/localsubcontrolentities.hh new file mode 100644 index 0000000000000000000000000000000000000000..e47c3823ff58e6155a9305adc99614c3a23ff3b5 --- /dev/null +++ b/dumux/multidomain/facet/cellcentered/mpfa/localsubcontrolentities.hh @@ -0,0 +1,159 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup FacetCoupling + * \brief Classes for sub control entities of the + * mpfa-o method in the context of facet coupling + */ +#ifndef DUMUX_MULTDOMAIN_FACET_CC_MPFA_O_LOCAL_SUBCONTROLENTITIES_HH +#define DUMUX_MULTDOMAIN_FACET_CC_MPFA_O_LOCAL_SUBCONTROLENTITIES_HH + +#include <array> + +#include <dune/common/fvector.hh> +#include <dumux/discretization/cellcentered/mpfa/omethod/localsubcontrolentities.hh> + +namespace Dumux { + +/*! + * \ingroup FacetCoupling + * \brief Class for the interaction volume-local sub-control volume used + * in the mpfa-o scheme in the context of facet coupling. + * + * \tparam IvIndexSet The type used for index sets within interaction volumes + * \tparam dim The dimensionality of the grid + * \tparam dimWorld The dimension of the world the grid is embedded in + */ +template< class IvIndexSet, class Scalar, int dim, int dimWorld> +class CCMpfaOFacetCouplingInteractionVolumeLocalScv +: public CCMpfaOInteractionVolumeLocalScv<IvIndexSet, Scalar, dim, dimWorld> +{ + using ParentType = CCMpfaOInteractionVolumeLocalScv<IvIndexSet, Scalar, dim, dimWorld>; + +public: + // export some types + using typename ParentType::LocalIndexType; + + // export dimension + static constexpr int myDimension = dim; + + //! The default constructor + CCMpfaOFacetCouplingInteractionVolumeLocalScv() = default; + + /*! + * \brief The constructor + * + * \param helper Helper class for mpfa schemes + * \param fvGeometry The element finite volume geometry + * \param scv The grid sub-control volume + * \param localIndex The iv-local index of this scvIdx + * \param indexSet The interaction volume index set + * \param scvfGridToLocalIndexMap maps to grid scvf indices the iv-local scvf index + */ + template<class MpfaHelper, class FVElementGeometry, class SubControlVolume, class IndexMap> + CCMpfaOFacetCouplingInteractionVolumeLocalScv(const MpfaHelper& helper, + const FVElementGeometry& fvGeometry, + const SubControlVolume& scv, + const LocalIndexType localIndex, + const IvIndexSet& indexSet, + const IndexMap& scvfGridToLocalIndexMap) + : ParentType(helper, fvGeometry, scv, localIndex, indexSet) + { + // set up local scvf indices + const auto& nis = indexSet.nodalIndexSet(); + for (unsigned int dir = 0; dir < myDimension; ++dir) + localScvfIndices_[dir] = scvfGridToLocalIndexMap.at(nis.gridScvfIndex(this->localDofIndex(), dir)); + } + + //! iv-local index of the coordir's scvf in this scv + LocalIndexType localScvfIndex(unsigned int coordDir) const + { + assert(coordDir < myDimension); + return localScvfIndices_[coordDir]; + } + +private: + std::array<LocalIndexType, dim> localScvfIndices_; +}; + +/*! + * \ingroup FacetCoupling + * \brief Class for the interaction volume-local sub-control volume face + * used in the mpfa-o scheme in the context of facet coupling. + * + * \tparam IvIndexSet The type used for index sets within interaction volumes + */ +template< class IvIndexSet > +struct CCMpfaOFacetCouplingInteractionVolumeLocalScvf +: public CCMpfaOInteractionVolumeLocalScvf< IvIndexSet > +{ + using ParentType = CCMpfaOInteractionVolumeLocalScvf< IvIndexSet >; + using ScvfNeighborLocalIndexSet = typename IvIndexSet::ScvfNeighborLocalIndexSet; + +public: + // pull up index types + using typename ParentType::LocalIndexType; + using typename ParentType::GridIndexType; + + //! pull up parent's constructors + using ParentType::ParentType; + + /*! + * \brief The constructor for interior boundary faces. + * + * \param scvf The grid sub-control volume face + * \param localScvIndices The iv-local neighboring scv indices + * \param localDofIdx This scvf's interaction volume-local dof index + * \param isDirichlet Specifies if this scv is on a Dirichlet boundary + * \param coupledFacetLocalDof The local index of the coupled facet element + * in the set of cell&Dirichlet values. + */ + template< class SubControlVolumeFace > + CCMpfaOFacetCouplingInteractionVolumeLocalScvf(const SubControlVolumeFace& scvf, + const ScvfNeighborLocalIndexSet& localScvIndices, + const LocalIndexType localDofIdx, + const bool isDirichlet, + const LocalIndexType coupledFacetLocalDof) + : ParentType(scvf, neighborLocalScvIndices_, localDofIdx, isDirichlet) + , isInteriorBoundary_(true) + , coupledFacetLocalDofIndex_(coupledFacetLocalDof) + , neighborLocalScvIndices_(localScvIndices) + {} + + //! Returns the iv-local dof index of the coupled facet element + LocalIndexType coupledFacetLocalDofIndex() const + { assert(isInteriorBoundary_); return coupledFacetLocalDofIndex_; } + + //! Returns the local indices of the scvs neighboring this scvf + const ScvfNeighborLocalIndexSet& neighboringLocalScvIndices() const + { return isOnInteriorBoundary() ? neighborLocalScvIndices_ : ParentType::neighboringLocalScvIndices(); } + + //! Returns true if this face is on an interior boundary + bool isOnInteriorBoundary() const { return isInteriorBoundary_; } + +private: + bool isInteriorBoundary_{false}; + LocalIndexType coupledFacetLocalDofIndex_{0}; + ScvfNeighborLocalIndexSet neighborLocalScvIndices_; +}; + +} // end namespace Dumux + +#endif diff --git a/dumux/multidomain/facet/cellcentered/mpfa/properties.hh b/dumux/multidomain/facet/cellcentered/mpfa/properties.hh new file mode 100644 index 0000000000000000000000000000000000000000..b2732f504954b0b764e2ba8eafeb6e9843f27812 --- /dev/null +++ b/dumux/multidomain/facet/cellcentered/mpfa/properties.hh @@ -0,0 +1,95 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup FacetCoupling + * \brief Properties (and default properties) for all models using cell-centered + * finite volume scheme with MPFA together with coupling across the grid element facets + * \note If n is the dimension of the lowest grid to be considered in the hierarchy, + * all problem type tags for the grids with the dimension m > n must inherit + * from these or other facet coupling properties (e.g. BoxFacetCouplingModel). + */ + +#ifndef DUMUX_FACETCOUPLING_CC_MPFA_PROPERTIES_HH +#define DUMUX_FACETCOUPLING_CC_MPFA_PROPERTIES_HH + +#include <dumux/common/properties.hh> +#include <dumux/discretization/ccmpfa.hh> + +#include <dumux/multidomain/facet/cellcentered/upwindscheme.hh> +#include <dumux/multidomain/facet/cellcentered/localresidual.hh> +#include <dumux/multidomain/facet/cellcentered/mpfa/interactionvolume.hh> + +#include <dumux/porousmediumflow/fluxvariables.hh> + +namespace Dumux { + +namespace Properties { + +//! Type tag for the cell-centered mpfa scheme with coupling to +//! another sub-domain living on the grid facets. +// Create new type tags +namespace TTag { +struct CCMpfaFacetCouplingModel { using InheritsFrom = std::tuple<CCMpfaModel>; }; +} // end namespace TTag + +//! Use the cc local residual for models with facet coupling +template<class TypeTag> +struct BaseLocalResidual<TypeTag, TTag::CCMpfaFacetCouplingModel> { using type = CCFacetCouplingLocalResidual<TypeTag>; }; + +//! Use the facet coupling-specific mpfa-o interaction volume +template<class TypeTag> +struct PrimaryInteractionVolume<TypeTag, TTag::CCMpfaFacetCouplingModel> +{ +private: + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using NodalIndexSet = GetPropType<TypeTag, Properties::DualGridNodalIndexSet>; + + // use the default traits + using Traits = CCMpfaOFacetCouplingDefaultInteractionVolumeTraits< NodalIndexSet, Scalar >; +public: + using type = CCMpfaOFacetCouplingInteractionVolume< Traits >; +}; + +//! Use the facet coupling-specific mpfa-o interaction volume +template<class TypeTag> +struct SecondaryInteractionVolume<TypeTag, TTag::CCMpfaFacetCouplingModel> +{ +private: + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using NodalIndexSet = GetPropType<TypeTag, Properties::DualGridNodalIndexSet>; + + // use the default traits + using Traits = CCMpfaOFacetCouplingDefaultInteractionVolumeTraits< NodalIndexSet, Scalar >; +public: + using type = CCMpfaOFacetCouplingInteractionVolume< Traits >; +}; + +//! Per default, use the porous medium flow flux variables with the modified upwind scheme +template<class TypeTag> +struct FluxVariables<TypeTag, TTag::CCMpfaFacetCouplingModel> +{ + using type = PorousMediumFluxVariables<TypeTag, + CCFacetCouplingUpwindScheme<GetPropType<TypeTag, Properties::FVGridGeometry>>>; +}; + +} // namespace Properties +} // namespace Dumux + +#endif diff --git a/dumux/multidomain/facet/cellcentered/tpfa/couplingmanager.hh b/dumux/multidomain/facet/cellcentered/tpfa/couplingmanager.hh index 32312fd2a3269405ba47fd37c177b107486c4bd6..96f508b2ea1a7d78889b66c0da976fc4f4a48d93 100644 --- a/dumux/multidomain/facet/cellcentered/tpfa/couplingmanager.hh +++ b/dumux/multidomain/facet/cellcentered/tpfa/couplingmanager.hh @@ -97,6 +97,8 @@ class FacetCouplingManager<MDTraits, CouplingMapper, bulkDomainId, lowDimDomainI static constexpr auto bulkGridId = CouplingMapper::template gridId<bulkDim>(); static constexpr auto lowDimGridId = CouplingMapper::template gridId<lowDimDim>(); + static constexpr bool lowDimUsesBox = FVGridGeometry<lowDimId>::discMethod == DiscretizationMethod::box; + /*! * \brief The coupling context of the bulk domain. Contains all data of the lower- * dimensional domain which is required for the computation of a bulk element @@ -249,25 +251,12 @@ public: const SubControlVolumeFace<bulkId>& scvf) const { assert(bulkContext_.isSet); - assert(bulkScvfIsCoupled_[scvf.index()]); - assert(scvf.insideScvIdx() == this->problem(bulkId).fvGridGeometry().elementMapper().index(element)); + const auto lowDimElemIdx = getLowDimElementIndex(element, scvf); const auto& map = couplingMapperPtr_->couplingMap(bulkGridId, lowDimGridId); - const auto& couplingData = map.find(scvf.insideScvIdx())->second; - - // search the low dim element idx this scvf is embedded in - auto it = std::find_if( couplingData.elementToScvfMap.begin(), - couplingData.elementToScvfMap.end(), - [&scvf] (auto& dataPair) - { - const auto& scvfs = dataPair.second; - return std::find(scvfs.begin(), scvfs.end(), scvf.index()) != scvfs.end(); - } ); - - assert(it != couplingData.elementToScvfMap.end()); - const auto lowDimElemIdx = it->first; const auto& s = map.find(bulkContext_.elementIdx)->second.couplingElementStencil; const auto& idxInContext = std::distance( s.begin(), std::find(s.begin(), s.end(), lowDimElemIdx) ); + assert(std::find(s.begin(), s.end(), lowDimElemIdx) != s.end()); return bulkContext_.lowDimVolVars[idxInContext]; } @@ -278,12 +267,20 @@ public: const Element<lowDimId> getLowDimElement(const Element<bulkId>& element, const SubControlVolumeFace<bulkId>& scvf) const { - assert(bulkContext_.isSet); + const auto lowDimElemIdx = getLowDimElementIndex(element, scvf); + return this->problem(lowDimId).fvGridGeometry().element(lowDimElemIdx); + } + + /*! + * \brief returns the index of the lower-dimensional element coinciding with a bulk scvf. + */ + const GridIndexType<lowDimId> getLowDimElementIndex(const Element<bulkId>& element, + const SubControlVolumeFace<bulkId>& scvf) const + { assert(bulkScvfIsCoupled_[scvf.index()]); - assert(scvf.insideScvIdx() == this->problem(bulkId).fvGridGeometry().elementMapper().index(element)); const auto& map = couplingMapperPtr_->couplingMap(bulkGridId, lowDimGridId); - const auto& couplingData = map.find(scvf.insideScvIdx())->second; + const auto& couplingData = map.at(scvf.insideScvIdx()); // search the low dim element idx this scvf is embedded in auto it = std::find_if( couplingData.elementToScvfMap.begin(), @@ -295,15 +292,13 @@ public: } ); assert(it != couplingData.elementToScvfMap.end()); - const auto lowDimElemIdx = it->first; - return this->problem(lowDimId).fvGridGeometry().element(lowDimElemIdx); + return it->first; } /*! * \brief Evaluates the coupling element residual of a bulk domain element with respect * to a dof in the lower-dimensional domain (dofIdxGlobalJ). This is essentially - * the fluxes across the bulk element facets that coincide with the lower-dimensional - * element whose dof idx is dofIdxGlobalJ. + * the fluxes across the bulk element facets that depend on dofIdxGlobalJ. */ template< class BulkLocalAssembler > typename LocalResidual<bulkId>::ElementResidualVector @@ -321,20 +316,24 @@ public: typename LocalResidual<bulkId>::ElementResidualVector res(1); res = 0.0; - res[0] = evalBulkFluxes_(bulkLocalAssembler.element(), - bulkLocalAssembler.fvGeometry(), - bulkLocalAssembler.curElemVolVars(), - bulkLocalAssembler.elemFluxVarsCache(), - bulkLocalAssembler.localResidual(), - map.find(bulkContext_.elementIdx)->second.dofToCouplingScvfMap.at(dofIdxGlobalJ)); + res[0] = evalBulkFluxes(bulkLocalAssembler.element(), + bulkLocalAssembler.fvGeometry(), + bulkLocalAssembler.curElemVolVars(), + bulkLocalAssembler.elemFluxVarsCache(), + bulkLocalAssembler.localResidual(), + map.find(bulkContext_.elementIdx)->second.dofToCouplingScvfMap.at(dofIdxGlobalJ)); return res; } /*! * \brief Evaluates the coupling element residual of a lower-dimensional domain element * with respect to a dof in the bulk domain (dofIdxGlobalJ). This is essentially - * the fluxes across the facets of the neighboring bulk element that coincide with + * the fluxes across the facets of the neighboring bulk elements that coincide with * the given element. + * + * \note The coupling residual in this case is always the entire transfer flux from bulk + * to the lowDim domain. It is therefore independent of the given dof index in the + * bulk domain, which is why we directly forward to the index-independent function. */ template< class LowDimLocalAssembler > typename LocalResidual<lowDimId>::ElementResidualVector @@ -342,6 +341,16 @@ public: const LowDimLocalAssembler& lowDimLocalAssembler, BulkIdType, GridIndexType<bulkId> dofIdxGlobalJ) + { return evalCouplingResidual(lowDimId, lowDimLocalAssembler, bulkId); } + + /*! + * \brief Evaluates the coupling element residual of a lower-dimensional domain element + * with respect to a dof in the bulk domain (dofIdxGlobalJ). This is essentially + * the fluxes across the facets of the neighboring bulk elements. + */ + template< class LowDimLocalAssembler > + typename LocalResidual<lowDimId>::ElementResidualVector + evalCouplingResidual(LowDimIdType, const LowDimLocalAssembler& lowDimLocalAssembler, BulkIdType) { // make sure this is called for the element for which the context was set assert(lowDimContext_.isSet); @@ -382,17 +391,16 @@ public: return sources; assert(lowDimContext_.isSet); - const auto& bulkMap = couplingMapperPtr_->couplingMap(bulkGridId, lowDimGridId); for (const auto& embedment : it->second.embedments) - sources += evalBulkFluxes_(this->problem(bulkId).fvGridGeometry().element(embedment.first), - *lowDimContext_.bulkFvGeometry, - *lowDimContext_.bulkElemVolVars, - *lowDimContext_.bulkElemFluxVarsCache, - *lowDimContext_.bulkLocalResidual, - bulkMap.find(embedment.first)->second.elementToScvfMap.at(lowDimContext_.elementIdx)); + sources += evalBulkFluxes(this->problem(bulkId).fvGridGeometry().element(embedment.first), + *lowDimContext_.bulkFvGeometry, + *lowDimContext_.bulkElemVolVars, + *lowDimContext_.bulkElemFluxVarsCache, + *lowDimContext_.bulkLocalResidual, + embedment.second); // if lowdim domain uses box, we distribute the sources equally among the scvs - if (FVGridGeometry<lowDimId>::discMethod == DiscretizationMethod::box) + if (lowDimUsesBox) sources /= fvGeometry.numScv(); return sources; @@ -436,10 +444,10 @@ public: VolumeVariables<lowDimId> volVars; // if low dim domain uses the box scheme, we have to create interpolated vol vars - if (FVGridGeometry<lowDimId>::discMethod == DiscretizationMethod::box) + if (lowDimUsesBox) { const auto elemGeom = elemJ.geometry(); - makeInterpolatedVolVars(volVars, ldProblem, ldSol, fvGeom, elemJ, elemGeom, elemGeom.center()); + FacetCoupling::makeInterpolatedVolVars(volVars, ldProblem, ldSol, fvGeom, elemJ, elemGeom, elemGeom.center()); } // if low dim domain uses a cc scheme we can directly update the vol vars else @@ -539,7 +547,7 @@ public: // find the low-dim elements in coupling stencil, where this dof is contained in const auto couplingElements = [&] () { - if (FVGridGeometry<lowDimId>::discMethod == DiscretizationMethod::box) + if (lowDimUsesBox) { std::vector< Element<lowDimId> > lowDimElems; std::for_each( couplingElemStencil.begin(), couplingElemStencil.end(), @@ -571,10 +579,10 @@ public: auto& volVars = bulkContext_.lowDimVolVars[idxInContext]; const auto& fvGeom = bulkContext_.lowDimFvGeometries[idxInContext]; // if low dim domain uses the box scheme, we have to create interpolated vol vars - if (FVGridGeometry<lowDimId>::discMethod == DiscretizationMethod::box) + if (lowDimUsesBox) { const auto elemGeom = element.geometry(); - makeInterpolatedVolVars(volVars, ldProblem, ldSol, fvGeom, element, elemGeom, elemGeom.center()); + FacetCoupling::makeInterpolatedVolVars(volVars, ldProblem, ldSol, fvGeom, element, elemGeom, elemGeom.center()); } // if low dim domain uses a cc scheme we can directly update the vol vars else @@ -692,10 +700,10 @@ public: const auto& fvGeom = bulkContext_.lowDimFvGeometries[idxInContext]; const auto& element = lowDimLocalAssembler.element(); // if low dim domain uses the box scheme, we have to create interpolated vol vars - if (FVGridGeometry<lowDimId>::discMethod == DiscretizationMethod::box) + if (lowDimUsesBox) { const auto elemGeom = element.geometry(); - makeInterpolatedVolVars(volVars, ldProblem, ldSol, fvGeom, element, elemGeom, elemGeom.center()); + FacetCoupling::makeInterpolatedVolVars(volVars, ldProblem, ldSol, fvGeom, element, elemGeom, elemGeom.center()); } // if low dim domain uses a cc scheme we can directly update the vol vars else @@ -755,15 +763,23 @@ public: getEmptyStencil(Dune::index_constant<id>) const { return std::get<(id == bulkId ? 0 : 1)>(emptyStencilTuple_); } -private: +protected: + //! Return const references to the bulk coupling contexts + const BulkCouplingContext& bulkCouplingContext() const { return bulkContext_; } + const LowDimCouplingContext& lowDimCouplingContext() const { return lowDimContext_; } + + //! Return references to the bulk coupling contexts + BulkCouplingContext& bulkCouplingContext() { return bulkContext_; } + LowDimCouplingContext& lowDimCouplingContext() { return lowDimContext_; } + //! evaluates the bulk-facet exchange fluxes for a given facet element template<class BulkScvfIndices> - NumEqVector<bulkId> evalBulkFluxes_(const Element<bulkId>& elementI, - const FVElementGeometry<bulkId>& fvGeometry, - const ElementVolumeVariables<bulkId>& elemVolVars, - const ElementFluxVariablesCache<bulkId>& elemFluxVarsCache, - const LocalResidual<bulkId>& localResidual, - const BulkScvfIndices& scvfIndices) const + NumEqVector<bulkId> evalBulkFluxes(const Element<bulkId>& elementI, + const FVElementGeometry<bulkId>& fvGeometry, + const ElementVolumeVariables<bulkId>& elemVolVars, + const ElementFluxVariablesCache<bulkId>& elemFluxVarsCache, + const LocalResidual<bulkId>& localResidual, + const BulkScvfIndices& scvfIndices) const { NumEqVector<bulkId> coupledFluxes(0.0); @@ -777,6 +793,7 @@ private: return coupledFluxes; } +private: std::shared_ptr<CouplingMapper> couplingMapperPtr_; //! store bools for all bulk elements/scvfs that indicate if they diff --git a/dumux/multidomain/facet/cellcentered/tpfa/couplingmapper.hh b/dumux/multidomain/facet/cellcentered/tpfa/couplingmapper.hh index 788c86d11d710fe6712ec5b051c310443f8fe7a1..1bd84f6991eabaa650092a1c06659fe49eff0f26 100644 --- a/dumux/multidomain/facet/cellcentered/tpfa/couplingmapper.hh +++ b/dumux/multidomain/facet/cellcentered/tpfa/couplingmapper.hh @@ -23,6 +23,7 @@ #define DUMUX_CCTPFA_FACETCOUPLING_MAPPER_HH #include <dune/common/indices.hh> +#include <dune/common/float_cmp.hh> #include <dumux/common/indextraits.hh> #include <dumux/discretization/method.hh> @@ -49,6 +50,7 @@ class FacetCouplingMapper<BulkFVG, LowDimFVG, bulkId, lowDimId, DiscretizationMe { using ParentType = FacetCouplingMapperBase<BulkFVG, LowDimFVG, bulkId, lowDimId>; using LowDimElement = typename LowDimFVG::GridView::template Codim<0>::Entity; + using GlobalPosition = typename LowDimElement::Geometry::GlobalCoordinate; public: //! export domain ids @@ -77,6 +79,7 @@ public: using LowDimIndexType = typename IndexTraits<typename LowDimFVG::GridView>::GridIndex; using BulkIndexType = typename IndexTraits<typename BulkFVG::GridView>::GridIndex; + const auto lowDimGeometry = lowDimElement.geometry(); const auto lowDimElemIdx = lowDimFvGridGeometry.elementMapper().index(lowDimElement); auto& lowDimData = this->couplingMap_(facetGridId, bulkGridId)[lowDimElemIdx]; @@ -109,12 +112,10 @@ public: // otherwise, do float comparison of element and scvf center else { - const auto lowDimGeom = lowDimElement.geometry(); - const auto eps = lowDimGeom.volume()*1e-8; - const auto diffVec = lowDimGeom.center()-scvf.center(); + const auto eps = lowDimGeometry.volume()*1e-8; + const auto diffVec = lowDimGeometry.center()-scvf.center(); - using std::abs; - if ( std::all_of(diffVec.begin(), diffVec.end(), [eps] (auto coord) { return abs(coord) < eps; }) ) + if ( Dune::FloatCmp::eq<GlobalPosition, Dune::FloatCmp::CmpStyle::absolute>(diffVec, GlobalPosition(0.0), eps) ) { embeddedScvfIdx = scvf.index(); found = true; break; @@ -128,9 +129,9 @@ public: // add each dof in the low dim element to coupling stencil of the bulk element auto& bulkData = this->couplingMap_(bulkGridId, facetGridId)[bulkElemIdx]; - const auto lowDimElementDofs = LowDimFVG::discMethod == DiscretizationMethod::cctpfa - ? std::vector<LowDimIndexType>( {lowDimElemIdx} ) - : this->extractNodalDofs_(lowDimElement, lowDimFvGridGeometry); + const auto lowDimElementDofs = LowDimFVG::discMethod == DiscretizationMethod::box + ? this->extractNodalDofs_(lowDimElement, lowDimFvGridGeometry) + : std::vector<LowDimIndexType>( {lowDimElemIdx} ); for (auto dofIdx : lowDimElementDofs) { diff --git a/dumux/multidomain/facet/couplingmanager.hh b/dumux/multidomain/facet/couplingmanager.hh index efe446eb740a205e9859903edd8a4a32a2bb3fc0..b6acef4e71904f97659e8d513b38e622144013b9 100644 --- a/dumux/multidomain/facet/couplingmanager.hh +++ b/dumux/multidomain/facet/couplingmanager.hh @@ -32,6 +32,7 @@ #include <dumux/discretization/evalsolution.hh> namespace Dumux { +namespace FacetCoupling{ /*! * \ingroup FacetCoupling @@ -69,6 +70,7 @@ void makeInterpolatedVolVars(VolumeVariables& volVars, // of this function has to be provided! volVars.update(elemSol, problem, element, *scvs(fvGeometry).begin()); } +} // end namespace FacetCoupling /*! * \ingroup FacetCoupling @@ -134,6 +136,7 @@ class FacetCouplingThreeDomainManager template<std::size_t id> using FVGridGeometry = GetPropType<SubDomainTypeTag<id>, Properties::FVGridGeometry>; template<std::size_t id> using FVElementGeometry = typename FVGridGeometry<id>::LocalView; + template<std::size_t id> using SubControlVolumeFace = typename FVGridGeometry<id>::SubControlVolumeFace; template<std::size_t id> using GridView = typename FVGridGeometry<id>::GridView; template<std::size_t id> using GridIndexType = typename IndexTraits<GridView<id>>::GridIndex; template<std::size_t id> using Element = typename GridView<id>::template Codim<0>::Entity; @@ -142,6 +145,11 @@ class FacetCouplingThreeDomainManager template<std::size_t id> using ElementVolumeVariables = typename GridVariables<id>::GridVolumeVariables::LocalView; template<std::size_t id> using ElementFluxVariablesCache = typename GridVariables<id>::GridFluxVariablesCache::LocalView; + // helper function to check if a domain uses mpfa + template<std::size_t id> + static constexpr bool usesMpfa(Dune::index_constant<id> domainId) + { return FVGridGeometry<domainId>::discMethod == DiscretizationMethod::ccmpfa; } + public: //! types used for coupling stencils template<std::size_t i, std::size_t j> @@ -184,6 +192,12 @@ public: using BulkFacetManager::getLowDimVolVars; using FacetEdgeManager::getLowDimVolVars; + using BulkFacetManager::getLowDimElement; + using FacetEdgeManager::getLowDimElement; + + using BulkFacetManager::getLowDimElementIndex; + using FacetEdgeManager::getLowDimElementIndex; + using BulkFacetManager::evalSourcesFromBulk; using FacetEdgeManager::evalSourcesFromBulk; @@ -199,6 +213,40 @@ public: using BulkFacetManager::updateCoupledVariables; using FacetEdgeManager::updateCoupledVariables; + using BulkFacetManager::extendJacobianPattern; + using FacetEdgeManager::extendJacobianPattern; + + using BulkFacetManager::evalAdditionalDomainDerivatives; + using FacetEdgeManager::evalAdditionalDomainDerivatives; + + // extension of the jacobian pattern for the facet domain only occurs + // within the bulk-facet coupling & for mpfa being used in the bulk domain. + template<class JacobianPattern> + void extendJacobianPattern(FacetIdType, JacobianPattern& pattern) const + { BulkFacetManager::extendJacobianPattern(facetId, pattern); } + + template<class FacetLocalAssembler, class JacobianMatrixDiagBlock, class GridVariables> + void evalAdditionalDomainDerivatives(FacetIdType, + const FacetLocalAssembler& facetLocalAssembler, + const typename FacetLocalAssembler::LocalResidual::ElementResidualVector& origResiduals, + JacobianMatrixDiagBlock& A, + GridVariables& gridVariables) + { BulkFacetManager::evalAdditionalDomainDerivatives(facetId, facetLocalAssembler, origResiduals, A, gridVariables); } + + // Overload required for compatibility with mpfa + template<class GetTensor, bool mpfa = usesMpfa(bulkId), std::enable_if_t<mpfa, int> = 0> + auto getLowDimTensor(const Element<bulkId>& element, + const SubControlVolumeFace<bulkId>& scvf, + const GetTensor& getT) const + { return BulkFacetManager::getLowDimTensor(element, scvf, getT); } + + // Overload required for compatibility with mpfa + template<class GetTensor, bool mpfa = usesMpfa(facetId), std::enable_if_t<mpfa, int> = 0> + auto getLowDimTensor(const Element<facetId>& element, + const SubControlVolumeFace<facetId>& scvf, + const GetTensor& getT) const + { return FacetEdgeManager::getLowDimTensor(element, scvf, getT); } + /*! * \brief The coupling stencil of the bulk with the edge domain (empty stencil). */ @@ -327,5 +375,6 @@ public: // Here, we have to include all available implementations #include <dumux/multidomain/facet/box/couplingmanager.hh> #include <dumux/multidomain/facet/cellcentered/tpfa/couplingmanager.hh> +#include <dumux/multidomain/facet/cellcentered/mpfa/couplingmanager.hh> #endif diff --git a/dumux/multidomain/facet/couplingmapper.hh b/dumux/multidomain/facet/couplingmapper.hh index 149c7a2c31a9d30fa611016549e1c8ef555738fc..1daeb34e358b87cc0d0c08b2431a45c9cb436cfa 100644 --- a/dumux/multidomain/facet/couplingmapper.hh +++ b/dumux/multidomain/facet/couplingmapper.hh @@ -138,5 +138,6 @@ public: // Here, we have to include all available implementations #include <dumux/multidomain/facet/box/couplingmapper.hh> #include <dumux/multidomain/facet/cellcentered/tpfa/couplingmapper.hh> +#include <dumux/multidomain/facet/cellcentered/mpfa/couplingmapper.hh> #endif // DUMUX_FACETCOUPLING_COUPLING_MAPPER_HH diff --git a/dumux/multidomain/facet/gmshreader.hh b/dumux/multidomain/facet/gmshreader.hh index 6b3f3fd5e580d3a52a977cdbb0a844c8785096bf..60ffa2c19874661ea6d02942fbbea78023d8aa6d 100644 --- a/dumux/multidomain/facet/gmshreader.hh +++ b/dumux/multidomain/facet/gmshreader.hh @@ -364,11 +364,17 @@ private: { // triangles, lines & tetrahedra need no reordering if (gt == Dune::GeometryTypes::hexahedron) - DUNE_THROW(Dune::NotImplemented, "Reordering of corners for hexahedra"); + { + using std::swap; + assert(cornerIndices.size() == 8); + swap(cornerIndices[2], cornerIndices[3]); + swap(cornerIndices[6], cornerIndices[7]); + } else if (gt == Dune::GeometryTypes::quadrilateral) { + using std::swap; assert(cornerIndices.size() == 4); - std::swap(cornerIndices[2], cornerIndices[3]); + swap(cornerIndices[2], cornerIndices[3]); } } diff --git a/dumux/multidomain/facet/gridmanager.hh b/dumux/multidomain/facet/gridmanager.hh index e0489cdd00adf6b8e7e6b87b87fc882fdf608627..5366ed14d488e6d48dce9720d6140a6e65fc8f3f 100644 --- a/dumux/multidomain/facet/gridmanager.hh +++ b/dumux/multidomain/facet/gridmanager.hh @@ -45,7 +45,7 @@ #include "gmshreader.hh" namespace Dumux { -namespace Detail { +namespace FCGridManagerChecks { // The grid creator and grid data classes provided below // require that the grids passed as template arguments are @@ -84,8 +84,8 @@ template<typename... Grids> class FacetCouplingGridDataWrapper { // make sure all grids have the same world dimension and are ordered in descending dimension - static_assert(Detail::FulfillConditions<false, Grids...>::value, "All grids must have the same world dimension!"); - static_assert(Detail::FulfillConditions<true, Grids...>::value, "Grids must be ordered w.r.t the dimension in descending order!"); + static_assert(FCGridManagerChecks::FulfillConditions<false, Grids...>::value, "All grids must have the same world dimension!"); + static_assert(FCGridManagerChecks::FulfillConditions<true, Grids...>::value, "Grids must be ordered w.r.t the dimension in descending order!"); //! determine the number of involved grids static constexpr std::size_t numGrids = sizeof...(Grids); @@ -154,8 +154,8 @@ template<typename... Grids> class FacetCouplingEmbeddings { // make sure all grids have the same world dimension and are ordered in descending dimension - static_assert(Detail::FulfillConditions<false, Grids...>::value, "All grids must have the same world dimension!"); - static_assert(Detail::FulfillConditions<true, Grids...>::value, "Grids must be ordered w.r.t the dimension in descending order!"); + static_assert(FCGridManagerChecks::FulfillConditions<false, Grids...>::value, "All grids must have the same world dimension!"); + static_assert(FCGridManagerChecks::FulfillConditions<true, Grids...>::value, "Grids must be ordered w.r.t the dimension in descending order!"); //! the i-th grid type template<std::size_t id> using Grid = typename std::tuple_element_t<id, std::tuple<Grids...>>; @@ -284,8 +284,8 @@ template<typename... Grids> class FacetCouplingGridManager { // make sure all grids have the same world dimension and are ordered in descending dimension - static_assert(Detail::FulfillConditions<false, Grids...>::value, "All grids must have the same world dimension!"); - static_assert(Detail::FulfillConditions<true, Grids...>::value, "Grids must be ordered w.r.t the dimension in descending order!"); + static_assert(FCGridManagerChecks::FulfillConditions<false, Grids...>::value, "All grids must have the same world dimension!"); + static_assert(FCGridManagerChecks::FulfillConditions<true, Grids...>::value, "Grids must be ordered w.r.t the dimension in descending order!"); // we use a wrapper class for the grid data containing the data on all grids using GridDataWrapper = FacetCouplingGridDataWrapper<Grids...>; diff --git a/test/multidomain/facet/1p_1p/gravity/CMakeLists.txt b/test/multidomain/facet/1p_1p/gravity/CMakeLists.txt index 50a1bded8f6452a4a4f74c14242929aa7ce36aec..bb7170d24cf78741b6ce42fbba0399bc2a171977 100644 --- a/test/multidomain/facet/1p_1p/gravity/CMakeLists.txt +++ b/test/multidomain/facet/1p_1p/gravity/CMakeLists.txt @@ -8,27 +8,64 @@ target_compile_definitions(test_md_facet_1p1p_gravity_tpfa LOWDIMGRIDTYPE=Dune::FoamGrid<1,2> BULKGRIDTYPE=Dune::ALUGrid<2,2,Dune::cube,Dune::nonconforming>) +add_executable(test_md_facet_1p1p_gravity_mpfa EXCLUDE_FROM_ALL main.cc) +target_compile_definitions(test_md_facet_1p1p_gravity_mpfa + PUBLIC BULKTYPETAG=OnePBulkMpfa + LOWDIMTYPETAG=OnePLowDimMpfa + LOWDIMGRIDTYPE=Dune::FoamGrid<1,2> + BULKGRIDTYPE=Dune::ALUGrid<2,2,Dune::cube,Dune::nonconforming>) + dune_add_test(NAME test_md_facet_1p1p_gravity_xi1_tpfa LABELS multidomain CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" TARGET test_md_facet_1p1p_gravity_tpfa COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py CMD_ARGS --script fuzzy - --files ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_bulk-00000.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_bulk-00001.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_lowdim-00000.vtp - ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_lowdim-00001.vtp - --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_tpfa params.input") + --files ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_tpfa_bulk-00000.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_tpfa_bulk-00001.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_tpfa_lowdim-00000.vtp + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_tpfa_lowdim-00001.vtp + --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_tpfa params.input \ + -Vtk.OutputName test_md_facet_1p1p_gravity_xi1_tpfa") -dune_add_test(NAME test_facet_1p1p_gravity_xi066_tpfa +dune_add_test(NAME test_md_facet_1p1p_gravity_xi066_tpfa LABELS multidomain CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" TARGET test_md_facet_1p1p_gravity_tpfa COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py CMD_ARGS --script fuzzy - --files ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_bulk-00000.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_bulk-00001.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_lowdim-00000.vtp - ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_lowdim-00001.vtp + --files ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_tpfa_bulk-00000.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_tpfa_bulk-00001.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_tpfa_lowdim-00000.vtp + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_tpfa_lowdim-00001.vtp --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_tpfa params.input \ - -FacetCoupling.Xi 0.66 -Vtk.OutputName test_md_facet_1p1p_gravity_xi066") + -FacetCoupling.Xi 0.66 -Vtk.OutputName test_md_facet_1p1p_gravity_xi066_tpfa") + + + +dune_add_test(NAME test_md_facet_1p1p_gravity_xi1_mpfa + LABELS multidomain + CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" + TARGET test_md_facet_1p1p_gravity_mpfa + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_mpfa_bulk-00000.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_mpfa_bulk-00001.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_mpfa_lowdim-00000.vtp + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi1_mpfa_lowdim-00001.vtp + --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_mpfa params.input \ + -Vtk.OutputName test_md_facet_1p1p_gravity_xi1_mpfa") + +dune_add_test(NAME test_md_facet_1p1p_gravity_xi066_mpfa + LABELS multidomain + CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" + TARGET test_md_facet_1p1p_gravity_mpfa + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_mpfa_bulk-00000.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_mpfa_bulk-00001.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_mpfa_lowdim-00000.vtp + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_xi066_mpfa_lowdim-00001.vtp + --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_gravity_mpfa params.input \ + -FacetCoupling.Xi 0.66 + -Vtk.OutputName test_md_facet_1p1p_gravity_xi066_mpfa") diff --git a/test/multidomain/facet/1p_1p/gravity/main.cc b/test/multidomain/facet/1p_1p/gravity/main.cc index 860c1e5136d1f0ee5c3675bded23a12b4369509c..2427a2d5b1c7c553eafc15bbf069cfcb8ca1a147 100644 --- a/test/multidomain/facet/1p_1p/gravity/main.cc +++ b/test/multidomain/facet/1p_1p/gravity/main.cc @@ -67,9 +67,11 @@ namespace Properties { // set cm property in the sub-problems using TpfaTraits = TestTraits<TTag::OnePBulkTpfa, TTag::OnePLowDimTpfa>; +using MpfaTraits = TestTraits<TTag::OnePBulkMpfa, TTag::OnePLowDimMpfa>; template<class TypeTag> struct CouplingManager<TypeTag, TTag::OnePBulkTpfa> { using type = typename TpfaTraits::CouplingManager; }; template<class TypeTag> struct CouplingManager<TypeTag, TTag::OnePLowDimTpfa> { using type = typename TpfaTraits::CouplingManager; }; - +template<class TypeTag> struct CouplingManager<TypeTag, TTag::OnePBulkMpfa> { using type = typename MpfaTraits::CouplingManager; }; +template<class TypeTag> struct CouplingManager<TypeTag, TTag::OnePLowDimMpfa> { using type = typename MpfaTraits::CouplingManager; }; } // end namespace Properties } // end namespace Dumux diff --git a/test/multidomain/facet/1p_1p/gravity/problem_bulk.hh b/test/multidomain/facet/1p_1p/gravity/problem_bulk.hh index 3d42f9c0612803f643db6ed1bda524c4003703aa..a029617b91129ceec18f1eb51d9386112d401cc2 100644 --- a/test/multidomain/facet/1p_1p/gravity/problem_bulk.hh +++ b/test/multidomain/facet/1p_1p/gravity/problem_bulk.hh @@ -31,6 +31,7 @@ #include <dumux/multidomain/facet/box/properties.hh> #include <dumux/multidomain/facet/cellcentered/tpfa/properties.hh> +#include <dumux/multidomain/facet/cellcentered/mpfa/properties.hh> #include <dumux/porousmediumflow/problem.hh> #include <dumux/porousmediumflow/1p/model.hh> @@ -51,6 +52,7 @@ namespace Properties { namespace TTag { struct OnePBulk { using InheritsFrom = std::tuple<OneP>; }; struct OnePBulkTpfa { using InheritsFrom = std::tuple<CCTpfaFacetCouplingModel, OnePBulk>; }; +struct OnePBulkMpfa { using InheritsFrom = std::tuple<CCMpfaFacetCouplingModel, OnePBulk>; }; } // end namespace TTag // Set the grid type diff --git a/test/multidomain/facet/1p_1p/gravity/problem_lowdim.hh b/test/multidomain/facet/1p_1p/gravity/problem_lowdim.hh index 069a7ed1a31b04d6b9f4dc6e426a42d44fae738f..a2f1c82933bcfb1e1e3ffd43c620420f935ad348 100644 --- a/test/multidomain/facet/1p_1p/gravity/problem_lowdim.hh +++ b/test/multidomain/facet/1p_1p/gravity/problem_lowdim.hh @@ -52,6 +52,9 @@ namespace Properties { namespace TTag { struct OnePLowDim { using InheritsFrom = std::tuple<OneP>; }; struct OnePLowDimTpfa { using InheritsFrom = std::tuple<OnePLowDim, CCTpfaModel>; }; + +// we need an additional type tag for the test using mpfa in the bulk domain +struct OnePLowDimMpfa { using InheritsFrom = std::tuple<OnePLowDim, CCTpfaModel>; }; } // end namespace TTag // Set the grid type diff --git a/test/multidomain/facet/1p_1p/linearprofile/CMakeLists.txt b/test/multidomain/facet/1p_1p/linearprofile/CMakeLists.txt index 251a1dc764234ef900269f7c1a4e4ae1184acc62..01ec53a3247d226a29217f7245c4292844321ed6 100644 --- a/test/multidomain/facet/1p_1p/linearprofile/CMakeLists.txt +++ b/test/multidomain/facet/1p_1p/linearprofile/CMakeLists.txt @@ -14,6 +14,20 @@ target_compile_definitions(test_md_facet_1p1p_linearprofile_surface_tpfa LOWDIMGRIDTYPE=Dune::FoamGrid<1,3> BULKGRIDTYPE=Dune::ALUGrid<2,3,Dune::cube,Dune::nonconforming>) +add_executable(test_md_facet_1p1p_linearprofile_mpfa EXCLUDE_FROM_ALL main.cc) +target_compile_definitions(test_md_facet_1p1p_linearprofile_mpfa + PUBLIC BULKTYPETAG=OnePBulkMpfa + LOWDIMTYPETAG=OnePLowDimMpfa + LOWDIMGRIDTYPE=Dune::FoamGrid<1,2> + BULKGRIDTYPE=Dune::ALUGrid<2,2,Dune::cube,Dune::nonconforming>) + +add_executable(test_md_facet_1p1p_linearprofile_surface_mpfa EXCLUDE_FROM_ALL main.cc) +target_compile_definitions(test_md_facet_1p1p_linearprofile_surface_mpfa + PUBLIC BULKTYPETAG=OnePBulkMpfa + LOWDIMTYPETAG=OnePLowDimMpfa + LOWDIMGRIDTYPE=Dune::FoamGrid<1,3> + BULKGRIDTYPE=Dune::ALUGrid<2,3,Dune::cube,Dune::nonconforming>) + dune_add_test(NAME test_md_facet_1p1p_linearprofile_xi1_tpfa LABELS multidomain CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" @@ -66,3 +80,57 @@ dune_add_test(NAME test_md_facet_1p1p_linearprofile_surface_xi066_tpfa --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_surface_tpfa params.input \ -FacetCoupling.Xi 0.66 \ -Vtk.OutputName test_md_facet_1p1p_linearprofile_surface_xi066_tpfa") + +dune_add_test(NAME test_md_facet_1p1p_linearprofile_xi1_mpfa + LABELS multidomain + CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" + TARGET test_md_facet_1p1p_linearprofile_mpfa + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_1p1p_linearprofile_tpfa_bulk-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_xi1_mpfa_bulk-00001.vtu + ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_1p1p_linearprofile_tpfa_lowdim-reference.vtp + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_xi1_mpfa_lowdim-00001.vtp + --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_mpfa params.input \ + -Vtk.OutputName test_md_facet_1p1p_linearprofile_xi1_mpfa") + +dune_add_test(NAME test_md_facet_1p1p_linearprofile_xi066_mpfa + LABELS multidomain + CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" + TARGET test_md_facet_1p1p_linearprofile_mpfa + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_1p1p_linearprofile_tpfa_bulk-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_xi066_mpfa_bulk-00001.vtu + ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_1p1p_linearprofile_tpfa_lowdim-reference.vtp + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_xi066_mpfa_lowdim-00001.vtp + --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_mpfa params.input \ + -FacetCoupling.Xi 0.66 \ + -Vtk.OutputName test_md_facet_1p1p_linearprofile_xi066_mpfa") + +dune_add_test(NAME test_md_facet_1p1p_linearprofile_surface_xi1_mpfa + LABELS multidomain + CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" + TARGET test_md_facet_1p1p_linearprofile_surface_mpfa + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_1p1p_linearprofile_surface_tpfa_bulk-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_surface_xi1_mpfa_bulk-00001.vtu + ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_1p1p_linearprofile_surface_tpfa_lowdim-reference.vtp + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_surface_xi1_mpfa_lowdim-00001.vtp + --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_surface_mpfa params.input \ + -Vtk.OutputName test_md_facet_1p1p_linearprofile_surface_xi1_mpfa") + +dune_add_test(NAME test_md_facet_1p1p_linearprofile_surface_xi066_mpfa + LABELS multidomain + CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" + TARGET test_md_facet_1p1p_linearprofile_surface_mpfa + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_1p1p_linearprofile_surface_tpfa_bulk-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_surface_xi066_mpfa_bulk-00001.vtu + ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_1p1p_linearprofile_surface_tpfa_lowdim-reference.vtp + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_surface_xi066_mpfa_lowdim-00001.vtp + --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_1p1p_linearprofile_surface_mpfa params.input \ + -FacetCoupling.Xi 0.66 \ + -Vtk.OutputName test_md_facet_1p1p_linearprofile_surface_xi066_mpfa") diff --git a/test/multidomain/facet/1p_1p/linearprofile/grids/linear.geo b/test/multidomain/facet/1p_1p/linearprofile/grids/linear.geo deleted file mode 100644 index 98e981970ce4ece29a9825ea354ffc57254c95b3..0000000000000000000000000000000000000000 --- a/test/multidomain/facet/1p_1p/linearprofile/grids/linear.geo +++ /dev/null @@ -1,34 +0,0 @@ -// domain measures -xmax = 3.0; -ymax = 1.0; - -// use zmax != 0 to produce a surface grid -zmax = 0.0; - -// discretization specifics -numCellsX = 120; -numCellsY = 40; - -Point(1) = {0.0, 0.0, 0.0}; -Point(2) = {xmax/2.0, 0.0, zmax/2.0}; -Point(3) = {xmax, 0.0, zmax}; -Point(4) = {xmax, ymax, zmax}; -Point(5) = {xmax/2.0,ymax, zmax/2.0}; -Point(6) = {0.0, ymax, 0.0}; - -Line(1) = {1, 2}; Transfinite Line{1} = numCellsX/2; -Line(2) = {2, 3}; Transfinite Line{2} = numCellsX/2; -Line(3) = {3, 4}; Transfinite Line{3} = numCellsY; -Line(4) = {4, 5}; Transfinite Line{4} = numCellsX/2; -Line(5) = {5, 6}; Transfinite Line{5} = numCellsX/2; -Line(6) = {6, 1}; Transfinite Line{6} = numCellsY; -Line(7) = {2, 5}; Transfinite Line{7} = numCellsY; - -Line Loop(1) = {1, 7, 5, 6}; -Line Loop(2) = {2, 3, 4, -7}; -Plane Surface(1) = {1}; -Plane Surface(2) = {2}; -Physical Line(1) = {7}; -Physical Surface(1) = {1, 2}; -Transfinite Surface "*"; -Recombine Surface "*"; diff --git a/test/multidomain/facet/1p_1p/linearprofile/main.cc b/test/multidomain/facet/1p_1p/linearprofile/main.cc index 385cb4b3dc4c53acb21b263a2d186a99ad7a306f..5bab625497b569af6af43de13d37dde9b84e8445 100644 --- a/test/multidomain/facet/1p_1p/linearprofile/main.cc +++ b/test/multidomain/facet/1p_1p/linearprofile/main.cc @@ -66,9 +66,11 @@ namespace Properties { // set cm property in the sub-problems using TpfaTraits = TestTraits<TTag::OnePBulkTpfa, TTag::OnePLowDimTpfa>; +using MpfaTraits = TestTraits<TTag::OnePBulkMpfa, TTag::OnePLowDimMpfa>; template<class TypeTag> struct CouplingManager<TypeTag, TTag::OnePBulkTpfa> { using type = typename TpfaTraits::CouplingManager; }; template<class TypeTag> struct CouplingManager<TypeTag, TTag::OnePLowDimTpfa> { using type = typename TpfaTraits::CouplingManager; }; - +template<class TypeTag> struct CouplingManager<TypeTag, TTag::OnePBulkMpfa> { using type = typename MpfaTraits::CouplingManager; }; +template<class TypeTag> struct CouplingManager<TypeTag, TTag::OnePLowDimMpfa> { using type = typename MpfaTraits::CouplingManager; }; } // end namespace Properties } // end namespace Dumux diff --git a/test/multidomain/facet/1p_1p/linearprofile/problem_bulk.hh b/test/multidomain/facet/1p_1p/linearprofile/problem_bulk.hh index 9c05b4d0e4c25e2f17bf87a2143ee9ffbe1ef2cb..9d97606c64014315d540202aec8dd2dfe7ee5ab5 100644 --- a/test/multidomain/facet/1p_1p/linearprofile/problem_bulk.hh +++ b/test/multidomain/facet/1p_1p/linearprofile/problem_bulk.hh @@ -31,6 +31,7 @@ #include <dumux/multidomain/facet/box/properties.hh> #include <dumux/multidomain/facet/cellcentered/tpfa/properties.hh> +#include <dumux/multidomain/facet/cellcentered/mpfa/properties.hh> #include <dumux/porousmediumflow/problem.hh> #include <dumux/porousmediumflow/1p/model.hh> @@ -52,6 +53,7 @@ namespace Properties { namespace TTag { struct OnePBulk { using InheritsFrom = std::tuple<OneP>; }; struct OnePBulkTpfa { using InheritsFrom = std::tuple<CCTpfaFacetCouplingModel, OnePBulk>; }; +struct OnePBulkMpfa { using InheritsFrom = std::tuple<CCMpfaFacetCouplingModel, OnePBulk>; }; } // end namespace TTag // Set the grid type diff --git a/test/multidomain/facet/1p_1p/linearprofile/problem_lowdim.hh b/test/multidomain/facet/1p_1p/linearprofile/problem_lowdim.hh index dd77c2e7a7894750c86b6ff6683bbd8ac16363d3..73ce6e708b2e4087fa2fb3906dfd3060f5b87d21 100644 --- a/test/multidomain/facet/1p_1p/linearprofile/problem_lowdim.hh +++ b/test/multidomain/facet/1p_1p/linearprofile/problem_lowdim.hh @@ -52,6 +52,9 @@ namespace Properties { namespace TTag { struct OnePLowDim { using InheritsFrom = std::tuple<OneP>; }; struct OnePLowDimTpfa { using InheritsFrom = std::tuple<OnePLowDim, CCTpfaModel>; }; + +// for the test using mpfa in the bulk domain we need an additional type tag +struct OnePLowDimMpfa { using InheritsFrom = std::tuple<OnePLowDim, CCTpfaModel>; }; } // end namespace TTag // Set the grid type diff --git a/test/multidomain/facet/CMakeLists.txt b/test/multidomain/facet/CMakeLists.txt index fab4a712a60b417e065500c9e43d82f438c321ad..d5776afddb3af7870d34865025ac963b27855fc8 100644 --- a/test/multidomain/facet/CMakeLists.txt +++ b/test/multidomain/facet/CMakeLists.txt @@ -35,6 +35,24 @@ dune_add_test(NAME test_facetcouplingmapper_tpfa_ug COMMAND ./test_facetcouplingmapper_tpfa_ug CMD_ARGS test_gridmanager.input) +dune_add_test(NAME test_facetcouplingmapper_mpfa_alu + LABELS multidomain + CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" + COMPILE_DEFINITIONS BULKGRIDTYPE=Dune::ALUGrid<3,3,Dune::simplex,Dune::conforming> + COMPILE_DEFINITIONS USEMPFAINBULK=true + SOURCES test_facetcouplingmapper.cc + COMMAND ./test_facetcouplingmapper_mpfa_alu + CMD_ARGS test_gridmanager.input) + +dune_add_test(NAME test_facetcouplingmapper_mpfa_ug + LABELS multidomain + CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" + COMPILE_DEFINITIONS BULKGRIDTYPE=Dune::UGGrid<3> + COMPILE_DEFINITIONS USEMPFAINBULK=true + SOURCES test_facetcouplingmapper.cc + COMMAND ./test_facetcouplingmapper_mpfa_ug + CMD_ARGS test_gridmanager.input) + dune_add_test(NAME test_facetcouplingmapper_box_alu LABELS multidomain CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" diff --git a/test/multidomain/facet/test_facetcouplingmapper.cc b/test/multidomain/facet/test_facetcouplingmapper.cc index 91a7dd8d3e67622f10ab637f14b0f2beaa3e62c0..bb903d4b7e02c0ea36ca8367e7bbee9db27591a8 100644 --- a/test/multidomain/facet/test_facetcouplingmapper.cc +++ b/test/multidomain/facet/test_facetcouplingmapper.cc @@ -19,7 +19,7 @@ /*! * \file * \ingroup FacetTests - * \brief Tests the grid creator class for models using facet coupling. + * \brief Tests the coupling mapper class for models using facet coupling. */ #include <config.h> @@ -36,6 +36,10 @@ #include <dumux/common/parameters.hh> #include <dumux/discretization/method.hh> #include <dumux/discretization/cellcentered/tpfa/fvgridgeometry.hh> +#include <dumux/discretization/cellcentered/mpfa/fvgridgeometry.hh> +#include <dumux/discretization/cellcentered/mpfa/fvgridgeometrytraits.hh> +#include <dumux/discretization/cellcentered/mpfa/dualgridindexset.hh> +#include <dumux/discretization/cellcentered/mpfa/omethod/interactionvolume.hh> #include <dumux/multidomain/facet/box/fvgridgeometry.hh> #include <dumux/multidomain/facet/gridmanager.hh> #include <dumux/multidomain/facet/couplingmapper.hh> @@ -49,7 +53,25 @@ #define USEBOXINBULK 0 #endif -//! Computes the average distance of corners to the center of a geometry. +#ifndef USEMPFAINBULK // default to tpfa if not specified otherwise +#define USEMPFAINBULK 0 +#endif + +//! Helper class to define the MpfaFVGridGeometry +template<class GridView> +struct MpfaGridGeometryTraits +{ +private: + using NITraits = Dumux::NodalIndexSetDefaultTraits< GridView >; + using IndexSet = Dumux::CCMpfaDualGridNodalIndexSet< NITraits >; + using IVTraits = Dumux::CCMpfaODefaultInteractionVolumeTraits< IndexSet, double >; + using IV = Dumux::CCMpfaOInteractionVolume< IVTraits >; + using GGTraits = Dumux::CCMpfaFVGridGeometryTraits<GridView, IndexSet, IV, IV>; +public: + using type = Dumux::CCMpfaFVGridGeometry<GridView, GGTraits, /*enableCache*/true>; +}; + +//! Computes the average distance of corners to the center of a geometry template<class Geometry> typename Geometry::ctype averageCornerDistance(const Geometry& geometry) { @@ -76,7 +98,7 @@ void checkScvfEmbedment(const Scvf& scvf, const LowDimGeom& lowDimGeom) //! Updates a tpfa finite volume grid geometry. template< class BulkFVG, class FacetFVG, class GridManager, - std::enable_if_t<BulkFVG::discMethod == Dumux::DiscretizationMethod::cctpfa, int> = 0 > + std::enable_if_t<BulkFVG::discMethod != Dumux::DiscretizationMethod::box, int> = 0 > void updateBulkFvGeometry(BulkFVG& bulkFVG, const FacetFVG& facetFVG, const GridManager& gm) { bulkFVG.update(); @@ -109,10 +131,17 @@ int main (int argc, char *argv[]) try gridManager.init(); // instantiate the grid geometries with caching + static_assert(!USEBOXINBULK || !USEMPFAINBULK, "Bulk discretization method not uniquely defined"); + using BulkGridView = typename BulkGrid::LeafGridView; + using TpfaFVGridGeometry = Dumux::CCTpfaFVGridGeometry<BulkGridView, /*caching*/true>; + using MpfaFVGridGeometry = typename MpfaGridGeometryTraits<BulkGridView>::type; + using BoxFVGridGeometry = Dumux::BoxFacetCouplingFVGridGeometry<double, BulkGridView, true>; using BulkFVGridGeometry = typename std::conditional< USEBOXINBULK, - Dumux::BoxFacetCouplingFVGridGeometry<double, BulkGridView, true>, - Dumux::CCTpfaFVGridGeometry<BulkGridView, /*caching*/true> >::type; + BoxFVGridGeometry, + typename std::conditional<USEMPFAINBULK, + MpfaFVGridGeometry, + TpfaFVGridGeometry>::type >::type; BulkFVGridGeometry bulkFvGeometry( gridManager.grid<0>().leafGridView() ); using FacetGridView = typename FacetGrid::LeafGridView; @@ -148,10 +177,16 @@ int main (int argc, char *argv[]) try // check both the map from the bulk facet as well as from the hierarchy mapper const auto& bulkFacetMap = i == 0 ? bulkFacetMapper.couplingMap(bulkDomainId, facetDomainId) : hierarchyMapper.couplingMap(bulkDomainId, facetDomainId); - if (bulkFacetMap.size() != 56) - DUNE_THROW(Dune::InvalidStateException, "BulkFacetMap has " << bulkFacetMap.size() << " instead of 56 entries"); + + const std::size_t expectedNoEntries = USEMPFAINBULK ? 263 : 56; + if (bulkFacetMap.size() != expectedNoEntries) + DUNE_THROW(Dune::InvalidStateException, "BulkFacetMap has " << bulkFacetMap.size() << " instead of " << expectedNoEntries << " entries"); else - std::cout << "Found 56 entries in bulk-facet map" << std::endl; + std::cout << "Found " << expectedNoEntries << " entries in bulk-facet map" << std::endl; + + // The rest is too cumbersome to test for mpfa + if (USEMPFAINBULK) + continue; std::size_t singleCouplings = 0; std::size_t doubleCouplings = 0; @@ -214,11 +249,15 @@ int main (int argc, char *argv[]) try { const auto lowDimGeom = facetFvGeometry.element(entry.first).geometry(); - const auto cStencilSize = entry.second.couplingStencil.size(); - const std::vector<unsigned int> possibleStencilSizes = USEBOXINBULK ? std::vector<unsigned int>{6, 7, 8} - : std::vector<unsigned int>{2}; - if ( !std::count(possibleStencilSizes.begin(), possibleStencilSizes.end(), cStencilSize) ) - DUNE_THROW(Dune::InvalidStateException, "Coupling stencil size of " << cStencilSize << " is invalid"); + // stencil sizes are too cumbersome to test for mpfa + if (!USEMPFAINBULK) + { + const auto cStencilSize = entry.second.couplingStencil.size(); + const std::vector<unsigned int> possibleStencilSizes = USEBOXINBULK ? std::vector<unsigned int>{6, 7, 8} + : std::vector<unsigned int>{2}; + if ( !std::count(possibleStencilSizes.begin(), possibleStencilSizes.end(), cStencilSize) ) + DUNE_THROW(Dune::InvalidStateException, "Coupling stencil size of " << cStencilSize << " is invalid"); + } for (const auto& embedment : entry.second.embedments) { diff --git a/test/multidomain/facet/test_facetcouplingmapper_boundary.cc b/test/multidomain/facet/test_facetcouplingmapper_boundary.cc index 16c8aed12e9a4b56b07b9e9ee00f5e9316ef3703..5f42fea4712f1f0896bb024692a89db670d1cc1b 100644 --- a/test/multidomain/facet/test_facetcouplingmapper_boundary.cc +++ b/test/multidomain/facet/test_facetcouplingmapper_boundary.cc @@ -19,7 +19,7 @@ /*! * \file * \ingroup FacetTests - * \brief Tests the grid creator class for models using facet coupling. + * \brief Tests the coupling mapper class for models using facet coupling. */ #include <config.h> diff --git a/test/multidomain/facet/test_gridmanager.cc b/test/multidomain/facet/test_gridmanager.cc index c5b91dbab4a61ff01cd6675ed030b1ca43f7ec5e..8a14d9725c81aeca4a06c7a934ed047ea96b9971 100644 --- a/test/multidomain/facet/test_gridmanager.cc +++ b/test/multidomain/facet/test_gridmanager.cc @@ -19,7 +19,7 @@ /*! * \file * \ingroup FacetTests - * \brief Tests the grid creator class for models using facet coupling. + * \brief Tests the grid manager class for models using facet coupling. */ #include <config.h> diff --git a/test/multidomain/facet/test_vertexmapper.cc b/test/multidomain/facet/test_vertexmapper.cc index 1c155597feb009b378a8b3737e577ef44ff12b91..7a0c07b05ddbb65fbeb446e05fc33ac225590253 100644 --- a/test/multidomain/facet/test_vertexmapper.cc +++ b/test/multidomain/facet/test_vertexmapper.cc @@ -19,7 +19,7 @@ /*! * \file * \ingroup FacetTests - * \brief Tests the grid creator class for models using facet coupling. + * \brief Tests the vertex mapper class for models using facet coupling. */ #include <config.h> diff --git a/test/multidomain/facet/tracer_tracer/CMakeLists.txt b/test/multidomain/facet/tracer_tracer/CMakeLists.txt index 7a47170bd1f5c02f9a8372c1201dcd928ae29279..cfdb893ce248f652f8e69856eab6b8bcc52f623a 100644 --- a/test/multidomain/facet/tracer_tracer/CMakeLists.txt +++ b/test/multidomain/facet/tracer_tracer/CMakeLists.txt @@ -21,6 +21,27 @@ dune_add_test(NAME test_md_facet_tracertracer_tpfa --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_tracertracer_tpfa params.input \ -Vtk.OutputName test_md_facet_tracertracer_tpfa") +dune_add_test(NAME test_md_facet_tracertracer_mpfa + LABELS multidomain + SOURCES main.cc + COMPILE_DEFINITIONS ONEPBULKTYPETAG=OnePBulkMpfa + COMPILE_DEFINITIONS ONEPLOWDIMTYPETAG=OnePLowDimMpfa + COMPILE_DEFINITIONS TRACERBULKTYPETAG=TracerBulkMpfa + COMPILE_DEFINITIONS TRACERLOWDIMTYPETAG=TracerLowDimMpfa + CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )" + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_tracertracer_mpfa_onep_bulk-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_tracertracer_mpfa_onep_bulk-00000.vtu + ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_tracertracer_mpfa_onep_lowdim-reference.vtp + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_tracertracer_mpfa_onep_lowdim-00000.vtp + ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_tracertracer_mpfa_tracer_bulk-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_tracertracer_mpfa_tracer_bulk-00010.vtu + ${CMAKE_SOURCE_DIR}/test/references/test_md_facet_tracertracer_mpfa_tracer_lowdim-reference.vtp + ${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_tracertracer_mpfa_tracer_lowdim-00010.vtp + --command "${CMAKE_CURRENT_BINARY_DIR}/test_md_facet_tracertracer_mpfa params.input \ + -Vtk.OutputName test_md_facet_tracertracer_mpfa") + dune_add_test(NAME test_md_facet_tracertracer_box LABELS multidomain SOURCES main.cc diff --git a/test/multidomain/facet/tracer_tracer/main.cc b/test/multidomain/facet/tracer_tracer/main.cc index 7763851b360ba71e3c1b7b72f4c67529aca4f6e0..9523a4f844093986f2914b76c2f74beb1cbf71f8 100644 --- a/test/multidomain/facet/tracer_tracer/main.cc +++ b/test/multidomain/facet/tracer_tracer/main.cc @@ -97,6 +97,18 @@ struct CouplingManager<TypeTag, TTag::TracerBulkTpfa> { using type = typename Tp template<class TypeTag> struct CouplingManager<TypeTag, TTag::TracerLowDimTpfa> { using type = typename TpfaTracerTraits::CouplingManager; }; +// set cm property for the mpfa test +using MpfaTraits = TestTraits<Properties::TTag::OnePBulkMpfa, Properties::TTag::OnePLowDimMpfa>; +using MpfaTracerTraits = TestTraits<Properties::TTag::TracerBulkMpfa, Properties::TTag::TracerLowDimMpfa>; +template<class TypeTag> +struct CouplingManager<TypeTag, TTag::OnePBulkMpfa> { using type = typename MpfaTraits::CouplingManager; }; +template<class TypeTag> +struct CouplingManager<TypeTag, TTag::OnePLowDimMpfa> { using type = typename MpfaTraits::CouplingManager; }; +template<class TypeTag> +struct CouplingManager<TypeTag, TTag::TracerBulkMpfa> { using type = typename MpfaTracerTraits::CouplingManager; }; +template<class TypeTag> +struct CouplingManager<TypeTag, TTag::TracerLowDimMpfa> { using type = typename MpfaTracerTraits::CouplingManager; }; + } // end namespace Properties } // end namespace Dumux diff --git a/test/multidomain/facet/tracer_tracer/problem_1p_bulk.hh b/test/multidomain/facet/tracer_tracer/problem_1p_bulk.hh index af08f05f68346cc0e2bf170c6b7c56d4556f0ca2..b46b0ad6c15994f81ed69bcf4c5b710868337f35 100644 --- a/test/multidomain/facet/tracer_tracer/problem_1p_bulk.hh +++ b/test/multidomain/facet/tracer_tracer/problem_1p_bulk.hh @@ -33,6 +33,7 @@ #include <dumux/multidomain/facet/box/properties.hh> #include <dumux/multidomain/facet/cellcentered/tpfa/properties.hh> +#include <dumux/multidomain/facet/cellcentered/mpfa/properties.hh> #include <dumux/porousmediumflow/problem.hh> #include <dumux/porousmediumflow/1p/model.hh> @@ -49,6 +50,7 @@ namespace Properties { namespace TTag { struct OnePBulk { using InheritsFrom = std::tuple<OneP>; }; struct OnePBulkTpfa { using InheritsFrom = std::tuple<CCTpfaFacetCouplingModel, OnePBulk>; }; +struct OnePBulkMpfa { using InheritsFrom = std::tuple<CCMpfaFacetCouplingModel, OnePBulk>; }; struct OnePBulkBox { using InheritsFrom = std::tuple<BoxFacetCouplingModel, OnePBulk>; }; } // end namespace TTag diff --git a/test/multidomain/facet/tracer_tracer/problem_1p_lowdim.hh b/test/multidomain/facet/tracer_tracer/problem_1p_lowdim.hh index 4c4854d4f982fc75f572556e61abad55fc7cb4c5..8794e7c11130f9d9a33fc8f5e7ff77f3c173c33b 100644 --- a/test/multidomain/facet/tracer_tracer/problem_1p_lowdim.hh +++ b/test/multidomain/facet/tracer_tracer/problem_1p_lowdim.hh @@ -49,6 +49,7 @@ namespace Properties { namespace TTag { struct OnePLowDim { using InheritsFrom = std::tuple<OneP>; }; struct OnePLowDimTpfa { using InheritsFrom = std::tuple<OnePLowDim, CCTpfaModel>; }; +struct OnePLowDimMpfa { using InheritsFrom = std::tuple<OnePLowDim, CCTpfaModel>; }; struct OnePLowDimBox { using InheritsFrom = std::tuple<OnePLowDim, BoxModel>; }; } // end namespace TTag diff --git a/test/multidomain/facet/tracer_tracer/problem_tracer_bulk.hh b/test/multidomain/facet/tracer_tracer/problem_tracer_bulk.hh index d073fe1b53a2533e3579ec57ff48fc0991ec9c0d..414f6bbed0a98e7c5226c27184b02decabbe64b4 100644 --- a/test/multidomain/facet/tracer_tracer/problem_tracer_bulk.hh +++ b/test/multidomain/facet/tracer_tracer/problem_tracer_bulk.hh @@ -29,6 +29,7 @@ #include <dumux/multidomain/facet/box/properties.hh> #include <dumux/multidomain/facet/cellcentered/tpfa/properties.hh> +#include <dumux/multidomain/facet/cellcentered/mpfa/properties.hh> #include <dumux/porousmediumflow/tracer/model.hh> #include <dumux/porousmediumflow/problem.hh> @@ -51,6 +52,7 @@ struct TracerTestBulk { using InheritsFrom = std::tuple<Tracer>; }; // define the type tags struct TracerBulkTpfa { using InheritsFrom = std::tuple<CCTpfaFacetCouplingModel, TracerTestBulk>; }; +struct TracerBulkMpfa { using InheritsFrom = std::tuple<CCMpfaFacetCouplingModel, TracerTestBulk>; }; struct TracerBulkBox { using InheritsFrom = std::tuple<BoxFacetCouplingModel, TracerTestBulk>; }; } // end namespace TTag @@ -110,6 +112,7 @@ class TracerBulkProblem : public PorousMediumFlowProblem<TypeTag> using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices; using GridView = GetPropType<TypeTag, Properties::GridView>; using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using SubControlVolumeFace = typename FVGridGeometry::SubControlVolumeFace; using FVElementGeometry = typename FVGridGeometry::LocalView; using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>; using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>; @@ -157,6 +160,14 @@ public: return values; } + //! Specifies the type of interior boundary condition at a given position. + BoundaryTypes interiorBoundaryTypes(const Element& element, const SubControlVolumeFace& scvf) const + { + BoundaryTypes values; + values.setAllNeumann(); + return values; + } + /*! * \brief Evaluates the initial value for a control volume. * diff --git a/test/multidomain/facet/tracer_tracer/problem_tracer_lowdim.hh b/test/multidomain/facet/tracer_tracer/problem_tracer_lowdim.hh index 84f490fe0c398c354cd5826786260895637fb1c5..0517e652ae44193f406087e2e6ee79d025ae6bf7 100644 --- a/test/multidomain/facet/tracer_tracer/problem_tracer_lowdim.hh +++ b/test/multidomain/facet/tracer_tracer/problem_tracer_lowdim.hh @@ -51,6 +51,7 @@ struct TracerTestLowDim { using InheritsFrom = std::tuple<Tracer>; }; // define the type tags for both bulk and lowdim type tag here struct TracerLowDimTpfa { using InheritsFrom = std::tuple<TracerTestLowDim, CCTpfaModel>; }; +struct TracerLowDimMpfa { using InheritsFrom = std::tuple<TracerTestLowDim, CCTpfaModel>; }; struct TracerLowDimBox { using InheritsFrom = std::tuple<TracerTestLowDim, BoxModel>; }; } // end namespace TTag diff --git a/test/references/test_md_facet_tracertracer_mpfa_onep_bulk-reference.vtu b/test/references/test_md_facet_tracertracer_mpfa_onep_bulk-reference.vtu new file mode 100644 index 0000000000000000000000000000000000000000..d68ad7f420788188edf38182d8a3b34be71e316c --- /dev/null +++ b/test/references/test_md_facet_tracertracer_mpfa_onep_bulk-reference.vtu @@ -0,0 +1,1401 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian"> + <UnstructuredGrid> + <Piece NumberOfCells="1928" NumberOfPoints="999"> + <CellData Scalars="p"> + <DataArray type="Float32" Name="p" NumberOfComponents="1" format="ascii"> + 109531 109836 109194 108628 108860 109641 109304 108628 109075 108732 108245 107950 + 107641 107357 107116 107051 108268 108118 108023 107734 107522 107178 107657 106910 + 109804 109510 109535 109119 108795 109829 109682 109853 109147 109103 108801 108573 + 109342 108751 108656 108497 108147 108008 108518 108232 107733 107356 106939 107412 + 108118 108273 107792 108104 107767 107606 107238 107086 107110 106875 106708 106788 + 106502 106377 106220 106138 106118 105994 105896 105794 105986 105890 105750 105784 + 106630 106425 106273 106225 106625 106355 106129 105999 105899 105731 105799 106037 + 105900 105752 105769 105712 105545 105385 105256 105633 105472 105504 105655 105592 + 105336 105450 105368 105496 105330 105086 104826 105187 105191 105029 105252 105100 + 105081 104926 104683 104892 104976 104779 105642 105582 105613 105544 105458 105484 + 105377 105322 105440 105358 105659 105614 105547 105613 105550 105522 105464 105437 + 105361 105514 105464 105439 105242 105161 105143 105209 105306 104948 104725 104811 + 105035 105055 104770 105317 105166 105219 105368 105308 105209 105013 104888 105117 + 105128 104852 104947 106593 106191 106181 106695 105911 105658 105668 105601 105664 + 105574 105490 106373 105784 106535 106356 106100 105833 105547 105704 105821 105529 + 105540 105506 105487 105452 105427 105482 105437 105460 105485 105477 105459 105453 + 105446 105353 105312 105224 105373 105423 105342 105263 105057 105116 105206 105082 + 104960 105432 105423 105383 105356 105430 105422 105388 105233 105144 105285 105074 + 105284 105354 105110 105226 105451 105443 105434 105483 105563 105629 105499 105613 + 105561 105555 105426 105384 105421 105432 105424 105422 105361 105243 105307 105398 + 105289 105337 105458 105468 105439 105506 105499 105466 105390 105441 105417 105392 + 105460 105416 105435 109632 109775 109595 109290 108951 109152 108850 109817 109511 + 109487 109798 109069 108765 108446 108824 109121 108706 108381 108599 108305 108151 + 107613 108391 107791 107615 107318 106831 107201 107319 106977 106869 108244 107911 + 107680 107441 108122 107853 108078 107443 107625 107144 106919 107197 107217 107057 + 106743 106673 109592 109202 109790 109514 109047 109705 109052 108716 108952 108621 + 108283 108363 108151 107916 108664 108640 108321 107997 107824 109430 109707 108944 + 109370 108642 108784 109596 108379 108829 108420 107833 108233 107322 107220 108189 + 107904 108184 107827 107538 107415 107596 107421 107169 107681 107272 107274 106914 + 106989 106767 107078 107049 106817 106839 106713 106723 106704 107742 107709 107501 + 107519 107236 107255 107501 107566 107301 107193 106977 107100 106806 106810 106705 + 106521 106923 106865 106723 106632 106386 106619 107200 107144 107116 107073 106925 + 106838 106983 106914 106753 106869 106743 106695 106901 106749 106680 106616 106679 + 106708 106601 106638 106627 106593 106528 106567 106504 106574 106676 106571 106564 + 106501 106512 106502 106403 106362 106437 106416 106392 106361 106496 106453 106424 + 106415 106500 106532 106453 106495 106400 106370 106364 106351 106406 106369 106356 + 106821 106436 106268 106614 106659 106088 105973 105789 105974 105870 106264 106125 + 106017 105929 106526 106563 106365 106445 106491 106447 106345 106303 106278 106149 + 106086 105949 106007 106279 106194 106187 106135 106123 106074 106011 106087 105715 + 105852 105729 105786 105673 105585 105673 105629 105790 105913 105841 105706 105639 + 105681 105751 105693 105559 105522 105509 105576 105480 105474 105429 105447 105523 + 105500 105468 105614 105554 105667 105628 105602 105565 105497 105518 105546 105509 + 105556 105533 105901 105852 105982 105924 105769 105819 105738 105736 105841 105762 + 105895 105990 105955 105913 105812 105897 105829 105798 105687 105672 105635 105693 + 105671 105607 105580 105530 105590 105549 105637 105619 105576 105588 105736 105693 + 105753 105732 105668 105635 105617 105690 105627 105662 106387 106322 106350 106330 + 106276 106231 106290 106362 106293 106285 106270 106249 106262 106224 106236 106129 + 106212 106162 106086 106057 106022 106077 106192 106154 106193 106165 106132 106113 + 106040 106028 106106 106074 106043 106261 106280 106317 106327 106288 106272 106239 + 106216 106243 106188 106187 106324 106311 106267 106283 106326 106313 106267 106285 + 106218 106233 106217 106236 106188 106167 106188 106169 106121 106142 106131 106100 + 106074 106096 106029 106051 106086 106051 106037 106005 106166 106140 106111 106087 + 106112 106141 106086 106053 106057 106035 106039 105995 105972 105997 105959 105997 + 105928 106003 105920 105941 105866 105880 105835 105867 105976 105992 105976 105944 + 105892 105926 105856 105937 105882 105893 105805 105776 105746 105723 105781 105760 + 105717 105679 105671 105732 105726 105702 105691 105835 105810 105811 105790 105832 + 105852 105796 105821 105768 105748 105701 105754 105779 105731 105727 106006 105983 + 105960 105955 105996 105968 105926 105915 105872 105900 105868 105900 105864 105838 + 105834 105981 105951 105948 105920 105891 105939 105930 105897 105876 105860 105797 + 105826 105808 105794 105763 105862 105826 105813 105779 105811 105778 105745 105771 + 105724 105734 105746 105715 105688 105769 105737 105711 105720 105730 105680 105684 + 105710 105677 105672 105642 105648 105650 105618 105618 104533 104420 104673 104527 + 104246 104089 103826 103591 103266 104563 104484 104608 104295 104152 104584 104712 + 104414 104243 104413 103889 103794 103189 103463 104016 104036 103366 102902 102537 + 102021 101542 100801 102735 102567 102123 102925 101668 101392 101881 100810 104880 + 104734 104608 104942 104260 104682 104855 105050 104931 104984 104524 104613 103917 + 104290 104115 103644 103633 104204 104478 104020 105177 105099 104985 105211 105143 + 105172 104846 104906 105079 105342 105281 105304 105399 105385 105357 105181 105199 + 104706 104750 104183 104553 105041 105121 104816 102837 102217 103294 103458 102089 + 101127 104004 102940 104541 104763 104245 103079 101801 100351 100496 100727 105397 + 105444 105421 105431 105351 105373 105322 105379 105318 105461 105482 105414 105421 + 105476 105449 105361 105387 105386 105303 105264 105223 105278 105293 105221 105150 + 105121 105502 105454 105488 105544 105567 105511 105498 105427 105349 105373 105425 + 105456 105565 105529 105523 105596 105591 105553 105456 105493 105418 105544 105508 + 105485 105223 105362 105228 105307 105140 105009 105308 105429 105382 105213 105200 + 105087 105181 105079 104866 104697 104451 102206 104992 104785 104858 104613 104328 + 103830 104918 105093 104896 104764 104411 104113 103612 101366 102423 103584 102923 + 102187 105614 105646 105600 105657 105643 105618 105612 105568 105566 105510 105592 + 105546 105568 105652 105677 105633 105692 105682 105688 105652 105649 105592 105632 + 105612 105567 105612 105592 105616 105585 105393 105459 105503 105542 105471 105321 + 105336 105427 105488 105563 105594 105531 105566 105574 105518 105543 105549 105519 + 105504 105445 105477 105344 105402 105262 105695 105669 105663 105654 105637 105659 + 105667 105632 105621 105632 105630 105580 105625 105618 105616 105553 105642 105623 + 105600 105588 105595 105559 105583 105561 105606 105596 105603 105591 105582 105566 + 105589 105566 105439 105439 105329 105522 105327 105081 105238 105071 104969 104718 + 105498 105389 105299 105144 105550 105444 105333 105171 105004 104611 104790 105023 + 104774 105233 104938 105278 105434 105192 105362 104836 104360 105184 105402 104405 + 105211 105485 105406 105150 105298 104972 104807 105257 104975 105170 104264 104327 + 104128 103875 103105 101149 103928 102998 102441 101337 104890 104623 104262 104411 + 103556 104106 103597 104333 104086 104199 103258 103634 103272 102873 102242 101199 + 102557 102614 100871 100480 100605 109145 107519 107502 106975 107140 109133 108565 + 107955 107658 109688 108788 109428 108587 109495 108804 109143 106893 106839 107056 + 107784 107459 106912 106797 107009 107123 107390 108167 108197 107580 107939 108547 + 108014 107450 107858 107629 109810 109578 109208 108952 109586 109261 109834 109297 + 109627 108618 108348 108438 108979 108745 107997 108256 107836 108793 108497 109067 + 108097 108426 106757 106821 107068 106959 107044 106966 106641 106748 106817 106774 + 107263 107218 107464 107291 107178 107024 106959 106855 107227 107129 107015 106951 + 106996 106595 106624 106512 106577 106701 106712 106588 106647 106487 106437 106412 + 106527 106497 106432 106859 106791 106645 106798 106717 106586 106521 106474 106590 + 106670 106518 106495 107605 107405 107461 107851 107652 107121 107206 107359 107151 + 107621 108013 107749 107449 107389 107242 107462 107645 107336 106909 106924 107033 + 106847 106949 106672 106750 106567 106680 106566 106937 107199 107056 107000 106804 + 106699 106593 106839 106761 106627 109791 109518 109555 109833 109123 108893 108609 + 108419 108946 109222 108703 108452 109566 109565 109834 109227 108913 108664 109230 + 108915 108150 107971 107731 107365 107574 108261 108041 108217 107951 107847 107620 + 107243 107086 107252 107018 107104 106795 106663 106891 106863 106748 107418 107385 + 107185 107005 106708 106756 107030 106888 108376 108245 107800 107537 107936 108276 + 107824 107603 107151 107402 107221 107004 106894 106764 106987 107114 106882 107429 + 107217 107084 106926 106821 106821 106369 106338 106328 106285 106261 106352 106400 + 106260 106217 106225 106161 106167 106218 106201 106420 106371 106328 106286 106270 + 106351 106404 106291 106205 106231 106163 106142 106262 106222 106260 106191 106156 + 106136 106103 106085 106143 106104 106082 106045 106029 105996 105978 105945 105973 + 106021 105981 105943 106100 106040 106015 106080 106126 106091 106038 106028 105953 + 105968 105907 105908 105930 105886 106362 106291 106495 106405 106293 106352 106212 + 106273 106234 106203 106155 106223 106263 106145 106183 106504 106413 106374 106295 + 106542 106420 106360 106264 106222 106181 106130 106275 106232 106294 106133 106195 + 106123 106064 106080 105991 106055 106087 106001 105938 105898 105844 105906 105956 + 105825 105863 106074 105961 106017 106072 106012 105947 105912 105843 105860 105814 + 105908 105911 105892 105880 105835 105818 105829 105804 105768 105734 105759 105739 + 105728 105696 105688 105843 105778 105807 105770 105803 105844 105753 105711 105748 + 105714 105728 105682 105642 105608 105702 105647 105707 105671 105659 105624 105646 + 105654 105590 105600 105620 105582 105582 105553 105552 105548 105499 105478 105617 + 105582 105530 105560 105530 105516 105464 105503 105484 105466 105402 105420 105381 + 105373 105820 105764 105735 105773 105737 105684 105684 105615 105654 105555 105641 + 105577 105517 105526 105780 105644 105759 105708 105652 105599 105578 105466 105437 + 105526 105540 105459 105475 105426 105405 105369 105443 105414 105304 105304 105301 + 105261 105140 105192 105352 105269 105290 105363 105312 105218 105231 105138 105172 + 105050 105142 105060 104965 104967 106557 106434 106436 106642 106538 106518 106362 + 106416 106266 106286 106209 106184 106138 106241 106241 106173 106583 106550 106371 + 106439 106645 106386 106437 106287 106263 106206 106162 106293 106256 106198 106141 + 106080 105975 106034 106127 106070 105935 105946 105931 105867 105816 105754 105870 + 105823 105758 106048 106094 105993 105955 106080 105962 106020 105914 105883 105824 + 105887 105765 105712 105827 105848 105763 105694 106647 106549 106769 106655 106552 + 106441 106370 106281 106246 106180 106390 106284 106147 106665 106443 106565 106659 + 106559 106372 106237 106167 106272 106438 106385 106236 106283 106132 106063 106012 + 105948 106075 105915 106028 105948 105809 105734 105843 105712 105783 106088 106070 + 106148 105956 105937 105882 105790 105872 105709 105754 105720 105701 105634 105639 + 105707 105604 105526 105496 105431 105408 105335 105484 105410 105386 105312 105278 + 105600 105646 105629 105524 105486 105545 105524 105382 105346 105357 105283 105200 + 105169 105146 105049 105076 104855 105007 104883 105196 104999 105109 105145 104894 + 104816 104685 104801 104660 105676 105591 105440 105569 105633 105423 105485 105273 + 105325 105257 105148 105624 105432 105507 105494 105321 105226 105067 104935 104942 + 104811 104648 105078 105104 104841 104947 104674 104527 109493 108581 108012 107855 + 107589 107377 107180 106974 106902 106604 106694 106452 106239 106273 106383 106211 + 106151 106097 106009 105975 106125 106047 105819 105790 105874 105656 105610 105573 + 105421 105366 105237 104924 105093 104537 104722 105529 105535 105516 105509 105494 + 105454 105469 105549 105524 105492 105569 105543 105454 105476 105498 105466 105419 + 105408 105373 105355 105340 105310 105242 105301 105230 105396 105409 105394 105329 + 105248 105186 105220 105483 105118 105371 105561 105472 105510 105296 104460 105036 + 104788 104459 105517 105430 105381 105042 105326 105184 105177 105446 105156 104724 + 104356 104721 104159 104340 105233 105149 105179 105084 105064 104985 105042 104999 + 105119 104994 104874 104850 104735 105052 104986 104886 104867 104800 104867 104671 + 104723 104538 104551 104406 104929 104834 104645 104627 104585 104490 104565 104234 + 103932 104433 104243 104238 104071 103954 103743 103386 103726 104168 103436 103716 + 102738 103479 103743 102981 102538 102290 101218 103428 103520 102957 102624 103194 + 102779 102432 101920 102046 101113 101906 104753 104646 104739 104593 104498 104457 + 104410 104250 104569 104419 104266 104144 104254 104195 104124 103855 103859 103716 + 103238 103444 103897 103689 103188 103294 104502 104479 104285 104060 104072 104310 + 103791 103838 103780 103574 103063 103257 102924 102881 102515 102859 102489 102206 + 101465 100786 101687 102329 102619 101722 102480 101357 100685 101503 100580 100458 + 100346 100349 104142 104291 103584 103075 101972 100790 + </DataArray> + <DataArray type="Float32" Name="process 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 + </DataArray> + </CellData> + <Points> + <DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii"> + 0 0 0 0.466523 0.491992 0 0.878185 0 0 0 0.932307 0 + 0.961615 0.822875 0 1.64269 0 0 1.42747 0.492645 0 0.551789 1.32642 0 + 1.53311 1.14845 0 1.10139 1.52125 0 1.99943 0.357377 0 2.30823 0 0 + 2.57212 0.468357 0 2.88762 0 0 3.07243 0.315753 0 3.06052 0.71411 0 + 2.00204 0.853365 0 2.10121 1.51602 0 2.59792 1.12015 0 3.31085 1.2944 0 + 0 1.7629 0 0.812499 1.99958 0 0.465807 2.34738 0 1.43203 2.1837 0 + 0 2.50287 0 0.384303 2.8568 0 0 3.16211 0 1.04959 2.40394 0 + 0.899731 2.84135 0 1.40955 2.7214 0 1.24877 3.27592 0 1.60492 1.68453 0 + 1.88819 1.9831 0 2.36102 2.17694 0 2.80645 1.75673 0 1.88539 2.49588 0 + 1.84585 3.08121 0 2.37176 2.83889 0 2.94792 2.57867 0 2.73736 3.28788 0 + 3.392 0 0 3.4499 0.396298 0 3.83109 0 0 3.8498 0.418347 0 + 4.09727 0.255625 0 4.21334 0 0 4.2158 0.542786 0 4.45214 0.290038 0 + 4.54611 0 0 4.69096 0.172055 0 4.51426 0.550192 0 4.75228 0.475731 0 + 3.56763 0.770573 0 3.98032 0.771483 0 3.87858 1.13946 0 4.32703 0.927642 0 + 4.69975 0.769258 0 4.35491 1.48167 0 4.67155 1.11257 0 4.83581 0 0 + 5.088 0 0 4.91281 0.235072 0 5.16083 0.218083 0 5.33147 0 0 + 5.61114 0 0 5.44341 0.247865 0 5.02266 0.416367 0 5.23367 0.436167 0 + 5.00771 0.638678 0 5.4416 0.483095 0 5.9324 0 0 5.70445 0.196076 0 + 6.30143 0 0 6.16857 0.247778 0 5.63884 0.402162 0 5.89647 0.330353 0 + 5.85275 0.58119 0 6.51338 0.224078 0 6.13168 0.536007 0 6.3752 0.438783 0 + 4.92565 0.910737 0 5.15306 0.826699 0 5.3065 0.65425 0 5.5856 0.675032 0 + 5.37933 0.872333 0 4.96446 1.15936 0 5.2065 1.05126 0 4.81914 1.42598 0 + 5.19945 1.29625 0 5.45217 1.09042 0 5.63883 0.927262 0 5.525 1.3085 0 + 5.81402 0.809448 0 6.10783 0.830237 0 6.44363 0.684984 0 5.88509 1.03352 0 + 6.3976 0.978143 0 5.6719 1.1349 0 5.80441 1.31686 0 6.10825 1.20343 0 + 5.97819 1.45383 0 6.41017 1.31688 0 6.18041 1.47049 0 3.422 1.941 0 + 3.84168 1.60316 0 4.24205 2.15925 0 4.81566 1.8359 0 4.86354 2.32465 0 + 3.61506 2.65603 0 3.26108 3.17828 0 3.7278 3.14514 0 4.13169 2.83123 0 + 4.65208 2.77416 0 4.41409 3.15826 0 5.07347 1.56651 0 5.18097 1.78701 0 + 5.35216 1.48743 0 5.59783 1.52658 0 5.4447 1.69893 0 5.16969 2.105 0 + 5.44703 1.91532 0 5.49288 2.16765 0 5.80972 1.5864 0 5.67067 1.74467 0 + 5.84625 1.81216 0 6.01927 1.66289 0 6.24374 1.72283 0 6.5434 1.58042 0 + 5.7435 1.96275 0 5.90603 2.02052 0 5.81633 2.18083 0 6.0964 1.92353 0 + 6.45076 1.84898 0 6.03755 2.22495 0 6.2866 2.12552 0 5.33453 2.45001 0 + 5.64488 2.34848 0 5.13994 2.72732 0 4.98338 3.00267 0 5.4754 2.78213 0 + 5.28913 3.12366 0 5.61888 3.03275 0 5.88917 2.39892 0 5.69148 2.545 0 + 5.962 2.617 0 6.125 2.49178 0 6.26196 2.34268 0 6.43627 2.52012 0 + 6.20569 2.68095 0 5.766 2.80924 0 5.8906 3.03325 0 6.03817 2.84525 0 + 6.50275 2.75891 0 6.2557 2.89949 0 6.11433 3.0735 0 0.555975 3.43027 0 + 0 3.74943 0 0.413182 3.86352 0 1.07268 3.78076 0 0 4.27267 0 + 0.668413 4.24234 0 0.389493 4.59206 0 0 4.73882 0 1.08408 4.175 0 + 1.47702 4.19742 0 0.714889 4.57039 0 1.05248 4.50733 0 1.00124 4.86221 0 + 1.72696 3.73769 0 2.25972 3.52822 0 2.22288 4.0144 0 2.66756 3.79837 0 + 3.03889 3.59787 0 3.06689 4.01314 0 1.88407 4.25987 0 2.26684 4.45775 0 + 1.62733 4.60737 0 1.34275 4.85742 0 2.00124 4.60393 0 2.67965 4.34873 0 + 2.3949 4.84009 0 3.21779 4.42897 0 3.043 4.818 0 0.335684 4.97337 0 + 0.68332 4.86271 0 0 5.15412 0 0.368907 5.36131 0 0.702823 5.18765 0 + 0 5.5241 0 1.06466 5.18991 0 1.39405 5.18954 0 0.757068 5.50005 0 + 0.515458 5.63682 0 1.13106 5.53207 0 0.257937 5.69239 0 0 5.85372 0 + 0.210371 5.91992 0 0.479868 5.88511 0 0 6.14738 0 0 6.409 0 + 0.243615 6.37169 0 0.332959 6.12773 0 0.595976 6.12715 0 0.487231 6.33438 0 + 0.807274 5.75476 0 0.74973 5.96733 0 1.03422 5.88336 0 1.51484 5.48684 0 + 1.313 5.72213 0 1.3045 5.97274 0 0.832101 6.14421 0 0.730846 6.29708 0 + 0.974462 6.25977 0 1.07267 6.09651 0 1.21808 6.22246 0 1.11603 6.45202 0 + 1.46169 6.18515 0 1.69732 5.07898 0 1.98637 4.91282 0 2.16004 5.17545 0 + 1.87108 5.40211 0 2.21482 5.49141 0 2.45063 5.26709 0 2.67621 5.07969 0 + 2.81638 5.33844 0 2.51707 5.56879 0 3.09751 5.30423 0 1.53341 5.79037 0 + 1.73489 5.64249 0 1.78439 5.89401 0 1.55907 6.0062 0 1.98842 5.66688 0 + 2.27169 5.77604 0 2.03751 5.89725 0 1.70531 6.14785 0 1.38444 6.45725 0 + 1.61219 6.3493 0 1.86341 6.37712 0 1.94892 6.11054 0 2.19254 6.07323 0 + 2.14759 6.27686 0 2.58172 5.81141 0 2.43615 6.03592 0 2.8058 5.65089 0 + 3.13757 5.66149 0 2.96427 5.79566 0 2.79099 5.84358 0 2.67977 5.99862 0 + 2.92338 5.96131 0 2.35793 6.20376 0 2.61055 6.25337 0 2.40283 6.37942 0 + 2.82162 6.11234 0 3.01307 6.12377 0 2.88958 6.29128 0 3.08376 6.29758 0 + 3.54279 3.64085 0 4.08839 3.41933 0 4.74865 3.22731 0 4.51016 3.45479 0 + 3.91466 3.81258 0 4.42264 3.78136 0 4.82718 3.54608 0 3.60679 4.16186 0 + 3.56533 4.52576 0 3.38099 4.7298 0 3.88105 4.49151 0 3.70539 4.84914 0 + 4.08969 4.14464 0 4.44575 4.19054 0 4.72883 4.07733 0 4.84136 3.83383 0 + 4.23102 4.47732 0 4.08806 4.79033 0 4.36101 4.71235 0 4.55466 4.52787 0 + 4.82627 4.40647 0 5.0946 3.39843 0 5.56976 3.29907 0 5.36166 3.41099 0 + 5.10031 3.79313 0 5.33371 3.68776 0 5.5587 3.60834 0 5.51544 3.87332 0 + 5.81933 3.26483 0 6.01693 3.23284 0 5.80195 3.54402 0 6.1905 3.30175 0 + 6.4123 3.1009 0 6.03244 3.48133 0 6.26667 3.53 0 6.41381 3.35722 0 + 5.76966 3.83487 0 6.01096 3.75305 0 6.17463 3.68755 0 6.34283 3.75825 0 + 6.2125 3.9279 0 4.99901 4.11381 0 5.31651 4.1099 0 5.60886 4.10554 0 + 5.16602 4.47853 0 5.46561 4.40864 0 4.74321 4.70419 0 4.96358 4.65032 0 + 5.13499 4.78698 0 5.39289 4.78122 0 5.63578 4.62268 0 5.83926 4.07538 0 + 6.02568 3.9822 0 5.79085 4.35592 0 5.98508 4.22174 0 6.419 3.9865 0 + 6.16462 4.18983 0 6.32386 4.13329 0 6.328 4.34748 0 6.09326 4.4347 0 + 5.83909 4.56628 0 6.0068 4.66792 0 6.31859 4.6579 0 3.37344 5.02712 0 + 3.69658 5.24168 0 3.96098 5.06095 0 3.431 5.29189 0 3.3108 5.49017 0 + 3.53335 5.51202 0 3.78835 5.53454 0 4.25023 5.00244 0 4.56056 4.88784 0 + 4.45081 5.23809 0 4.07149 5.33379 0 4.0317 5.59666 0 4.28956 5.51599 0 + 4.72119 5.13365 0 4.74432 5.4175 0 4.52427 5.52593 0 3.34449 5.68935 0 + 3.167 5.924 0 3.41427 5.88613 0 3.66153 5.84827 0 3.9088 5.8104 0 + 3.69661 6.06267 0 3.194 6.16376 0 3.42675 6.12223 0 3.221 6.40353 0 + 3.43465 6.38011 0 3.61853 6.2588 0 3.80127 6.28355 0 3.9189 6.12148 0 + 3.66627 6.44175 0 4.15607 5.77253 0 4.09455 5.97315 0 4.30414 5.97062 0 + 4.40333 5.73467 0 4.6506 5.6968 0 4.56336 5.9815 0 4.76589 5.89204 0 + 4.18483 6.19073 0 3.99188 6.31668 0 4.15907 6.4313 0 4.38078 6.35575 0 + 4.41387 6.16693 0 4.63623 6.33605 0 4.74251 6.09876 0 4.89635 4.91481 0 + 5.17087 5.03233 0 4.95394 5.21002 0 5.4158 5.1329 0 5.61382 4.96464 0 + 4.99096 5.45188 0 5.21352 5.35187 0 5.44304 5.39025 0 5.60048 5.2837 0 + 5.14513 5.62107 0 5.3924 5.5832 0 5.83796 4.83496 0 5.80001 5.13237 0 + 5.98963 5.05486 0 6.1001 4.88243 0 6.29415 4.92991 0 6.14564 5.18024 0 + 6.41668 5.07825 0 5.77755 5.35375 0 5.96065 5.29987 0 5.63967 5.54533 0 + 5.88693 5.50747 0 6.32573 5.24768 0 6.1342 5.4696 0 6.38147 5.43173 0 + 4.89787 5.65893 0 4.95266 5.82995 0 5.12348 5.9201 0 5.3405 5.7949 0 + 5.53611 5.69539 0 5.32337 6.03177 0 5.55684 5.89367 0 4.91592 6.03893 0 + 5.09532 6.19002 0 4.83114 6.2453 0 4.93442 6.4365 0 5.55815 6.13413 0 + 5.32435 6.23168 0 5.242 6.45581 0 5.4654 6.33862 0 5.78606 5.73748 0 + 6.03879 5.66624 0 5.77573 5.96372 0 6.06345 5.89131 0 6.30771 5.71051 0 + 6.26917 5.9306 0 5.77486 6.15453 0 5.96389 6.11079 0 5.66524 6.33192 0 + 5.88577 6.30339 0 6.18343 6.08796 0 6.40624 6.08405 0 6.08785 6.28547 0 + 6.30813 6.26613 0 6.72533 0 0 6.73678 0.455023 0 7.12553 0.368632 0 + 7.21227 0 0 7.56147 0.500559 0 7.77162 0 0 8.08675 0.374517 0 + 6.74453 0.865349 0 7.12116 0.74204 0 6.68429 1.21684 0 7.0774 1.15652 0 + 6.99972 1.51839 0 7.54786 1.12771 0 8.05896 0.870331 0 7.31899 1.45726 0 + 8.07724 1.43982 0 8.41413 0 0 8.62759 0.501696 0 9.15219 0 0 + 9.38622 0.615849 0 10 0 0 8.59652 1.16704 0 8.98155 0.943441 0 + 9.255 1.3968 0 10 1 0 6.78516 1.96366 0 6.50706 2.06785 0 + 6.53365 2.31674 0 7.30646 1.81209 0 7.1319 2.1878 0 7.66352 1.67161 0 + 8.03428 2.03627 0 7.52772 2.20685 0 6.78758 2.38138 0 6.73471 2.63004 0 + 7.12666 2.55028 0 6.86487 2.85394 0 6.67862 3.04956 0 7.3063 2.96979 0 + 7.53687 2.67229 0 7.89832 2.51605 0 7.84441 3.11101 0 8.57877 1.85018 0 + 8.45017 2.60265 0 9.21952 2.35937 0 10 2 0 8.50037 3.28315 0 + 9.06401 2.97679 0 10 3 0 6.6435 3.29949 0 6.52831 3.56952 0 + 6.9697 3.23454 0 6.8001 3.50031 0 7.08602 3.64713 0 7.44025 3.35268 0 + 6.77298 3.75087 0 6.5553 3.81823 0 6.97981 3.92195 0 7.78748 3.47459 0 + 7.55058 3.7347 0 7.31339 4.0018 0 8.08128 3.7407 0 7.79136 3.99696 0 + 6.71337 4.02602 0 6.49517 4.21475 0 6.80228 4.31974 0 7.01328 4.18394 0 + 6.57133 4.443 0 6.78633 4.5363 0 6.6475 4.67125 0 6.99731 4.49722 0 + 7.2803 4.37126 0 6.91324 4.75027 0 7.25326 4.73872 0 7.55878 4.23864 0 + 7.93609 4.29955 0 8.17644 4.06559 0 7.54578 4.56723 0 7.87516 4.67289 0 + 8.09641 4.5219 0 8.62963 3.91521 0 9.3 3.493 0 8.35041 4.35901 0 + 8.72127 4.39292 0 9.11062 4.28336 0 8.22399 4.75616 0 8.54922 4.66377 0 + 8.89958 4.76595 0 9.59135 4.35902 0 10 4 0 9.37796 4.85283 0 + 6.48974 4.85073 0 6.72367 4.8995 0 6.60421 5.03095 0 6.79983 5.12775 0 + 6.90447 4.966 0 7.11174 4.97057 0 6.99256 5.16547 0 6.59111 5.1985 0 + 6.62873 5.39387 0 6.53482 5.57883 0 6.876 5.356 0 6.73942 5.57454 0 + 7.21074 5.15218 0 7.11438 5.3195 0 6.9515 5.5825 0 7.23901 5.57115 0 + 7.60437 4.83537 0 7.40132 5.04155 0 7.67394 5.05964 0 7.92076 4.9551 0 + 7.8295 5.21 0 7.35275 5.283 0 7.59113 5.2465 0 7.51817 5.46231 0 + 7.73113 5.38609 0 8.06787 5.1735 0 7.98351 5.4192 0 7.73225 5.62915 0 + 6.61678 5.78352 0 6.83469 5.73403 0 6.43948 5.91129 0 6.6188 6.01622 0 + 6.81469 5.9179 0 7.027 5.809 0 7.1025 6.0355 0 7.28433 5.86582 0 + 6.78149 6.15419 0 6.58534 6.29286 0 6.40053 6.44037 0 6.8166 6.32846 0 + 6.92695 6.05415 0 6.97098 6.24033 0 7.178 6.262 0 6.99756 6.47748 0 + 7.46221 5.67635 0 7.57357 5.87349 0 7.99341 5.69163 0 7.8551 5.89993 0 + 8.1304 5.92638 0 7.27109 6.10514 0 7.44413 6.04746 0 7.66339 6.12223 0 + 7.43246 6.29642 0 7.94678 6.17393 0 7.71613 6.44807 0 8.40318 4.92164 0 + 8.18441 4.98868 0 8.30625 5.137 0 8.63578 4.89915 0 8.54463 5.1005 0 + 8.783 5.064 0 8.2191 5.3499 0 8.47687 5.37807 0 8.26101 5.64171 0 + 8.68902 5.2469 0 8.99742 5.13578 0 8.83893 5.4423 0 8.59014 5.64538 0 + 10 5 0 9.39602 5.44268 0 8.48844 5.96661 0 8.88548 5.7982 0 + 8.24819 6.19501 0 8.12827 6.5126 0 8.82119 6.10532 0 8.6253 6.424 0 + 9.28554 6.23245 0 10 6 0 0 6.67116 0 0.199982 6.57334 0 + 0.385433 6.50589 0 0.596235 6.53382 0 0.174179 6.78023 0 0.400102 6.7162 0 + 0 6.99074 0 0.270811 6.94974 0 0.492648 6.93296 0 0.20717 7.1766 0 + 0.423887 7.15526 0 0.896021 6.5616 0 0.673838 6.78422 0 1.18368 6.69869 0 + 1.0072 6.94184 0 0.694604 7.05938 0 0.959528 7.2429 0 1.36848 6.98502 0 + 1.22642 7.22096 0 0 7.3803 0 0.341151 7.40698 0 0.629965 7.33718 0 + 0.267773 7.68854 0 0.553189 7.61775 0 0 7.85519 0 0.40744 8.04131 0 + 0.807434 7.54082 0 1.15384 7.57914 0 1.47233 7.33273 0 0.759671 7.9206 0 + 1.14561 7.9725 0 1.47898 7.67243 0 1.6461 6.57911 0 1.4548 6.7239 0 + 1.67379 6.87292 0 1.92393 6.70954 0 2.14134 6.52147 0 2.19792 6.7289 0 + 1.60611 7.10253 0 1.87443 6.98798 0 2.06409 6.89969 0 1.82987 7.24414 0 + 2.03931 7.1064 0 2.24739 7.03817 0 2.18158 7.31988 0 2.37817 6.6208 0 + 2.55876 6.50356 0 2.43946 6.87154 0 2.65402 6.7312 0 2.77192 6.49518 0 + 3.03905 6.52127 0 2.93859 6.73895 0 2.64479 6.96707 0 2.52441 7.2067 0 + 2.82128 6.90267 0 3.04768 6.96886 0 2.8213 7.10729 0 3.06931 7.27952 0 + 1.70873 7.49099 0 1.98103 7.5375 0 2.29235 7.66354 0 1.80481 7.7342 0 + 1.57645 8.01866 0 2.07682 7.80048 0 1.95676 8.04075 0 2.34168 8.01682 0 + 2.40928 7.43796 0 2.63877 7.56172 0 2.80142 7.33589 0 2.95332 7.52422 0 + 2.61867 7.83887 0 2.64374 8.11127 0 2.84073 7.72715 0 3.12447 7.72918 0 + 2.92498 7.96886 0 0 8.43408 0 0.601719 8.40842 0 0.385508 8.80013 0 + 0 9.13977 0 0.969141 8.32722 0 1.34703 8.33578 0 0.798974 8.80804 0 + 1.24905 8.73951 0 0.663204 9.23299 0 0.415594 9.65258 0 0 10 0 + 1.20879 9.31412 0 0.868619 10 0 1.76701 8.35701 0 2.15763 8.32971 0 + 1.54023 8.61954 0 1.59207 8.99018 0 1.99594 8.72034 0 2.43174 8.27177 0 + 2.45264 8.5716 0 2.65949 8.33727 0 2.87747 8.23731 0 3.13748 8.12423 0 + 2.82615 8.51979 0 3.07295 8.36245 0 2.38342 8.95156 0 2.65762 8.80031 0 + 3.0745 8.56816 0 2.96801 8.76537 0 1.68918 9.44233 0 2.0837 9.24313 0 + 1.58118 10 0 1.98015 9.6642 0 2.367 9.63352 0 2.63784 9.05046 0 + 2.48979 9.28781 0 2.8753 9.00622 0 3.12605 9.01124 0 2.76691 9.24592 0 + 3.01159 9.26198 0 2.78121 9.52572 0 3.14041 9.50969 0 3.04751 9.74108 0 + 3.248 6.64329 0 3.52011 6.58041 0 3.11767 6.77178 0 3.4709 6.77504 0 + 3.91547 6.49989 0 3.70529 6.65461 0 3.275 6.88306 0 3.44221 6.95466 0 + 3.302 7.12282 0 3.66992 6.90377 0 3.89857 6.75504 0 3.89479 6.97999 0 + 3.5702 7.0839 0 3.48382 7.25286 0 3.73679 7.17383 0 4.12247 6.64225 0 + 4.07818 6.85138 0 4.33224 6.60111 0 4.49573 6.5037 0 4.63467 6.62325 0 + 4.49351 6.76111 0 4.30939 6.82388 0 4.26875 7.06555 0 4.05537 7.06631 0 + 3.93583 7.17571 0 4.09928 7.25892 0 4.49697 6.95191 0 4.71459 6.88136 0 + 4.55625 7.19528 0 3.329 7.36259 0 3.16642 7.49957 0 3.356 7.60235 0 + 3.4898 7.42538 0 3.65732 7.36615 0 3.89332 7.3758 0 3.5874 7.56775 0 + 3.81543 7.6202 0 3.383 7.84212 0 3.51004 7.73059 0 3.22059 7.94022 0 + 3.41 8.08188 0 3.68701 7.79954 0 3.96948 7.81566 0 3.53787 7.94361 0 + 3.79317 8.04519 0 4.32368 7.34406 0 4.10664 7.54894 0 4.52041 7.40659 0 + 4.72255 7.42984 0 4.39894 7.60394 0 4.5983 7.57488 0 4.22011 7.77972 0 + 4.1011 8.048 0 4.40117 7.92829 0 4.58705 7.75616 0 4.64481 7.97231 0 + 4.81788 6.60949 0 5.0847 6.65086 0 4.93075 6.7879 0 5.50087 6.53512 0 + 5.29879 6.64219 0 5.23212 6.78709 0 5.4219 6.79674 0 5.08677 6.83409 0 + 4.98494 6.99579 0 4.80075 7.14259 0 4.9671 7.31743 0 5.15563 7.13531 0 + 5.23029 6.9617 0 5.42094 7.07186 0 5.61248 6.87193 0 5.74859 6.52288 0 + 5.96294 6.49101 0 5.64151 6.68025 0 5.84317 6.73961 0 6.21278 6.51585 0 + 6.05548 6.68668 0 6.25135 6.78768 0 6.42796 6.67265 0 5.86682 7.02664 0 + 5.65046 7.10215 0 5.54791 7.30115 0 5.7521 7.25486 0 6.06877 6.90476 0 + 6.31086 7.06221 0 6.08495 7.12571 0 5.97295 7.32 0 4.8946 7.48854 0 + 4.82545 7.6833 0 5.06267 7.54753 0 5.26793 7.36234 0 5.27791 7.67683 0 + 5.45793 7.49402 0 5.06129 7.81315 0 4.876 7.94588 0 5.03125 8.11005 0 + 5.51004 7.69282 0 5.45043 7.89481 0 5.23318 7.98551 0 5.72234 7.52438 0 + 5.9989 7.5496 0 6.21083 7.33917 0 6.22335 7.58234 0 6.41829 7.49713 0 + 5.67844 7.82347 0 5.87775 7.74786 0 5.6319 8.06117 0 5.88049 7.98296 0 + 6.1198 7.8319 0 6.37284 7.74971 0 6.09252 8.13526 0 6.34394 8.02598 0 + 3.26351 8.27064 0 3.26009 8.46297 0 3.437 8.32165 0 3.61052 8.12504 0 + 3.72372 8.29784 0 3.91406 8.22169 0 3.63881 8.47976 0 3.86873 8.43758 0 + 3.24529 8.7302 0 3.464 8.56141 0 3.491 8.80118 0 3.33046 8.95452 0 + 3.62281 8.67597 0 3.80969 8.65483 0 3.71052 8.88269 0 3.95673 8.84417 0 + 4.08006 8.35836 0 4.28772 8.18915 0 4.32904 8.38097 0 4.198 8.50415 0 + 4.49639 8.16755 0 4.74436 8.18762 0 4.5536 8.35944 0 4.04603 8.61298 0 + 4.2868 8.65668 0 4.15142 8.80512 0 4.304 8.93112 0 4.44407 8.53968 0 + 4.65442 8.55901 0 4.76188 8.39467 0 4.51754 8.78372 0 4.7971 8.76455 0 + 3.29002 9.21471 0 3.518 9.04094 0 3.71425 9.14229 0 3.87614 9.02984 0 + 3.545 9.28071 0 3.90629 9.22434 0 3.37581 9.44339 0 3.34797 9.6647 0 + 3.572 9.52047 0 3.79776 9.408 0 3.599 9.76023 0 3.75748 9.61926 0 + 4.09292 9.05572 0 4.32106 9.20369 0 4.13188 9.3588 0 4.47151 9.06131 0 + 4.69529 9.0282 0 4.59737 9.26812 0 4.00944 9.60092 0 4.37 9.59672 0 + 4.22981 9.77758 0 4.42647 9.39055 0 4.71205 9.5254 0 4.58252 9.74961 0 + 4.95813 8.32886 0 5.18905 8.23384 0 5.40179 8.13483 0 5.1654 8.48249 0 + 5.36062 8.35933 0 5.5842 8.26959 0 5.42216 8.62057 0 4.89888 8.53841 0 + 5.08008 8.71328 0 4.94075 8.99006 0 5.19324 8.94705 0 5.81721 8.2199 0 + 5.74643 8.46814 0 6.00647 8.42432 0 6.32281 8.39747 0 5.83409 8.79016 0 + 5.44819 8.94733 0 6.1622 8.64946 0 6.42707 8.74186 0 6.22385 8.9554 0 + 4.85245 9.30562 0 5.09029 9.21503 0 5.37915 9.26956 0 5.66606 9.11636 0 + 5.13789 9.60286 0 4.89915 9.73046 0 5.48015 9.69204 0 5.97533 9.19376 0 + 5.69352 9.381 0 6.36781 9.29225 0 6.00703 9.62794 0 6.46084 9.67456 0 + 2.16571 10 0 2.64523 10 0 3.03859 10 0 3.36129 10 0 + 3.80918 9.80668 0 3.626 10 0 3.88619 10 0 4.02257 9.83704 0 + 4.17825 10 0 4.50607 10 0 4.87403 10 0 5.28706 10 0 + 5.75067 10 0 6.27105 10 0 6.56129 6.52496 0 6.7557 6.49547 0 + 6.66001 6.73292 0 6.83795 6.64989 0 7.2535 6.4885 0 7.1605 6.64569 0 + 7.00332 6.71119 0 7.16277 6.86002 0 6.47752 6.89682 0 6.68686 6.9737 0 + 6.89782 6.91714 0 6.55241 7.08207 0 6.51915 7.28206 0 6.76764 7.19557 0 + 7.10175 7.05487 0 6.98742 7.20298 0 7.46298 6.54078 0 7.329 6.715 0 + 7.58379 6.7559 0 7.83351 6.70232 0 7.4045 6.9415 0 7.2638 7.05373 0 + 7.75219 6.95144 0 7.20637 7.24282 0 7.48 7.168 0 8.06449 6.86612 0 + 7.70852 7.18319 0 7.95575 7.24596 0 6.701 7.46571 0 6.56149 7.65281 0 + 7.00005 7.41033 0 7.21479 7.44889 0 6.8434 7.73126 0 7.11931 7.64701 0 + 6.57017 7.90813 0 6.78 8.07796 0 7.04436 8.00568 0 7.27653 7.84115 0 + 7.38037 7.36324 0 7.62918 7.42907 0 7.36787 7.58104 0 7.93021 7.6928 0 + 7.56761 7.79688 0 7.38296 8.16713 0 7.67826 8.1118 0 8.23552 7.99998 0 + 8.4882 6.83187 0 9.06394 6.88012 0 8.31347 7.11268 0 8.73375 7.19572 0 + 10 7 0 8.33931 7.46635 0 8.70007 7.65729 0 8.76603 8.22375 0 + 9.26502 7.63929 0 6.56859 8.22265 0 6.65907 8.56601 0 6.86739 8.35862 0 + 7.1616 8.3646 0 6.65937 8.99616 0 7.01434 8.73456 0 7.54875 8.53655 0 + 7.969 8.38454 0 7.51869 9.01375 0 8.04652 8.82267 0 6.80315 9.45262 0 + 7.11468 9.14932 0 7.44429 9.48266 0 6.85516 10 0 7.94359 9.35676 0 + 8.24673 10 0 8.33594 8.45169 0 8.6806 8.80926 0 9.35895 8.48055 0 + 10 8 0 8.51727 9.40201 0 9.2986 9.29708 0 10 9 0 + 9.07278 10 0 10 10 0 7.5108 10 0 + </DataArray> + </Points> + <Cells> + <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii"> + 0 1 2 0 3 1 2 1 4 5 2 6 + 2 4 6 3 7 1 4 1 7 4 8 6 + 4 7 9 4 9 8 5 6 10 11 5 10 + 11 10 12 13 11 12 14 13 12 15 14 12 + 16 6 8 16 10 6 16 8 17 16 12 10 + 18 12 16 18 15 12 18 16 17 18 19 15 + 3 20 7 20 21 7 20 22 21 21 9 7 + 21 23 9 20 24 22 24 25 22 24 26 25 + 21 22 27 28 27 22 21 27 23 23 27 29 + 28 22 25 28 29 27 28 30 29 31 8 9 + 31 17 8 31 32 17 31 9 23 31 23 32 + 33 17 32 18 17 34 18 34 19 33 34 17 + 23 35 32 23 29 35 33 32 35 36 35 29 + 36 37 35 33 35 37 33 37 38 33 38 34 + 39 38 37 40 13 14 40 14 41 15 41 14 + 42 40 41 42 41 43 42 43 44 45 42 44 + 46 44 43 45 44 47 48 45 47 48 47 49 + 46 47 44 46 50 47 51 49 47 51 47 50 + 52 41 15 52 43 41 52 53 43 52 54 53 + 52 15 19 52 19 54 46 43 53 55 46 53 + 55 50 46 51 50 56 55 56 50 55 53 54 + 55 54 57 55 58 56 55 57 58 59 48 49 + 60 59 61 62 63 60 64 63 65 59 49 61 + 60 61 62 62 61 66 51 61 49 51 66 61 + 62 65 63 62 66 67 62 67 65 67 66 68 + 67 69 65 70 64 71 72 70 73 64 65 71 + 74 71 65 70 71 75 74 65 69 74 75 71 + 76 75 74 70 75 73 72 73 77 75 78 73 + 76 78 75 79 73 78 51 56 68 51 68 66 + 80 68 56 80 81 68 67 68 82 82 68 81 + 67 82 69 82 83 69 82 81 84 82 84 83 + 80 56 58 80 58 85 80 85 86 87 85 58 + 87 88 85 80 86 81 84 81 86 84 86 89 + 84 89 90 88 86 85 89 86 88 89 88 91 + 74 69 83 76 74 83 76 83 92 90 92 83 + 84 90 83 76 93 78 79 78 94 94 78 93 + 76 92 93 95 93 92 96 94 93 89 97 90 + 95 92 90 95 90 97 89 91 97 91 98 97 + 95 97 98 95 99 93 96 93 99 95 98 99 + 98 100 99 96 99 101 102 101 99 103 19 34 + 54 19 104 103 104 19 103 34 38 57 54 104 + 105 57 104 87 58 57 87 57 106 103 105 104 + 105 106 57 107 106 105 103 38 108 103 108 105 + 108 38 109 108 109 110 108 110 111 105 108 111 + 107 105 112 105 111 112 113 112 111 87 114 88 + 87 106 114 115 114 106 88 114 116 91 88 116 + 91 116 117 115 116 114 117 116 118 115 118 116 + 115 106 119 107 119 106 115 119 120 115 120 118 + 121 120 119 91 117 98 117 122 98 98 122 100 + 117 123 122 117 118 123 123 124 122 125 122 124 + 102 99 100 102 100 125 125 100 122 102 125 126 + 127 102 126 123 118 120 123 120 128 123 128 124 + 128 129 124 128 120 121 128 121 130 128 130 129 + 131 125 124 131 126 125 131 124 129 131 132 126 + 131 129 133 130 133 129 131 134 132 131 133 134 + 135 119 107 135 121 119 135 136 121 135 107 137 + 107 112 137 138 137 112 135 137 139 138 140 137 + 139 137 140 141 139 140 130 121 136 130 142 133 + 130 136 142 143 136 135 142 136 143 144 142 143 + 142 145 133 146 134 133 146 133 145 144 145 142 + 146 145 147 148 147 145 143 135 139 143 139 149 + 144 143 149 141 149 139 141 150 149 151 149 150 + 144 148 145 144 149 151 151 148 144 152 148 153 + 151 150 154 151 153 148 151 154 153 26 155 25 + 26 156 155 156 157 155 28 25 155 28 155 30 + 158 155 157 158 30 155 156 159 157 159 160 157 + 159 161 160 159 162 161 158 157 160 158 160 163 + 158 163 164 160 165 166 160 161 165 160 166 163 + 164 163 166 166 165 167 36 29 30 36 30 168 + 36 169 37 158 168 30 36 168 169 170 169 168 + 39 37 169 39 109 38 39 169 171 170 171 169 + 39 171 172 173 172 171 158 164 168 164 174 168 + 170 168 174 170 174 175 164 166 176 164 176 174 + 177 176 166 178 175 174 178 174 176 170 179 171 + 173 171 179 170 175 179 178 180 175 180 179 175 + 173 179 181 182 181 179 162 183 161 184 161 183 + 162 185 183 185 186 183 186 187 183 185 188 186 + 184 165 161 184 167 165 184 183 187 184 187 167 + 177 166 167 189 167 187 177 167 189 177 189 190 + 191 187 186 191 186 192 191 189 187 191 193 189 + 189 193 190 188 194 186 188 195 194 186 194 192 + 195 196 194 197 192 194 197 194 196 195 198 196 + 199 200 198 198 201 196 197 196 201 197 201 202 + 200 201 198 203 202 201 200 203 201 191 192 204 + 191 204 193 197 204 192 197 205 204 206 204 205 + 207 193 208 206 193 204 206 208 193 206 209 208 + 197 202 205 206 205 210 205 202 210 203 211 202 + 211 210 202 211 212 210 213 206 210 206 213 209 + 214 209 213 212 213 210 212 214 213 212 215 214 + 214 216 209 177 217 176 177 190 217 178 176 218 + 217 218 176 178 218 180 219 218 217 207 217 190 + 207 190 193 207 220 217 219 217 220 219 220 221 + 219 180 218 180 222 223 182 179 180 182 180 223 + 223 224 182 219 222 180 219 221 222 225 222 221 + 223 222 224 224 226 182 225 224 222 207 208 227 + 207 228 220 207 227 228 227 208 209 227 229 228 + 227 230 229 231 220 228 231 221 220 231 232 221 + 231 228 229 231 229 233 231 233 232 227 209 230 + 216 230 209 234 229 230 216 234 230 214 235 216 + 216 235 236 216 236 234 234 236 237 238 233 229 + 234 238 229 238 239 233 234 237 238 238 240 239 + 238 237 240 225 221 232 239 232 233 225 232 241 + 242 241 232 225 243 224 225 241 243 244 224 243 + 244 243 245 243 241 246 247 246 241 243 246 245 + 248 245 246 239 242 232 239 249 242 242 247 241 + 242 250 247 239 240 249 251 249 240 242 249 250 + 251 250 249 247 250 252 247 248 246 247 252 248 + 248 252 253 254 252 250 254 253 252 254 255 253 + 39 172 109 256 110 109 256 257 110 256 109 172 + 172 173 256 257 111 110 113 111 257 113 258 112 + 113 257 259 113 259 258 256 260 257 261 257 260 + 261 259 257 262 259 261 256 173 263 173 181 263 + 256 263 260 264 181 265 182 265 181 264 263 181 + 264 266 263 264 267 266 268 260 263 268 261 260 + 268 269 261 270 271 261 270 261 269 268 263 266 + 268 266 272 273 272 266 273 274 272 268 272 269 + 275 269 272 275 276 269 275 272 274 138 112 258 + 262 258 259 138 258 277 262 277 258 138 277 140 + 141 140 278 279 140 277 279 278 140 262 280 277 + 262 261 271 262 271 280 279 277 281 279 282 278 + 279 281 282 280 281 277 283 282 281 141 278 284 + 141 284 150 284 285 150 286 284 278 154 150 285 + 154 285 287 154 288 153 154 287 288 284 289 285 + 287 285 289 287 290 291 286 278 282 286 289 284 + 283 292 282 286 282 292 286 292 293 286 293 289 + 287 289 290 290 289 294 293 294 289 290 294 295 + 293 296 294 295 294 296 270 297 271 280 271 297 + 270 269 276 270 276 297 280 298 281 298 280 297 + 281 298 283 298 299 283 298 297 300 298 301 299 + 300 297 276 275 302 276 276 302 303 300 276 303 + 298 300 301 300 303 304 300 305 301 306 301 305 + 283 299 292 299 307 292 307 308 292 307 299 309 + 307 309 310 293 292 308 293 308 296 295 296 311 + 312 296 308 311 296 313 307 310 308 312 308 310 + 312 313 296 312 314 313 309 299 301 315 309 316 + 306 309 301 306 316 309 315 310 309 315 312 310 + 315 314 312 315 316 317 315 318 314 315 317 318 + 182 319 265 182 226 319 264 265 267 267 265 319 + 320 267 319 320 321 267 226 322 319 244 226 224 + 244 323 226 226 323 322 320 319 322 320 322 324 + 324 322 323 320 324 325 273 266 267 273 326 274 + 273 267 321 273 321 326 327 274 326 275 274 327 + 275 327 302 328 327 326 320 329 321 329 326 321 + 320 325 329 329 325 330 329 330 331 328 326 329 + 328 332 327 328 333 332 328 329 331 328 331 334 + 328 334 333 324 323 335 244 335 323 336 244 245 + 336 245 248 336 335 244 336 337 335 338 324 335 + 338 325 324 337 338 335 338 339 325 338 340 339 + 336 248 253 336 253 341 336 342 337 336 341 342 + 341 253 255 343 341 255 341 344 342 343 344 341 + 337 340 338 337 342 340 345 340 342 345 342 344 + 345 346 340 347 340 346 345 348 346 339 330 325 + 349 331 330 339 349 330 339 350 349 349 350 351 + 352 334 331 349 352 331 353 333 334 352 353 334 + 349 351 352 352 351 354 352 354 353 353 354 355 + 339 340 347 339 347 350 356 350 347 356 351 350 + 356 347 357 347 346 357 356 357 358 356 358 359 + 356 360 351 354 351 360 356 359 360 361 354 360 + 361 362 354 361 360 359 363 303 302 363 302 327 + 363 304 303 363 327 332 363 364 304 363 365 364 + 300 304 305 364 305 304 366 367 305 366 305 364 + 363 332 365 365 332 333 365 333 368 365 368 369 + 366 364 369 365 369 364 366 370 371 372 369 368 + 366 369 370 373 370 369 306 305 367 306 367 374 + 306 374 316 374 317 316 375 374 367 375 376 374 + 377 317 374 377 318 317 377 378 318 377 374 376 + 377 376 379 377 379 378 380 378 379 366 371 367 + 375 367 371 375 371 381 375 381 382 383 381 371 + 383 371 370 384 382 381 383 384 381 375 382 376 + 379 376 382 380 379 385 386 379 382 384 386 382 + 386 385 379 386 387 385 353 388 333 388 368 333 + 388 372 368 388 389 372 353 355 388 388 355 389 + 372 389 390 372 373 369 373 383 370 372 391 373 + 373 391 392 372 390 391 393 391 390 394 392 391 + 393 394 391 354 362 355 395 355 362 395 389 355 + 395 390 389 395 396 390 361 397 362 395 362 397 + 395 397 396 398 396 397 393 390 396 393 399 394 + 393 396 400 401 400 396 393 400 399 402 399 400 + 373 392 383 383 392 403 383 403 384 384 403 404 + 394 403 392 394 405 403 406 403 405 384 404 386 + 386 407 387 386 404 407 406 404 403 406 407 404 + 406 408 407 394 399 405 409 405 399 409 410 405 + 409 399 411 402 411 399 409 412 410 409 411 412 + 406 405 410 406 410 413 406 413 408 414 408 413 + 415 413 410 415 410 412 415 416 413 414 413 416 + 417 72 77 417 77 418 79 77 73 79 418 77 + 417 418 419 420 417 419 420 419 421 422 420 421 + 422 421 423 79 94 418 418 94 424 96 424 94 + 425 418 424 425 419 418 96 426 424 96 101 426 + 426 427 424 425 424 427 428 427 426 425 421 419 + 425 429 421 430 423 421 430 421 429 425 427 429 + 429 427 431 430 429 432 433 422 423 433 423 434 + 435 433 434 435 434 436 437 435 436 430 434 423 + 430 438 434 439 434 438 430 432 438 439 436 434 + 439 440 436 439 438 440 436 440 441 101 102 127 + 127 426 101 428 426 127 127 126 132 428 431 427 + 428 127 442 127 132 442 443 132 134 443 442 132 + 443 444 442 428 442 445 446 445 442 447 429 431 + 428 445 431 447 431 445 447 432 429 447 448 432 + 447 445 449 446 449 445 447 449 448 146 444 134 + 444 443 134 450 442 444 146 147 444 450 444 147 + 450 147 451 446 442 450 446 450 452 450 451 452 + 152 147 148 152 451 147 453 451 152 152 153 288 + 152 288 454 453 152 454 453 452 451 455 452 453 + 446 452 449 452 456 449 457 448 449 457 449 456 + 455 456 452 458 456 455 458 457 456 459 438 432 + 440 438 459 459 432 448 459 448 460 459 461 440 + 462 440 461 457 460 448 459 460 461 458 460 457 + 463 460 458 463 464 460 461 460 464 465 461 464 + 437 436 441 462 441 440 465 462 461 466 454 288 + 287 291 288 466 288 291 466 291 467 453 454 468 + 466 468 454 455 453 468 466 469 468 470 471 468 + 290 467 291 290 295 467 466 467 469 472 469 467 + 295 473 467 472 467 473 470 468 469 470 469 472 + 470 472 474 455 468 471 458 455 471 458 471 475 + 470 476 471 470 477 476 476 475 471 478 475 476 + 478 476 479 295 311 473 472 473 480 311 480 473 + 311 313 481 481 313 314 311 481 480 481 482 480 + 472 480 474 470 474 477 483 477 474 483 474 480 + 483 480 482 481 314 484 481 484 482 484 485 482 + 484 314 318 484 318 486 484 486 485 483 482 487 + 487 482 485 483 487 488 486 489 485 487 485 489 + 490 487 489 476 477 479 483 488 477 491 479 477 + 491 477 488 491 492 479 492 493 479 491 488 494 + 490 488 487 490 494 488 491 494 492 495 492 494 + 495 496 492 463 458 475 463 475 478 463 478 497 + 498 463 497 498 464 463 498 465 464 478 479 493 + 478 493 497 499 493 492 493 499 497 497 499 500 + 501 497 500 499 492 496 495 502 496 499 496 502 + 499 502 503 499 503 500 503 504 500 498 497 501 + 498 505 506 501 505 498 501 500 504 501 504 507 + 501 507 505 486 318 508 318 378 508 486 508 509 + 380 508 378 380 510 508 509 508 510 509 510 511 + 486 509 489 509 512 489 490 489 513 509 511 512 + 513 489 512 513 512 514 380 515 510 380 385 515 + 511 510 515 387 515 385 387 516 515 387 517 516 + 516 518 515 518 516 519 511 514 512 515 518 511 + 518 514 511 513 514 520 518 521 514 521 520 514 + 522 521 518 521 522 523 490 524 494 490 525 524 + 490 513 525 513 520 525 524 525 526 495 494 524 + 495 524 527 524 526 527 528 527 526 529 525 520 + 521 529 520 530 526 525 529 530 525 521 523 529 + 529 523 531 529 531 530 530 528 526 530 532 528 + 528 533 527 528 534 533 530 531 532 535 532 531 + 528 532 534 535 534 532 387 407 517 536 517 407 + 516 517 519 536 519 517 536 537 519 536 407 538 + 407 408 538 536 538 539 536 539 540 518 519 522 + 522 519 537 522 541 523 536 540 537 522 537 541 + 541 537 540 541 542 543 414 538 408 414 539 538 + 544 540 539 414 416 545 414 545 539 546 545 416 + 544 539 545 544 545 547 541 540 548 544 548 540 + 541 548 542 542 548 549 544 549 548 544 547 549 + 542 549 550 550 549 551 552 523 543 552 531 523 + 552 535 531 541 543 523 552 543 553 535 554 534 + 552 553 535 555 535 553 555 554 535 555 556 554 + 542 557 543 558 543 557 558 553 543 558 559 553 + 542 550 557 550 560 557 558 557 560 558 560 559 + 555 553 559 555 561 556 555 559 561 562 559 560 + 562 561 559 495 527 502 503 502 563 502 527 564 + 533 564 527 502 564 563 565 563 564 503 563 566 + 503 566 504 567 566 563 565 567 563 568 504 566 + 568 566 567 533 565 564 533 569 565 565 569 570 + 533 534 569 571 569 534 571 570 569 565 570 567 + 567 570 572 568 567 572 573 568 572 570 574 572 + 570 575 574 568 573 504 507 504 573 576 505 507 + 574 573 572 577 573 574 577 507 573 576 507 577 + 571 534 554 571 554 556 571 556 578 571 575 570 + 579 574 575 571 578 575 579 575 578 580 556 561 + 580 578 556 580 561 581 579 578 582 583 578 580 + 583 582 578 579 577 574 579 584 577 585 577 584 + 579 582 584 583 584 582 506 465 498 576 506 505 + 585 576 577 199 586 587 199 587 200 200 587 588 + 200 588 203 203 588 589 586 590 587 591 587 590 + 591 588 587 591 589 588 586 592 590 591 590 593 + 592 593 590 591 593 594 592 595 593 596 594 593 + 596 593 595 203 589 211 211 597 212 211 589 597 + 598 589 591 598 597 589 212 597 215 214 215 235 + 599 235 215 599 215 597 599 597 600 598 591 594 + 598 594 601 598 600 597 598 601 600 596 601 594 + 602 600 601 599 600 603 602 604 600 603 600 604 + 592 605 595 605 606 595 596 595 606 596 606 607 + 605 608 606 609 606 608 605 610 608 609 608 611 + 610 611 608 596 607 601 602 601 607 602 607 612 + 609 607 606 609 612 607 602 613 604 602 612 613 + 614 604 613 609 615 612 613 612 615 609 611 615 + 616 617 613 616 613 615 618 237 236 618 236 235 + 599 619 235 618 235 619 620 618 619 620 621 618 + 622 240 237 622 237 621 618 621 237 622 621 623 + 599 603 619 620 619 603 614 624 603 620 603 624 + 620 624 625 620 625 621 626 621 625 626 623 621 + 627 625 624 627 628 625 626 625 628 626 628 629 + 630 629 628 622 251 240 622 631 251 251 632 250 + 251 631 632 622 623 631 633 631 623 634 632 631 + 633 634 631 635 250 632 635 254 250 635 636 254 + 635 632 634 635 634 637 635 637 636 626 629 623 + 633 623 629 633 638 634 633 629 639 633 639 638 + 634 638 640 637 634 640 637 640 641 642 640 638 + 642 638 639 642 641 640 642 643 641 614 603 604 + 614 627 624 644 627 614 614 613 617 614 617 644 + 630 628 627 630 627 645 627 644 645 630 645 646 + 647 644 617 616 648 617 647 617 648 647 645 644 + 647 649 645 646 645 649 647 650 649 647 648 650 + 651 649 650 630 639 629 630 652 639 630 646 652 + 653 639 652 653 652 646 642 639 654 653 654 639 + 642 654 643 653 655 654 655 643 654 653 646 656 + 651 646 649 651 656 646 651 657 656 653 656 658 + 653 658 655 655 658 659 660 656 657 660 658 656 + 660 659 658 610 661 611 661 662 611 661 663 662 + 661 664 663 662 615 611 662 665 615 616 615 665 + 616 665 666 662 667 665 662 663 667 668 665 667 + 668 666 665 664 669 663 664 670 669 671 670 664 + 669 667 663 667 669 672 668 667 672 673 669 670 + 673 672 669 616 666 648 674 648 666 674 650 648 + 651 650 675 674 675 650 668 676 666 674 666 676 + 668 677 676 678 676 677 674 676 678 674 678 675 + 651 675 679 651 679 657 680 679 675 681 657 679 + 680 681 679 660 657 682 660 682 683 681 682 657 + 681 684 682 685 682 684 680 675 678 680 678 686 + 680 686 687 680 684 681 685 684 688 689 688 684 + 680 687 684 689 684 687 668 672 677 672 690 677 + 691 678 677 691 686 678 691 677 690 692 690 672 + 691 690 693 691 693 694 686 695 687 691 696 686 + 686 696 695 687 695 697 689 687 697 689 697 698 + 699 697 695 699 695 696 699 700 697 691 694 696 + 694 701 696 699 696 701 699 701 700 702 700 701 + 702 701 703 254 636 255 343 255 636 704 343 636 + 704 344 343 704 705 344 704 636 706 637 706 636 + 704 707 705 348 345 344 705 348 344 708 346 348 + 708 348 709 705 707 709 705 709 348 637 641 706 + 710 706 641 710 704 706 710 707 704 710 711 707 + 712 710 641 712 641 643 712 711 710 713 709 707 + 713 707 711 713 714 709 713 715 714 712 716 711 + 713 711 716 712 717 716 718 713 716 715 713 718 + 708 357 346 708 358 357 708 719 358 708 709 714 + 708 714 719 720 719 714 721 358 719 721 359 358 + 721 722 359 361 359 722 361 722 723 721 724 722 + 721 719 725 721 725 724 723 722 724 720 714 715 + 720 725 719 720 726 725 720 715 727 728 715 718 + 728 727 715 720 727 726 726 727 729 730 724 725 + 730 725 726 723 724 731 730 731 724 730 726 732 + 731 730 732 733 712 643 733 717 712 655 734 643 + 733 643 734 735 736 733 735 733 734 716 717 718 + 733 736 717 737 717 736 737 718 717 737 738 718 + 737 736 739 735 739 736 740 738 737 740 737 739 + 655 659 734 735 734 659 741 735 659 741 742 735 + 660 743 659 741 659 743 744 741 743 735 742 739 + 745 739 742 740 739 745 740 745 746 741 747 742 + 745 742 747 744 747 741 748 746 745 747 748 745 + 728 718 738 728 729 727 728 738 729 749 726 729 + 750 729 738 740 750 738 749 729 750 749 732 726 + 749 751 732 752 732 751 749 753 751 749 750 753 + 752 751 754 753 754 751 740 746 750 755 753 750 + 755 750 746 748 756 746 755 746 756 755 756 757 + 757 753 755 758 754 753 758 753 757 758 757 759 + 361 398 397 361 723 760 361 760 398 723 731 760 + 398 760 761 762 761 760 401 396 398 401 398 761 + 401 402 400 401 763 402 401 761 764 765 764 761 + 401 764 763 765 766 764 763 764 766 762 760 731 + 762 767 761 762 731 768 762 768 767 769 768 731 + 769 731 732 769 770 768 771 768 770 765 761 767 + 765 767 772 768 772 767 765 772 766 773 766 772 + 774 766 773 771 772 768 771 773 772 402 763 411 + 411 763 775 775 412 411 775 776 412 775 763 777 + 763 766 777 775 778 776 775 777 778 415 412 776 + 415 776 779 415 779 416 546 416 779 780 776 778 + 780 779 776 780 781 779 782 779 781 774 777 766 + 774 778 777 774 783 778 774 773 784 785 784 773 + 774 784 783 783 784 786 780 778 787 783 787 778 + 780 787 781 788 781 787 783 789 787 790 789 783 + 788 787 789 752 769 732 752 770 769 752 791 770 + 752 754 792 752 792 791 793 770 791 793 791 792 + 771 794 773 771 770 794 785 773 794 793 794 770 + 793 795 794 785 794 796 794 795 796 758 792 754 + 793 792 797 758 759 792 759 798 792 798 797 792 + 798 799 797 793 797 795 800 796 795 800 795 801 + 802 795 797 802 797 799 802 801 795 785 786 784 + 785 803 786 790 783 786 803 790 786 785 796 803 + 800 803 796 804 790 803 790 805 789 788 789 805 + 804 805 790 806 807 805 806 805 804 800 808 803 + 809 804 803 809 803 808 800 801 808 810 808 801 + 809 808 811 810 811 808 806 804 812 812 804 809 + 806 812 813 809 811 812 814 812 811 815 813 812 + 814 815 812 660 683 743 744 743 683 744 683 816 + 685 683 682 685 816 683 685 817 816 818 744 816 + 818 816 817 744 819 747 818 819 744 819 748 747 + 748 819 820 748 820 821 818 820 819 818 822 820 + 820 822 823 685 688 817 824 817 688 825 818 817 + 825 817 824 689 824 688 826 825 824 826 824 827 + 825 822 818 825 828 822 829 822 828 829 823 822 + 826 828 825 826 830 828 829 828 830 831 829 830 + 748 821 756 832 833 756 832 756 821 820 823 821 + 832 821 823 832 834 833 832 835 834 756 833 757 + 836 757 833 836 759 757 836 837 759 836 833 834 + 836 834 838 836 838 837 832 823 839 829 839 823 + 832 839 835 840 835 839 831 839 829 840 839 841 + 831 841 839 840 841 842 834 835 843 834 843 838 + 840 843 835 844 838 843 844 845 838 840 846 843 + 840 842 846 844 843 846 844 846 847 689 698 824 + 698 827 824 698 697 700 698 700 848 698 848 827 + 849 827 848 849 826 827 849 830 826 849 850 830 + 830 850 851 852 849 848 852 850 849 853 851 850 + 702 848 700 852 848 854 702 854 848 702 703 855 + 702 855 854 856 852 854 852 857 850 853 850 857 + 856 857 852 856 854 855 858 856 855 856 859 857 + 858 859 856 831 830 851 831 851 860 831 860 841 + 842 841 860 853 860 851 861 842 860 853 862 860 + 861 860 862 842 863 846 864 846 863 861 863 842 + 864 863 865 861 865 863 853 857 862 866 862 857 + 866 857 859 866 867 862 866 868 867 861 862 869 + 861 869 865 867 869 862 870 865 869 870 869 867 + 870 867 871 798 759 837 798 837 799 872 837 845 + 837 838 845 872 799 837 872 873 799 802 799 873 + 802 873 874 802 874 801 810 801 874 872 875 873 + 876 873 875 876 874 873 876 877 874 876 878 877 + 872 845 879 844 879 845 844 847 879 872 879 875 + 880 875 879 880 879 847 880 847 881 880 878 875 + 876 875 878 882 878 880 810 874 877 810 877 883 + 810 883 811 884 883 877 884 885 883 814 811 883 + 814 886 815 814 883 885 814 885 886 884 877 878 + 887 885 884 887 884 878 887 878 888 887 889 885 + 889 886 885 889 890 886 887 891 889 889 891 890 + 864 847 846 864 881 847 880 881 882 864 892 881 + 864 865 892 893 882 881 893 881 892 888 878 882 + 893 894 882 888 882 894 888 894 895 870 892 865 + 893 892 896 870 896 892 870 897 896 893 896 894 + 896 898 894 887 888 895 887 895 899 900 899 895 + 887 899 891 901 891 899 900 895 894 900 894 898 + 900 902 899 900 898 902 901 899 902 901 902 903 + 671 673 670 673 692 672 692 693 690 692 904 693 + 904 694 693 904 905 694 905 701 694 701 905 703 + 905 906 703 703 907 855 906 907 703 858 855 907 + 858 908 859 909 908 858 907 909 858 909 910 908 + 866 859 908 866 908 911 866 911 868 912 868 911 + 910 911 908 910 912 911 867 868 871 913 871 868 + 912 913 868 913 914 871 870 871 897 914 897 871 + 914 915 897 915 896 897 915 898 896 916 902 898 + 915 916 898 917 903 902 916 917 902 546 918 545 + 919 547 545 919 545 918 782 546 779 782 918 546 + 782 920 918 919 918 920 551 549 547 919 551 547 + 919 921 551 550 551 922 922 551 923 919 920 921 + 924 551 921 924 923 551 924 925 923 782 781 926 + 782 926 920 788 926 781 927 920 926 927 928 920 + 788 929 926 788 930 929 927 926 929 927 929 931 + 920 928 921 924 921 928 924 928 925 932 925 928 + 927 931 928 931 933 928 933 932 928 550 922 560 + 562 560 934 922 934 560 922 923 935 922 935 934 + 935 923 925 935 936 934 562 581 561 562 934 936 + 562 936 937 562 937 581 935 925 938 938 925 939 + 935 938 936 938 940 936 932 939 925 932 941 939 + 942 939 941 942 938 939 942 940 938 940 937 936 + 943 937 940 942 944 940 943 940 945 945 940 944 + 788 805 930 930 805 807 930 931 929 930 946 931 + 930 807 946 947 946 807 948 933 931 948 931 946 + 932 933 941 948 941 933 948 949 941 948 946 950 + 948 951 949 806 813 807 947 807 813 947 813 952 + 947 950 946 947 952 950 815 952 813 953 950 952 + 948 950 951 953 954 950 950 954 951 955 951 954 + 942 941 956 941 949 956 942 956 957 958 956 949 + 958 949 951 958 957 956 942 957 944 945 944 957 + 959 945 957 955 958 951 958 960 957 955 960 958 + 955 961 960 959 957 960 959 960 962 959 962 963 + 583 580 581 943 581 937 583 581 964 943 964 581 + 965 583 964 943 966 964 943 945 966 967 964 966 + 967 965 964 583 965 584 968 584 965 945 969 966 + 959 969 945 967 966 969 970 967 969 959 963 969 + 970 969 963 970 963 971 967 972 965 970 972 967 + 968 965 972 971 972 970 815 973 952 953 952 973 + 815 886 973 974 973 886 953 973 975 974 975 973 + 953 975 954 976 954 975 974 886 890 974 890 977 + 974 978 975 976 975 978 974 977 978 955 954 961 + 976 961 954 962 960 961 979 961 976 979 962 961 + 962 980 963 979 980 962 979 976 978 979 978 981 + 979 982 980 979 981 982 977 890 891 901 977 891 + 901 983 977 984 978 977 984 977 983 901 903 983 + 984 983 985 986 985 983 984 981 978 984 985 981 + 987 982 981 987 981 985 985 988 987 989 963 980 + 989 971 963 989 980 982 990 989 982 990 971 989 + 991 972 971 992 972 991 990 991 971 990 982 993 + 987 993 982 990 993 994 988 993 987 990 994 991 + 995 991 994 996 994 993 968 585 584 992 968 972 + 995 992 991 997 995 994 986 983 903 917 986 903 + 986 998 985 998 988 985 988 996 993 997 994 996 + </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 + </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 + </DataArray> + </Cells> + </Piece> + </UnstructuredGrid> +</VTKFile> diff --git a/test/references/test_md_facet_tracertracer_mpfa_onep_lowdim-reference.vtp b/test/references/test_md_facet_tracertracer_mpfa_onep_lowdim-reference.vtp new file mode 100644 index 0000000000000000000000000000000000000000..b408aa215bfe2fd790a2ee0b7eaaa9f2cf6db6d5 --- /dev/null +++ b/test/references/test_md_facet_tracertracer_mpfa_onep_lowdim-reference.vtp @@ -0,0 +1,93 @@ +<?xml version="1.0"?> +<VTKFile type="PolyData" version="0.1" byte_order="LittleEndian"> + <PolyData> + <Piece NumberOfLines="100" NumberOfPoints="101"> + <CellData Scalars="p"> + <DataArray type="Float32" Name="p" NumberOfComponents="1" format="ascii"> + 106721 106704 106679 106650 106618 106584 106549 106512 106474 106436 106397 106357 + 106317 106275 106230 106185 106140 106095 106050 106005 105960 105916 105871 105827 + 105782 105738 105695 105651 105621 105606 105591 105577 105564 105552 105542 105535 + 105413 105413 105413 105412 105412 105412 105413 105413 105414 105415 105417 105418 + 105428 105446 105463 105481 105498 105516 105533 105550 105568 105585 105603 105620 + 105624 105615 105606 105598 105590 105583 105577 105573 106320 106319 106319 106319 + 106319 106318 106317 106316 106315 106313 106312 106310 106308 106305 106303 106301 + 106298 106298 106301 106303 105172 105219 105268 105312 105349 105381 105407 105424 + 105433 105445 105460 105476 + </DataArray> + <DataArray type="Float32" Name="process 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 + </DataArray> + </CellData> + <Points> + <DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii"> + 0 6.409 0 0.243615 6.37169 0 0.487231 6.33438 0 0.730846 6.29708 0 + 0.974462 6.25977 0 1.21808 6.22246 0 1.46169 6.18515 0 1.70531 6.14785 0 + 1.94892 6.11054 0 2.19254 6.07323 0 2.43615 6.03592 0 2.67977 5.99862 0 + 2.92338 5.96131 0 3.167 5.924 0 3.41427 5.88613 0 3.66153 5.84827 0 + 3.9088 5.8104 0 4.15607 5.77253 0 4.40333 5.73467 0 4.6506 5.6968 0 + 4.89787 5.65893 0 5.14513 5.62107 0 5.3924 5.5832 0 5.63967 5.54533 0 + 5.88693 5.50747 0 6.1342 5.4696 0 6.38147 5.43173 0 6.62873 5.39387 0 + 6.876 5.356 0 7.11438 5.3195 0 7.35275 5.283 0 7.59113 5.2465 0 + 7.8295 5.21 0 8.06787 5.1735 0 8.30625 5.137 0 8.54463 5.1005 0 + 8.783 5.064 0 5.088 0 0 5.16083 0.218083 0 5.23367 0.436167 0 + 5.3065 0.65425 0 5.37933 0.872333 0 5.45217 1.09042 0 5.525 1.3085 0 + 5.59783 1.52658 0 5.67067 1.74467 0 5.7435 1.96275 0 5.81633 2.18083 0 + 5.88917 2.39892 0 5.962 2.617 0 6.03817 2.84525 0 6.11433 3.0735 0 + 6.1905 3.30175 0 6.26667 3.53 0 6.34283 3.75825 0 6.419 3.9865 0 + 6.49517 4.21475 0 6.57133 4.443 0 6.6475 4.67125 0 6.72367 4.8995 0 + 6.79983 5.12775 0 6.9515 5.5825 0 7.027 5.809 0 7.1025 6.0355 0 + 7.178 6.262 0 7.2535 6.4885 0 7.329 6.715 0 7.4045 6.9415 0 + 7.48 7.168 0 3.626 10 0 3.599 9.76023 0 3.572 9.52047 0 + 3.545 9.28071 0 3.518 9.04094 0 3.491 8.80118 0 3.464 8.56141 0 + 3.437 8.32165 0 3.41 8.08188 0 3.383 7.84212 0 3.356 7.60235 0 + 3.329 7.36259 0 3.302 7.12282 0 3.275 6.88306 0 3.248 6.64329 0 + 3.221 6.40353 0 3.194 6.16376 0 3.13757 5.66149 0 3.09751 5.30423 0 + 3.043 4.818 0 9.3 3.493 0 8.50037 3.28315 0 7.84441 3.11101 0 + 7.3063 2.96979 0 6.86487 2.85394 0 6.50275 2.75891 0 6.20569 2.68095 0 + 5.69148 2.545 0 5.33453 2.45001 0 4.86354 2.32465 0 4.24205 2.15925 0 + 3.422 1.941 0 + </DataArray> + </Points> + <Lines> + <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii"> + 0 1 1 2 2 3 3 4 4 5 5 6 + 6 7 7 8 8 9 9 10 10 11 11 12 + 12 13 13 14 14 15 15 16 16 17 17 18 + 18 19 19 20 20 21 21 22 22 23 23 24 + 24 25 25 26 26 27 27 28 28 29 29 30 + 30 31 31 32 32 33 33 34 34 35 35 36 + 37 38 38 39 39 40 40 41 41 42 42 43 + 43 44 44 45 45 46 46 47 47 48 48 49 + 49 50 50 51 51 52 52 53 53 54 54 55 + 55 56 56 57 57 58 58 59 59 60 60 28 + 28 61 61 62 62 63 63 64 64 65 65 66 + 66 67 67 68 69 70 70 71 71 72 72 73 + 73 74 74 75 75 76 76 77 77 78 78 79 + 79 80 80 81 81 82 82 83 83 84 84 85 + 85 13 13 86 86 87 87 88 89 90 90 91 + 91 92 92 93 93 94 94 95 95 49 49 96 + 96 97 97 98 98 99 99 100 + </DataArray> + <DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii"> + 2 4 6 8 10 12 14 16 18 20 22 24 + 26 28 30 32 34 36 38 40 42 44 46 48 + 50 52 54 56 58 60 62 64 66 68 70 72 + 74 76 78 80 82 84 86 88 90 92 94 96 + 98 100 102 104 106 108 110 112 114 116 118 120 + 122 124 126 128 130 132 134 136 138 140 142 144 + 146 148 150 152 154 156 158 160 162 164 166 168 + 170 172 174 176 178 180 182 184 186 188 190 192 + 194 196 198 200 + </DataArray> + </Lines> + </Piece> + </PolyData> +</VTKFile> diff --git a/test/references/test_md_facet_tracertracer_mpfa_tracer_bulk-reference.vtu b/test/references/test_md_facet_tracertracer_mpfa_tracer_bulk-reference.vtu new file mode 100644 index 0000000000000000000000000000000000000000..4d6ef03a4fb4f7191e42b8fb94da05565ceb38c1 --- /dev/null +++ b/test/references/test_md_facet_tracertracer_mpfa_tracer_bulk-reference.vtu @@ -0,0 +1,1727 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian"> + <UnstructuredGrid> + <Piece NumberOfCells="1928" NumberOfPoints="999"> + <CellData Scalars="x^tracer_0"> + <DataArray type="Float32" Name="x^tracer_0" 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 1.18388e-38 8.29332e-32 3.41482e-30 2.71592e-33 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 3.23531e-20 0 0 0 0 0 7.38791e-25 2.67423e-23 6.0918e-22 4.82101e-27 3.10789e-30 1.20147e-28 + 1.56326e-25 1.16809e-23 3.56185e-25 2.72841e-19 3.61964e-22 1.11103e-20 1.12355e-17 1.60961e-17 6.49916e-19 5.18601e-22 1.60284e-23 1.99877e-20 + 2.2872e-18 1.45181e-22 7.25481e-21 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 7.84775e-16 1.31655e-15 7.42106e-17 5.47701e-14 0 7.5853e-14 3.95773e-15 1.98603e-19 7.25693e-18 1.46182e-16 4.86338e-18 + 1.47061e-19 0 0 2.11411e-12 1.92409e-12 0 0 4.85216e-11 3.4626e-15 1.70633e-16 9.47127e-14 2.24483e-17 + 8.90513e-13 1.89597e-11 1.05622e-15 3.32061e-14 0 0 0 0 0 0 0 0 + 0 0 0 5.29604e-10 0 0 0 0 1.82392e-10 3.66157e-13 8.86675e-12 5.61096e-09 + 6.9729e-11 1.40775e-09 0 0 0 0 0 0 3.68148e-08 0 4.18413e-08 2.22828e-11 + 0 1.8346e-09 1.05643e-07 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0.0293579 0.0910083 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0528113 0 0 0.0579371 0.214971 0.126109 0.250907 0.347514 0 0.0756368 0 0 + 0 0.0377621 0.0903295 0.312837 0.304694 0.096897 0.165825 0 0.191033 0 0 0 + 0 0 0 0.0805643 0.183599 0.057574 0.0105295 0.00370376 0 0 0 0 + 0 0 0.000725556 0.000163293 0 0 1.68739e-05 0.18852 0.0329232 0.0909743 0.27292 0.0454824 + 0.0654212 0.014473 0.00218753 0.000544746 0.010007 0.0035065 0.000383402 0.233131 0.158739 0.0341786 0.0710433 0 + 0 0 0 0.000895476 0.00918814 0.000159003 0 0 0 6.67521e-05 7.68408e-05 1.15331e-05 + 1.14218e-06 2.36083e-06 8.85108e-07 2.06829e-07 5.82049e-09 1.30642e-07 1.18165e-08 1.32051e-08 9.10717e-10 9.43091e-06 0 1.46392e-07 + 0 0 0 0 0 0 1.01168e-09 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 3.10381e-09 1.66228e-07 0 + 0 5.27591e-07 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1.4013e-45 0 0 0 0 0 + 0 0 0 6.27261e-30 0 3.70207e-28 0 0 1.26135e-26 2.49452e-24 0 0 + 0 0 0 0 7.88105e-23 0 1.42311e-20 6.17689e-19 0 0 0 0 + 0 0 0 1.39229e-08 8.34476e-12 7.44717e-14 0 2.23668e-17 1.73338e-15 5.34997e-19 0 0 + 0 0 0 0 0 0 0 0 7.37219e-21 1.59637e-22 3.39688e-24 0 + 0 1.0525e-31 2.78359e-26 5.77015e-28 1.03927e-29 4.45171e-15 1.95152e-13 2.85534e-10 3.94747e-11 1.36805e-12 3.68329e-14 6.2534e-17 + 1.21454e-18 7.65317e-16 2.91028e-20 0.000216591 0 0 4.56836e-05 0 0 0 0 0 + 0.000141651 2.61872e-06 5.33434e-08 0 3.34776e-09 1.67137e-10 0 5.91926e-22 2.05602e-25 1.38171e-23 0.000288238 2.19866e-05 + 7.07726e-29 4.18829e-27 1.01058e-31 1.26323e-30 0.000281548 1.8219e-05 0.000237242 2.15312e-05 1.38942e-05 9.32994e-07 3.96235e-08 4.93994e-07 + 3.09831e-11 8.36253e-12 1.19257e-12 5.0855e-14 3.0451e-08 5.16731e-07 7.95524e-10 2.20333e-08 1.27008e-09 3.21496e-11 0 0 + 0 0 2.40161e-39 2.15112e-37 1.35926e-43 3.57878e-41 1.12104e-44 7.49695e-43 1.30739e-35 1.93882e-33 2.33968e-35 3.63684e-37 + 6.94666e-41 4.59289e-39 1.29677e-09 1.58005e-07 2.65143e-08 1.54085e-06 0 0 0 0 2.68805e-14 3.2656e-12 + 2.44881e-15 5.03399e-17 5.81181e-16 1.1731e-13 1.23184e-12 3.76847e-14 2.95867e-11 3.37729e-11 1.10691e-12 3.59975e-09 2.991e-08 1.34264e-07 + 2.56645e-06 3.66712e-06 6.57459e-05 1.20281e-09 4.12925e-11 3.56703e-09 2.77993e-06 6.15378e-05 1.09555e-07 6.16235e-05 1.57641e-33 2.59724e-35 + 3.79369e-06 0.000331893 0.000296493 3.42579e-05 2.77706e-05 2.39879e-05 5.14709e-05 0.000275894 2.40281e-05 1.51464e-06 8.40966e-08 1.55583e-06 + 2.46546e-08 1.30547e-06 8.67808e-08 1.9374e-06 3.68661e-07 1.745e-08 9.01651e-11 4.28484e-09 1.93122e-10 6.11568e-12 1.24738e-09 1.15722e-09 + 6.91543e-11 1.15415e-12 1.88524e-11 9.60846e-13 0.000360422 2.358e-05 0.000193195 1.28516e-05 8.50443e-07 4.97611e-08 8.69332e-09 0.000178374 + 8.8533e-05 8.54558e-06 5.74052e-07 2.27098e-07 1.28233e-08 9.33435e-10 5.58607e-11 4.54469e-12 1.57535e-12 4.28168e-14 1.8288e-13 7.24262e-14 + 3.63208e-10 1.45266e-11 3.66687e-10 1.28752e-11 4.95913e-13 6.79904e-15 1.72725e-14 4.05113e-13 2.22865e-40 1.16123e-35 6.40173e-35 5.42724e-34 + 2.53122e-37 4.8313e-39 2.69414e-35 5.20266e-37 1.15229e-38 7.6383e-32 1.80129e-28 9.47163e-27 4.50189e-30 1.06549e-31 1.3175e-25 4.91812e-24 + 1.70051e-26 4.45969e-28 2.1091e-24 2.42143e-33 1.33434e-26 7.57832e-30 3.23721e-28 6.06792e-25 7.2079e-23 2.33526e-23 2.11554e-40 1.94769e-33 + 3.83149e-35 8.44813e-32 1.61926e-33 1.84722e-31 1.21349e-26 5.06021e-28 6.68046e-25 1.34974e-29 1.00695e-22 2.77497e-21 2.90036e-24 4.54189e-21 + 1.54873e-22 6.58898e-23 7.1137e-19 2.27744e-21 5.73835e-21 2.21619e-19 1.26483e-16 6.8787e-18 1.83584e-16 4.53769e-18 3.71495e-16 2.92367e-20 + 2.18006e-19 9.18468e-19 9.38549e-22 3.92665e-17 9.59014e-17 2.2797e-15 9.88146e-16 1.08457e-13 6.00337e-15 4.99379e-14 3.29915e-12 1.90242e-12 + 4.67776e-11 1.1827e-14 8.88186e-13 2.00533e-11 1.96311e-08 9.79267e-10 1.143e-08 4.3889e-11 3.90329e-13 4.75649e-15 4.08407e-10 2.42825e-09 + 7.20143e-14 4.53393e-12 6.44268e-14 1.43111e-12 1.11886e-10 8.65385e-10 4.68475e-11 2.80906e-18 8.46104e-20 8.04361e-17 8.85169e-15 1.88604e-16 + 6.6396e-18 1.87292e-13 5.67283e-15 3.96856e-12 1.28926e-10 6.37864e-12 4.26735e-13 9.98653e-14 3.76541e-26 1.62981e-19 4.33326e-15 2.46839e-12 + 8.69639e-09 1.37089e-10 4.98647e-10 2.26078e-16 2.17832e-14 1.48284e-18 8.24957e-14 4.67709e-17 2.2892e-08 9.73956e-07 6.06691e-12 3.40041e-11 + 6.53372e-08 1.53823e-09 5.22301e-15 4.67258e-13 1.4166e-12 1.31924e-19 3.75589e-11 3.80808e-13 4.1369e-18 9.89737e-16 4.32874e-16 4.88071e-18 + 1.91468e-19 2.69772e-06 3.91268e-09 1.25637e-07 1.2834e-27 5.75221e-26 3.85873e-06 2.30727e-07 7.73596e-11 6.34271e-14 4.00272e-12 1.99488e-10 + 7.23784e-09 5.1899e-24 7.70325e-06 7.88924e-07 2.38301e-22 1.83383e-18 2.01041e-05 8.62884e-10 2.6567e-08 1.97262e-11 1.31239e-06 5.75171e-08 + 8.78016e-10 1.1994e-17 4.28882e-13 2.0448e-16 1.06063e-14 1.71451e-17 5.73407e-19 3.27082e-14 2.59567e-11 1.02254e-12 7.32132e-16 4.62485e-12 + 4.77553e-12 5.902e-11 1.6246e-12 3.29766e-14 2.44958e-11 4.86514e-11 4.08181e-12 6.1063e-21 6.53337e-16 6.63129e-15 2.63252e-16 1.74567e-12 + 1.37704e-13 2.54252e-13 8.34137e-10 6.31786e-11 1.32334e-09 1.43747e-10 4.86271e-09 2.02765e-12 1.82291e-13 1.64949e-12 5.82119e-10 2.10674e-09 + 2.74135e-10 1.22858e-16 5.06152e-15 2.53511e-14 9.51402e-13 3.1789e-11 1.18161e-12 1.72062e-09 2.54685e-05 2.09444e-06 2.10225e-09 5.26485e-05 + 6.52398e-08 9.42174e-08 2.54197e-09 5.20322e-08 4.54168e-08 2.18081e-06 5.54999e-05 8.48281e-05 5.08826e-05 2.72115e-05 2.50016e-06 2.6588e-06 + 4.88385e-05 1.06768e-07 4.99045e-05 2.69149e-06 6.35937e-05 2.48858e-06 5.73275e-11 1.43751e-09 2.89439e-09 8.04709e-08 1.25272e-07 1.53672e-10 + 7.76407e-09 1.17873e-07 1.91409e-06 2.37399e-06 5.43546e-05 2.13561e-06 2.8814e-05 4.87915e-05 4.72761e-06 6.07286e-05 2.79373e-05 5.79039e-05 + 1.43615e-05 2.78437e-05 9.8717e-06 1.18813e-06 8.14385e-06 1.04375e-06 4.78514e-06 1.73405e-07 4.24043e-06 7.15429e-08 2.2964e-09 3.71197e-09 + 4.78224e-10 1.1594e-10 1.89969e-12 9.50066e-07 6.43804e-09 3.04764e-05 4.56342e-11 1.00952e-10 8.6317e-13 2.53079e-05 1.59319e-11 2.18195e-12 + 3.83036e-14 8.81385e-15 4.68556e-14 2.89069e-16 9.73857e-16 3.82634e-14 1.02093e-14 4.13641e-16 1.0719e-06 1.5542e-08 2.0722e-10 6.41424e-12 + 2.19639e-06 4.5611e-08 2.13882e-07 4.77083e-07 6.58787e-08 2.42495e-06 1.98136e-08 1.60714e-07 6.56291e-09 6.74902e-10 1.08485e-08 1.419e-09 + 3.71387e-06 5.40786e-07 4.1605e-08 5.38984e-09 2.12055e-05 2.51636e-06 3.90863e-07 5.36511e-08 4.66191e-10 7.56815e-11 5.04865e-11 1.16213e-08 + 1.33208e-09 8.56925e-09 3.21973e-08 1.8943e-07 1.82155e-06 2.69003e-07 1.87072e-06 2.63502e-07 4.69888e-08 1.44706e-06 6.61779e-06 1.19651e-06 + 3.59129e-06 1.28239e-05 1.82947e-05 3.31014e-06 5.34612e-06 8.39475e-07 5.88319e-07 7.3407e-06 2.18067e-06 4.25616e-06 1.86352e-06 6.28644e-07 + 9.20852e-08 4.50805e-07 7.69217e-08 5.25961e-11 4.83946e-07 7.5716e-08 1.21965e-08 1.22452e-09 5.32758e-08 6.49207e-09 7.39962e-10 1.17333e-07 + 1.68267e-08 1.11122e-08 1.56641e-09 9.35895e-12 4.49786e-11 1.09957e-11 2.0636e-10 3.74496e-12 4.43381e-13 4.89399e-09 3.46234e-10 2.57119e-11 + 1.95032e-11 3.51162e-14 1.75647e-13 5.09751e-12 6.0011e-11 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 8.09255e-16 3.52508e-17 7.10823e-19 0 0 0 2.88226e-20 1.21874e-15 7.09988e-17 9.08926e-13 4.27091e-14 1.98617e-18 + 4.60785e-22 1.97556e-23 1.04346e-19 0 0 0 0 0 0 0 0 4.75149e-25 + 0 3.0203e-21 1.52786e-26 0 2.7014e-28 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 3.17065e-12 1.85274e-15 2.15376e-14 2.84346e-17 7.76297e-16 1.40781e-17 2.07762e-13 4.26886e-15 5.81364e-14 2.30888e-15 2.18745e-16 7.1742e-18 + 4.48572e-17 3.15177e-19 1.6232e-18 1.39053e-18 7.84951e-19 3.9828e-20 8.47536e-21 2.50544e-23 9.93852e-30 7.25495e-25 2.95484e-26 3.65469e-20 + 1.28098e-21 3.51126e-22 7.29393e-21 2.57541e-22 3.05774e-23 9.92189e-24 8.86292e-25 1.23147e-15 5.11071e-17 2.24308e-15 9.85351e-17 1.79131e-18 + 6.43848e-20 2.66998e-18 6.4596e-20 2.08806e-16 6.03945e-18 4.44035e-16 1.61535e-17 1.05716e-19 1.7515e-19 5.60727e-21 8.7951e-21 2.78951e-21 + 1.25224e-21 3.36952e-23 1.17826e-24 1.97854e-26 3.15046e-25 1.1399e-26 3.26445e-21 2.69083e-23 1.81039e-22 5.20765e-24 1.00728e-24 1.37137e-26 + 1.12446e-25 1.39915e-31 4.85408e-33 1.93876e-34 0 0 7.59446e-36 8.60709e-39 1.88218e-26 8.86251e-28 6.38586e-28 9.45744e-30 + 2.78988e-31 1.93807e-29 1.00979e-32 0 1.99012e-40 0 0 0 0 6.01017e-42 4.11755e-34 5.7485e-36 + 1.42932e-43 0 4.2039e-45 8.94593e-28 1.97889e-29 3.5862e-28 4.911e-30 5.73864e-31 1.00114e-32 1.8948e-31 4.85135e-28 3.56001e-27 + 1.16749e-29 9.20021e-32 5.31139e-31 3.45334e-34 3.76413e-33 1.29486e-35 2.18665e-37 5.54641e-39 3.60543e-37 1.8269e-40 9.43333e-33 1.19417e-34 + 3.85899e-34 1.21751e-36 3.72413e-38 1.13424e-35 1.15032e-39 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 4.87932e-42 0 0 1.56945e-43 2.43868e-41 4.2039e-45 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 9.7723e-18 1.18746e-15 2.55276e-17 4.90775e-19 2.43289e-19 + 1.54574e-20 7.51816e-19 1.11941e-09 4.24215e-11 1.77073e-12 1.22526e-06 6.98596e-08 4.21106e-14 1.18276e-10 4.14577e-09 4.54129e-09 3.00202e-22 + 4.9308e-22 6.9416e-24 1.70048e-23 4.7721e-15 2.95875e-25 1.09671e-26 7.93146e-25 1.91739e-18 1.02701e-13 4.98269e-12 2.73912e-10 6.76063e-11 + 2.16162e-16 1.01175e-13 5.04208e-12 6.17824e-06 1.34745e-07 9.36369e-07 1.13149e-06 2.80615e-06 6.95976e-08 4.15853e-07 1.16177e-10 6.64817e-08 + 1.17674e-08 1.10992e-09 3.54264e-07 4.49599e-08 7.46131e-07 1.15373e-07 6.13882e-09 7.44094e-10 3.71248e-08 1.5155e-07 1.2374e-07 1.74217e-08 + 2.79675e-09 3.78248e-08 7.60066e-10 7.17664e-09 1.75792e-28 7.33713e-30 7.32217e-20 3.40253e-21 4.03491e-23 2.12749e-24 6.78033e-15 1.84673e-16 + 5.07343e-11 4.87604e-12 5.45873e-13 8.84788e-18 4.19235e-14 3.60097e-33 3.34889e-27 1.34754e-28 8.09229e-26 1.99785e-27 1.71534e-31 8.43009e-29 + 5.38766e-19 3.35747e-30 2.33438e-20 1.56419e-21 9.58954e-09 1.1997e-09 1.43997e-09 1.8727e-10 5.00448e-12 1.30989e-10 4.39045e-09 8.73094e-10 + 7.39099e-11 4.42143e-13 1.30743e-11 3.41331e-14 1.50112e-15 9.73036e-13 5.2945e-14 2.98769e-15 8.92931e-13 2.34459e-10 8.33129e-13 2.11059e-11 + 5.23739e-14 5.86538e-12 9.47779e-11 4.7812e-13 2.33509e-14 2.72919e-15 1.01992e-16 6.65267e-12 5.73389e-12 4.8522e-13 3.16594e-14 3.20609e-13 + 2.23968e-14 9.42194e-16 9.09665e-16 1.61986e-15 2.81655e-17 5.49335e-17 5.28383e-33 2.02122e-34 8.22562e-43 2.10195e-44 6.7575e-36 2.06126e-38 + 1.03241e-31 4.46117e-33 0 0 5.2352e-40 6.01784e-35 0 7.10872e-23 4.80122e-25 1.2119e-16 1.6693e-26 3.46691e-18 + 1.13354e-16 1.7035e-19 1.61868e-36 2.80003e-38 4.24923e-21 6.34984e-40 0 0 0 0 0 0 + 0 0 0 0 8.98372e-42 0 0 6.76938e-18 2.66925e-19 3.12569e-20 1.05871e-21 7.28415e-21 + 1.84561e-18 6.12432e-20 2.27969e-22 6.23717e-24 1.9478e-43 1.4732e-25 0 3.23878e-24 8.68048e-26 7.26471e-28 4.86067e-13 7.60679e-19 + 1.09853e-21 6.84356e-28 0 0 0 0 0 1.31218e-29 + </DataArray> + <DataArray type="Float32" Name="X^tracer_0" 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 1.97314e-40 1.38222e-33 5.69137e-32 4.52654e-35 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 5.39217e-22 0 0 0 0 0 1.23132e-26 4.45705e-25 1.0153e-23 8.03501e-29 5.17982e-32 2.00246e-30 + 2.60543e-27 1.94682e-25 5.93642e-27 4.54735e-21 6.03273e-24 1.85172e-22 1.87259e-19 2.68268e-19 1.08319e-20 8.64336e-24 2.67139e-25 3.33128e-22 + 3.81199e-20 2.41969e-24 1.20913e-22 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1.30796e-17 2.19425e-17 1.23684e-18 9.12835e-16 0 1.26422e-15 6.59621e-17 3.31006e-21 1.20949e-19 2.43637e-18 8.10563e-20 + 2.45102e-21 0 0 3.52352e-14 3.20682e-14 0 0 8.08693e-13 5.77101e-17 2.84389e-18 1.57855e-15 3.74138e-19 + 1.48419e-14 3.15995e-13 1.76036e-17 5.53435e-16 0 0 0 0 0 0 0 0 + 0 0 0 8.82673e-12 0 0 0 0 3.03986e-12 6.10261e-15 1.47779e-13 9.3516e-11 + 1.16215e-12 2.34625e-11 0 0 0 0 0 0 6.1358e-10 0 6.97355e-10 3.7138e-13 + 0 3.05766e-11 1.76071e-09 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0.000489299 0.0015168 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0.000880188 0 0 0.000965619 0.00358285 0.00210182 0.00418178 0.0057919 0 0.00126061 0 0 + 0 0.000629368 0.00150549 0.00521395 0.00507823 0.00161495 0.00276375 0 0.00318388 0 0 0 + 0 0 0 0.00134274 0.00305998 0.000959567 0.000175492 6.17293e-05 0 0 0 0 + 0 0 1.20926e-05 2.72155e-06 0 0 2.81231e-07 0.00314201 0.000548719 0.00151624 0.00454867 0.00075804 + 0.00109035 0.000241216 3.64588e-05 9.07909e-06 0.000166783 5.84416e-05 6.39003e-06 0.00388551 0.00264565 0.000569643 0.00118406 0 + 0 0 0 1.49246e-05 0.000153136 2.65004e-06 0 0 0 1.11253e-06 1.28068e-06 1.92219e-07 + 1.90363e-08 3.93471e-08 1.47518e-08 3.44716e-09 9.70081e-11 2.17737e-09 1.96942e-10 2.20085e-10 1.51786e-11 1.57182e-07 0 2.43987e-09 + 0 0 0 0 0 0 1.68613e-11 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 5.17302e-11 2.77046e-09 0 + 0 8.79318e-09 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1.04544e-31 0 6.17012e-30 0 0 2.10224e-28 4.15754e-26 0 0 + 0 0 0 0 1.31351e-24 0 2.37186e-22 1.02948e-20 0 0 0 0 + 0 0 0 2.32048e-10 1.39079e-13 1.24119e-15 0 3.72781e-19 2.88896e-17 8.91662e-21 0 0 + 0 0 0 0 0 0 0 0 1.2287e-22 2.66062e-24 5.66147e-26 0 + 0 1.75417e-33 4.63932e-28 9.61692e-30 1.73212e-31 7.41952e-17 3.25253e-15 4.7589e-12 6.57913e-13 2.28009e-14 6.13881e-16 1.04223e-18 + 2.02423e-20 1.27553e-17 4.85046e-22 3.60986e-06 0 0 7.61393e-07 0 0 0 0 0 + 2.36085e-06 4.36454e-08 8.89057e-10 0 5.5796e-11 2.78563e-12 0 9.86544e-24 3.42671e-27 2.30286e-25 4.80397e-06 3.66443e-07 + 1.17954e-30 6.98048e-29 1.68431e-33 2.10538e-32 4.69247e-06 3.0365e-07 3.95403e-06 3.58853e-07 2.3157e-07 1.55499e-08 6.60391e-10 8.23324e-09 + 5.16386e-13 1.39375e-13 1.98761e-14 8.47583e-16 5.07517e-10 8.61218e-09 1.32587e-11 3.67222e-10 2.1168e-11 5.35827e-13 0 0 + 0 0 4.00267e-41 3.5852e-39 2.8026e-45 5.96953e-43 0 1.26117e-44 2.17899e-37 3.23137e-35 3.89946e-37 6.0614e-39 + 1.15747e-42 7.65487e-41 2.16129e-11 2.63342e-09 4.41904e-10 2.56808e-08 0 0 0 0 4.48008e-16 5.44267e-14 + 4.08136e-17 8.38999e-19 9.68634e-18 1.95516e-15 2.05307e-14 6.28079e-16 4.93112e-13 5.62882e-13 1.84485e-14 5.99959e-11 4.985e-10 2.23774e-09 + 4.27741e-08 6.11187e-08 1.09577e-06 2.00469e-11 6.88208e-13 5.94505e-11 4.63322e-08 1.02563e-06 1.82591e-09 1.02706e-06 2.62735e-35 4.32873e-37 + 6.32282e-08 5.53155e-06 4.94156e-06 5.70965e-07 4.62844e-07 3.99799e-07 8.57848e-07 4.59823e-06 4.00468e-07 2.52439e-08 1.40161e-09 2.59305e-08 + 4.1091e-10 2.17578e-08 1.44635e-09 3.229e-08 6.14435e-09 2.90833e-10 1.50275e-12 7.14141e-11 3.2187e-12 1.01928e-13 2.07896e-11 1.92869e-11 + 1.15257e-12 1.92359e-14 3.14206e-13 1.60141e-14 6.00703e-06 3.93001e-07 3.21992e-06 2.14193e-07 1.41741e-08 8.29352e-10 1.44889e-10 2.9729e-06 + 1.47555e-06 1.42426e-07 9.56753e-09 3.78497e-09 2.13721e-10 1.55572e-11 9.31011e-13 7.57448e-14 2.62558e-14 7.13614e-16 3.048e-15 1.2071e-15 + 6.05346e-12 2.42109e-13 6.11145e-12 2.14587e-13 8.26521e-15 1.13317e-16 2.87875e-16 6.75188e-15 3.71484e-42 1.93538e-37 1.06696e-36 9.04539e-36 + 4.21869e-39 8.05214e-41 4.49023e-37 8.6711e-39 1.92048e-40 1.27305e-33 3.00215e-30 1.5786e-28 7.50316e-32 1.77581e-33 2.19584e-27 8.19687e-26 + 2.83419e-28 7.43281e-30 3.51516e-26 4.03571e-35 2.2239e-28 1.26305e-31 5.39536e-30 1.01132e-26 1.20132e-24 3.89209e-25 3.52567e-42 3.24616e-35 + 6.38582e-37 1.40802e-33 2.69877e-35 3.0787e-33 2.02248e-28 8.43369e-30 1.11341e-26 2.24956e-31 1.67826e-24 4.62494e-23 4.83393e-26 7.56982e-23 + 2.58122e-24 1.09816e-24 1.18562e-20 3.79574e-23 9.56392e-23 3.69366e-21 2.10805e-18 1.14645e-19 3.05974e-18 7.56282e-20 6.19159e-18 4.87278e-22 + 3.63343e-21 1.53078e-20 1.56425e-23 6.54441e-19 1.59836e-18 3.7995e-17 1.64691e-17 1.80762e-15 1.00056e-16 8.32298e-16 5.49859e-14 3.17071e-14 + 7.79626e-13 1.97116e-16 1.48031e-14 3.34222e-13 3.27185e-10 1.63211e-11 1.90499e-10 7.31484e-13 6.50548e-15 7.92748e-17 6.80678e-12 4.04708e-11 + 1.20024e-15 7.55656e-14 1.07378e-15 2.38519e-14 1.86477e-12 1.44231e-11 7.80792e-13 4.68177e-20 1.41017e-21 1.3406e-18 1.47528e-16 3.14339e-18 + 1.1066e-19 3.12153e-15 9.45471e-17 6.61427e-14 2.14877e-12 1.06311e-13 7.11225e-15 1.66442e-15 6.27568e-28 2.71635e-21 7.2221e-17 4.11399e-14 + 1.4494e-10 2.28482e-12 8.31078e-12 3.76796e-18 3.63054e-16 2.4714e-20 1.37493e-15 7.79514e-19 3.81533e-10 1.62326e-08 1.01115e-13 5.66735e-13 + 1.08895e-09 2.56371e-11 8.70502e-17 7.78764e-15 2.36101e-14 2.19873e-21 6.25981e-13 6.34679e-15 6.89483e-20 1.64956e-17 7.21457e-18 8.13452e-20 + 3.19114e-21 4.49621e-08 6.52113e-11 2.09395e-09 2.139e-29 9.58702e-28 6.43121e-08 3.84544e-09 1.28933e-12 1.05712e-15 6.67121e-14 3.3248e-12 + 1.20631e-10 8.64983e-26 1.28387e-07 1.31487e-08 3.97168e-24 3.05639e-20 3.35068e-07 1.43814e-11 4.42784e-10 3.2877e-13 2.18732e-08 9.58619e-10 + 1.46336e-11 1.99901e-19 7.14804e-15 3.408e-18 1.76771e-16 2.85752e-19 9.55678e-21 5.45136e-16 4.32611e-13 1.70424e-14 1.22022e-17 7.70808e-14 + 7.95922e-14 9.83667e-13 2.70767e-14 5.49611e-16 4.08263e-13 8.10857e-13 6.80302e-14 1.01772e-22 1.08889e-17 1.10521e-16 4.38754e-18 2.90946e-14 + 2.29507e-15 4.23753e-15 1.39023e-11 1.05298e-12 2.20557e-11 2.39578e-12 8.10451e-11 3.37941e-14 3.03818e-15 2.74916e-14 9.70199e-12 3.51124e-11 + 4.56891e-12 2.04763e-18 8.43586e-17 4.22519e-16 1.58567e-14 5.29817e-13 1.96935e-14 2.8677e-11 4.24475e-07 3.49073e-08 3.50375e-11 8.77474e-07 + 1.08733e-09 1.57029e-09 4.23661e-11 8.67203e-10 7.56947e-10 3.63468e-08 9.24999e-07 1.4138e-06 8.48043e-07 4.53525e-07 4.16693e-08 4.43133e-08 + 8.13975e-07 1.77946e-09 8.31741e-07 4.48582e-08 1.0599e-06 4.14763e-08 9.55458e-13 2.39584e-11 4.82398e-11 1.34118e-09 2.08787e-09 2.56121e-12 + 1.29401e-10 1.96455e-09 3.19015e-08 3.95665e-08 9.0591e-07 3.55936e-08 4.80234e-07 8.13192e-07 7.87936e-08 1.01214e-06 4.65621e-07 9.65066e-07 + 2.39358e-07 4.64062e-07 1.64528e-07 1.98021e-08 1.35731e-07 1.73958e-08 7.97523e-08 2.89008e-09 7.06738e-08 1.19238e-09 3.82733e-11 6.18662e-11 + 7.9704e-12 1.93233e-12 3.16615e-14 1.58344e-08 1.07301e-10 5.0794e-07 7.60569e-13 1.68253e-12 1.43862e-14 4.21798e-07 2.65532e-13 3.63658e-14 + 6.38393e-16 1.46897e-16 7.80926e-16 4.81782e-18 1.6231e-17 6.37724e-16 1.70155e-16 6.89402e-18 1.7865e-08 2.59034e-10 3.45366e-12 1.06904e-13 + 3.66065e-08 7.60184e-10 3.56469e-09 7.95139e-09 1.09798e-09 4.04158e-08 3.30226e-10 2.67857e-09 1.09382e-10 1.12484e-11 1.80808e-10 2.36499e-11 + 6.18979e-08 9.0131e-09 6.93416e-10 8.98307e-11 3.53425e-07 4.19394e-08 6.51438e-09 8.94185e-10 7.76984e-12 1.26136e-12 8.41441e-13 1.93688e-10 + 2.22013e-11 1.42821e-10 5.36621e-10 3.15717e-09 3.03592e-08 4.48338e-09 3.11786e-08 4.39171e-09 7.83147e-10 2.41176e-08 1.10296e-07 1.99419e-08 + 5.98548e-08 2.13732e-07 3.04912e-07 5.51689e-08 8.9102e-08 1.39913e-08 9.80531e-09 1.22345e-07 3.63445e-08 7.09359e-08 3.10587e-08 1.04774e-08 + 1.53475e-09 7.51342e-09 1.28203e-09 8.76602e-13 8.06576e-09 1.26193e-09 2.03275e-10 2.04087e-11 8.8793e-10 1.08201e-10 1.23327e-11 1.95555e-09 + 2.80444e-10 1.85204e-10 2.61068e-11 1.55983e-13 7.49643e-13 1.83262e-13 3.43933e-12 6.2416e-14 7.38968e-15 8.15665e-11 5.77056e-12 4.28533e-13 + 3.25054e-13 5.85269e-16 2.92745e-15 8.49584e-14 1.00018e-12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 1.34876e-17 5.87514e-19 1.1847e-20 0 0 0 4.80377e-22 2.03123e-17 1.18331e-18 1.51488e-14 7.11819e-16 3.31028e-20 + 7.67975e-24 3.2926e-25 1.7391e-21 0 0 0 0 0 0 0 0 7.91915e-27 + 0 5.03383e-23 2.54644e-28 0 4.50234e-30 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 5.28442e-14 3.0879e-17 3.5896e-16 4.73911e-19 1.29383e-17 2.34635e-19 3.4627e-15 7.11476e-17 9.6894e-16 3.84814e-17 3.64575e-18 1.1957e-19 + 7.4762e-19 5.25295e-21 2.70534e-20 2.31756e-20 1.30825e-20 6.638e-22 1.41256e-22 4.17574e-25 1.65642e-31 1.20916e-26 4.92474e-28 6.09114e-22 + 2.13497e-23 5.8521e-24 1.21565e-22 4.29236e-24 5.09624e-25 1.65365e-25 1.47715e-26 2.05245e-17 8.51784e-19 3.73847e-17 1.64225e-18 2.98551e-20 + 1.07308e-21 4.44997e-20 1.0766e-21 3.48009e-18 1.00657e-19 7.40058e-18 2.69225e-19 1.76194e-21 2.91916e-21 9.34545e-23 1.46585e-22 4.64918e-23 + 2.08706e-23 5.61586e-25 1.96376e-26 3.29756e-28 5.25076e-27 1.89984e-28 5.44075e-23 4.48471e-25 3.01732e-24 8.67942e-26 1.67879e-26 2.28562e-28 + 1.8741e-27 2.33192e-33 8.09013e-35 3.23127e-36 0 0 1.26574e-37 1.43451e-40 3.13696e-28 1.47709e-29 1.06431e-29 1.57624e-31 + 4.64979e-33 3.23012e-31 1.68298e-34 0 3.31687e-42 0 0 0 0 9.94922e-44 6.86258e-36 9.58084e-38 + 2.8026e-45 0 0 1.49099e-29 3.29815e-31 5.977e-30 8.18501e-32 9.5644e-33 1.66857e-34 3.158e-33 8.08559e-30 5.93335e-29 + 1.94581e-31 1.53337e-33 8.85232e-33 5.75556e-36 6.27356e-35 2.1581e-37 3.64442e-39 9.24409e-41 6.00905e-39 3.04502e-42 1.57222e-34 1.99029e-36 + 6.43166e-36 2.02918e-38 6.20688e-40 1.8904e-37 1.91726e-41 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 8.12753e-44 0 0 2.8026e-45 4.06377e-43 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1.62872e-19 1.97911e-17 4.25459e-19 8.17958e-21 4.05482e-21 + 2.57624e-22 1.25303e-20 1.86568e-11 7.07026e-13 2.95122e-14 2.04209e-08 1.16433e-09 7.01844e-16 1.97127e-12 6.90961e-11 7.56882e-11 5.00337e-24 + 8.218e-24 1.15693e-25 2.83414e-25 7.9535e-17 4.93124e-27 1.82786e-28 1.32191e-26 3.19565e-20 1.71168e-15 8.30448e-14 4.56521e-12 1.12677e-12 + 3.60269e-18 1.68625e-15 8.40347e-14 1.02971e-07 2.24575e-09 1.56061e-08 1.88581e-08 4.67692e-08 1.15996e-09 6.93089e-09 1.93629e-12 1.10803e-09 + 1.96123e-10 1.84986e-11 5.90441e-09 7.49332e-10 1.24355e-08 1.92288e-09 1.02314e-10 1.24016e-11 6.18747e-10 2.52583e-09 2.06233e-09 2.90362e-10 + 4.66125e-11 6.30413e-10 1.26678e-11 1.19611e-10 2.92987e-30 1.22285e-31 1.22036e-21 5.67089e-23 6.72485e-25 3.54581e-26 1.13005e-16 3.07789e-18 + 8.45571e-13 8.12673e-14 9.09788e-15 1.47465e-19 6.98725e-16 6.00162e-35 5.58149e-29 2.24591e-30 1.34872e-27 3.32976e-29 2.85889e-33 1.40501e-30 + 8.97943e-21 5.59578e-32 3.89063e-22 2.60699e-23 1.59826e-10 1.9995e-11 2.39995e-11 3.12116e-12 8.3408e-14 2.18316e-12 7.31742e-11 1.45516e-11 + 1.23183e-12 7.36905e-15 2.17905e-13 5.68885e-16 2.50186e-17 1.62173e-14 8.82417e-16 4.97948e-17 1.48822e-14 3.90765e-12 1.38855e-14 3.51766e-13 + 8.72898e-16 9.77563e-14 1.57963e-12 7.96866e-15 3.89182e-16 4.54865e-17 1.69986e-18 1.10878e-13 9.55649e-14 8.087e-15 5.27656e-16 5.34349e-15 + 3.7328e-16 1.57032e-17 1.51611e-17 2.69977e-17 4.69425e-19 9.15558e-19 8.80638e-35 3.3687e-36 1.4013e-44 0 1.12625e-37 3.43544e-40 + 1.72069e-33 7.43528e-35 0 0 8.72589e-42 1.00297e-36 0 1.18479e-24 8.00204e-27 2.01984e-18 2.78216e-28 5.77819e-20 + 1.88923e-18 2.83917e-21 2.69779e-38 4.66672e-40 7.08205e-23 1.05826e-41 0 0 0 0 0 0 + 0 0 0 0 1.49939e-43 0 0 1.12823e-19 4.44874e-21 5.20949e-22 1.76451e-23 1.21402e-22 + 3.07602e-20 1.02072e-21 3.79948e-24 1.03953e-25 2.8026e-45 2.45533e-27 0 5.39796e-26 1.44675e-27 1.21078e-29 8.10112e-15 1.2678e-20 + 1.83089e-23 1.14059e-29 0 0 0 0 0 2.18697e-31 + </DataArray> + <DataArray type="Float32" Name="rho" NumberOfComponents="1" format="ascii"> + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 + </DataArray> + <DataArray type="Float32" Name="process 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 + </DataArray> + </CellData> + <Points> + <DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii"> + 0 0 0 0.466523 0.491992 0 0.878185 0 0 0 0.932307 0 + 0.961615 0.822875 0 1.64269 0 0 1.42747 0.492645 0 0.551789 1.32642 0 + 1.53311 1.14845 0 1.10139 1.52125 0 1.99943 0.357377 0 2.30823 0 0 + 2.57212 0.468357 0 2.88762 0 0 3.07243 0.315753 0 3.06052 0.71411 0 + 2.00204 0.853365 0 2.10121 1.51602 0 2.59792 1.12015 0 3.31085 1.2944 0 + 0 1.7629 0 0.812499 1.99958 0 0.465807 2.34738 0 1.43203 2.1837 0 + 0 2.50287 0 0.384303 2.8568 0 0 3.16211 0 1.04959 2.40394 0 + 0.899731 2.84135 0 1.40955 2.7214 0 1.24877 3.27592 0 1.60492 1.68453 0 + 1.88819 1.9831 0 2.36102 2.17694 0 2.80645 1.75673 0 1.88539 2.49588 0 + 1.84585 3.08121 0 2.37176 2.83889 0 2.94792 2.57867 0 2.73736 3.28788 0 + 3.392 0 0 3.4499 0.396298 0 3.83109 0 0 3.8498 0.418347 0 + 4.09727 0.255625 0 4.21334 0 0 4.2158 0.542786 0 4.45214 0.290038 0 + 4.54611 0 0 4.69096 0.172055 0 4.51426 0.550192 0 4.75228 0.475731 0 + 3.56763 0.770573 0 3.98032 0.771483 0 3.87858 1.13946 0 4.32703 0.927642 0 + 4.69975 0.769258 0 4.35491 1.48167 0 4.67155 1.11257 0 4.83581 0 0 + 5.088 0 0 4.91281 0.235072 0 5.16083 0.218083 0 5.33147 0 0 + 5.61114 0 0 5.44341 0.247865 0 5.02266 0.416367 0 5.23367 0.436167 0 + 5.00771 0.638678 0 5.4416 0.483095 0 5.9324 0 0 5.70445 0.196076 0 + 6.30143 0 0 6.16857 0.247778 0 5.63884 0.402162 0 5.89647 0.330353 0 + 5.85275 0.58119 0 6.51338 0.224078 0 6.13168 0.536007 0 6.3752 0.438783 0 + 4.92565 0.910737 0 5.15306 0.826699 0 5.3065 0.65425 0 5.5856 0.675032 0 + 5.37933 0.872333 0 4.96446 1.15936 0 5.2065 1.05126 0 4.81914 1.42598 0 + 5.19945 1.29625 0 5.45217 1.09042 0 5.63883 0.927262 0 5.525 1.3085 0 + 5.81402 0.809448 0 6.10783 0.830237 0 6.44363 0.684984 0 5.88509 1.03352 0 + 6.3976 0.978143 0 5.6719 1.1349 0 5.80441 1.31686 0 6.10825 1.20343 0 + 5.97819 1.45383 0 6.41017 1.31688 0 6.18041 1.47049 0 3.422 1.941 0 + 3.84168 1.60316 0 4.24205 2.15925 0 4.81566 1.8359 0 4.86354 2.32465 0 + 3.61506 2.65603 0 3.26108 3.17828 0 3.7278 3.14514 0 4.13169 2.83123 0 + 4.65208 2.77416 0 4.41409 3.15826 0 5.07347 1.56651 0 5.18097 1.78701 0 + 5.35216 1.48743 0 5.59783 1.52658 0 5.4447 1.69893 0 5.16969 2.105 0 + 5.44703 1.91532 0 5.49288 2.16765 0 5.80972 1.5864 0 5.67067 1.74467 0 + 5.84625 1.81216 0 6.01927 1.66289 0 6.24374 1.72283 0 6.5434 1.58042 0 + 5.7435 1.96275 0 5.90603 2.02052 0 5.81633 2.18083 0 6.0964 1.92353 0 + 6.45076 1.84898 0 6.03755 2.22495 0 6.2866 2.12552 0 5.33453 2.45001 0 + 5.64488 2.34848 0 5.13994 2.72732 0 4.98338 3.00267 0 5.4754 2.78213 0 + 5.28913 3.12366 0 5.61888 3.03275 0 5.88917 2.39892 0 5.69148 2.545 0 + 5.962 2.617 0 6.125 2.49178 0 6.26196 2.34268 0 6.43627 2.52012 0 + 6.20569 2.68095 0 5.766 2.80924 0 5.8906 3.03325 0 6.03817 2.84525 0 + 6.50275 2.75891 0 6.2557 2.89949 0 6.11433 3.0735 0 0.555975 3.43027 0 + 0 3.74943 0 0.413182 3.86352 0 1.07268 3.78076 0 0 4.27267 0 + 0.668413 4.24234 0 0.389493 4.59206 0 0 4.73882 0 1.08408 4.175 0 + 1.47702 4.19742 0 0.714889 4.57039 0 1.05248 4.50733 0 1.00124 4.86221 0 + 1.72696 3.73769 0 2.25972 3.52822 0 2.22288 4.0144 0 2.66756 3.79837 0 + 3.03889 3.59787 0 3.06689 4.01314 0 1.88407 4.25987 0 2.26684 4.45775 0 + 1.62733 4.60737 0 1.34275 4.85742 0 2.00124 4.60393 0 2.67965 4.34873 0 + 2.3949 4.84009 0 3.21779 4.42897 0 3.043 4.818 0 0.335684 4.97337 0 + 0.68332 4.86271 0 0 5.15412 0 0.368907 5.36131 0 0.702823 5.18765 0 + 0 5.5241 0 1.06466 5.18991 0 1.39405 5.18954 0 0.757068 5.50005 0 + 0.515458 5.63682 0 1.13106 5.53207 0 0.257937 5.69239 0 0 5.85372 0 + 0.210371 5.91992 0 0.479868 5.88511 0 0 6.14738 0 0 6.409 0 + 0.243615 6.37169 0 0.332959 6.12773 0 0.595976 6.12715 0 0.487231 6.33438 0 + 0.807274 5.75476 0 0.74973 5.96733 0 1.03422 5.88336 0 1.51484 5.48684 0 + 1.313 5.72213 0 1.3045 5.97274 0 0.832101 6.14421 0 0.730846 6.29708 0 + 0.974462 6.25977 0 1.07267 6.09651 0 1.21808 6.22246 0 1.11603 6.45202 0 + 1.46169 6.18515 0 1.69732 5.07898 0 1.98637 4.91282 0 2.16004 5.17545 0 + 1.87108 5.40211 0 2.21482 5.49141 0 2.45063 5.26709 0 2.67621 5.07969 0 + 2.81638 5.33844 0 2.51707 5.56879 0 3.09751 5.30423 0 1.53341 5.79037 0 + 1.73489 5.64249 0 1.78439 5.89401 0 1.55907 6.0062 0 1.98842 5.66688 0 + 2.27169 5.77604 0 2.03751 5.89725 0 1.70531 6.14785 0 1.38444 6.45725 0 + 1.61219 6.3493 0 1.86341 6.37712 0 1.94892 6.11054 0 2.19254 6.07323 0 + 2.14759 6.27686 0 2.58172 5.81141 0 2.43615 6.03592 0 2.8058 5.65089 0 + 3.13757 5.66149 0 2.96427 5.79566 0 2.79099 5.84358 0 2.67977 5.99862 0 + 2.92338 5.96131 0 2.35793 6.20376 0 2.61055 6.25337 0 2.40283 6.37942 0 + 2.82162 6.11234 0 3.01307 6.12377 0 2.88958 6.29128 0 3.08376 6.29758 0 + 3.54279 3.64085 0 4.08839 3.41933 0 4.74865 3.22731 0 4.51016 3.45479 0 + 3.91466 3.81258 0 4.42264 3.78136 0 4.82718 3.54608 0 3.60679 4.16186 0 + 3.56533 4.52576 0 3.38099 4.7298 0 3.88105 4.49151 0 3.70539 4.84914 0 + 4.08969 4.14464 0 4.44575 4.19054 0 4.72883 4.07733 0 4.84136 3.83383 0 + 4.23102 4.47732 0 4.08806 4.79033 0 4.36101 4.71235 0 4.55466 4.52787 0 + 4.82627 4.40647 0 5.0946 3.39843 0 5.56976 3.29907 0 5.36166 3.41099 0 + 5.10031 3.79313 0 5.33371 3.68776 0 5.5587 3.60834 0 5.51544 3.87332 0 + 5.81933 3.26483 0 6.01693 3.23284 0 5.80195 3.54402 0 6.1905 3.30175 0 + 6.4123 3.1009 0 6.03244 3.48133 0 6.26667 3.53 0 6.41381 3.35722 0 + 5.76966 3.83487 0 6.01096 3.75305 0 6.17463 3.68755 0 6.34283 3.75825 0 + 6.2125 3.9279 0 4.99901 4.11381 0 5.31651 4.1099 0 5.60886 4.10554 0 + 5.16602 4.47853 0 5.46561 4.40864 0 4.74321 4.70419 0 4.96358 4.65032 0 + 5.13499 4.78698 0 5.39289 4.78122 0 5.63578 4.62268 0 5.83926 4.07538 0 + 6.02568 3.9822 0 5.79085 4.35592 0 5.98508 4.22174 0 6.419 3.9865 0 + 6.16462 4.18983 0 6.32386 4.13329 0 6.328 4.34748 0 6.09326 4.4347 0 + 5.83909 4.56628 0 6.0068 4.66792 0 6.31859 4.6579 0 3.37344 5.02712 0 + 3.69658 5.24168 0 3.96098 5.06095 0 3.431 5.29189 0 3.3108 5.49017 0 + 3.53335 5.51202 0 3.78835 5.53454 0 4.25023 5.00244 0 4.56056 4.88784 0 + 4.45081 5.23809 0 4.07149 5.33379 0 4.0317 5.59666 0 4.28956 5.51599 0 + 4.72119 5.13365 0 4.74432 5.4175 0 4.52427 5.52593 0 3.34449 5.68935 0 + 3.167 5.924 0 3.41427 5.88613 0 3.66153 5.84827 0 3.9088 5.8104 0 + 3.69661 6.06267 0 3.194 6.16376 0 3.42675 6.12223 0 3.221 6.40353 0 + 3.43465 6.38011 0 3.61853 6.2588 0 3.80127 6.28355 0 3.9189 6.12148 0 + 3.66627 6.44175 0 4.15607 5.77253 0 4.09455 5.97315 0 4.30414 5.97062 0 + 4.40333 5.73467 0 4.6506 5.6968 0 4.56336 5.9815 0 4.76589 5.89204 0 + 4.18483 6.19073 0 3.99188 6.31668 0 4.15907 6.4313 0 4.38078 6.35575 0 + 4.41387 6.16693 0 4.63623 6.33605 0 4.74251 6.09876 0 4.89635 4.91481 0 + 5.17087 5.03233 0 4.95394 5.21002 0 5.4158 5.1329 0 5.61382 4.96464 0 + 4.99096 5.45188 0 5.21352 5.35187 0 5.44304 5.39025 0 5.60048 5.2837 0 + 5.14513 5.62107 0 5.3924 5.5832 0 5.83796 4.83496 0 5.80001 5.13237 0 + 5.98963 5.05486 0 6.1001 4.88243 0 6.29415 4.92991 0 6.14564 5.18024 0 + 6.41668 5.07825 0 5.77755 5.35375 0 5.96065 5.29987 0 5.63967 5.54533 0 + 5.88693 5.50747 0 6.32573 5.24768 0 6.1342 5.4696 0 6.38147 5.43173 0 + 4.89787 5.65893 0 4.95266 5.82995 0 5.12348 5.9201 0 5.3405 5.7949 0 + 5.53611 5.69539 0 5.32337 6.03177 0 5.55684 5.89367 0 4.91592 6.03893 0 + 5.09532 6.19002 0 4.83114 6.2453 0 4.93442 6.4365 0 5.55815 6.13413 0 + 5.32435 6.23168 0 5.242 6.45581 0 5.4654 6.33862 0 5.78606 5.73748 0 + 6.03879 5.66624 0 5.77573 5.96372 0 6.06345 5.89131 0 6.30771 5.71051 0 + 6.26917 5.9306 0 5.77486 6.15453 0 5.96389 6.11079 0 5.66524 6.33192 0 + 5.88577 6.30339 0 6.18343 6.08796 0 6.40624 6.08405 0 6.08785 6.28547 0 + 6.30813 6.26613 0 6.72533 0 0 6.73678 0.455023 0 7.12553 0.368632 0 + 7.21227 0 0 7.56147 0.500559 0 7.77162 0 0 8.08675 0.374517 0 + 6.74453 0.865349 0 7.12116 0.74204 0 6.68429 1.21684 0 7.0774 1.15652 0 + 6.99972 1.51839 0 7.54786 1.12771 0 8.05896 0.870331 0 7.31899 1.45726 0 + 8.07724 1.43982 0 8.41413 0 0 8.62759 0.501696 0 9.15219 0 0 + 9.38622 0.615849 0 10 0 0 8.59652 1.16704 0 8.98155 0.943441 0 + 9.255 1.3968 0 10 1 0 6.78516 1.96366 0 6.50706 2.06785 0 + 6.53365 2.31674 0 7.30646 1.81209 0 7.1319 2.1878 0 7.66352 1.67161 0 + 8.03428 2.03627 0 7.52772 2.20685 0 6.78758 2.38138 0 6.73471 2.63004 0 + 7.12666 2.55028 0 6.86487 2.85394 0 6.67862 3.04956 0 7.3063 2.96979 0 + 7.53687 2.67229 0 7.89832 2.51605 0 7.84441 3.11101 0 8.57877 1.85018 0 + 8.45017 2.60265 0 9.21952 2.35937 0 10 2 0 8.50037 3.28315 0 + 9.06401 2.97679 0 10 3 0 6.6435 3.29949 0 6.52831 3.56952 0 + 6.9697 3.23454 0 6.8001 3.50031 0 7.08602 3.64713 0 7.44025 3.35268 0 + 6.77298 3.75087 0 6.5553 3.81823 0 6.97981 3.92195 0 7.78748 3.47459 0 + 7.55058 3.7347 0 7.31339 4.0018 0 8.08128 3.7407 0 7.79136 3.99696 0 + 6.71337 4.02602 0 6.49517 4.21475 0 6.80228 4.31974 0 7.01328 4.18394 0 + 6.57133 4.443 0 6.78633 4.5363 0 6.6475 4.67125 0 6.99731 4.49722 0 + 7.2803 4.37126 0 6.91324 4.75027 0 7.25326 4.73872 0 7.55878 4.23864 0 + 7.93609 4.29955 0 8.17644 4.06559 0 7.54578 4.56723 0 7.87516 4.67289 0 + 8.09641 4.5219 0 8.62963 3.91521 0 9.3 3.493 0 8.35041 4.35901 0 + 8.72127 4.39292 0 9.11062 4.28336 0 8.22399 4.75616 0 8.54922 4.66377 0 + 8.89958 4.76595 0 9.59135 4.35902 0 10 4 0 9.37796 4.85283 0 + 6.48974 4.85073 0 6.72367 4.8995 0 6.60421 5.03095 0 6.79983 5.12775 0 + 6.90447 4.966 0 7.11174 4.97057 0 6.99256 5.16547 0 6.59111 5.1985 0 + 6.62873 5.39387 0 6.53482 5.57883 0 6.876 5.356 0 6.73942 5.57454 0 + 7.21074 5.15218 0 7.11438 5.3195 0 6.9515 5.5825 0 7.23901 5.57115 0 + 7.60437 4.83537 0 7.40132 5.04155 0 7.67394 5.05964 0 7.92076 4.9551 0 + 7.8295 5.21 0 7.35275 5.283 0 7.59113 5.2465 0 7.51817 5.46231 0 + 7.73113 5.38609 0 8.06787 5.1735 0 7.98351 5.4192 0 7.73225 5.62915 0 + 6.61678 5.78352 0 6.83469 5.73403 0 6.43948 5.91129 0 6.6188 6.01622 0 + 6.81469 5.9179 0 7.027 5.809 0 7.1025 6.0355 0 7.28433 5.86582 0 + 6.78149 6.15419 0 6.58534 6.29286 0 6.40053 6.44037 0 6.8166 6.32846 0 + 6.92695 6.05415 0 6.97098 6.24033 0 7.178 6.262 0 6.99756 6.47748 0 + 7.46221 5.67635 0 7.57357 5.87349 0 7.99341 5.69163 0 7.8551 5.89993 0 + 8.1304 5.92638 0 7.27109 6.10514 0 7.44413 6.04746 0 7.66339 6.12223 0 + 7.43246 6.29642 0 7.94678 6.17393 0 7.71613 6.44807 0 8.40318 4.92164 0 + 8.18441 4.98868 0 8.30625 5.137 0 8.63578 4.89915 0 8.54463 5.1005 0 + 8.783 5.064 0 8.2191 5.3499 0 8.47687 5.37807 0 8.26101 5.64171 0 + 8.68902 5.2469 0 8.99742 5.13578 0 8.83893 5.4423 0 8.59014 5.64538 0 + 10 5 0 9.39602 5.44268 0 8.48844 5.96661 0 8.88548 5.7982 0 + 8.24819 6.19501 0 8.12827 6.5126 0 8.82119 6.10532 0 8.6253 6.424 0 + 9.28554 6.23245 0 10 6 0 0 6.67116 0 0.199982 6.57334 0 + 0.385433 6.50589 0 0.596235 6.53382 0 0.174179 6.78023 0 0.400102 6.7162 0 + 0 6.99074 0 0.270811 6.94974 0 0.492648 6.93296 0 0.20717 7.1766 0 + 0.423887 7.15526 0 0.896021 6.5616 0 0.673838 6.78422 0 1.18368 6.69869 0 + 1.0072 6.94184 0 0.694604 7.05938 0 0.959528 7.2429 0 1.36848 6.98502 0 + 1.22642 7.22096 0 0 7.3803 0 0.341151 7.40698 0 0.629965 7.33718 0 + 0.267773 7.68854 0 0.553189 7.61775 0 0 7.85519 0 0.40744 8.04131 0 + 0.807434 7.54082 0 1.15384 7.57914 0 1.47233 7.33273 0 0.759671 7.9206 0 + 1.14561 7.9725 0 1.47898 7.67243 0 1.6461 6.57911 0 1.4548 6.7239 0 + 1.67379 6.87292 0 1.92393 6.70954 0 2.14134 6.52147 0 2.19792 6.7289 0 + 1.60611 7.10253 0 1.87443 6.98798 0 2.06409 6.89969 0 1.82987 7.24414 0 + 2.03931 7.1064 0 2.24739 7.03817 0 2.18158 7.31988 0 2.37817 6.6208 0 + 2.55876 6.50356 0 2.43946 6.87154 0 2.65402 6.7312 0 2.77192 6.49518 0 + 3.03905 6.52127 0 2.93859 6.73895 0 2.64479 6.96707 0 2.52441 7.2067 0 + 2.82128 6.90267 0 3.04768 6.96886 0 2.8213 7.10729 0 3.06931 7.27952 0 + 1.70873 7.49099 0 1.98103 7.5375 0 2.29235 7.66354 0 1.80481 7.7342 0 + 1.57645 8.01866 0 2.07682 7.80048 0 1.95676 8.04075 0 2.34168 8.01682 0 + 2.40928 7.43796 0 2.63877 7.56172 0 2.80142 7.33589 0 2.95332 7.52422 0 + 2.61867 7.83887 0 2.64374 8.11127 0 2.84073 7.72715 0 3.12447 7.72918 0 + 2.92498 7.96886 0 0 8.43408 0 0.601719 8.40842 0 0.385508 8.80013 0 + 0 9.13977 0 0.969141 8.32722 0 1.34703 8.33578 0 0.798974 8.80804 0 + 1.24905 8.73951 0 0.663204 9.23299 0 0.415594 9.65258 0 0 10 0 + 1.20879 9.31412 0 0.868619 10 0 1.76701 8.35701 0 2.15763 8.32971 0 + 1.54023 8.61954 0 1.59207 8.99018 0 1.99594 8.72034 0 2.43174 8.27177 0 + 2.45264 8.5716 0 2.65949 8.33727 0 2.87747 8.23731 0 3.13748 8.12423 0 + 2.82615 8.51979 0 3.07295 8.36245 0 2.38342 8.95156 0 2.65762 8.80031 0 + 3.0745 8.56816 0 2.96801 8.76537 0 1.68918 9.44233 0 2.0837 9.24313 0 + 1.58118 10 0 1.98015 9.6642 0 2.367 9.63352 0 2.63784 9.05046 0 + 2.48979 9.28781 0 2.8753 9.00622 0 3.12605 9.01124 0 2.76691 9.24592 0 + 3.01159 9.26198 0 2.78121 9.52572 0 3.14041 9.50969 0 3.04751 9.74108 0 + 3.248 6.64329 0 3.52011 6.58041 0 3.11767 6.77178 0 3.4709 6.77504 0 + 3.91547 6.49989 0 3.70529 6.65461 0 3.275 6.88306 0 3.44221 6.95466 0 + 3.302 7.12282 0 3.66992 6.90377 0 3.89857 6.75504 0 3.89479 6.97999 0 + 3.5702 7.0839 0 3.48382 7.25286 0 3.73679 7.17383 0 4.12247 6.64225 0 + 4.07818 6.85138 0 4.33224 6.60111 0 4.49573 6.5037 0 4.63467 6.62325 0 + 4.49351 6.76111 0 4.30939 6.82388 0 4.26875 7.06555 0 4.05537 7.06631 0 + 3.93583 7.17571 0 4.09928 7.25892 0 4.49697 6.95191 0 4.71459 6.88136 0 + 4.55625 7.19528 0 3.329 7.36259 0 3.16642 7.49957 0 3.356 7.60235 0 + 3.4898 7.42538 0 3.65732 7.36615 0 3.89332 7.3758 0 3.5874 7.56775 0 + 3.81543 7.6202 0 3.383 7.84212 0 3.51004 7.73059 0 3.22059 7.94022 0 + 3.41 8.08188 0 3.68701 7.79954 0 3.96948 7.81566 0 3.53787 7.94361 0 + 3.79317 8.04519 0 4.32368 7.34406 0 4.10664 7.54894 0 4.52041 7.40659 0 + 4.72255 7.42984 0 4.39894 7.60394 0 4.5983 7.57488 0 4.22011 7.77972 0 + 4.1011 8.048 0 4.40117 7.92829 0 4.58705 7.75616 0 4.64481 7.97231 0 + 4.81788 6.60949 0 5.0847 6.65086 0 4.93075 6.7879 0 5.50087 6.53512 0 + 5.29879 6.64219 0 5.23212 6.78709 0 5.4219 6.79674 0 5.08677 6.83409 0 + 4.98494 6.99579 0 4.80075 7.14259 0 4.9671 7.31743 0 5.15563 7.13531 0 + 5.23029 6.9617 0 5.42094 7.07186 0 5.61248 6.87193 0 5.74859 6.52288 0 + 5.96294 6.49101 0 5.64151 6.68025 0 5.84317 6.73961 0 6.21278 6.51585 0 + 6.05548 6.68668 0 6.25135 6.78768 0 6.42796 6.67265 0 5.86682 7.02664 0 + 5.65046 7.10215 0 5.54791 7.30115 0 5.7521 7.25486 0 6.06877 6.90476 0 + 6.31086 7.06221 0 6.08495 7.12571 0 5.97295 7.32 0 4.8946 7.48854 0 + 4.82545 7.6833 0 5.06267 7.54753 0 5.26793 7.36234 0 5.27791 7.67683 0 + 5.45793 7.49402 0 5.06129 7.81315 0 4.876 7.94588 0 5.03125 8.11005 0 + 5.51004 7.69282 0 5.45043 7.89481 0 5.23318 7.98551 0 5.72234 7.52438 0 + 5.9989 7.5496 0 6.21083 7.33917 0 6.22335 7.58234 0 6.41829 7.49713 0 + 5.67844 7.82347 0 5.87775 7.74786 0 5.6319 8.06117 0 5.88049 7.98296 0 + 6.1198 7.8319 0 6.37284 7.74971 0 6.09252 8.13526 0 6.34394 8.02598 0 + 3.26351 8.27064 0 3.26009 8.46297 0 3.437 8.32165 0 3.61052 8.12504 0 + 3.72372 8.29784 0 3.91406 8.22169 0 3.63881 8.47976 0 3.86873 8.43758 0 + 3.24529 8.7302 0 3.464 8.56141 0 3.491 8.80118 0 3.33046 8.95452 0 + 3.62281 8.67597 0 3.80969 8.65483 0 3.71052 8.88269 0 3.95673 8.84417 0 + 4.08006 8.35836 0 4.28772 8.18915 0 4.32904 8.38097 0 4.198 8.50415 0 + 4.49639 8.16755 0 4.74436 8.18762 0 4.5536 8.35944 0 4.04603 8.61298 0 + 4.2868 8.65668 0 4.15142 8.80512 0 4.304 8.93112 0 4.44407 8.53968 0 + 4.65442 8.55901 0 4.76188 8.39467 0 4.51754 8.78372 0 4.7971 8.76455 0 + 3.29002 9.21471 0 3.518 9.04094 0 3.71425 9.14229 0 3.87614 9.02984 0 + 3.545 9.28071 0 3.90629 9.22434 0 3.37581 9.44339 0 3.34797 9.6647 0 + 3.572 9.52047 0 3.79776 9.408 0 3.599 9.76023 0 3.75748 9.61926 0 + 4.09292 9.05572 0 4.32106 9.20369 0 4.13188 9.3588 0 4.47151 9.06131 0 + 4.69529 9.0282 0 4.59737 9.26812 0 4.00944 9.60092 0 4.37 9.59672 0 + 4.22981 9.77758 0 4.42647 9.39055 0 4.71205 9.5254 0 4.58252 9.74961 0 + 4.95813 8.32886 0 5.18905 8.23384 0 5.40179 8.13483 0 5.1654 8.48249 0 + 5.36062 8.35933 0 5.5842 8.26959 0 5.42216 8.62057 0 4.89888 8.53841 0 + 5.08008 8.71328 0 4.94075 8.99006 0 5.19324 8.94705 0 5.81721 8.2199 0 + 5.74643 8.46814 0 6.00647 8.42432 0 6.32281 8.39747 0 5.83409 8.79016 0 + 5.44819 8.94733 0 6.1622 8.64946 0 6.42707 8.74186 0 6.22385 8.9554 0 + 4.85245 9.30562 0 5.09029 9.21503 0 5.37915 9.26956 0 5.66606 9.11636 0 + 5.13789 9.60286 0 4.89915 9.73046 0 5.48015 9.69204 0 5.97533 9.19376 0 + 5.69352 9.381 0 6.36781 9.29225 0 6.00703 9.62794 0 6.46084 9.67456 0 + 2.16571 10 0 2.64523 10 0 3.03859 10 0 3.36129 10 0 + 3.80918 9.80668 0 3.626 10 0 3.88619 10 0 4.02257 9.83704 0 + 4.17825 10 0 4.50607 10 0 4.87403 10 0 5.28706 10 0 + 5.75067 10 0 6.27105 10 0 6.56129 6.52496 0 6.7557 6.49547 0 + 6.66001 6.73292 0 6.83795 6.64989 0 7.2535 6.4885 0 7.1605 6.64569 0 + 7.00332 6.71119 0 7.16277 6.86002 0 6.47752 6.89682 0 6.68686 6.9737 0 + 6.89782 6.91714 0 6.55241 7.08207 0 6.51915 7.28206 0 6.76764 7.19557 0 + 7.10175 7.05487 0 6.98742 7.20298 0 7.46298 6.54078 0 7.329 6.715 0 + 7.58379 6.7559 0 7.83351 6.70232 0 7.4045 6.9415 0 7.2638 7.05373 0 + 7.75219 6.95144 0 7.20637 7.24282 0 7.48 7.168 0 8.06449 6.86612 0 + 7.70852 7.18319 0 7.95575 7.24596 0 6.701 7.46571 0 6.56149 7.65281 0 + 7.00005 7.41033 0 7.21479 7.44889 0 6.8434 7.73126 0 7.11931 7.64701 0 + 6.57017 7.90813 0 6.78 8.07796 0 7.04436 8.00568 0 7.27653 7.84115 0 + 7.38037 7.36324 0 7.62918 7.42907 0 7.36787 7.58104 0 7.93021 7.6928 0 + 7.56761 7.79688 0 7.38296 8.16713 0 7.67826 8.1118 0 8.23552 7.99998 0 + 8.4882 6.83187 0 9.06394 6.88012 0 8.31347 7.11268 0 8.73375 7.19572 0 + 10 7 0 8.33931 7.46635 0 8.70007 7.65729 0 8.76603 8.22375 0 + 9.26502 7.63929 0 6.56859 8.22265 0 6.65907 8.56601 0 6.86739 8.35862 0 + 7.1616 8.3646 0 6.65937 8.99616 0 7.01434 8.73456 0 7.54875 8.53655 0 + 7.969 8.38454 0 7.51869 9.01375 0 8.04652 8.82267 0 6.80315 9.45262 0 + 7.11468 9.14932 0 7.44429 9.48266 0 6.85516 10 0 7.94359 9.35676 0 + 8.24673 10 0 8.33594 8.45169 0 8.6806 8.80926 0 9.35895 8.48055 0 + 10 8 0 8.51727 9.40201 0 9.2986 9.29708 0 10 9 0 + 9.07278 10 0 10 10 0 7.5108 10 0 + </DataArray> + </Points> + <Cells> + <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii"> + 0 1 2 0 3 1 2 1 4 5 2 6 + 2 4 6 3 7 1 4 1 7 4 8 6 + 4 7 9 4 9 8 5 6 10 11 5 10 + 11 10 12 13 11 12 14 13 12 15 14 12 + 16 6 8 16 10 6 16 8 17 16 12 10 + 18 12 16 18 15 12 18 16 17 18 19 15 + 3 20 7 20 21 7 20 22 21 21 9 7 + 21 23 9 20 24 22 24 25 22 24 26 25 + 21 22 27 28 27 22 21 27 23 23 27 29 + 28 22 25 28 29 27 28 30 29 31 8 9 + 31 17 8 31 32 17 31 9 23 31 23 32 + 33 17 32 18 17 34 18 34 19 33 34 17 + 23 35 32 23 29 35 33 32 35 36 35 29 + 36 37 35 33 35 37 33 37 38 33 38 34 + 39 38 37 40 13 14 40 14 41 15 41 14 + 42 40 41 42 41 43 42 43 44 45 42 44 + 46 44 43 45 44 47 48 45 47 48 47 49 + 46 47 44 46 50 47 51 49 47 51 47 50 + 52 41 15 52 43 41 52 53 43 52 54 53 + 52 15 19 52 19 54 46 43 53 55 46 53 + 55 50 46 51 50 56 55 56 50 55 53 54 + 55 54 57 55 58 56 55 57 58 59 48 49 + 60 59 61 62 63 60 64 63 65 59 49 61 + 60 61 62 62 61 66 51 61 49 51 66 61 + 62 65 63 62 66 67 62 67 65 67 66 68 + 67 69 65 70 64 71 72 70 73 64 65 71 + 74 71 65 70 71 75 74 65 69 74 75 71 + 76 75 74 70 75 73 72 73 77 75 78 73 + 76 78 75 79 73 78 51 56 68 51 68 66 + 80 68 56 80 81 68 67 68 82 82 68 81 + 67 82 69 82 83 69 82 81 84 82 84 83 + 80 56 58 80 58 85 80 85 86 87 85 58 + 87 88 85 80 86 81 84 81 86 84 86 89 + 84 89 90 88 86 85 89 86 88 89 88 91 + 74 69 83 76 74 83 76 83 92 90 92 83 + 84 90 83 76 93 78 79 78 94 94 78 93 + 76 92 93 95 93 92 96 94 93 89 97 90 + 95 92 90 95 90 97 89 91 97 91 98 97 + 95 97 98 95 99 93 96 93 99 95 98 99 + 98 100 99 96 99 101 102 101 99 103 19 34 + 54 19 104 103 104 19 103 34 38 57 54 104 + 105 57 104 87 58 57 87 57 106 103 105 104 + 105 106 57 107 106 105 103 38 108 103 108 105 + 108 38 109 108 109 110 108 110 111 105 108 111 + 107 105 112 105 111 112 113 112 111 87 114 88 + 87 106 114 115 114 106 88 114 116 91 88 116 + 91 116 117 115 116 114 117 116 118 115 118 116 + 115 106 119 107 119 106 115 119 120 115 120 118 + 121 120 119 91 117 98 117 122 98 98 122 100 + 117 123 122 117 118 123 123 124 122 125 122 124 + 102 99 100 102 100 125 125 100 122 102 125 126 + 127 102 126 123 118 120 123 120 128 123 128 124 + 128 129 124 128 120 121 128 121 130 128 130 129 + 131 125 124 131 126 125 131 124 129 131 132 126 + 131 129 133 130 133 129 131 134 132 131 133 134 + 135 119 107 135 121 119 135 136 121 135 107 137 + 107 112 137 138 137 112 135 137 139 138 140 137 + 139 137 140 141 139 140 130 121 136 130 142 133 + 130 136 142 143 136 135 142 136 143 144 142 143 + 142 145 133 146 134 133 146 133 145 144 145 142 + 146 145 147 148 147 145 143 135 139 143 139 149 + 144 143 149 141 149 139 141 150 149 151 149 150 + 144 148 145 144 149 151 151 148 144 152 148 153 + 151 150 154 151 153 148 151 154 153 26 155 25 + 26 156 155 156 157 155 28 25 155 28 155 30 + 158 155 157 158 30 155 156 159 157 159 160 157 + 159 161 160 159 162 161 158 157 160 158 160 163 + 158 163 164 160 165 166 160 161 165 160 166 163 + 164 163 166 166 165 167 36 29 30 36 30 168 + 36 169 37 158 168 30 36 168 169 170 169 168 + 39 37 169 39 109 38 39 169 171 170 171 169 + 39 171 172 173 172 171 158 164 168 164 174 168 + 170 168 174 170 174 175 164 166 176 164 176 174 + 177 176 166 178 175 174 178 174 176 170 179 171 + 173 171 179 170 175 179 178 180 175 180 179 175 + 173 179 181 182 181 179 162 183 161 184 161 183 + 162 185 183 185 186 183 186 187 183 185 188 186 + 184 165 161 184 167 165 184 183 187 184 187 167 + 177 166 167 189 167 187 177 167 189 177 189 190 + 191 187 186 191 186 192 191 189 187 191 193 189 + 189 193 190 188 194 186 188 195 194 186 194 192 + 195 196 194 197 192 194 197 194 196 195 198 196 + 199 200 198 198 201 196 197 196 201 197 201 202 + 200 201 198 203 202 201 200 203 201 191 192 204 + 191 204 193 197 204 192 197 205 204 206 204 205 + 207 193 208 206 193 204 206 208 193 206 209 208 + 197 202 205 206 205 210 205 202 210 203 211 202 + 211 210 202 211 212 210 213 206 210 206 213 209 + 214 209 213 212 213 210 212 214 213 212 215 214 + 214 216 209 177 217 176 177 190 217 178 176 218 + 217 218 176 178 218 180 219 218 217 207 217 190 + 207 190 193 207 220 217 219 217 220 219 220 221 + 219 180 218 180 222 223 182 179 180 182 180 223 + 223 224 182 219 222 180 219 221 222 225 222 221 + 223 222 224 224 226 182 225 224 222 207 208 227 + 207 228 220 207 227 228 227 208 209 227 229 228 + 227 230 229 231 220 228 231 221 220 231 232 221 + 231 228 229 231 229 233 231 233 232 227 209 230 + 216 230 209 234 229 230 216 234 230 214 235 216 + 216 235 236 216 236 234 234 236 237 238 233 229 + 234 238 229 238 239 233 234 237 238 238 240 239 + 238 237 240 225 221 232 239 232 233 225 232 241 + 242 241 232 225 243 224 225 241 243 244 224 243 + 244 243 245 243 241 246 247 246 241 243 246 245 + 248 245 246 239 242 232 239 249 242 242 247 241 + 242 250 247 239 240 249 251 249 240 242 249 250 + 251 250 249 247 250 252 247 248 246 247 252 248 + 248 252 253 254 252 250 254 253 252 254 255 253 + 39 172 109 256 110 109 256 257 110 256 109 172 + 172 173 256 257 111 110 113 111 257 113 258 112 + 113 257 259 113 259 258 256 260 257 261 257 260 + 261 259 257 262 259 261 256 173 263 173 181 263 + 256 263 260 264 181 265 182 265 181 264 263 181 + 264 266 263 264 267 266 268 260 263 268 261 260 + 268 269 261 270 271 261 270 261 269 268 263 266 + 268 266 272 273 272 266 273 274 272 268 272 269 + 275 269 272 275 276 269 275 272 274 138 112 258 + 262 258 259 138 258 277 262 277 258 138 277 140 + 141 140 278 279 140 277 279 278 140 262 280 277 + 262 261 271 262 271 280 279 277 281 279 282 278 + 279 281 282 280 281 277 283 282 281 141 278 284 + 141 284 150 284 285 150 286 284 278 154 150 285 + 154 285 287 154 288 153 154 287 288 284 289 285 + 287 285 289 287 290 291 286 278 282 286 289 284 + 283 292 282 286 282 292 286 292 293 286 293 289 + 287 289 290 290 289 294 293 294 289 290 294 295 + 293 296 294 295 294 296 270 297 271 280 271 297 + 270 269 276 270 276 297 280 298 281 298 280 297 + 281 298 283 298 299 283 298 297 300 298 301 299 + 300 297 276 275 302 276 276 302 303 300 276 303 + 298 300 301 300 303 304 300 305 301 306 301 305 + 283 299 292 299 307 292 307 308 292 307 299 309 + 307 309 310 293 292 308 293 308 296 295 296 311 + 312 296 308 311 296 313 307 310 308 312 308 310 + 312 313 296 312 314 313 309 299 301 315 309 316 + 306 309 301 306 316 309 315 310 309 315 312 310 + 315 314 312 315 316 317 315 318 314 315 317 318 + 182 319 265 182 226 319 264 265 267 267 265 319 + 320 267 319 320 321 267 226 322 319 244 226 224 + 244 323 226 226 323 322 320 319 322 320 322 324 + 324 322 323 320 324 325 273 266 267 273 326 274 + 273 267 321 273 321 326 327 274 326 275 274 327 + 275 327 302 328 327 326 320 329 321 329 326 321 + 320 325 329 329 325 330 329 330 331 328 326 329 + 328 332 327 328 333 332 328 329 331 328 331 334 + 328 334 333 324 323 335 244 335 323 336 244 245 + 336 245 248 336 335 244 336 337 335 338 324 335 + 338 325 324 337 338 335 338 339 325 338 340 339 + 336 248 253 336 253 341 336 342 337 336 341 342 + 341 253 255 343 341 255 341 344 342 343 344 341 + 337 340 338 337 342 340 345 340 342 345 342 344 + 345 346 340 347 340 346 345 348 346 339 330 325 + 349 331 330 339 349 330 339 350 349 349 350 351 + 352 334 331 349 352 331 353 333 334 352 353 334 + 349 351 352 352 351 354 352 354 353 353 354 355 + 339 340 347 339 347 350 356 350 347 356 351 350 + 356 347 357 347 346 357 356 357 358 356 358 359 + 356 360 351 354 351 360 356 359 360 361 354 360 + 361 362 354 361 360 359 363 303 302 363 302 327 + 363 304 303 363 327 332 363 364 304 363 365 364 + 300 304 305 364 305 304 366 367 305 366 305 364 + 363 332 365 365 332 333 365 333 368 365 368 369 + 366 364 369 365 369 364 366 370 371 372 369 368 + 366 369 370 373 370 369 306 305 367 306 367 374 + 306 374 316 374 317 316 375 374 367 375 376 374 + 377 317 374 377 318 317 377 378 318 377 374 376 + 377 376 379 377 379 378 380 378 379 366 371 367 + 375 367 371 375 371 381 375 381 382 383 381 371 + 383 371 370 384 382 381 383 384 381 375 382 376 + 379 376 382 380 379 385 386 379 382 384 386 382 + 386 385 379 386 387 385 353 388 333 388 368 333 + 388 372 368 388 389 372 353 355 388 388 355 389 + 372 389 390 372 373 369 373 383 370 372 391 373 + 373 391 392 372 390 391 393 391 390 394 392 391 + 393 394 391 354 362 355 395 355 362 395 389 355 + 395 390 389 395 396 390 361 397 362 395 362 397 + 395 397 396 398 396 397 393 390 396 393 399 394 + 393 396 400 401 400 396 393 400 399 402 399 400 + 373 392 383 383 392 403 383 403 384 384 403 404 + 394 403 392 394 405 403 406 403 405 384 404 386 + 386 407 387 386 404 407 406 404 403 406 407 404 + 406 408 407 394 399 405 409 405 399 409 410 405 + 409 399 411 402 411 399 409 412 410 409 411 412 + 406 405 410 406 410 413 406 413 408 414 408 413 + 415 413 410 415 410 412 415 416 413 414 413 416 + 417 72 77 417 77 418 79 77 73 79 418 77 + 417 418 419 420 417 419 420 419 421 422 420 421 + 422 421 423 79 94 418 418 94 424 96 424 94 + 425 418 424 425 419 418 96 426 424 96 101 426 + 426 427 424 425 424 427 428 427 426 425 421 419 + 425 429 421 430 423 421 430 421 429 425 427 429 + 429 427 431 430 429 432 433 422 423 433 423 434 + 435 433 434 435 434 436 437 435 436 430 434 423 + 430 438 434 439 434 438 430 432 438 439 436 434 + 439 440 436 439 438 440 436 440 441 101 102 127 + 127 426 101 428 426 127 127 126 132 428 431 427 + 428 127 442 127 132 442 443 132 134 443 442 132 + 443 444 442 428 442 445 446 445 442 447 429 431 + 428 445 431 447 431 445 447 432 429 447 448 432 + 447 445 449 446 449 445 447 449 448 146 444 134 + 444 443 134 450 442 444 146 147 444 450 444 147 + 450 147 451 446 442 450 446 450 452 450 451 452 + 152 147 148 152 451 147 453 451 152 152 153 288 + 152 288 454 453 152 454 453 452 451 455 452 453 + 446 452 449 452 456 449 457 448 449 457 449 456 + 455 456 452 458 456 455 458 457 456 459 438 432 + 440 438 459 459 432 448 459 448 460 459 461 440 + 462 440 461 457 460 448 459 460 461 458 460 457 + 463 460 458 463 464 460 461 460 464 465 461 464 + 437 436 441 462 441 440 465 462 461 466 454 288 + 287 291 288 466 288 291 466 291 467 453 454 468 + 466 468 454 455 453 468 466 469 468 470 471 468 + 290 467 291 290 295 467 466 467 469 472 469 467 + 295 473 467 472 467 473 470 468 469 470 469 472 + 470 472 474 455 468 471 458 455 471 458 471 475 + 470 476 471 470 477 476 476 475 471 478 475 476 + 478 476 479 295 311 473 472 473 480 311 480 473 + 311 313 481 481 313 314 311 481 480 481 482 480 + 472 480 474 470 474 477 483 477 474 483 474 480 + 483 480 482 481 314 484 481 484 482 484 485 482 + 484 314 318 484 318 486 484 486 485 483 482 487 + 487 482 485 483 487 488 486 489 485 487 485 489 + 490 487 489 476 477 479 483 488 477 491 479 477 + 491 477 488 491 492 479 492 493 479 491 488 494 + 490 488 487 490 494 488 491 494 492 495 492 494 + 495 496 492 463 458 475 463 475 478 463 478 497 + 498 463 497 498 464 463 498 465 464 478 479 493 + 478 493 497 499 493 492 493 499 497 497 499 500 + 501 497 500 499 492 496 495 502 496 499 496 502 + 499 502 503 499 503 500 503 504 500 498 497 501 + 498 505 506 501 505 498 501 500 504 501 504 507 + 501 507 505 486 318 508 318 378 508 486 508 509 + 380 508 378 380 510 508 509 508 510 509 510 511 + 486 509 489 509 512 489 490 489 513 509 511 512 + 513 489 512 513 512 514 380 515 510 380 385 515 + 511 510 515 387 515 385 387 516 515 387 517 516 + 516 518 515 518 516 519 511 514 512 515 518 511 + 518 514 511 513 514 520 518 521 514 521 520 514 + 522 521 518 521 522 523 490 524 494 490 525 524 + 490 513 525 513 520 525 524 525 526 495 494 524 + 495 524 527 524 526 527 528 527 526 529 525 520 + 521 529 520 530 526 525 529 530 525 521 523 529 + 529 523 531 529 531 530 530 528 526 530 532 528 + 528 533 527 528 534 533 530 531 532 535 532 531 + 528 532 534 535 534 532 387 407 517 536 517 407 + 516 517 519 536 519 517 536 537 519 536 407 538 + 407 408 538 536 538 539 536 539 540 518 519 522 + 522 519 537 522 541 523 536 540 537 522 537 541 + 541 537 540 541 542 543 414 538 408 414 539 538 + 544 540 539 414 416 545 414 545 539 546 545 416 + 544 539 545 544 545 547 541 540 548 544 548 540 + 541 548 542 542 548 549 544 549 548 544 547 549 + 542 549 550 550 549 551 552 523 543 552 531 523 + 552 535 531 541 543 523 552 543 553 535 554 534 + 552 553 535 555 535 553 555 554 535 555 556 554 + 542 557 543 558 543 557 558 553 543 558 559 553 + 542 550 557 550 560 557 558 557 560 558 560 559 + 555 553 559 555 561 556 555 559 561 562 559 560 + 562 561 559 495 527 502 503 502 563 502 527 564 + 533 564 527 502 564 563 565 563 564 503 563 566 + 503 566 504 567 566 563 565 567 563 568 504 566 + 568 566 567 533 565 564 533 569 565 565 569 570 + 533 534 569 571 569 534 571 570 569 565 570 567 + 567 570 572 568 567 572 573 568 572 570 574 572 + 570 575 574 568 573 504 507 504 573 576 505 507 + 574 573 572 577 573 574 577 507 573 576 507 577 + 571 534 554 571 554 556 571 556 578 571 575 570 + 579 574 575 571 578 575 579 575 578 580 556 561 + 580 578 556 580 561 581 579 578 582 583 578 580 + 583 582 578 579 577 574 579 584 577 585 577 584 + 579 582 584 583 584 582 506 465 498 576 506 505 + 585 576 577 199 586 587 199 587 200 200 587 588 + 200 588 203 203 588 589 586 590 587 591 587 590 + 591 588 587 591 589 588 586 592 590 591 590 593 + 592 593 590 591 593 594 592 595 593 596 594 593 + 596 593 595 203 589 211 211 597 212 211 589 597 + 598 589 591 598 597 589 212 597 215 214 215 235 + 599 235 215 599 215 597 599 597 600 598 591 594 + 598 594 601 598 600 597 598 601 600 596 601 594 + 602 600 601 599 600 603 602 604 600 603 600 604 + 592 605 595 605 606 595 596 595 606 596 606 607 + 605 608 606 609 606 608 605 610 608 609 608 611 + 610 611 608 596 607 601 602 601 607 602 607 612 + 609 607 606 609 612 607 602 613 604 602 612 613 + 614 604 613 609 615 612 613 612 615 609 611 615 + 616 617 613 616 613 615 618 237 236 618 236 235 + 599 619 235 618 235 619 620 618 619 620 621 618 + 622 240 237 622 237 621 618 621 237 622 621 623 + 599 603 619 620 619 603 614 624 603 620 603 624 + 620 624 625 620 625 621 626 621 625 626 623 621 + 627 625 624 627 628 625 626 625 628 626 628 629 + 630 629 628 622 251 240 622 631 251 251 632 250 + 251 631 632 622 623 631 633 631 623 634 632 631 + 633 634 631 635 250 632 635 254 250 635 636 254 + 635 632 634 635 634 637 635 637 636 626 629 623 + 633 623 629 633 638 634 633 629 639 633 639 638 + 634 638 640 637 634 640 637 640 641 642 640 638 + 642 638 639 642 641 640 642 643 641 614 603 604 + 614 627 624 644 627 614 614 613 617 614 617 644 + 630 628 627 630 627 645 627 644 645 630 645 646 + 647 644 617 616 648 617 647 617 648 647 645 644 + 647 649 645 646 645 649 647 650 649 647 648 650 + 651 649 650 630 639 629 630 652 639 630 646 652 + 653 639 652 653 652 646 642 639 654 653 654 639 + 642 654 643 653 655 654 655 643 654 653 646 656 + 651 646 649 651 656 646 651 657 656 653 656 658 + 653 658 655 655 658 659 660 656 657 660 658 656 + 660 659 658 610 661 611 661 662 611 661 663 662 + 661 664 663 662 615 611 662 665 615 616 615 665 + 616 665 666 662 667 665 662 663 667 668 665 667 + 668 666 665 664 669 663 664 670 669 671 670 664 + 669 667 663 667 669 672 668 667 672 673 669 670 + 673 672 669 616 666 648 674 648 666 674 650 648 + 651 650 675 674 675 650 668 676 666 674 666 676 + 668 677 676 678 676 677 674 676 678 674 678 675 + 651 675 679 651 679 657 680 679 675 681 657 679 + 680 681 679 660 657 682 660 682 683 681 682 657 + 681 684 682 685 682 684 680 675 678 680 678 686 + 680 686 687 680 684 681 685 684 688 689 688 684 + 680 687 684 689 684 687 668 672 677 672 690 677 + 691 678 677 691 686 678 691 677 690 692 690 672 + 691 690 693 691 693 694 686 695 687 691 696 686 + 686 696 695 687 695 697 689 687 697 689 697 698 + 699 697 695 699 695 696 699 700 697 691 694 696 + 694 701 696 699 696 701 699 701 700 702 700 701 + 702 701 703 254 636 255 343 255 636 704 343 636 + 704 344 343 704 705 344 704 636 706 637 706 636 + 704 707 705 348 345 344 705 348 344 708 346 348 + 708 348 709 705 707 709 705 709 348 637 641 706 + 710 706 641 710 704 706 710 707 704 710 711 707 + 712 710 641 712 641 643 712 711 710 713 709 707 + 713 707 711 713 714 709 713 715 714 712 716 711 + 713 711 716 712 717 716 718 713 716 715 713 718 + 708 357 346 708 358 357 708 719 358 708 709 714 + 708 714 719 720 719 714 721 358 719 721 359 358 + 721 722 359 361 359 722 361 722 723 721 724 722 + 721 719 725 721 725 724 723 722 724 720 714 715 + 720 725 719 720 726 725 720 715 727 728 715 718 + 728 727 715 720 727 726 726 727 729 730 724 725 + 730 725 726 723 724 731 730 731 724 730 726 732 + 731 730 732 733 712 643 733 717 712 655 734 643 + 733 643 734 735 736 733 735 733 734 716 717 718 + 733 736 717 737 717 736 737 718 717 737 738 718 + 737 736 739 735 739 736 740 738 737 740 737 739 + 655 659 734 735 734 659 741 735 659 741 742 735 + 660 743 659 741 659 743 744 741 743 735 742 739 + 745 739 742 740 739 745 740 745 746 741 747 742 + 745 742 747 744 747 741 748 746 745 747 748 745 + 728 718 738 728 729 727 728 738 729 749 726 729 + 750 729 738 740 750 738 749 729 750 749 732 726 + 749 751 732 752 732 751 749 753 751 749 750 753 + 752 751 754 753 754 751 740 746 750 755 753 750 + 755 750 746 748 756 746 755 746 756 755 756 757 + 757 753 755 758 754 753 758 753 757 758 757 759 + 361 398 397 361 723 760 361 760 398 723 731 760 + 398 760 761 762 761 760 401 396 398 401 398 761 + 401 402 400 401 763 402 401 761 764 765 764 761 + 401 764 763 765 766 764 763 764 766 762 760 731 + 762 767 761 762 731 768 762 768 767 769 768 731 + 769 731 732 769 770 768 771 768 770 765 761 767 + 765 767 772 768 772 767 765 772 766 773 766 772 + 774 766 773 771 772 768 771 773 772 402 763 411 + 411 763 775 775 412 411 775 776 412 775 763 777 + 763 766 777 775 778 776 775 777 778 415 412 776 + 415 776 779 415 779 416 546 416 779 780 776 778 + 780 779 776 780 781 779 782 779 781 774 777 766 + 774 778 777 774 783 778 774 773 784 785 784 773 + 774 784 783 783 784 786 780 778 787 783 787 778 + 780 787 781 788 781 787 783 789 787 790 789 783 + 788 787 789 752 769 732 752 770 769 752 791 770 + 752 754 792 752 792 791 793 770 791 793 791 792 + 771 794 773 771 770 794 785 773 794 793 794 770 + 793 795 794 785 794 796 794 795 796 758 792 754 + 793 792 797 758 759 792 759 798 792 798 797 792 + 798 799 797 793 797 795 800 796 795 800 795 801 + 802 795 797 802 797 799 802 801 795 785 786 784 + 785 803 786 790 783 786 803 790 786 785 796 803 + 800 803 796 804 790 803 790 805 789 788 789 805 + 804 805 790 806 807 805 806 805 804 800 808 803 + 809 804 803 809 803 808 800 801 808 810 808 801 + 809 808 811 810 811 808 806 804 812 812 804 809 + 806 812 813 809 811 812 814 812 811 815 813 812 + 814 815 812 660 683 743 744 743 683 744 683 816 + 685 683 682 685 816 683 685 817 816 818 744 816 + 818 816 817 744 819 747 818 819 744 819 748 747 + 748 819 820 748 820 821 818 820 819 818 822 820 + 820 822 823 685 688 817 824 817 688 825 818 817 + 825 817 824 689 824 688 826 825 824 826 824 827 + 825 822 818 825 828 822 829 822 828 829 823 822 + 826 828 825 826 830 828 829 828 830 831 829 830 + 748 821 756 832 833 756 832 756 821 820 823 821 + 832 821 823 832 834 833 832 835 834 756 833 757 + 836 757 833 836 759 757 836 837 759 836 833 834 + 836 834 838 836 838 837 832 823 839 829 839 823 + 832 839 835 840 835 839 831 839 829 840 839 841 + 831 841 839 840 841 842 834 835 843 834 843 838 + 840 843 835 844 838 843 844 845 838 840 846 843 + 840 842 846 844 843 846 844 846 847 689 698 824 + 698 827 824 698 697 700 698 700 848 698 848 827 + 849 827 848 849 826 827 849 830 826 849 850 830 + 830 850 851 852 849 848 852 850 849 853 851 850 + 702 848 700 852 848 854 702 854 848 702 703 855 + 702 855 854 856 852 854 852 857 850 853 850 857 + 856 857 852 856 854 855 858 856 855 856 859 857 + 858 859 856 831 830 851 831 851 860 831 860 841 + 842 841 860 853 860 851 861 842 860 853 862 860 + 861 860 862 842 863 846 864 846 863 861 863 842 + 864 863 865 861 865 863 853 857 862 866 862 857 + 866 857 859 866 867 862 866 868 867 861 862 869 + 861 869 865 867 869 862 870 865 869 870 869 867 + 870 867 871 798 759 837 798 837 799 872 837 845 + 837 838 845 872 799 837 872 873 799 802 799 873 + 802 873 874 802 874 801 810 801 874 872 875 873 + 876 873 875 876 874 873 876 877 874 876 878 877 + 872 845 879 844 879 845 844 847 879 872 879 875 + 880 875 879 880 879 847 880 847 881 880 878 875 + 876 875 878 882 878 880 810 874 877 810 877 883 + 810 883 811 884 883 877 884 885 883 814 811 883 + 814 886 815 814 883 885 814 885 886 884 877 878 + 887 885 884 887 884 878 887 878 888 887 889 885 + 889 886 885 889 890 886 887 891 889 889 891 890 + 864 847 846 864 881 847 880 881 882 864 892 881 + 864 865 892 893 882 881 893 881 892 888 878 882 + 893 894 882 888 882 894 888 894 895 870 892 865 + 893 892 896 870 896 892 870 897 896 893 896 894 + 896 898 894 887 888 895 887 895 899 900 899 895 + 887 899 891 901 891 899 900 895 894 900 894 898 + 900 902 899 900 898 902 901 899 902 901 902 903 + 671 673 670 673 692 672 692 693 690 692 904 693 + 904 694 693 904 905 694 905 701 694 701 905 703 + 905 906 703 703 907 855 906 907 703 858 855 907 + 858 908 859 909 908 858 907 909 858 909 910 908 + 866 859 908 866 908 911 866 911 868 912 868 911 + 910 911 908 910 912 911 867 868 871 913 871 868 + 912 913 868 913 914 871 870 871 897 914 897 871 + 914 915 897 915 896 897 915 898 896 916 902 898 + 915 916 898 917 903 902 916 917 902 546 918 545 + 919 547 545 919 545 918 782 546 779 782 918 546 + 782 920 918 919 918 920 551 549 547 919 551 547 + 919 921 551 550 551 922 922 551 923 919 920 921 + 924 551 921 924 923 551 924 925 923 782 781 926 + 782 926 920 788 926 781 927 920 926 927 928 920 + 788 929 926 788 930 929 927 926 929 927 929 931 + 920 928 921 924 921 928 924 928 925 932 925 928 + 927 931 928 931 933 928 933 932 928 550 922 560 + 562 560 934 922 934 560 922 923 935 922 935 934 + 935 923 925 935 936 934 562 581 561 562 934 936 + 562 936 937 562 937 581 935 925 938 938 925 939 + 935 938 936 938 940 936 932 939 925 932 941 939 + 942 939 941 942 938 939 942 940 938 940 937 936 + 943 937 940 942 944 940 943 940 945 945 940 944 + 788 805 930 930 805 807 930 931 929 930 946 931 + 930 807 946 947 946 807 948 933 931 948 931 946 + 932 933 941 948 941 933 948 949 941 948 946 950 + 948 951 949 806 813 807 947 807 813 947 813 952 + 947 950 946 947 952 950 815 952 813 953 950 952 + 948 950 951 953 954 950 950 954 951 955 951 954 + 942 941 956 941 949 956 942 956 957 958 956 949 + 958 949 951 958 957 956 942 957 944 945 944 957 + 959 945 957 955 958 951 958 960 957 955 960 958 + 955 961 960 959 957 960 959 960 962 959 962 963 + 583 580 581 943 581 937 583 581 964 943 964 581 + 965 583 964 943 966 964 943 945 966 967 964 966 + 967 965 964 583 965 584 968 584 965 945 969 966 + 959 969 945 967 966 969 970 967 969 959 963 969 + 970 969 963 970 963 971 967 972 965 970 972 967 + 968 965 972 971 972 970 815 973 952 953 952 973 + 815 886 973 974 973 886 953 973 975 974 975 973 + 953 975 954 976 954 975 974 886 890 974 890 977 + 974 978 975 976 975 978 974 977 978 955 954 961 + 976 961 954 962 960 961 979 961 976 979 962 961 + 962 980 963 979 980 962 979 976 978 979 978 981 + 979 982 980 979 981 982 977 890 891 901 977 891 + 901 983 977 984 978 977 984 977 983 901 903 983 + 984 983 985 986 985 983 984 981 978 984 985 981 + 987 982 981 987 981 985 985 988 987 989 963 980 + 989 971 963 989 980 982 990 989 982 990 971 989 + 991 972 971 992 972 991 990 991 971 990 982 993 + 987 993 982 990 993 994 988 993 987 990 994 991 + 995 991 994 996 994 993 968 585 584 992 968 972 + 995 992 991 997 995 994 986 983 903 917 986 903 + 986 998 985 998 988 985 988 996 993 997 994 996 + </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 + </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 + </DataArray> + </Cells> + </Piece> + </UnstructuredGrid> +</VTKFile> diff --git a/test/references/test_md_facet_tracertracer_mpfa_tracer_lowdim-reference.vtp b/test/references/test_md_facet_tracertracer_mpfa_tracer_lowdim-reference.vtp new file mode 100644 index 0000000000000000000000000000000000000000..40527b5bc3742206f2954d7b6bd9c0052bf78608 --- /dev/null +++ b/test/references/test_md_facet_tracertracer_mpfa_tracer_lowdim-reference.vtp @@ -0,0 +1,115 @@ +<?xml version="1.0"?> +<VTKFile type="PolyData" version="0.1" byte_order="LittleEndian"> + <PolyData> + <Piece NumberOfLines="100" NumberOfPoints="101"> + <CellData Scalars="x^tracer_0"> + <DataArray type="Float32" Name="x^tracer_0" NumberOfComponents="1" format="ascii"> + 0 0 0 0.00185772 0.00737934 0.0117368 0.0123343 0.0116735 0.0109472 0.0102858 0.00967157 0.0090981 + 0.00855992 0.00727841 0.00683468 0.00638785 0.00594155 0.00549886 0.00506249 0.00463478 0.00421781 0.0038129 0.00342252 0.00304904 + 0.00269469 0.00236149 0.00205121 0.00176523 0.00118251 0.000755731 0.000457731 0.000260279 0.000136793 6.47729e-05 2.62007e-05 7.8032e-06 + 0 0 0 0 7.81663e-19 2.16585e-16 1.90951e-14 9.09092e-13 2.79958e-11 6.15633e-10 1.03406e-08 1.40006e-07 + 2.26926e-06 4.75824e-06 9.67343e-06 1.90524e-05 3.63182e-05 6.6932e-05 0.000119128 0.000204575 0.000338706 0.000540495 0.000831307 0.00123296 + 0.00095608 0.000482025 0.000224213 9.4898e-05 3.57629e-05 1.15959e-05 3.02253e-06 5.18525e-07 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 4.40993e-11 3.50717e-10 0 3.18916e-10 2.44666e-09 1.23352e-08 4.73007e-08 1.46326e-07 3.77388e-07 8.32621e-07 0 + 0 0 0 0 + </DataArray> + <DataArray type="Float32" Name="X^tracer_0" NumberOfComponents="1" format="ascii"> + 0 0 0 3.0962e-05 0.000122989 0.000195613 0.000205572 0.000194559 0.000182453 0.00017143 0.000161193 0.000151635 + 0.000142665 0.000121307 0.000113911 0.000106464 9.90258e-05 9.16476e-05 8.43748e-05 7.72464e-05 7.02969e-05 6.35484e-05 5.7042e-05 5.08173e-05 + 4.49115e-05 3.93582e-05 3.41868e-05 2.94205e-05 1.97085e-05 1.25955e-05 7.62885e-06 4.33799e-06 2.27989e-06 1.07955e-06 4.36678e-07 1.30053e-07 + 0 0 0 0 1.30277e-20 3.60976e-18 3.18251e-16 1.51515e-14 4.66597e-13 1.02605e-11 1.72343e-10 2.33343e-09 + 3.78209e-08 7.93041e-08 1.61224e-07 3.17539e-07 6.05303e-07 1.11553e-06 1.98547e-06 3.40958e-06 5.64511e-06 9.00825e-06 1.38551e-05 2.05493e-05 + 1.59347e-05 8.03375e-06 3.73689e-06 1.58163e-06 5.96049e-07 1.93265e-07 5.03755e-08 8.64209e-09 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 7.34989e-13 5.84529e-12 0 5.31527e-12 4.07776e-11 2.05587e-10 7.88344e-10 2.43876e-09 6.2898e-09 1.3877e-08 0 + 0 0 0 0 + </DataArray> + <DataArray type="Float32" Name="rho" NumberOfComponents="1" format="ascii"> + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 + 1000 1000 1000 1000 + </DataArray> + <DataArray type="Float32" Name="process 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 + </DataArray> + </CellData> + <Points> + <DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii"> + 0 6.409 0 0.243615 6.37169 0 0.487231 6.33438 0 0.730846 6.29708 0 + 0.974462 6.25977 0 1.21808 6.22246 0 1.46169 6.18515 0 1.70531 6.14785 0 + 1.94892 6.11054 0 2.19254 6.07323 0 2.43615 6.03592 0 2.67977 5.99862 0 + 2.92338 5.96131 0 3.167 5.924 0 3.41427 5.88613 0 3.66153 5.84827 0 + 3.9088 5.8104 0 4.15607 5.77253 0 4.40333 5.73467 0 4.6506 5.6968 0 + 4.89787 5.65893 0 5.14513 5.62107 0 5.3924 5.5832 0 5.63967 5.54533 0 + 5.88693 5.50747 0 6.1342 5.4696 0 6.38147 5.43173 0 6.62873 5.39387 0 + 6.876 5.356 0 7.11438 5.3195 0 7.35275 5.283 0 7.59113 5.2465 0 + 7.8295 5.21 0 8.06787 5.1735 0 8.30625 5.137 0 8.54463 5.1005 0 + 8.783 5.064 0 5.088 0 0 5.16083 0.218083 0 5.23367 0.436167 0 + 5.3065 0.65425 0 5.37933 0.872333 0 5.45217 1.09042 0 5.525 1.3085 0 + 5.59783 1.52658 0 5.67067 1.74467 0 5.7435 1.96275 0 5.81633 2.18083 0 + 5.88917 2.39892 0 5.962 2.617 0 6.03817 2.84525 0 6.11433 3.0735 0 + 6.1905 3.30175 0 6.26667 3.53 0 6.34283 3.75825 0 6.419 3.9865 0 + 6.49517 4.21475 0 6.57133 4.443 0 6.6475 4.67125 0 6.72367 4.8995 0 + 6.79983 5.12775 0 6.9515 5.5825 0 7.027 5.809 0 7.1025 6.0355 0 + 7.178 6.262 0 7.2535 6.4885 0 7.329 6.715 0 7.4045 6.9415 0 + 7.48 7.168 0 3.626 10 0 3.599 9.76023 0 3.572 9.52047 0 + 3.545 9.28071 0 3.518 9.04094 0 3.491 8.80118 0 3.464 8.56141 0 + 3.437 8.32165 0 3.41 8.08188 0 3.383 7.84212 0 3.356 7.60235 0 + 3.329 7.36259 0 3.302 7.12282 0 3.275 6.88306 0 3.248 6.64329 0 + 3.221 6.40353 0 3.194 6.16376 0 3.13757 5.66149 0 3.09751 5.30423 0 + 3.043 4.818 0 9.3 3.493 0 8.50037 3.28315 0 7.84441 3.11101 0 + 7.3063 2.96979 0 6.86487 2.85394 0 6.50275 2.75891 0 6.20569 2.68095 0 + 5.69148 2.545 0 5.33453 2.45001 0 4.86354 2.32465 0 4.24205 2.15925 0 + 3.422 1.941 0 + </DataArray> + </Points> + <Lines> + <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii"> + 0 1 1 2 2 3 3 4 4 5 5 6 + 6 7 7 8 8 9 9 10 10 11 11 12 + 12 13 13 14 14 15 15 16 16 17 17 18 + 18 19 19 20 20 21 21 22 22 23 23 24 + 24 25 25 26 26 27 27 28 28 29 29 30 + 30 31 31 32 32 33 33 34 34 35 35 36 + 37 38 38 39 39 40 40 41 41 42 42 43 + 43 44 44 45 45 46 46 47 47 48 48 49 + 49 50 50 51 51 52 52 53 53 54 54 55 + 55 56 56 57 57 58 58 59 59 60 60 28 + 28 61 61 62 62 63 63 64 64 65 65 66 + 66 67 67 68 69 70 70 71 71 72 72 73 + 73 74 74 75 75 76 76 77 77 78 78 79 + 79 80 80 81 81 82 82 83 83 84 84 85 + 85 13 13 86 86 87 87 88 89 90 90 91 + 91 92 92 93 93 94 94 95 95 49 49 96 + 96 97 97 98 98 99 99 100 + </DataArray> + <DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii"> + 2 4 6 8 10 12 14 16 18 20 22 24 + 26 28 30 32 34 36 38 40 42 44 46 48 + 50 52 54 56 58 60 62 64 66 68 70 72 + 74 76 78 80 82 84 86 88 90 92 94 96 + 98 100 102 104 106 108 110 112 114 116 118 120 + 122 124 126 128 130 132 134 136 138 140 142 144 + 146 148 150 152 154 156 158 160 162 164 166 168 + 170 172 174 176 178 180 182 184 186 188 190 192 + 194 196 198 200 + </DataArray> + </Lines> + </Piece> + </PolyData> +</VTKFile>