diff --git a/dumux/CMakeLists.txt b/dumux/CMakeLists.txt index 87cb87d8609fb96482771c7c36cd522ef43d221c..90b1256e9af20639361ebbc0a7c0d66af5d9caeb 100644 --- a/dumux/CMakeLists.txt +++ b/dumux/CMakeLists.txt @@ -1,3 +1,4 @@ +add_subdirectory("adaptive") add_subdirectory("common") add_subdirectory("discretization") add_subdirectory("freeflow") diff --git a/dumux/adaptive/CMakeLists.txt b/dumux/adaptive/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..5f56a25371676e4a1b0700f6431e71e20e7e93e6 --- /dev/null +++ b/dumux/adaptive/CMakeLists.txt @@ -0,0 +1,7 @@ +#install sources +install(FILES +adapt.hh +griddatatransfer.hh +initializationindicator.hh +markelements.hh +DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/adaptive) diff --git a/dumux/adaptive/adapt.hh b/dumux/adaptive/adapt.hh new file mode 100644 index 0000000000000000000000000000000000000000..8d2a78b4bbc27d607ed620e329c6a1ae67bc7f8b --- /dev/null +++ b/dumux/adaptive/adapt.hh @@ -0,0 +1,62 @@ +// -*- 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 + * \brief A free function for h-adaptivity. + */ +#ifndef DUMUX_ADAPTIVE_ADAPT_HH +#define DUMUX_ADAPTIVE_ADAPT_HH + +#include "griddatatransfer.hh" + +namespace Dumux +{ + +/*! + * \brief Adapt the grid. + * + * \param grid The grid to adapt + * \param dataTransfer A class that performs the data + * transfer from the old to the new grid. + */ +template<class Grid> +bool adapt(Grid& grid, GridDataTransfer& dataTransfer) +{ + //! Do pre-adaption step of the grid + const bool mightCoarsen = grid.preAdapt(); + + //! Let the helper do storage of variables + dataTransfer.store(); + + //! adapt the grid + const bool refine = grid.adapt(); + + //! (Re-)construct variables to new grid + dataTransfer.reconstruct(); + + // delete markers in grid + grid.postAdapt(); + + //! return boolean if grid has been changed + return mightCoarsen || refine; +} + +} // end namespace Dumux + +#endif /* DUMUX_ADAPTIVE_ADAPT_HH */ diff --git a/dumux/adaptive/griddatatransfer.hh b/dumux/adaptive/griddatatransfer.hh new file mode 100644 index 0000000000000000000000000000000000000000..e89f68391aaf8bee3938407d7972a70571b2b26b --- /dev/null +++ b/dumux/adaptive/griddatatransfer.hh @@ -0,0 +1,39 @@ +// -*- 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/>. * + *****************************************************************************/ +#ifndef DUMUX_ADAPTIVE_GRIDDATATRANSFER_HH +#define DUMUX_ADAPTIVE_GRIDDATATRANSFER_HH + +namespace Dumux { + +/*! + * \brief Interface to be used by classes transferring grid data. + */ +class GridDataTransfer +{ +public: + virtual ~GridDataTransfer() = default; + + virtual void store() = 0; + + virtual void reconstruct() = 0; +}; + +} // end namespace Dumux + +#endif /* DUMUX_ADAPTIVE_GRIDDATATRANSFER_HH */ diff --git a/dumux/adaptive/initializationindicator.hh b/dumux/adaptive/initializationindicator.hh new file mode 100644 index 0000000000000000000000000000000000000000..3571568892ef3f86f68a48099467ddaba622980b --- /dev/null +++ b/dumux/adaptive/initializationindicator.hh @@ -0,0 +1,289 @@ +// -*- 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 +* \brief Class defining an initialization indicator for grid adaption +*/ +#ifndef DUMUX_GRIDADAPTINITIALIZATIONINDICATOR_HH +#define DUMUX_GRIDADAPTINITIALIZATIONINDICATOR_HH + +#include <dune/geometry/type.hh> + +#include <dumux/discretization/methods.hh> + +namespace Dumux +{ + +/*!\ingroup GridAdapt + * \brief Class defining an initialization indicator for grid adaption. + * Accounts for sources and boundaries. Only for grid initialization! + * + * \tparam TypeTag The problem TypeTag + */ +template<class TypeTag> +class GridAdaptInitializationIndicator +{ + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Element = typename GridView::Traits::template Codim<0>::Entity; + + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + + static constexpr bool isBox = GET_PROP_VALUE(TypeTag, DiscretizationMethod) == DiscretizationMethods::Box; + +public: + + /*! \brief Constructor + * + * \param problem The problem object + * \param fvGridGeometry The finite volume geometry of the grid + * \param gridVariables The secondary variables on the grid + */ + GridAdaptInitializationIndicator(std::shared_ptr<const Problem> problem, + std::shared_ptr<const FVGridGeometry> fvGridGeometry, + std::shared_ptr<const GridVariables> gridVariables) + : problem_(problem) + , fvGridGeometry_(fvGridGeometry) + , gridVariables_(gridVariables) + , minLevel_(getParamFromGroup<int>(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Adaptive.MinLevel")) + , maxLevel_(getParamFromGroup<int>(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Adaptive.MaxLevel")) + , refineAtDirichletBC_(getParamFromGroup<bool>(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Adaptive.RefineAtDirichletBC", true)) + , refineAtFluxBC_(getParamFromGroup<bool>(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Adaptive.RefineAtFluxBC", true)) + , refineAtSource_(getParamFromGroup<bool>(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Adaptive.RefineAtSource", true)) + , eps_(getParamFromGroup<Scalar>(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Adaptive.BCRefinementThreshold", 1e-10)) + {} + + /*! + * \brief Function to set the minimum allowed level. + * + */ + void setMinLevel(std::size_t minLevel) + { + minLevel_ = minLevel; + } + + /*! + * \brief Function to set the maximum allowed level. + * + */ + void setMaxLevel(std::size_t maxLevel) + { + maxLevel_ = maxLevel; + } + + /*! + * \brief Function to set the minumum/maximum allowed levels. + * + */ + void setLevels(std::size_t minLevel, std::size_t maxLevel) + { + minLevel_ = minLevel; + maxLevel_ = maxLevel; + } + + /*! + * \brief Function to set if refinement at Dirichlet boundaries is to be used. + * + */ + void setRefinementAtDirichletBC(bool refine) + { + refineAtDirichletBC_ = refine; + } + + /*! + * \brief Function to set if refinement at sources is to be used. + * + */ + void setRefinementAtSources(bool refine) + { + refineAtSource_ = refine; + } + + /*! + * \brief Function to set if refinement at sources is to be used. + * + */ + void setRefinementAtFluxBoundaries(bool refine) + { + refineAtFluxBC_ = refine; + } + + /*! + * \brief Calculates the indicator used for refinement/coarsening for each grid cell. + * + * \param sol The solution for which indicator is to be calculated + */ + template<class SolutionVector> + void calculate(const SolutionVector& sol) + { + //! prepare an indicator for refinement + indicatorVector_.assign(fvGridGeometry_->gridView().size(0), false); + + for (const auto& element : elements(fvGridGeometry_->gridView())) + { + const auto eIdx = fvGridGeometry_->elementMapper().index(element); + + //! refine any element being below the minimum level + if (element.level() < minLevel_) + { + indicatorVector_[eIdx] = true; + continue; //! proceed to the next element + } + + //! If refinement at sources/BCs etc is deactivated, skip the rest + if (!refineAtSource_ && !refineAtFluxBC_ && !refineAtDirichletBC_) + continue; + + //! if the element is already on the maximum permissive level, skip rest + if (element.level() == maxLevel_) + continue; + + //! get the fvGeometry and elementVolVars needed for the bc and source interfaces + auto fvGeometry = localView(*fvGridGeometry_); + fvGeometry.bindElement(element); + + auto elemVolVars = localView(gridVariables_->curGridVolVars()); + elemVolVars.bindElement(element, fvGeometry, sol); + + //! Check if we have to refine around a source term + if (refineAtSource_) + { + for (const auto& scv : scvs(fvGeometry)) + { + auto source = problem_->source(element, fvGeometry, elemVolVars, scv); + if (source.infinity_norm() > eps_) + { + indicatorVector_[eIdx] = true; + break; //! element is marked, escape scv loop + } + } + } + + //! Check if we have to refine at the boundary + if (!indicatorVector_[eIdx] //! proceed if element is not already marked + && element.hasBoundaryIntersections() //! proceed if element is on boundary + && (refineAtDirichletBC_ || refineAtFluxBC_)) //! proceed if boundary refinement is active + { + //! cell-centered schemes + if (!isBox) + { + for (const auto& scvf : scvfs(fvGeometry)) + { + //! skip non-boundary scvfs + if (!scvf.boundary()) + continue; + + const auto bcTypes = problem_->boundaryTypes(element, scvf); + //! We assume pure BCs, mixed boundary types are not allowed anyway! + if(bcTypes.hasOnlyDirichlet() && refineAtDirichletBC_) + { + indicatorVector_[eIdx] = true; + break; //! element is marked, escape scvf loop + } + + //! we are on a pure Neumann boundary + else if(refineAtFluxBC_) + { + const auto fluxes = problem_->neumann(element, fvGeometry, elemVolVars, scvf); + if (fluxes.infinity_norm() > eps_) + { + indicatorVector_[eIdx] = true; + break; //! element is marked, escape scvf loop + } + } + } + } + //! box-scheme + else + { + //! container to store bcTypes + std::vector<BoundaryTypes> bcTypes(fvGeometry.numScv()); + + //! Get bcTypes and maybe mark for refinement on Dirichlet boundaries + for (const auto& scv : scvs(fvGeometry)) + { + bcTypes[scv.indexInElement()] = problem_->boundaryTypes(element, scv); + if (refineAtDirichletBC_ && bcTypes[scv.indexInElement()].hasDirichlet()) + { + indicatorVector_[eIdx] = true; + break; //! element is marked, escape scv loop + } + } + + //! If element hasn't been marked because of Dirichlet BCS, check Neumann BCs + if (!indicatorVector_[eIdx] && refineAtFluxBC_) + { + for (const auto& scvf : scvfs(fvGeometry)) + { + //! check if scvf is on Neumann boundary + if (scvf.boundary() && bcTypes[scvf.insideScvIdx()].hasNeumann()) + { + const auto fluxes = problem_->neumann(element, fvGeometry, elemVolVars, scvf); + if (fluxes.infinity_norm() > eps_) + { + indicatorVector_[eIdx] = true; + break; //! element is marked, escape scvf loop + } + } + } + } + } + } + } + } + + /*! \brief function call operator to return mark + * + * \return 1 if an element should be refined + * -1 if an element should be coarsened + * 0 otherwise + * + * \note In this initialization indicator implementation + * element coarsening is not considered. + * + * \param element A grid element + */ + int operator() (const Element& element) const + { + if (indicatorVector_[fvGridGeometry_->elementMapper().index(element)]) + return 1; + return 0; + } + +private: + std::shared_ptr<const Problem> problem_; //! The problem to be solved + std::shared_ptr<const FVGridGeometry> fvGridGeometry_; //! The finite volume grid geometry + std::shared_ptr<const GridVariables> gridVariables_; //! The secondary variables on the grid + std::vector<bool> indicatorVector_; //! Indicator for BCs/sources + + int minLevel_; //! The minimum allowed level + int maxLevel_; //! The maximum allowed level + bool refineAtDirichletBC_; //! Specifies if it should be refined at Dirichlet BCs + bool refineAtFluxBC_; //! Specifies if it should be refined at non-zero Neumann BCs + bool refineAtSource_; //! Specifies if it should be refined at sources + Scalar eps_; //! Threshold for refinement at sources/BCS +}; + +} +#endif diff --git a/dumux/adaptive/markelements.hh b/dumux/adaptive/markelements.hh new file mode 100644 index 0000000000000000000000000000000000000000..cb8e28c8c165d75c3198f9fa0f50f4f215e6b563 --- /dev/null +++ b/dumux/adaptive/markelements.hh @@ -0,0 +1,64 @@ +// -*- 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 + * \brief A class for h-adaptivity when using finite volume schemes. + */ +#ifndef DUMUX_ADAPTIVE_MARKELEMENTS_HH +#define DUMUX_ADAPTIVE_MARKELEMENTS_HH + +namespace Dumux +{ + +template<class Grid, class Indicator> +bool markElements(Grid& grid, Indicator& indicator, bool verbose = true) +{ + //! mark elements according to indicator + std::size_t refine = 0; + std::size_t coarsen = 0; + for (const auto& element : elements(grid.leafGridView(), Dune::Partitions::interior)) + { + const auto mark = indicator(element); + if (mark > 0) + { + grid.mark(1, element); + ++refine; + } + else if (mark < 0) + { + grid.mark(-1, element); + ++coarsen; + } + } + + //! abort if nothing in grid is marked + const std::size_t sumRefine = grid.comm().sum(refine); + const std::size_t sumCoarsen = grid.comm().sum(coarsen); + + if (grid.comm().rank() == 0 && verbose) + std::cout << sumRefine << " cells have been marked to be refined, " + << sumCoarsen << " to be coarsened." << std::endl; + + //! return whether or not anything has been marked + return sumRefine != 0 || sumCoarsen != 0; +} + +} //end namespace Dumux + +#endif /* DUMUX_ADAPTIVE_MARKELEMENTS_HH */ diff --git a/dumux/common/fvproblem.hh b/dumux/common/fvproblem.hh index 4f9898ae54280cc58545869af74459254a2ed5f6..e31305bde91dadbb7572e209ab19f06c4f4910f8 100644 --- a/dumux/common/fvproblem.hh +++ b/dumux/common/fvproblem.hh @@ -34,7 +34,6 @@ #include <dumux/discretization/methods.hh> //#include <dumux/io/restart.hh> -//#include <dumux/implicit/adaptive/gridadapt.hh> namespace Dumux { @@ -79,8 +78,6 @@ class FVProblem static constexpr bool isBox = GET_PROP_VALUE(TypeTag, DiscretizationMethod) == DiscretizationMethods::Box; - // using GridAdaptModel = ImplicitGridAdapt<TypeTag, adaptiveGrid>; - public: /*! * \brief Constructor @@ -93,14 +90,8 @@ public: // set a default name for the problem problemName_ = getParamFromGroup<std::string>(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Problem.Name"); - // TODO this has to be moved to the main file most probably - // // if we are calculating on an adaptive grid get the grid adapt model - // if (adaptiveGrid) - // gridAdapt_ = std::make_shared<GridAdaptModel>(asImp_()); - // gridAdapt().init(); - // compute which scvs contain point sources - computePointSourceMap(pointSourceMap_); + computePointSourceMap(); } /*! @@ -441,11 +432,10 @@ public: } //! Compute the point source map, i.e. which scvs have point source contributions - template<class PointSourceMap> - void computePointSourceMap(PointSourceMap& pointSourceMap) + void computePointSourceMap() { // clear the given point source maps in case it's not empty - pointSourceMap.clear(); + pointSourceMap_.clear(); // get and apply point sources if any given in the problem std::vector<PointSource> sources; @@ -457,7 +447,7 @@ public: // calculate point source locations and save them in a map PointSourceHelper::computePointSourceMap(*fvGridGeometry_, sources, - pointSourceMap); + pointSourceMap_); } } @@ -539,27 +529,6 @@ public: */ // \{ - /*! - * \brief Called by the time manager before the time integration. - */ - // TODO most likely move to the main file - // void preTimeStep() - // { - // // If adaptivity is used, this method adapts the grid. - // // Remeber to call the parent class function if this is overwritten - // // on a lower problem level when using an adaptive grid - // if (adaptiveGrid && timeManager().timeStepIndex() > 0) - // { - // this->gridAdapt().adaptGrid(); - - // // if the grid changed recompute the source map and the bounding box tree - // if (asImp_().gridChanged()) - // { - // computePointSourceMap(); - // } - // } - // } - /*! * \brief TODO serialization */ diff --git a/dumux/discretization/cellcentered/mpfa/elementfluxvariablescache.hh b/dumux/discretization/cellcentered/mpfa/elementfluxvariablescache.hh index 6a1aedeb318bfd967484b7e87ed6f00d4f514fac..5aadd98bb9744109771f9ee32fae699bcbe9112d 100644 --- a/dumux/discretization/cellcentered/mpfa/elementfluxvariablescache.hh +++ b/dumux/discretization/cellcentered/mpfa/elementfluxvariablescache.hh @@ -165,13 +165,14 @@ public: for (auto scvfIdx : dataJ.scvfsJ) globalScvfIndices_[i++] = scvfIdx; - // reserve memory estimate for interaction volumes and corresponding data + // Reserve memory (over-) estimate for interaction volumes and corresponding data. + // The overestimate doesn't hurt as we are not in a memory-limited configuration. + // We need to avoid reallocation because in the caches we store pointers to the data handles. const auto numIvEstimate = getNoInteractionVolumesEstimate_(element, assemblyMapI); - const auto maxBoundaryIv = element.subEntities(dim); primaryInteractionVolumes_.reserve(numIvEstimate); - secondaryInteractionVolumes_.reserve(maxBoundaryIv); + secondaryInteractionVolumes_.reserve(numIvEstimate); primaryIvDataHandles_.reserve(numIvEstimate); - secondaryIvDataHandles_.reserve(maxBoundaryIv); + secondaryIvDataHandles_.reserve(numIvEstimate); // helper class to fill flux variables caches FluxVariablesCacheFiller filler(problem); @@ -285,12 +286,19 @@ private: template<class AssemblyMap> std::size_t getNoInteractionVolumesEstimate_(const Element& element, const AssemblyMap& assemblyMap) { - //! Get the mpfa method only once per simulation - static const MpfaMethods method = GET_PROP_VALUE(TypeTag, MpfaMethod); - // TODO: uncomment as soon as methods are re-implemented - if (method == MpfaMethods::oMethod /*|| method == MpfaMethods::oMethodFps*/) - return element.subEntities(dim); + // if statements are optimized away by the compiler + if (GET_PROP_VALUE(TypeTag, MpfaMethod) == MpfaMethods::oMethod /*|| method == MpfaMethods::oMethodFps*/) + { + //! Reserve memory for the case of each facet having neighbors being 4 levels higher. Memory limitations + //! do not play an important role here as global caching is disabled. In the unlikely case you want + //! to use higher local differences in element levels set a higher value for the parameter below + //! in your input file (note that some grids might only support levels differences of one anyway) + static const unsigned int maxDiff = getParamFromGroup<unsigned int>(GET_PROP_VALUE(TypeTag, ModelParameterGroup), + "Grid.MaxLocalElementLevelDifference", + 4); + return element.subEntities(dim)*maxDiff; + } /* else if (method == MpfaMethods::lMethod) { std::size_t numInsideScvfs = MpfaHelper::getNumLocalScvfs(element.geometry().type()); diff --git a/dumux/discretization/cellcentered/tpfa/darcyslaw.hh b/dumux/discretization/cellcentered/tpfa/darcyslaw.hh index e6701098eb99497a5107f3aeb8f5950497c19474..1dcb394f668242aeec8996cc5ec48aaeb6901da4 100644 --- a/dumux/discretization/cellcentered/tpfa/darcyslaw.hh +++ b/dumux/discretization/cellcentered/tpfa/darcyslaw.hh @@ -170,7 +170,7 @@ class CCTpfaDarcysLaw<TypeTag, /*isNetwork*/ false> const auto& g = problem.gravityAtPos(scvf.ipGlobal()); //! compute alpha := n^T*K*g - const auto alpha_inside = vtmv(scvf.unitOuterNormal(), insideVolVars.permeability(), g); + const auto alpha_inside = vtmv(scvf.unitOuterNormal(), insideVolVars.permeability(), g)*insideVolVars.extrusionFactor(); Scalar flux = tij*(pInside - pOutside) + rho*scvf.area()*alpha_inside; @@ -180,7 +180,7 @@ class CCTpfaDarcysLaw<TypeTag, /*isNetwork*/ false> const auto& outsideScv = fvGeometry.scv(scvf.outsideScvIdx()); const auto outsideK = outsideVolVars.permeability(); const auto outsideTi = computeTpfaTransmissibility(scvf, outsideScv, outsideK, outsideVolVars.extrusionFactor()); - const auto alpha_outside = vtmv(scvf.unitOuterNormal(), outsideK, g); + const auto alpha_outside = vtmv(scvf.unitOuterNormal(), outsideK, g)*outsideVolVars.extrusionFactor(); flux += rho*tij/outsideTi*(alpha_inside - alpha_outside); } @@ -353,7 +353,9 @@ public: Scalar sumPTi(tij*pInside); // add inside gravitational contribution - sumPTi += rho*scvf.area()*vtmv(scvf.unitOuterNormal(), insideVolVars.permeability(), g); + sumPTi += rho*scvf.area() + *insideVolVars.extrusionFactor() + *vtmv(scvf.unitOuterNormal(), insideVolVars.permeability(), g); for (unsigned int i = 0; i < scvf.numOutsideScvs(); ++i) { @@ -365,14 +367,16 @@ public: sumPTi += outsideFluxVarsCache.advectionTij()*outsideVolVars.pressure(phaseIdx); // add outside gravitational contribution - sumPTi += rho*scvf.area()*vtmv(flippedScvf.unitOuterNormal(), outsideVolVars.permeability(), g); + sumPTi += rho*scvf.area() + *outsideVolVars.extrusionFactor() + *vtmv(flippedScvf.unitOuterNormal(), outsideVolVars.permeability(), g); } return sumPTi/sumTi; } }(); //! precompute alpha := n^T*K*g - const auto alpha_inside = vtmv(scvf.unitOuterNormal(), insideVolVars.permeability(), g); + const auto alpha_inside = vtmv(scvf.unitOuterNormal(), insideVolVars.permeability(), g)*insideVolVars.extrusionFactor(); Scalar flux = tij*(pInside - pOutside) + scvf.area()*rho*alpha_inside; @@ -383,7 +387,7 @@ public: const auto& outsideScvf = fvGeometry.flipScvf(scvf.index()); const auto outsideK = outsideVolVars.permeability(); const auto outsideTi = computeTpfaTransmissibility(outsideScvf, outsideScv, outsideK, outsideVolVars.extrusionFactor()); - const auto alpha_outside = vtmv(outsideScvf.unitOuterNormal(), outsideK, g); + const auto alpha_outside = vtmv(outsideScvf.unitOuterNormal(), outsideK, g)*outsideVolVars.extrusionFactor(); flux -= rho*tij/outsideTi*(alpha_inside + alpha_outside); } diff --git a/dumux/implicit/CMakeLists.txt b/dumux/implicit/CMakeLists.txt index 967a666c7516adc91dbd792b1f9ca86c63605406..f5a4ee2b68d5ccd8f0edd84adcbfece39089d5fe 100644 --- a/dumux/implicit/CMakeLists.txt +++ b/dumux/implicit/CMakeLists.txt @@ -1,4 +1,3 @@ -add_subdirectory(adaptive) add_subdirectory(box) add_subdirectory(cellcentered) diff --git a/dumux/implicit/adaptive/CMakeLists.txt b/dumux/implicit/adaptive/CMakeLists.txt deleted file mode 100644 index e3d267f263834c76a2561494782bb246cb46be0e..0000000000000000000000000000000000000000 --- a/dumux/implicit/adaptive/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -install(FILES - adaptionhelper.hh - gridadapt.hh - gridadaptindicatordefault.hh - gridadaptinitializationindicator.hh - gridadaptproperties.hh - gridadaptpropertydefaults.hh - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/implicit/adaptive) diff --git a/dumux/implicit/adaptive/adaptionhelper.hh b/dumux/implicit/adaptive/adaptionhelper.hh deleted file mode 100644 index 36ddbb7eec79deb3f05c5bb718fdd4b24df7f679..0000000000000000000000000000000000000000 --- a/dumux/implicit/adaptive/adaptionhelper.hh +++ /dev/null @@ -1,135 +0,0 @@ -// -*- 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/>. * - *****************************************************************************/ -#ifndef DUMUX_IMPLICIT_ADAPTIONHELPER_HH -#define DUMUX_IMPLICIT_ADAPTIONHELPER_HH - -#include <dune/grid/common/gridenums.hh> -#include <dune/grid/common/rangegenerators.hh> -#include <dune/grid/utility/persistentcontainer.hh> -#include <dune/localfunctions/lagrange/pqkfactory.hh> - -#include <dumux/common/propertysystem.hh> - -/** - * @file - * @brief Base class holding the variables for implicit models. - */ - -namespace Dumux -{ -namespace Properties -{ -NEW_PROP_TAG(GridView); -NEW_PROP_TAG(ImplicitIsBox); -NEW_PROP_TAG(Problem); -} - -/*! - * \brief Base class holding the variables for implicit models. - */ -template<class TypeTag> -class ImplicitAdaptionHelper -{ -private: - typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GridView::Grid Grid; - - enum { - // Grid and world dimension - dim = GridView::dimension, - dimWorld = GridView::dimensionworld, - }; - - enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) }; - enum { dofCodim = isBox ? dim : 0 }; - - typedef typename GridView::Traits::template Codim<0>::Entity Element; - typedef typename GridView::Traits::template Codim<dofCodim>::Entity DofEntity; - -public: - //! Constructs an adaptive helper object - /** - * In addition to providing a storage object for cell-centered Methods, this class provides - * mapping functionality to adapt the grid. - * - * @param gridView a DUNE gridview object corresponding to diffusion and transport equation - */ - ImplicitAdaptionHelper(Problem& problem) - {} - - /*! - * Store primary variables - * - * To reconstruct the solution in father elements, problem properties might - * need to be accessed. - * From upper level on downwards, the old solution is stored into an container - * object, before the grid is adapted. Father elements hold averaged information - * from the son cells for the case of the sons being coarsened. - * - * @param problem The current problem - */ - void storePrimVars(Problem& problem) - { - DUNE_THROW(Dune::InvalidStateException, - "The problem does not provide " - "a storePrimVars method."); - } - - - /*! - * Reconstruct missing primary variables (where elements are created/deleted) - * - * To reconstruct the solution in father elements, problem properties might - * need to be accessed. - * Starting from the lowest level, the old solution is mapped on the new grid: - * Where coarsened, new cells get information from old father element. - * Where refined, a new solution is reconstructed from the old father cell, - * and then a new son is created. That is then stored into the general data - * structure (CellData). - * - * @param problem The current problem - */ - void reconstructPrimVars(Problem& problem) - { - DUNE_THROW(Dune::InvalidStateException, - "The problem does not provide " - "a reconstructPrimVars method."); - } - -protected: - - int dofIndex(const Problem& problem, const DofEntity& entity) const - { - return problem.model().dofMapper().index(entity); - } - - int dofIndex(const Problem& problem, const Element& element, const int scvIdx) const - { - return problem.model().dofMapper().subIndex(element, scvIdx, dofCodim); - } - - int elementIndex(const Problem& problem, const Element& element) const - { - return problem.elementMapper().index(element); - } - -}; -} -#endif diff --git a/dumux/implicit/adaptive/gridadapt.hh b/dumux/implicit/adaptive/gridadapt.hh deleted file mode 100644 index 015369d71731d6ed1a5ecda031f4fb5942c6d83b..0000000000000000000000000000000000000000 --- a/dumux/implicit/adaptive/gridadapt.hh +++ /dev/null @@ -1,447 +0,0 @@ -// -*- 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 - * \brief Base class for h-adaptive implicit models. - */ -#ifndef DUMUX_IMPLICIT_GRIDADAPT_HH -#define DUMUX_IMPLICIT_GRIDADAPT_HH - -#include "gridadaptproperties.hh" -#include <unordered_map> - -#include <dune/common/exceptions.hh> - -#include <dumux/common/propertysystem.hh> - -namespace Dumux -{ - -namespace Properties -{ -NEW_PROP_TAG(SolutionVector); -} - -/*!\ingroup ImplicitGridAdapt - * @brief Standard Module for h-adaptive simulations - * - * This class is created by the problem class with the template - * parameters <TypeTag, true> and provides basic functionality - * for adaptive methods: - * - * A standard implementation adaptGrid() will prepare everything - * to calculate the next primary variables vector on the new grid. - */ -template<class TypeTag, bool adaptive> -class ImplicitGridAdapt -{ - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - - typedef typename GridView::Grid Grid; - typedef typename Grid::LeafGridView LeafGridView; - typedef typename Grid::template Codim<0>::Entity Element; - - typedef typename GET_PROP_TYPE(TypeTag, AdaptionIndicator) AdaptionIndicator; - typedef typename GET_PROP_TYPE(TypeTag, AdaptionInitializationIndicator) AdaptionInitializationIndicator; - typedef typename GET_PROP_TYPE(TypeTag, AdaptionHelper) AdaptionHelper; - - enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) }; - -public: - /*! - * Constructor for h-adaptive simulations (adaptive grids) - * @param problem The problem - */ - ImplicitGridAdapt (Problem& problem) - : problem_(problem), - adaptionHelper_(problem), - adaptionIndicator_(problem), - marked_(0), - coarsened_(0) - { - levelMin_ = GET_PARAM_FROM_GROUP(TypeTag, int, GridAdapt, MinLevel); - levelMax_ = GET_PARAM_FROM_GROUP(TypeTag, int, GridAdapt, MaxLevel); - adaptionInterval_ = GET_PARAM_FROM_GROUP(TypeTag, int, GridAdapt, AdaptionInterval); - - if (levelMin_ < 0) - { - DUNE_THROW(Dune::InvalidStateException, "Coarsening the level 0 entities is not possible! Choose MinLevel >= 0"); - } - } - - /*! - * @brief Initalization method of the h-adaptive module - * - * Prepares the grid for simulation after the initialization of the - * problem. The applied indicator is selectable via the property - * AdaptionInitializationIndicator - */ - void init() - { - adaptionIndicator_.init(); - - if (!GET_PARAM_FROM_GROUP(TypeTag, bool, GridAdapt, EnableInitializationIndicator)) - return; - - AdaptionInitializationIndicator adaptionInitIndicator(problem_, adaptionIndicator_); - - int maxIter = 2*levelMax_; - int iter = 0; - while (iter <= maxIter) - { - adaptGrid(adaptionInitIndicator); - - if (!wasAdapted()) - { - break; - } - - int shouldInitialize = adaptionInitIndicator.initializeModel(); - if (problem_.grid().comm().max(shouldInitialize)) - { - problem_.model().init(problem_); - } - - ++iter; - } - } - - /*! - * @brief Standard method to adapt the grid - * - * This method is called from IMPETProblem::preTimeStep() if - * adaptive grids are used in the simulation. It uses the standard - * indicator (selected by the property AdaptionIndicator) and forwards to - * with it to the ultimate method adaptGrid(indicator), which - * uses a standard procedure for adaptivity: - * 1) Determine the refinement indicator - * 2) Mark the elements - * 3) Store primary variables in a map - * 4) Adapt the grid, adapt variables sizes, update mappers - * 5) Reconstruct primary variables, regain secondary variables - */ - void adaptGrid() - { - if(levelMax_ > levelMin_) - adaptGrid(adaptionIndicator_) ; - } - - /*! - * @brief Returns true if grid cells have been marked for adaption - */ - bool wasAdapted() const - { - int sumMarked = problem_.grid().comm().sum(marked_); - int sumCoarsened = problem_.grid().comm().sum(coarsened_); - - return (sumMarked != 0 || sumCoarsened != 0); - } - - /*! - * Sets minimum and maximum refinement levels - * - * @param levMin minimum level for coarsening - * @param levMax maximum level for refinement - */ - void setLevels(int levMin, int levMax) - { - if (levMin < 0) - DUNE_THROW(Dune::InvalidStateException, "Coarsening the level 0 entities is not possible!"); - levelMin_ = levMin; - levelMax_ = levMax; - } - - /*! - * @brief Returns maximum refinement level - * - * The value is the assign maximum possible level, - * not the actual maximum level of the grid. - * @return levelMax_ maximum level for refinement - */ - int getMaxLevel() const - { - return levelMax_; - } - /*! - * @brief Returns minimum refinement level - * - * The value is the assign minimum possible level, - * not the actual minimum level of the grid. - * @return levelMin_ minimum level for coarsening - */ - int getMinLevel() const - { - return levelMin_; - } - - AdaptionIndicator& adaptionIndicator() - { - return adaptionIndicator_; - } - - AdaptionIndicator& adaptionIndicator() const - { - return adaptionIndicator_; - } - -private: - /*! - * @brief Method to adapt the grid with individual indicator vector - * - * @param indicator The refinement indicator that is applied - * - * This method is called by an user-defined preTimeStep() of - * the applied problem and takes a given vector with indicator - * values. - * - * It uses a standard procedure for adaptivity: - * 1) Determine the refinement indicator - * 2) Mark the elements - * 3) Store primary variables in a map - * 4) Adapt the grid, adapt variables sizes, update mappers - * 5) Reconstruct primary variables, regain secondary variables - */ - template<class Indicator> - void adaptGrid(Indicator& indicator) - { - // reset internal counter for marked elements - marked_ = coarsened_ = 0; - - // check for adaption interval: Adapt only at certain time step indices - if (problem_.timeManager().timeStepIndex() % adaptionInterval_ != 0) - return; - - /**** 1) determine refining parameter if standard is used ***/ - // if not, the indicatorVector and refinement Bounds have to - // specified by the problem through setIndicator() - indicator.calculateIndicator(); - - /**** 2) mark elements according to indicator *********/ - markElements(indicator); - - // abort if nothing in grid is marked - int sumMarked = problem_.grid().comm().sum(marked_); - int sumCoarsened = problem_.grid().comm().sum(coarsened_); - if (sumMarked == 0 && sumCoarsened == 0) - return; - else - Dune::dinfo << marked_ << " cells have been marked_ to be refined, " - << coarsened_ << " to be coarsened." << std::endl; - - /**** 2b) Do pre-adaption step *****/ - problem_.grid().preAdapt(); - problem_.preAdapt(); - - /**** 3) Put primary variables in a map *********/ - adaptionHelper_.storePrimVars(problem_); - - /**** 4) Adapt Grid and size of variable vectors *****/ - problem_.grid().adapt(); - - // update mapper to new cell indices - problem_.elementMapper().update(); - problem_.vertexMapper().update(); - - // adapt size of vectors - problem_.model().adaptVariableSize(); - - /**** 5) (Re-)construct primary variables to new grid **/ - adaptionHelper_.reconstructPrimVars(problem_); - - // delete markers in grid - problem_.grid().postAdapt(); - - // call method in problem for potential output etc. - problem_.postAdapt(); - - return; - } - - /*! - * Mark Elements for grid refinement according to applied Indicator - * @param indicator The refinement indicator that is applied - */ - template<class Indicator> - void markElements(Indicator& indicator) - { - typedef std::unordered_map<int, int> CoarsenMarkerType; - CoarsenMarkerType coarsenMarker; - - for (const auto& element : elements(problem_.gridView())) - { - // only mark non-ghost elements - if (element.partitionType() != Dune::GhostEntity) - { - // refine? - if (indicator.refine(element) && element.level() < levelMax_) - { - problem_.grid().mark( 1, element); - ++marked_; - - // this also refines the neighbor elements - checkNeighborsRefine_(element); - } - if (indicator.coarsen(element) && element.hasFather()) - { - problem_.grid().mark( -1, element ); - ++coarsened_; - } - } - } - } - - /*! - * @brief Method ensuring the refinement ratio of 2:1 - * - * For any given element, a loop over the neighbors checks weather the - * entities refinement would require that any of the neighbors has - * to be refined, too. - * This is done recursively over all levels of the grid. - * - * @param element Element of interest that is to be refined - * @param level level of the refined element: it is at least 1 - * @return true if everything was successful - */ - bool checkNeighborsRefine_(const Element &element, int level = 1) - { - // this also refines the neighbor elements - for(const auto& intersection : intersections(problem_.gridView(), element)) - { - if(!intersection.neighbor()) - continue; - - auto outside = intersection.outside(); - - // only mark non-ghost elements - if (outside.partitionType() == Dune::GhostEntity) - continue; - - if ((outside.level() < levelMax_) - && (outside.level() < element.level())) - { - problem_.grid().mark(1, outside); - ++marked_; - - if(level != levelMax_) - checkNeighborsRefine_(outside, ++level); - } - } - return true; - } - - - /*! - * \brief Enforces a given refine ratio after grid was adapted - * - * If the refine ratio is not taken into consideration during - * marking, then this method ensures a certain ratio. - * - * @param maxLevelDelta The maximum level difference (refine ratio) - * between neighbors. - */ - void forceRefineRatio(int maxLevelDelta = 1) - { - LeafGridView leafGridView = problem_.gridView(); - // delete all existing marks - problem_.grid().postAdapt(); - bool done; - do - { - // run through all cells - done=true; - for (const auto& element : elements(leafGridView)) - { - // only mark non-ghost elements - if (element.partitionType() == Dune::GhostEntity) - continue; - - // run through all neighbor-cells (intersections) - for (const auto& intersection : intersections(leafGridView, element)) - { - if(!intersection.neighbor()) - continue; - - if (element.level() + maxLevelDelta < intersection.outside().level()) - { - problem_.grid().mark(1, element); - done=false; - } - } - } - if (done==false) - { - // adapt the grid - problem_.grid().adapt(); - // delete marks - problem_.grid().postAdapt(); - } - } - while (done!=true); - } - - // private Variables - Problem& problem_; - AdaptionHelper adaptionHelper_; - AdaptionIndicator adaptionIndicator_; - - int marked_; - int coarsened_; - - int levelMin_; - int levelMax_; - - int adaptionInterval_; -}; - -/*! - * @brief Class for non-adaptive simulations - * - * This class provides empty methods for non-adaptive simulations - * for compilation reasons. If adaptivity is desired, create the - * class with template arguments <TypeTag, true> instead. - */ -template<class TypeTag> -class ImplicitGridAdapt<TypeTag, false> -{ - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; - typedef typename GET_PROP(TypeTag, SolutionVector) SolutionVector; - -public: - void init() - {} - void adaptGrid() - {} - bool wasAdapted() const - { return false; } - void setLevels(int, int) - {} - void setTolerance(int, int) - {} - void setIndicator(const SolutionVector&, - const Scalar&, const Scalar&) - {} - ImplicitGridAdapt (Problem& problem) - {} -}; - -} -#endif /* DUMUX_IMPLICIT_GRIDADAPT_HH */ \ No newline at end of file diff --git a/dumux/implicit/adaptive/gridadaptindicatordefault.hh b/dumux/implicit/adaptive/gridadaptindicatordefault.hh deleted file mode 100644 index 77c261e9ca848ef62e5702e35bc187912b6a0dae..0000000000000000000000000000000000000000 --- a/dumux/implicit/adaptive/gridadaptindicatordefault.hh +++ /dev/null @@ -1,96 +0,0 @@ -// -*- 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/>. * - *****************************************************************************/ -#ifndef DUMUX_IMPLICIT_GRIDADAPTINDICATORDEFAULT_HH -#define DUMUX_IMPLICIT_GRIDADAPTINDICATORDEFAULT_HH - -#include <dumux/common/propertysystem.hh> - -/** - * @file - * @brief Class defining a default indicator for grid adaption - */ -namespace Dumux -{ - -namespace Properties -{ -NEW_PROP_TAG(GridView); -NEW_PROP_TAG(Problem); -} - -/*!\ingroup ImplicitGridAdaptIndicator - * @brief Class defining a default indicator for grid adaption - * - *Default implementation - * - * \tparam TypeTag The problem TypeTag - */ -template<class TypeTag> -class ImplicitGridAdaptIndicatorDefault -{ -private: - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GridView::Traits::template Codim<0>::Entity Element; - typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; - -public: - /*! \brief Calculates the indicator used for refinement/coarsening for each grid cell. - * - */ - void calculateIndicator() - {} - - /*! \brief Indicator function for marking of grid cells for refinement - * - * Returns true if an element should be refined. - * - * \param element A grid element - */ - bool refine(const Element& element) - { - return false; - } - - /*! \brief Indicator function for marking of grid cells for coarsening - * - * Returns true if an element should be coarsened. - * - * \param element A grid element - */ - bool coarsen(const Element& element) - { - return false; - } - - /*! \brief Initializes the adaption indicator class*/ - void init() - {}; - - /*! \brief Constructs a GridAdaptionIndicator for initialization of an adaptive grid - * - * Default implementation - * - * \param problem The problem object - */ - ImplicitGridAdaptIndicatorDefault(Problem& problem) - {} -}; -} - -#endif diff --git a/dumux/implicit/adaptive/gridadaptinitializationindicator.hh b/dumux/implicit/adaptive/gridadaptinitializationindicator.hh deleted file mode 100644 index b106447be6b16703bc81d256bcdbc208fb543e24..0000000000000000000000000000000000000000 --- a/dumux/implicit/adaptive/gridadaptinitializationindicator.hh +++ /dev/null @@ -1,428 +0,0 @@ -// -*- 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/>. * - *****************************************************************************/ -#ifndef DUMUX_IMPLICIT_GRIDADAPTINITIALIZATIONINDICATOR_HH -#define DUMUX_IMPLICIT_GRIDADAPTINITIALIZATIONINDICATOR_HH - -#include <dune/geometry/type.hh> -#include <dune/common/dynvector.hh> -#include "gridadaptproperties.hh" - -/** - * @file - * @brief Class defining an initialization indicator for grid adaption - */ -namespace Dumux -{ - -namespace Properties -{ -NEW_PROP_TAG(BoundaryTypes); -NEW_PROP_TAG(ElementBoundaryTypes); -NEW_PROP_TAG(ElementVolumeVariables); -NEW_PROP_TAG(FVElementGeometry); -NEW_PROP_TAG(ImplicitIsBox); -NEW_PROP_TAG(PrimaryVariables); -NEW_PROP_TAG(NumEq); -} - -/*!\ingroup ImplicitGridAdaptInitializationIndicator - * @brief Class defining an initialization indicator for grid adaption - * - * Uses the defined grid adaption indicator and further accounts for sources and boundaries. - * Only for grid initialization! - * - * \tparam TypeTag The problem TypeTag - */ -template<class TypeTag> -class ImplicitGridAdaptInitializationIndicator -{ -private: - typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - - enum - { - dim = GridView::dimension, - dimWorld = GridView::dimensionworld, - numEq = GET_PROP_VALUE(TypeTag, NumEq), - }; - - typedef typename GridView::Traits::template Codim<0>::Entity Element; - typedef typename GridView::Traits::template Codim<dim>::Entity Vertex; - typedef typename GridView::Intersection Intersection; - typedef typename GridView::Grid::ctype CoordScalar; - typedef typename Dune::ReferenceElement<CoordScalar, dim> ReferenceElement; - typedef typename Dune::ReferenceElements<CoordScalar, dim> ReferenceElements; - - typedef typename GET_PROP_TYPE(TypeTag, AdaptionIndicator) AdaptionIndicator; - - typedef typename GET_PROP_TYPE(TypeTag, PrimaryVariables) PrimaryVariables; - typedef typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables) ElementVolumeVariables; - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - typedef typename GET_PROP_TYPE(TypeTag, ElementBoundaryTypes) ElementBoundaryTypes; - typedef typename GET_PROP_TYPE(TypeTag, BoundaryTypes) BoundaryTypes; - - enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) }; - - enum { refineCell = 1 }; - - - - - /*! \brief Search for a source term - * - * For every element we check if the element center or the element corners - * are inside a source zone with source value > 0. - * - * \param element A grid element - */ - bool hasSource_(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars) - { - PrimaryVariables source(0.0); - for (int scvIdx = 0; scvIdx < fvGeometry.numScv; scvIdx++) - { - problem_.solDependentSource(source, element, fvGeometry, scvIdx, elemVolVars); - if (source.infinity_norm() > eps_) - return true; - } - return false; - } - - /*! \brief Hierarchical search for the value of Neumann boundary condition - * - * For every intersection we do virtual refinement until maxAllowedLevel - * and check which boundary condition is defined on the intersection center. This - * is necessary as an element can partly have Neumann boundary conditions. - * - * \param bcTypes The boundary condition types - * \param values The value of the boundary condition. Returns the Neumann flux values - * \param element A grid element - * \param intersection The boundary intersection - */ - bool hasRefineBC_(ElementBoundaryTypes &elemBcTypes, - const Element& element, - const Intersection& intersection, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars) - { - // Check for boundary conditions - if(isBox) - { - Dune::GeometryType geoType = element.geometry().type(); - const ReferenceElement &refElement = ReferenceElements::general(geoType); - int fIdx = intersection.indexInInside(); - int numFaceVerts = refElement.size(fIdx, 1, dim); - for (int faceVertexIdx = 0; faceVertexIdx < numFaceVerts; ++faceVertexIdx) - { - int scvIdx = refElement.subEntity(fIdx, 1, faceVertexIdx, dim); - BoundaryTypes bcTypes = elemBcTypes[scvIdx]; - problemBoundaryTypes_(bcTypes, element.template subEntity<dim>(scvIdx)); - int bfIdx = fvGeometry.boundaryFaceIndex(fIdx, faceVertexIdx); - for (int i = 0; i < numEq; i++) - { - if(bcTypes.isDirichlet(i) && refineAtDirichletBC_) - return true; - if(bcTypes.isNeumann(i) && refineAtFluxBC_) - { - PrimaryVariables fluxes(0.0); - problem_.solDependentNeumann(fluxes, element, fvGeometry, - intersection, scvIdx, bfIdx, - elemVolVars); - if (fluxes.infinity_norm() > eps_) - return true; - } - } - } - - } - else - { - BoundaryTypes bcTypes = elemBcTypes[0]; - problem_.boundaryTypes(bcTypes, intersection); - int bfIdx = intersection.indexInInside(); - for (int i = 0; i < numEq; i++) - { - if(bcTypes.isDirichlet(i) && refineAtDirichletBC_) - return true; - if(bcTypes.isNeumann(i) && refineAtFluxBC_) - { - PrimaryVariables fluxes(0.0); - problem_.solDependentNeumann(fluxes, element, fvGeometry, - intersection, 0, bfIdx, - elemVolVars); - if (fluxes.infinity_norm() > eps_) - return true; - } - } - } - return false; - } - - // only actually call the problem method when it exists - template <class T = TypeTag> - void problemBoundaryTypes_(BoundaryTypes& bcTypes, - const typename std::enable_if<GET_PROP_VALUE(T, ImplicitIsBox), Vertex>::type& v) const - { - problem_.boundaryTypes(bcTypes, v); - } - template <class T = TypeTag> - void problemBoundaryTypes_(BoundaryTypes& bcTypes, - const typename std::enable_if<!GET_PROP_VALUE(T, ImplicitIsBox), Vertex>::type& v) const - {} - - -public: - /*! \brief Calculates the indicator used for refinement/coarsening for each grid cell. - * - */ - void calculateIndicator() - { - if (!enableInitializationIndicator_) - return; - - //First adapt for boundary conditions and sources to get a good initial solution - if (nextMaxLevel_ == maxAllowedLevel_) - adaptionIndicator_.calculateIndicator(); - - // prepare an indicator for refinement - indicatorVector_.resize(problem_.gridView().size(0)); - indicatorVector_ = 0; - - // 1) calculate Indicator -> min, maxvalues - // loop over all leaf elements - for (const auto& element : elements(problem_.gridView())) - { - - int globalIdxI = problem_.elementMapper().index(element); - int level = element.level(); - using std::max; - using std::min; - maxLevel_ = max(level, maxLevel_); - - if (level < minAllowedLevel_) - { - nextMaxLevel_ = min(max(level + 1, nextMaxLevel_), maxAllowedLevel_); - indicatorVector_[globalIdxI] = refineCell; - continue; - } - - if (!(refineAtSource_ || refineAtFluxBC_ || refineAtDirichletBC_)) - continue; - - // get the fvGeometry and elementVolVars needed for the bc and source interfaces - FVElementGeometry fvGeometry; - ElementVolumeVariables elemVolVars; - fvGeometry.update(problem_.gridView(), element); - elemVolVars.update(problem_, element, fvGeometry, false /* oldSol? */); - - // Check if we have to refine around a source term - if (indicatorVector_[globalIdxI] != refineCell && refineAtSource_) - { - if(hasSource_(element, fvGeometry, elemVolVars)) - { - nextMaxLevel_ = min(max(level + 1, nextMaxLevel_), maxAllowedLevel_); - indicatorVector_[globalIdxI] = refineCell; - continue; - } - } - - // get the element boundary types - ElementBoundaryTypes bcTypes; - bcTypes.update(problem_, element, fvGeometry); - - // Check if we have to refine at the boundary - if (indicatorVector_[globalIdxI] != refineCell && (refineAtDirichletBC_ || refineAtFluxBC_)) - { - // Calculate the boundary indicator for all boundary intersections - for (const auto& intersection : intersections(problem_.gridView(), element)) - { - if (intersection.boundary()) - { - if(hasRefineBC_(bcTypes, element, intersection, fvGeometry, elemVolVars)) - { - nextMaxLevel_ = min(max(level + 1, nextMaxLevel_), maxAllowedLevel_); - indicatorVector_[globalIdxI] = refineCell; - break; - } - } - } - } - } - } - - /*! \brief Indicator function for marking of grid cells for refinement - * - * Returns true if an element should be refined. - * - * \param element A grid element - */ - bool refine(const Element& element) - { - int idx = problem_.elementMapper().index(element); - - if (indicatorVector_[idx] == refineCell) - return true; - else if (maxLevel_ == maxAllowedLevel_) - return adaptionIndicator_.refine(element); - else - return false; - } - - /*! \brief Indicator function for marking of grid cells for coarsening - * - * Returns true if an element should be coarsened. - * - * \param element A grid element - */ - bool coarsen(const Element& element) - { - return false; - } - - int maxLevel() - { - return maxLevel_; - } - - /*! \brief Initializes the adaption indicator class */ - void init() - {}; - - /*! \brief If the model needs to be initialized after adaption. - * We always need to initialize since the hasRefineBC_ method needs information from - an up-to-date model. - */ - bool initializeModel() - { - return true; - } - - /*! \brief Constructs a GridAdaptionIndicator instance - * - * This standard indicator is based on the saturation gradient. It checks the local gradient - * compared to the maximum global gradient. The indicator is compared locally to a - * refinement/coarsening threshold to decide whether a cell should be marked for refinement - * or coarsening or should not be adapted. - * - * \param problem The problem object - * \param adaptionIndicator Indicator whether a be adapted - */ - ImplicitGridAdaptInitializationIndicator(Problem& problem, AdaptionIndicator& adaptionIndicator): - problem_(problem), adaptionIndicator_(adaptionIndicator), maxLevel_(0), nextMaxLevel_(0), eps_(1e-30) - { - minAllowedLevel_ = GET_PARAM_FROM_GROUP(TypeTag, int, GridAdapt, MinLevel); - maxAllowedLevel_ = GET_PARAM_FROM_GROUP(TypeTag, int, GridAdapt, MaxLevel); - enableInitializationIndicator_ = GET_PARAM_FROM_GROUP(TypeTag, bool, GridAdapt, EnableInitializationIndicator); - refineAtDirichletBC_ = GET_PARAM_FROM_GROUP(TypeTag, bool, GridAdapt, RefineAtDirichletBC); - refineAtFluxBC_ = GET_PARAM_FROM_GROUP(TypeTag, bool, GridAdapt, RefineAtFluxBC); - refineAtSource_ = GET_PARAM_FROM_GROUP(TypeTag, bool, GridAdapt, RefineAtSource); - - if (!refineAtDirichletBC_ && !refineAtFluxBC_ && !refineAtSource_) - { - nextMaxLevel_ = maxAllowedLevel_; - maxLevel_ = maxAllowedLevel_; - } - } - -private: - Problem& problem_; - AdaptionIndicator& adaptionIndicator_; - Dune::DynamicVector<int> indicatorVector_; - int maxLevel_; - int nextMaxLevel_; - int minAllowedLevel_; - int maxAllowedLevel_; - bool enableInitializationIndicator_; - bool refineAtDirichletBC_; - bool refineAtFluxBC_; - bool refineAtSource_; - Scalar eps_; -}; - - -/*!\ingroup IMPES - * @brief Class defining a start indicator for grid adaption - * - *Default implementation - * - * \tparam TypeTag The problem TypeTag - */ -template<class TypeTag> -class ImplicitGridAdaptInitializationIndicatorDefault -{ -private: - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GridView::Traits::template Codim<0>::Entity Element; - typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; - typedef typename GET_PROP_TYPE(TypeTag, AdaptionIndicator) AdaptionIndicator; - -public: - /*! \brief Calculates the indicator used for refinement/coarsening for each grid cell. - * - */ - void calculateIndicator() - {} - - /*! \brief Indicator function for marking of grid cells for refinement - * - * Returns true if an element should be refined. - * - * \param element A grid element - */ - bool refine(const Element& element) - { - return false; - } - - /*! \brief Indicator function for marking of grid cells for coarsening - * - * Returns true if an element should be coarsened. - * - * \param element A grid element - */ - bool coarsen(const Element& element) - { - return false; - } - - bool initializeModel() - { - return false; - } - - /*! \brief Initializes the adaption indicator class*/ - void init() - {}; - - /*! \brief Constructs a GridAdaptionIndicator for initialization of an adaptive grid - * - * Default implementation - * - * \param problem The problem object - * \param adaptionIndicator Indicator whether a be adapted - */ - ImplicitGridAdaptInitializationIndicatorDefault(Problem& problem, AdaptionIndicator& adaptionIndicator) - {} -}; - -} -#endif diff --git a/dumux/implicit/adaptive/gridadaptproperties.hh b/dumux/implicit/adaptive/gridadaptproperties.hh deleted file mode 100644 index dfa71287d0a1856bf77e8c25c1993202de116ebe..0000000000000000000000000000000000000000 --- a/dumux/implicit/adaptive/gridadaptproperties.hh +++ /dev/null @@ -1,87 +0,0 @@ -// -*- 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/>. * - *****************************************************************************/ -/*! - * \ingroup ImplicitGridAdaptProperties - * \ingroup ImplicitGridAdapt - * \file - * - * \brief Defines a type tag and some fundamental properties for - * linear solvers - */ -#ifndef DUMUX_IMPLICIT_GRIDADAPT_PROPERTIES_HH -#define DUMUX_IMPLICIT_GRIDADAPT_PROPERTIES_HH - -#include <dumux/common/basicproperties.hh> - -namespace Dumux -{ -namespace Properties -{ -//! Grid adaption type tag for all sequential models. -NEW_TYPE_TAG(GridAdapt); - -//! Defines if the grid is h-adaptive -NEW_PROP_TAG(AdaptiveGrid); - -//! Class which stores data and reconstructs primary variables for adapted grid -NEW_PROP_TAG(AdaptionHelper); - -//! Class defining the refinement/coarsening indicator -NEW_PROP_TAG(AdaptionIndicator); - -//! Class defining the refinement/coarsening indicator for grid initialization -NEW_PROP_TAG(AdaptionInitializationIndicator); - -//! Switch the use of initial grid adaption on/off -NEW_PROP_TAG(GridAdaptEnableInitializationIndicator); - -//! Mimimum allowed level -NEW_PROP_TAG(GridAdaptMinLevel); - -//! Maximum allowed level -NEW_PROP_TAG(GridAdaptMaxLevel); - -//! Tolerance for refinement -NEW_PROP_TAG(GridAdaptRefineTolerance); - -//! Tolerance for coarsening -NEW_PROP_TAG(GridAdaptCoarsenTolerance); - -//! Tolerance for refinement -NEW_PROP_TAG(GridAdaptRefineThreshold); - -//! Tolerance for coarsening -NEW_PROP_TAG(GridAdaptCoarsenThreshold); - -//! Time step interval for adaption -NEW_PROP_TAG(GridAdaptAdaptionInterval); - -//! Switch for refinement at Dirichlet BC's -> not used by all indicators! -NEW_PROP_TAG(GridAdaptRefineAtDirichletBC); - -//! Switch for refinement at Neumann BC's -> not used by all indicators! -NEW_PROP_TAG(GridAdaptRefineAtFluxBC); - -//! Switch for refinement at sources -> not used by all indicators! -NEW_PROP_TAG(GridAdaptRefineAtSource); - -} // namespace Properties -} // namespace Dumux - -#endif diff --git a/dumux/implicit/adaptive/gridadaptpropertydefaults.hh b/dumux/implicit/adaptive/gridadaptpropertydefaults.hh deleted file mode 100644 index 20f52eb7fe2efb25d5804276c9a9dbddff8c077c..0000000000000000000000000000000000000000 --- a/dumux/implicit/adaptive/gridadaptpropertydefaults.hh +++ /dev/null @@ -1,70 +0,0 @@ -// -*- 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/>. * - *****************************************************************************/ -/*! - * \ingroup ImplicitGridAdaptPropertyDefaults - * \ingroup ImplicitGridAdapt - * \file - * - * \brief Defines a type tag and some fundamental properties for - * linear solvers - */ -#ifndef DUMUX_IMPLICIT_GRIDADAPT_PROPERTY_DEFAULTS_HH -#define DUMUX_IMPLICIT_GRIDADAPT_PROPERTY_DEFAULTS_HH - -#include <dumux/common/basicproperties.hh> -#include "gridadaptproperties.hh" -#include "gridadaptindicatordefault.hh" -#include "gridadaptinitializationindicator.hh" -#include "adaptionhelper.hh" - -namespace Dumux -{ -namespace Properties -{ - -//no adaptive grid -SET_BOOL_PROP(GridAdapt, AdaptiveGrid, false); - -//standard setting -SET_INT_PROP(GridAdapt, GridAdaptMinLevel, 0); -SET_INT_PROP(GridAdapt, GridAdaptMaxLevel, 1); -SET_SCALAR_PROP(GridAdapt, GridAdaptRefineTolerance, 0.05); -SET_SCALAR_PROP(GridAdapt, GridAdaptCoarsenTolerance, 0.001); -SET_SCALAR_PROP(GridAdapt, GridAdaptRefineThreshold, 0.0); -SET_SCALAR_PROP(GridAdapt, GridAdaptCoarsenThreshold, 0.0); -SET_INT_PROP(GridAdapt, GridAdaptAdaptionInterval, 1); -//Switch initial grid adaption off per default -SET_BOOL_PROP(GridAdapt, GridAdaptEnableInitializationIndicator, false); - -// Switch of extra refinement strategy at boundaries/sources -SET_BOOL_PROP(GridAdapt, GridAdaptRefineAtDirichletBC, false); -SET_BOOL_PROP(GridAdapt, GridAdaptRefineAtFluxBC, false); -SET_BOOL_PROP(GridAdapt, GridAdaptRefineAtSource, false); - -//! Set the default indicator class models for adaption or coarsening -SET_TYPE_PROP(GridAdapt, AdaptionIndicator, ImplicitGridAdaptIndicatorDefault<TypeTag>); -//!Set default class for adaption initialization indicator -SET_TYPE_PROP(GridAdapt, AdaptionInitializationIndicator, ImplicitGridAdaptInitializationIndicatorDefault<TypeTag>); -//!Set default class for adaption helper -SET_TYPE_PROP(GridAdapt, AdaptionHelper, ImplicitAdaptionHelper<TypeTag>); - -} // namespace Properties -} // namespace Dumux - -#endif diff --git a/dumux/porousmediumflow/2p/implicit/adaptionhelper.hh b/dumux/porousmediumflow/2p/implicit/adaptionhelper.hh deleted file mode 100644 index 9f21d22dcd4673d4fe9f29cacd4d3333f9bb4833..0000000000000000000000000000000000000000 --- a/dumux/porousmediumflow/2p/implicit/adaptionhelper.hh +++ /dev/null @@ -1,495 +0,0 @@ -// -*- 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/>. * - *****************************************************************************/ -#ifndef DUMUX_TWOP_ADAPTIONHELPER_HH -#define DUMUX_TWOP_ADAPTIONHELPER_HH - -#include <dumux/common/properties.hh> -#include <dumux/implicit/adaptive/adaptionhelper.hh> - -namespace Dumux { - -/*! - * \brief Base class holding the variables for implicit models. - */ -template<class TypeTag> -class TwoPAdaptionHelper : public ImplicitAdaptionHelper<TypeTag> -{ -private: - typedef ImplicitAdaptionHelper<TypeTag> ParentType; - typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; - typedef typename GET_PROP_TYPE(TypeTag, PrimaryVariables) PrimaryVariables; - typedef typename GET_PROP_TYPE(TypeTag, VolumeVariables) VolumeVariables; - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - - enum { - // Grid and world dimension - dim = GridView::dimension, - dimWorld = GridView::dimensionworld, - - //indices - pressureIdx = Indices::pressureIdx, - saturationIdx = Indices::saturationIdx, - pwsn = Indices::pwsn, - pnsw = Indices::pnsw, - formulation = GET_PROP_VALUE(TypeTag, Formulation), - wPhaseIdx = Indices::wPhaseIdx, - nPhaseIdx = Indices::nPhaseIdx - }; - - enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) }; - enum { dofCodim = isBox ? dim : 0 }; - - typedef typename GridView::Grid Grid; - typedef typename Grid::LevelGridView LevelGridView; - typedef typename GridView::Traits::template Codim<0>::Entity Element; - - typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition; - typedef typename GridView::ctype CoordScalar; - typedef Dune::FieldVector<CoordScalar, dim> LocalPosition; - - typedef Dune::PQkLocalFiniteElementCache<CoordScalar, Scalar, dim, 1> LocalFiniteElementCache; - typedef typename LocalFiniteElementCache::FiniteElementType LocalFiniteElement; - - struct AdaptedValues - { - std::vector<PrimaryVariables> u; - int count; - PrimaryVariables associatedMass; - AdaptedValues(): associatedMass(0) - { - count = 0; - } - }; - - typedef Dune::PersistentContainer<Grid, AdaptedValues> PersistentContainer; - PersistentContainer adaptionMap_; - -public: - //! Constructs an adaption helper object - /** - * @param gridView a DUNE gridview object - */ - TwoPAdaptionHelper(Problem& problem) : ParentType(problem), adaptionMap_(problem.grid(), 0) - { - if(FluidSystem::isCompressible(wPhaseIdx) || FluidSystem::isCompressible(nPhaseIdx)) - DUNE_THROW(Dune::InvalidStateException, "Adaptionhelper is only for incompressible fluids mass-conservative!"); - } - - /*! - * Store primary variables - * - * To reconstruct the solution in father elements, problem properties might - * need to be accessed. - * From upper level on downwards, the old solution is stored into an container - * object, before the grid is adapted. Father elements hold averaged information - * from the son cells for the case of the sons being coarsened. - * - * @param problem The current problem - */ - void storePrimVars(Problem& problem) - { - adaptionMap_.resize(); - - // loop over all levels of the grid - for (int level = problem.grid().maxLevel(); level >= 0; level--) - { - //get grid view on level grid - LevelGridView levelView = problem.grid().levelGridView(level); - - for (const auto& element : elements(levelView)) - { - //get your map entry - AdaptedValues &adaptedValues = adaptionMap_[element]; - - // put values in the map - if (element.isLeaf()) - { - FVElementGeometry fvGeometry; - fvGeometry.update(problem.gridView(), element); - - for (int scvIdx = 0; scvIdx < fvGeometry.numScv; ++scvIdx) - { - // get index - int dofIdx = this->dofIndex(problem, element, scvIdx); - - adaptedValues.u.push_back(problem.model().curSol()[dofIdx]); - - VolumeVariables volVars; - volVars.update(adaptedValues.u[scvIdx], - problem, - element, - fvGeometry, - scvIdx, - false); - - Scalar volume = fvGeometry.subContVol[scvIdx].volume; - - adaptedValues.associatedMass[nPhaseIdx] += volume*volVars.density(nPhaseIdx) - * volVars.porosity() * volVars.saturation(nPhaseIdx); - adaptedValues.associatedMass[wPhaseIdx] += volume*volVars.density(wPhaseIdx) - * volVars.porosity() * volVars.saturation(wPhaseIdx); - } - adaptedValues.count = 1; - } - //Average in father - if (element.level() > 0) - { - if(!element.hasFather()) - DUNE_THROW(Dune::InvalidStateException, "Element on level > 0 has no father element!"); - - AdaptedValues& adaptedValuesFather = adaptionMap_[element.father()]; - //For some grids the father element is identical to the son element. - //For that case averaging is not necessary. - if(&adaptedValues != &adaptedValuesFather) - { - adaptedValuesFather.count += 1; - storeAdaptionValues(adaptedValues, adaptedValuesFather); - } - } - - if(isBox && !element.isLeaf()) - { - FVElementGeometry fvGeometry; - fvGeometry.update(problem.gridView(), element); - - for (int scvIdx = 0; scvIdx < fvGeometry.numScv; ++scvIdx) - { - int dofIdx = this->dofIndex(problem, element, scvIdx); - - adaptedValues.u.push_back(problem.model().curSol()[dofIdx]); - } - } - - } - } - } - - /*! - * Reconstruct missing primary variables (where elements are created/deleted) - * - * To reconstruct the solution in father elements, problem properties might - * need to be accessed. - * Starting from the lowest level, the old solution is mapped on the new grid: - * Where coarsened, new cells get information from old father element. - * Where refined, a new solution is reconstructed from the old father cell, - * and then a new son is created. That is then stored into the general data - * structure (CellData). - * - * @param problem The current problem - */ - void reconstructPrimVars(Problem& problem) - { - adaptionMap_.resize(); - //vectors storing the mass associated with each vertex, when using the box method - std::vector<Scalar> massCoeff; - std::vector<Scalar> associatedMass; - - if(isBox) - { - massCoeff.resize(problem.model().numDofs(),0.0); - associatedMass.resize(problem.model().numDofs(),0.0); - } - - for (int level = 0; level <= problem.grid().maxLevel(); level++) - { - LevelGridView levelView = problem.grid().levelGridView(level); - - for (const auto& element : elements(levelView)) - { - // only treat non-ghosts, ghost data is communicated afterwards - if (element.partitionType() == Dune::GhostEntity) - continue; - - if (!element.isNew() || element.level() == 0) - { - //entry is in map, write in leaf - if (element.isLeaf()) - { - AdaptedValues &adaptedValues = adaptionMap_[element]; - - FVElementGeometry fvGeometry; - fvGeometry.update(problem.gridView(), element); - - for (int scvIdx = 0; scvIdx < fvGeometry.numScv; ++scvIdx) - { - // get index - int dofIdx = this->dofIndex(problem, element, scvIdx); - - VolumeVariables volVars; - volVars.update(adaptedValues.u[scvIdx], - problem, - element, - fvGeometry, - scvIdx, - false); - - Scalar volumeElement = fvGeometry.elementVolume; - - this->setAdaptionValues(adaptedValues, problem.model().curSol()[dofIdx],scvIdx); - - if (int(formulation) == pwsn) - { - problem.model().curSol()[dofIdx][saturationIdx] = adaptedValues.associatedMass[nPhaseIdx]; - problem.model().curSol()[dofIdx][saturationIdx] /= volumeElement * volVars.density(nPhaseIdx) * volVars.porosity(); - } - else if (int(formulation) == pnsw) - { - problem.model().curSol()[dofIdx][saturationIdx] = adaptedValues.associatedMass[wPhaseIdx]; - problem.model().curSol()[dofIdx][saturationIdx] /= volumeElement * volVars.density(wPhaseIdx) * volVars.porosity(); - } - - if(isBox) - { - Scalar volume = fvGeometry.subContVol[scvIdx].volume; - if (int(formulation) == pwsn) - { - massCoeff[dofIdx] += volume * volVars.density(nPhaseIdx) * volVars.porosity(); - associatedMass[dofIdx] += volume/volumeElement*adaptedValues.associatedMass[nPhaseIdx]; - } - else if (int(formulation) == pnsw) - { - massCoeff[dofIdx] += volume * volVars.density(wPhaseIdx) * volVars.porosity(); - associatedMass[dofIdx] += volume/volumeElement*adaptedValues.associatedMass[wPhaseIdx]; - } - } - - } - - } - } - else - { - // value is not in map, interpolate from father element - if (element.hasFather()) - { - auto eFather = element.father(); - while(eFather.isNew() && eFather.level() > 0) - eFather = eFather.father(); - - Scalar massFather = 0.0; - - if(!isBox) - { - AdaptedValues& adaptedValuesFather = adaptionMap_[eFather]; - - if (int(formulation) == pwsn) - { - massFather = adaptedValuesFather.associatedMass[nPhaseIdx]; - } - else if (int(formulation) == pnsw) - { - massFather = adaptedValuesFather.associatedMass[wPhaseIdx]; - } - - // access new son - AdaptedValues& adaptedValues = adaptionMap_[element]; - adaptedValues.count = 1; - - FVElementGeometry fvGeometry; - fvGeometry.update(problem.gridView(), element); - - adaptedValues.u.push_back(adaptedValuesFather.u[0]); - - VolumeVariables volVars; - volVars.update(adaptedValues.u[0], - problem, - element, - fvGeometry, - /*scvIdx=*/0, - false); - - Scalar volume = fvGeometry.subContVol[0].volume; - Scalar massCoeffSon = 0.0; - if (int(formulation) == pwsn) - { - massCoeffSon = volume * volVars.density(nPhaseIdx) * volVars.porosity(); - } - else if (int(formulation) == pnsw) - { - massCoeffSon = volume * volVars.density(wPhaseIdx) * volVars.porosity(); - } - Scalar volumeFather = eFather.geometry().volume(); - adaptedValues.u[0][saturationIdx] = (volume/volumeFather*massFather)/massCoeffSon; - - // if we are on leaf, store reconstructed values of son in CellData object - if (element.isLeaf()) - { - // access new CellData object - int newIdxI = this->elementIndex(problem, element); - - this->setAdaptionValues(adaptedValues, problem.model().curSol()[newIdxI],0); - } - } - else - { - AdaptedValues& adaptedValuesFather = adaptionMap_[eFather]; - // access new son - AdaptedValues& adaptedValues = adaptionMap_[element]; - adaptedValues.u.clear(); - adaptedValues.count = 1; - - const auto geometryI = element.geometry(); - - FVElementGeometry fvGeometry; - fvGeometry.update(problem.gridView(), element); - - for (int scvIdx = 0; scvIdx < fvGeometry.numScv; ++scvIdx) - { - auto subEntity = element.template subEntity <dofCodim>(scvIdx); - - LocalPosition dofCenterPos = geometryI.local(subEntity.geometry().center()); - const LocalFiniteElementCache feCache; - Dune::GeometryType geomType = eFather.geometry().type(); - - // Interpolate values from father element by using ansatz functions - const LocalFiniteElement &localFiniteElement = feCache.get(geomType); - std::vector<Dune::FieldVector<Scalar, 1> > shapeVal; - localFiniteElement.localBasis().evaluateFunction(dofCenterPos, shapeVal); - PrimaryVariables u(0); - for (int j = 0; j < shapeVal.size(); ++j) - { - u.axpy(shapeVal[j], adaptedValuesFather.u[j]); - } - - adaptedValues.u.push_back(u); - adaptedValues.count = 1; - - if (element.isLeaf()) - { - VolumeVariables volVars; - volVars.update(adaptedValues.u[scvIdx], - problem, - element, - fvGeometry, - scvIdx, - false); - - Scalar volume = fvGeometry.subContVol[scvIdx].volume; - Scalar volumeFather = eFather.geometry().volume(); - - int dofIdx = this->dofIndex(problem, element, scvIdx); - if (int(formulation) == pwsn) - { - massCoeff[dofIdx] += volume * volVars.density(nPhaseIdx) * volVars.porosity(); - associatedMass[dofIdx] += volume/volumeFather*adaptedValuesFather.associatedMass[nPhaseIdx]; - } - else if (int(formulation) == pnsw) - { - massCoeff[dofIdx] += volume * volVars.density(wPhaseIdx) * volVars.porosity(); - associatedMass[dofIdx] += volume/volumeFather*adaptedValuesFather.associatedMass[wPhaseIdx]; - } - - this->setAdaptionValues(adaptedValues, problem.model().curSol()[dofIdx],scvIdx); - } - - } - } - } - else - { - DUNE_THROW(Dune::InvalidStateException, "Element is new but has no father element!"); - } - - } - } - - } - - if(isBox) - { - for(int dofIdx = 0; dofIdx < problem.model().numDofs(); dofIdx++) - { - problem.model().curSol()[dofIdx][saturationIdx] = associatedMass[dofIdx]/massCoeff[dofIdx]; - } - } - - // reset entries in restrictionmap - adaptionMap_.resize( typename PersistentContainer::Value() ); - adaptionMap_.shrinkToFit(); - adaptionMap_.fill( typename PersistentContainer::Value() ); - -//#if HAVE_MPI -// // communicate ghost data -// typedef typename GET_PROP(TypeTag, SolutionTypes) SolutionTypes; -// typedef typename SolutionTypes::ElementMapper ElementMapper; -// typedef VectorExchange<ElementMapper, std::vector<CellData> > DataHandle; -// DataHandle dataHandle(problem.elementMapper(), this->cellDataGlobal()); -// problem.gridView().template communicate<DataHandle>(dataHandle, -// Dune::InteriorBorder_All_Interface, -// Dune::ForwardCommunication); -//#endif - } - - //! Stores sons entries into father element for averaging - /** - * Sum up the adaptedValues (sons values) into father element. We store from leaf - * upwards, so sons are stored first, then cells on the next leaf (=fathers) - * can be averaged. - * - * \param adaptedValues Container for model-specific values to be adapted - * \param adaptedValuesFather Values to be adapted of father cell - */ - static void storeAdaptionValues(AdaptedValues& adaptedValues, - AdaptedValues& adaptedValuesFather) - { - if(!isBox) - { - if(adaptedValuesFather.u.size() == 0) - adaptedValuesFather.u.resize(1); - - adaptedValuesFather.u[0] += adaptedValues.u[0]; - adaptedValuesFather.u[0] /= adaptedValues.count; - adaptedValuesFather.associatedMass += adaptedValues.associatedMass; - } - else - { - adaptedValuesFather.associatedMass += adaptedValues.associatedMass; - } - } - //! Set adapted values in CellData - /** - * This methods stores reconstructed values into the cellData object, by - * this setting a newly mapped solution to the storage container of the - * sequential models. - * - * \param adaptedValues Container for model-specific values to be adapted - * \param u The variables to be stored - */ - static void setAdaptionValues(AdaptedValues& adaptedValues, PrimaryVariables& u, int scvIdx) - { - PrimaryVariables uNew(0); - if(!isBox) - { - uNew = adaptedValues.u[scvIdx]; - uNew /= adaptedValues.count; - } - else - { - uNew = adaptedValues.u[scvIdx]; - } - - u = uNew; - } -}; -} -#endif diff --git a/dumux/porousmediumflow/2p/implicit/gridadaptindicator.hh b/dumux/porousmediumflow/2p/implicit/gridadaptindicator.hh index 5d7ac8b70328698053239f8a9959d7e43553f8d8..bb2f8f945f83b19dce51385fd83b51166d810235 100644 --- a/dumux/porousmediumflow/2p/implicit/gridadaptindicator.hh +++ b/dumux/porousmediumflow/2p/implicit/gridadaptindicator.hh @@ -16,170 +16,165 @@ * You should have received a copy of the GNU General Public License * * along with this program. If not, see <http://www.gnu.org/licenses/>. * *****************************************************************************/ -#ifndef DUMUX_IMPLICIT_GRIDADAPTINDICATOR2P_HH -#define DUMUX_IMPLICIT_GRIDADAPTINDICATOR2P_HH +#ifndef DUMUX_TWOP_ADAPTION_INDICATOR_HH +#define DUMUX_TWOP_ADAPTION_INDICATOR_HH + +#include <dune/common/exceptions.hh> #include <dumux/common/properties.hh> -#include <dune/localfunctions/lagrange/pqkfactory.hh> -//#include <dumux/linear/vectorexchange.hh> +#include <dumux/discretization/evalsolution.hh> /** - * @file - * @brief Class defining a standard, saturation dependent indicator for grid adaptation + * \file + * \brief Class defining a standard, saturation dependent indicator for grid adaptation */ namespace Dumux { -/*!\ingroup IMPES - * @brief Class defining a standard, saturation dependent indicator for grid adaptation - * - * \tparam TypeTag The problem TypeTag + +/*!\ingroup TwoPModel + * \brief Class defining a standard, saturation dependent indicator for grid adaptation */ template<class TypeTag> -class TwoPImplicitGridAdaptIndicator +class TwoPGridAdaptIndicator { -private: - typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - typedef typename GridView::Traits::template Codim<0>::Entity Element; + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Element = typename GridView::template Codim<0>::Entity; + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using ElementSolution = typename GET_PROP_TYPE(TypeTag, ElementSolutionVector); - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + enum { saturationIdx = Indices::saturationIdx }; - enum - { - saturationIdx = Indices::saturationIdx, - pressureIdx = Indices::pressureIdx - }; - enum +public: + /*! \brief The Constructor + * + * \param fvGridGeometry The finite volume grid geometry + * + * Note: refineBound_, coarsenBound_ & maxSaturationDelta_ are chosen + * in a way such that the indicator returns false for all elements + * before having been calculated. + */ + TwoPGridAdaptIndicator(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : fvGridGeometry_(fvGridGeometry) + , refineBound_(std::numeric_limits<Scalar>::max()) + , coarsenBound_(std::numeric_limits<Scalar>::lowest()) + , maxSaturationDelta_(fvGridGeometry_->gridView().size(0), 0.0) + , minLevel_(getParamFromGroup<std::size_t>(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Adaptive.MinLevel", 0)) + , maxLevel_(getParamFromGroup<std::size_t>(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Adaptive.MaxLevel", 0)) + {} + + /*! + * \brief Function to set the minimum allowed level. + * + */ + void setMinLevel(std::size_t minLevel) { - wPhaseIdx = Indices::wPhaseIdx, - nPhaseIdx = Indices::nPhaseIdx - }; - - enum { - // Grid and world dimension - dim = GridView::dimension, - dimWorld = GridView::dimensionworld - }; - - enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) }; - enum { dofCodim = isBox ? dim : 0 }; + minLevel_ = minLevel; + } - typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition; - typedef typename GridView::ctype CoordScalar; + /*! + * \brief Function to set the maximum allowed level. + * + */ + void setMaxLevel(std::size_t maxLevel) + { + maxLevel_ = maxLevel; + } - typedef Dune::PQkLocalFiniteElementCache<CoordScalar, Scalar, dim, 1> LocalFiniteElementCache; - typedef typename LocalFiniteElementCache::FiniteElementType LocalFiniteElement; + /*! + * \brief Function to set the minumum/maximum allowed levels. + * + */ + void setLevels(std::size_t minLevel, std::size_t maxLevel) + { + minLevel_ = minLevel; + maxLevel_ = maxLevel; + } -public: - /*! \brief Calculates the indicator used for refinement/coarsening for each grid cell. + /*! + * \brief Calculates the indicator used for refinement/coarsening for each grid cell. * - * This standard indicator is based on the saturation gradient. + * This standard two-phase indicator is based on the saturation gradient. */ - void calculateIndicator() + void calculate(const SolutionVector& sol, + Scalar refineTol = 0.05, + Scalar coarsenTol = 0.001) { - // prepare an indicator for refinement - if(indicatorVector_.size() != problem_.gridView().size(0)) - { - indicatorVector_.resize(problem_.gridView().size(0)); - } - indicatorVector_ = -1e100; + //! reset the indicator to a state that returns false for all elements + refineBound_ = std::numeric_limits<Scalar>::max(); + coarsenBound_ = std::numeric_limits<Scalar>::lowest(); + maxSaturationDelta_.assign(fvGridGeometry_->gridView().size(0), 0.0); - Scalar globalMax = -1e100; - Scalar globalMin = 1e100; + //! maxLevel_ must be higher than minLevel_ to allow for refinement + if (minLevel_ >= maxLevel_) + return; - // 1) calculate Indicator -> min, maxvalues - // loop over all leaf-elements - for (const auto& element : elements(problem_.gridView())) - { - // calculate minimum and maximum saturation - // index of the current leaf-elements - int globalIdxI = problem_.elementMapper().index(element); + //! check for inadmissible tolerance combination + if (coarsenTol > refineTol) + DUNE_THROW(Dune::InvalidStateException, "Refine tolerance must be higher than coarsen tolerance"); - Scalar satI = 0.0; + //! variables to hold the max/mon saturation values on the leaf + Scalar globalMax = std::numeric_limits<Scalar>::lowest(); + Scalar globalMin = std::numeric_limits<Scalar>::max(); - if(!isBox) - satI = problem_.model().curSol()[globalIdxI][saturationIdx]; - else - { - const LocalFiniteElementCache feCache; - const auto geometryI = element.geometry(); - Dune::GeometryType geomType = geometryI.type(); - - GlobalPosition centerI = geometryI.local(geometryI.center()); - const LocalFiniteElement &localFiniteElement = feCache.get(geomType); - std::vector<Dune::FieldVector<Scalar, 1> > shapeVal; - localFiniteElement.localBasis().evaluateFunction(centerI, shapeVal); - - for (int i = 0; i < shapeVal.size(); ++i) - { - int dofIdxGlobal = problem_.model().dofMapper().subIndex(element, i, dofCodim); - satI += shapeVal[i]*problem_.model().curSol()[dofIdxGlobal][saturationIdx]; - } - } + //! Calculate minimum and maximum saturation + for (const auto& element : elements(fvGridGeometry_->gridView())) + { + //! index of the current leaf-element + const auto globalIdxI = fvGridGeometry_->elementMapper().index(element); + //! obtain the saturation at the center of the element + const auto geometry = element.geometry(); + const ElementSolution elemSol(element, sol, *fvGridGeometry_); + const Scalar satI = evalSolution(element, geometry, *fvGridGeometry_, elemSol, geometry.center())[saturationIdx]; + + //! maybe update the global minimum/maximum using std::min; using std::max; globalMin = min(satI, globalMin); globalMax = max(satI, globalMax); - // calculate refinement indicator in all cells - for (const auto& intersection : intersections(problem_.gridView(), element)) + //! calculate maximum delta in saturation for this cell + for (const auto& intersection : intersections(fvGridGeometry_->gridView(), element)) { - // Only consider internal intersections + //! Only consider internal intersections if (intersection.neighbor()) { - // Access neighbor - auto outside = intersection.outside(); - int globalIdxJ = problem_.elementMapper().index(outside); + //! Access neighbor + const auto outside = intersection.outside(); + const auto globalIdxJ = fvGridGeometry_->elementMapper().index(outside); - // Visit intersection only once + //! Visit intersection only once if (element.level() > outside.level() || (element.level() == outside.level() && globalIdxI < globalIdxJ)) { - Scalar satJ = 0.0; - - if(!isBox) - satJ = problem_.model().curSol()[globalIdxJ][saturationIdx]; - else - { - const LocalFiniteElementCache feCache; - const auto geometryJ = outside.geometry(); - Dune::GeometryType geomType = geometryJ.type(); - - GlobalPosition centerJ = geometryJ.local(geometryJ.center()); - const LocalFiniteElement &localFiniteElement = feCache.get(geomType); - std::vector<Dune::FieldVector<Scalar, 1> > shapeVal; - localFiniteElement.localBasis().evaluateFunction(centerJ, shapeVal); - - for (int i = 0; i < shapeVal.size(); ++i) - { - int dofIdxGlobal = problem_.model().dofMapper().subIndex(outside, i, dofCodim); - - satJ += shapeVal[i]*problem_.model().curSol()[dofIdxGlobal][saturationIdx]; - } - } - - + //! obtain saturation in the neighbor + const auto outsideGeometry = outside.geometry(); + const ElementSolution elemSolJ(outside, sol, *fvGridGeometry_); + const Scalar satJ = evalSolution(outside, outsideGeometry, *fvGridGeometry_, elemSolJ, outsideGeometry.center())[saturationIdx]; using std::abs; Scalar localdelta = abs(satI - satJ); - using std::max; - indicatorVector_[globalIdxI][0] = max(indicatorVector_[globalIdxI][0], localdelta); - indicatorVector_[globalIdxJ][0] = max(indicatorVector_[globalIdxJ][0], localdelta); + maxSaturationDelta_[globalIdxI] = max(maxSaturationDelta_[globalIdxI], localdelta); + maxSaturationDelta_[globalIdxJ] = max(maxSaturationDelta_[globalIdxJ], localdelta); } } } } - Scalar globaldelta = globalMax - globalMin; + //! compute the maximum delta in saturation + const auto globalDelta = globalMax - globalMin; - refineBound_ = refinetol_*globaldelta; - coarsenBound_ = coarsentol_*globaldelta; + //! compute the refinement/coarsening bounds + refineBound_ = refineTol*globalDelta; + coarsenBound_ = coarsenTol*globalDelta; +// TODO: fix adaptive simulations in parallel //#if HAVE_MPI // // communicate updated values // typedef VectorExchange<ElementMapper, ScalarSolutionType> DataHandle; -// DataHandle dataHandle(problem_.elementMapper(), indicatorVector_); +// DataHandle dataHandle(problem_.elementMapper(), maxSaturationDelta_); // problem_.gridView().template communicate<DataHandle>(dataHandle, // Dune::InteriorBorder_All_Interface, // Dune::ForwardCommunication); @@ -189,62 +184,84 @@ public: // coarsenBound_ = problem_.gridView().comm().max(coarsenBound_); // //#endif + + //! check if neighbors have to be refined too + for (const auto& element : elements(fvGridGeometry_->gridView(), Dune::Partitions::interior)) + if (this->operator()(element) > 0) + checkNeighborsRefine_(element); } - /*! \brief Indicator function for marking of grid cells for refinement + /*! \brief function call operator to return mark * - * Returns true if an element should be refined. + * \return 1 if an element should be refined + * -1 if an element should be coarsened + * 0 otherwise * * \param element A grid element */ - bool refine(const Element& element) + int operator() (const Element& element) const { - return (indicatorVector_[problem_.elementMapper().index(element)] > refineBound_); + if (element.hasFather() + && maxSaturationDelta_[fvGridGeometry_->elementMapper().index(element)] < coarsenBound_) + { + return -1; + } + else if (element.level() < maxLevel_ + && maxSaturationDelta_[fvGridGeometry_->elementMapper().index(element)] > refineBound_) + { + return 1; + } + else + return 0; } - /*! \brief Indicator function for marking of grid cells for coarsening +private: + /*! + * \brief Method ensuring the refinement ratio of 2:1 * - * Returns true if an element should be coarsened. + * For any given element, a loop over the neighbors checks if the + * entities refinement would require that any of the neighbors has + * to be refined, too. This is done recursively over all levels of the grid. * - * \param element A grid element + * \param element Element of interest that is to be refined + * \param level level of the refined element: it is at least 1 + * \return true if everything was successful */ - bool coarsen(const Element& element) + bool checkNeighborsRefine_(const Element &element, std::size_t level = 1) { - return (indicatorVector_[problem_.elementMapper().index(element)] < coarsenBound_); - } + for(const auto& intersection : intersections(fvGridGeometry_->gridView(), element)) + { + if(!intersection.neighbor()) + continue; - /*! \brief Initializes the adaptation indicator class*/ - void init() - { - refineBound_ = 0.; - coarsenBound_ = 0.; - indicatorVector_.resize(problem_.gridView().size(0)); - }; + // obtain outside element + const auto outside = intersection.outside(); - /*! @brief Constructs a GridAdaptIndicator instance - * - * This standard indicator is based on the saturation gradient. - * It checks the local gradient compared to the maximum global gradient. - * The indicator is compared locally to a refinement/coarsening threshold to decide whether - * a cell should be marked for refinement or coarsening or should not be adapted. - * - * \param problem The problem object - */ - TwoPImplicitGridAdaptIndicator(Problem& problem): - problem_(problem) - { - refinetol_ = GET_PARAM_FROM_GROUP(TypeTag, Scalar, GridAdapt, RefineTolerance); - coarsentol_ = GET_PARAM_FROM_GROUP(TypeTag, Scalar, GridAdapt, CoarsenTolerance); + // only mark non-ghost elements + if (outside.partitionType() == Dune::GhostEntity) + continue; + + if (outside.level() < maxLevel_ && outside.level() < element.level()) + { + // ensure refinement for outside element + maxSaturationDelta_[fvGridGeometry_->elementMapper().index(outside)] = std::numeric_limits<Scalar>::max(); + if(level < maxLevel_) + checkNeighborsRefine_(outside, ++level); + } + } + + return true; } -protected: - Problem& problem_; - Scalar refinetol_; - Scalar coarsentol_; + std::shared_ptr<const FVGridGeometry> fvGridGeometry_; + Scalar refineBound_; Scalar coarsenBound_; - Dune::BlockVector<Dune::FieldVector<Scalar, 1> > indicatorVector_; + std::vector< Scalar > maxSaturationDelta_; + std::size_t minLevel_; + std::size_t maxLevel_; }; -} -#endif +} // end namespace Dumux + +#endif /* DUMUX_TWOP_ADAPTION_INDICATOR_HH */ diff --git a/dumux/porousmediumflow/2p/implicit/griddatatransfer.hh b/dumux/porousmediumflow/2p/implicit/griddatatransfer.hh new file mode 100644 index 0000000000000000000000000000000000000000..ada149cb09b6722755a6033c83dc4fc71eb48e50 --- /dev/null +++ b/dumux/porousmediumflow/2p/implicit/griddatatransfer.hh @@ -0,0 +1,422 @@ +// -*- 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/>. * + *****************************************************************************/ +#ifndef DUMUX_TWOP_GRIDDATA_TRANSFER_HH +#define DUMUX_TWOP_GRIDDATA_TRANSFER_HH + +#include <dune/grid/utility/persistentcontainer.hh> +#include <dumux/common/properties.hh> +#include <dumux/discretization/methods.hh> +#include <dumux/adaptive/griddatatransfer.hh> + +namespace Dumux { + +/*! + * \brief Class performing the transfer of data on a grid from before to after adaptation. + */ +template<class TypeTag> +class TwoPGridDataTransfer : public GridDataTransfer +{ + using Grid = typename GET_PROP_TYPE(TypeTag, Grid); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using ElementSolution = typename GET_PROP_TYPE(TypeTag, ElementSolutionVector); + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + + struct AdaptedValues + { + AdaptedValues() : associatedMass(0.0) {} + ElementSolution u; + int count = 0; + PrimaryVariables associatedMass; + bool wasLeaf = false; + }; + + using PersistentContainer = Dune::PersistentContainer<Grid, AdaptedValues>; + + static constexpr int dim = Grid::dimension; + static constexpr int dimWorld = Grid::dimensionworld; + static constexpr bool isBox = GET_PROP_VALUE(TypeTag, DiscretizationMethod) == DiscretizationMethods::Box; + + //! export some indices + enum { + // index of saturation in primary variables + saturationIdx = Indices::saturationIdx, + + // phase indices + wPhaseIdx = Indices::wPhaseIdx, + nPhaseIdx = Indices::nPhaseIdx, + + // formulations + pwsn = Indices::pwsn, + pnsw = Indices::pnsw, + + // the formulation that is actually used + formulation = GET_PROP_VALUE(TypeTag, Formulation) + }; + + //! This won't work (mass conservative) for compressible fluids + static_assert(!FluidSystem::isCompressible(wPhaseIdx) + && !FluidSystem::isCompressible(nPhaseIdx), + "This adaption helper is only mass conservative for incompressible fluids!"); + + //! check if the used formulation is implemented here + static_assert(formulation == pwsn || formulation == pnsw, "Chosen formulation not known to the TwoPGridDataTransfer"); + +public: + /*! \brief Constructor + * + * \param problem The DuMuX problem to be solved + * \param fvGridGeometry The finite volume grid geometry + * \param gridVariables The secondary variables on the grid + * \param sol The solution (primary variables) on the grid + */ + TwoPGridDataTransfer(std::shared_ptr<const Problem> problem, + std::shared_ptr<FVGridGeometry> fvGridGeometry, + std::shared_ptr<const GridVariables> gridVariables, + SolutionVector& sol) + : GridDataTransfer() + , problem_(problem) + , fvGridGeometry_(fvGridGeometry) + , gridVariables_(gridVariables) + , sol_(sol) + , adaptionMap_(fvGridGeometry->gridView().grid(), 0) + {} + + /*! \brief Stores primary variables and additional data + * + * To reconstruct the solution in father elements, problem properties might + * need to be accessed. From upper level on downwards, the old solution is stored + * into a container object, before the grid is adapted. Father elements hold averaged + * information from the son cells for the case of the sons being coarsened. + */ + void store() override + { + adaptionMap_.resize(); + + const auto& grid = fvGridGeometry_->gridView().grid(); + for (auto level = grid.maxLevel(); level >= 0; level--) + { + for (const auto& element : elements(grid.levelGridView(level))) + { + //! get map entry + auto& adaptedValues = adaptionMap_[element]; + + //! put values in the map for leaf elements + if (element.isLeaf()) + { + auto fvGeometry = localView(*fvGridGeometry_); + fvGeometry.bindElement(element); + + //! store current element solution + adaptedValues.u = ElementSolution(element, sol_, *fvGridGeometry_); + + //! compute mass in the scvs + for (const auto& scv : scvs(fvGeometry)) + { + VolumeVariables volVars; + volVars.update(adaptedValues.u, *problem_, element, scv); + + const auto poreVolume = scv.volume()*volVars.porosity(); + adaptedValues.associatedMass[nPhaseIdx] += poreVolume * volVars.density(nPhaseIdx) * volVars.saturation(nPhaseIdx); + adaptedValues.associatedMass[wPhaseIdx] += poreVolume * volVars.density(wPhaseIdx) * volVars.saturation(wPhaseIdx); + } + + //! leaf elements always start with count = 1 + adaptedValues.count = 1; + adaptedValues.wasLeaf = true; + } + //! Average in father elements + if (element.level() > 0) + { + auto& adaptedValuesFather = adaptionMap_[element.father()]; + // For some grids the father element is identical to the son element. + // In that case averaging is not necessary. + if(&adaptedValues != &adaptedValuesFather) + storeAdaptionValues(adaptedValues, adaptedValuesFather); + } + + //! The vertices of the non-leaf elements exist on the leaf as well + //! This element solution constructor uses the vertex mapper to obtain + //! the privars at the vertices, thus, this works for non-leaf elements! + if(isBox && !element.isLeaf()) + adaptedValues.u = ElementSolution(element, sol_, *fvGridGeometry_); + } + } + } + + /*! \brief Reconstruct missing primary variables (where elements are created/deleted) + * + * To reconstruct the solution in father elements, problem properties might + * need to be accessed. + * Starting from the lowest level, the old solution is mapped on the new grid: + * Where coarsened, new cells get information from old father element. + * Where refined, a new solution is reconstructed from the old father cell, + * and then a new son is created. That is then stored into the general data + * structure (AdaptedValues). + */ + void reconstruct() override + { + //! resize stuff (grid might have changed) + adaptionMap_.resize(); + fvGridGeometry_->update(); + sol_.resize(fvGridGeometry_->numDofs()); + + //! vectors storing the mass associated with each vertex, when using the box method + std::vector<Scalar> massCoeff; + std::vector<Scalar> associatedMass; + + if(isBox) + { + massCoeff.resize(fvGridGeometry_->numDofs(), 0.0); + associatedMass.resize(fvGridGeometry_->numDofs(), 0.0); + } + + //! iterate over leaf and reconstruct the solution + for (const auto& element : elements(fvGridGeometry_->gridView().grid().leafGridView(), Dune::Partitions::interior)) + { + if (!element.isNew()) + { + const auto& adaptedValues = adaptionMap_[element]; + + auto fvGeometry = localView(*fvGridGeometry_); + fvGeometry.bindElement(element); + + //! obtain element solution from map (divide by count!) + auto elemSol = adaptedValues.u; + if (!isBox) + elemSol[0] /= adaptedValues.count; + + const auto elementVolume = element.geometry().volume(); + for (const auto& scv : scvs(fvGeometry)) + { + VolumeVariables volVars; + volVars.update(elemSol, *problem_, element, scv); + + //! write solution at dof in current solution vector + sol_[scv.dofIndex()] = elemSol[scv.indexInElement()]; + + const auto dofIdxGlobal = scv.dofIndex(); + //! For cc schemes, overwrite the saturation by a mass conservative one here + if (!isBox) + { + //! only recalculate the saturations if element hasn't been leaf before adaptation + if (!adaptedValues.wasLeaf) + { + if (formulation == pwsn) + { + sol_[dofIdxGlobal][saturationIdx] = adaptedValues.associatedMass[nPhaseIdx]; + sol_[dofIdxGlobal][saturationIdx] /= elementVolume * volVars.density(nPhaseIdx) * volVars.porosity(); + } + else if (formulation == pnsw) + { + sol_[dofIdxGlobal][saturationIdx] = adaptedValues.associatedMass[wPhaseIdx]; + sol_[dofIdxGlobal][saturationIdx] /= elementVolume * volVars.density(wPhaseIdx) * volVars.porosity(); + } + } + } + + //! For the box scheme, add mass & mass coefficient to container (saturations are recalculated at the end) + else + { + const auto scvVolume = scv.volume(); + if (formulation == pwsn) + { + massCoeff[dofIdxGlobal] += scvVolume * volVars.density(nPhaseIdx) * volVars.porosity(); + associatedMass[dofIdxGlobal] += scvVolume / elementVolume * adaptedValues.associatedMass[nPhaseIdx]; + } + else if (formulation == pnsw) + { + massCoeff[dofIdxGlobal] += scvVolume * volVars.density(wPhaseIdx) * volVars.porosity(); + associatedMass[dofIdxGlobal] += scvVolume / elementVolume * adaptedValues.associatedMass[wPhaseIdx]; + } + } + } + } + else + { + //! value is not in map, interpolate from father element + assert(element.hasFather() && "new element does not have a father element!"); + + //! find the ancestor element that existed on the old grid already + auto fatherElement = element.father(); + while(fatherElement.isNew() && fatherElement.level() > 0) + fatherElement = fatherElement.father(); + + if(!isBox) + { + const auto& adaptedValuesFather = adaptionMap_[fatherElement]; + + //! obtain the mass contained in father + Scalar massFather = 0.0; + if (formulation == pwsn) + massFather = adaptedValuesFather.associatedMass[nPhaseIdx]; + else if (formulation == pnsw) + massFather = adaptedValuesFather.associatedMass[wPhaseIdx]; + + // obtain the element solution through the father + auto elemSolSon = adaptedValuesFather.u; + elemSolSon[0] /= adaptedValuesFather.count; + + auto fvGeometry = localView(*fvGridGeometry_); + fvGeometry.bindElement(element); + + for (const auto& scv : scvs(fvGeometry)) + { + VolumeVariables volVars; + volVars.update(elemSolSon, *problem_, element, scv); + + //! store constructed values of son in the current solution + sol_[scv.dofIndex()] = elemSolSon[0]; + + //! overwrite the saturation by a mass conservative one here + Scalar massCoeffSon = 0.0; + if (formulation == pwsn) + massCoeffSon = scv.volume() * volVars.density(nPhaseIdx) * volVars.porosity(); + else if (formulation == pnsw) + massCoeffSon = scv.volume() * volVars.density(wPhaseIdx) * volVars.porosity(); + sol_[scv.dofIndex()][saturationIdx] = (scv.volume() / fatherElement.geometry().volume() * massFather)/massCoeffSon; + } + } + else + { + auto& adaptedValuesFather = adaptionMap_[fatherElement]; + + auto fvGeometry = localView(*fvGridGeometry_); + fvGeometry.bindElement(element); + + //! interpolate solution in the father to the vertices of the new son + ElementSolution elemSolSon(element, sol_, *fvGridGeometry_); + const auto fatherGeometry = fatherElement.geometry(); + for (const auto& scv : scvs(fvGeometry)) + elemSolSon[scv.indexInElement()] = evalSolution(fatherElement, + fatherGeometry, + adaptedValuesFather.u, + scv.dofPosition()); + + //! compute mass & mass coeffients for the scvs (saturations are recalculated at the end) + const auto fatherElementVolume = fatherGeometry.volume(); + for (const auto& scv : scvs(fvGeometry)) + { + VolumeVariables volVars; + volVars.update(elemSolSon, *problem_, element, scv); + + const auto dofIdxGlobal = scv.dofIndex(); + const auto scvVolume = scv.volume(); + if (int(formulation) == pwsn) + { + massCoeff[dofIdxGlobal] += scvVolume * volVars.density(nPhaseIdx) * volVars.porosity(); + associatedMass[dofIdxGlobal] += scvVolume / fatherElementVolume * adaptedValuesFather.associatedMass[nPhaseIdx]; + } + else if (int(formulation) == pnsw) + { + massCoeff[dofIdxGlobal] += scvVolume * volVars.density(wPhaseIdx) * volVars.porosity(); + associatedMass[dofIdxGlobal] += scvVolume / fatherElementVolume * adaptedValuesFather.associatedMass[wPhaseIdx]; + } + + //! store constructed (pressure) values of son in the current solution (saturation comes later) + sol_[dofIdxGlobal] = elemSolSon[scv.indexInElement()]; + } + } + } + } + + if(isBox) + { + for(std::size_t dofIdxGlobal = 0; dofIdxGlobal < fvGridGeometry_->numDofs(); dofIdxGlobal++) + sol_[dofIdxGlobal][saturationIdx] = associatedMass[dofIdxGlobal] / massCoeff[dofIdxGlobal]; + } + + //! reset entries in adaptation map + adaptionMap_.resize( typename PersistentContainer::Value() ); + adaptionMap_.shrinkToFit(); + adaptionMap_.fill( typename PersistentContainer::Value() ); + +//! TODO: fix adaptive simulations in parallel +//#if HAVE_MPI +// // communicate ghost data +// typedef typename GET_PROP(TypeTag, SolutionTypes) SolutionTypes; +// typedef typename SolutionTypes::ElementMapper ElementMapper; +// typedef VectorExchange<ElementMapper, std::vector<CellData> > DataHandle; +// DataHandle dataHandle(problem.elementMapper(), this->cellDataGlobal()); +// problem.gridView().template communicate<DataHandle>(dataHandle, +// Dune::InteriorBorder_All_Interface, +// Dune::ForwardCommunication); +//#endif + } + + private: + + /*! \brief Stores sons entries into father element for averaging + * + * Sum up the adaptedValues (sons values) into father element. We store from leaf + * upwards, so sons are stored first, then cells on the next leaf (=fathers) + * can be averaged. + * + * \param adaptedValues Container for model-specific values to be adapted + * \param adaptedValuesFather Values to be adapted of father cell + */ + static void storeAdaptionValues(AdaptedValues& adaptedValues, + AdaptedValues& adaptedValuesFather) + { + //! Add associated mass of the child to the one of the father + adaptedValuesFather.associatedMass += adaptedValues.associatedMass; + + if(!isBox) + { + //! add the child's primary variables to the ones of father + //! we have to divide the child's ones in case it was composed + //! of several children as well! + auto values = adaptedValues.u[0]; + values /= adaptedValues.count; + adaptedValuesFather.u[0] += values; + + //! keep track of the number of children that composed this father + adaptedValuesFather.count += 1; + + //! A father element is never leaf + adaptedValuesFather.wasLeaf = false; + } + else + { + //! For the box scheme, scaling of primary variables by count is obsolete + //! Thus, we always want count = 1 + adaptedValuesFather.count = 1; + + //! A father element is never leaf + adaptedValuesFather.wasLeaf = false; + } + } + + std::shared_ptr<const Problem> problem_; + std::shared_ptr<FVGridGeometry> fvGridGeometry_; + std::shared_ptr<const GridVariables> gridVariables_; + SolutionVector& sol_; + PersistentContainer adaptionMap_; +}; + +} // end namespace Dumux + +#endif /* DUMUX_TWOP_GRIDDATA_TRANSFER_HH */ diff --git a/test/porousmediumflow/2p/implicit/CMakeLists.txt b/test/porousmediumflow/2p/implicit/CMakeLists.txt index 1bb24dedd40b5563940ec5a50bd29117359e35f1..b32b5495d7ee09e1249a4e8ea2b90094cd204445 100644 --- a/test/porousmediumflow/2p/implicit/CMakeLists.txt +++ b/test/porousmediumflow/2p/implicit/CMakeLists.txt @@ -1,42 +1,4 @@ -#add_subdirectory(pointsources) +add_subdirectory(adaptive) add_subdirectory(fracture) add_subdirectory(incompressible) add_subdirectory(nonisothermal) -add_input_file_links() -dune_symlink_to_source_files(FILES grids) - -# # isothermal tests -# add_dumux_test(test_ccadaptive2p test_ccadaptive2p test_ccadaptive2p.cc -# python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py -# --script fuzzy -# --files ${CMAKE_SOURCE_DIR}/test/references/lensccadaptive-reference.vtu -# ${CMAKE_CURRENT_BINARY_DIR}/lensccadaptive-00017.vtu -# --command "${CMAKE_CURRENT_BINARY_DIR}/test_ccadaptive2p") -# -# add_dumux_test(test_boxadaptive2p test_boxadaptive2p test_boxadaptive2p.cc -# python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py -# --script fuzzy -# --files ${CMAKE_SOURCE_DIR}/test/references/lensboxadaptive-reference.vtu -# ${CMAKE_CURRENT_BINARY_DIR}/lensboxadaptive-00014.vtu -# --command "${CMAKE_CURRENT_BINARY_DIR}/test_boxadaptive2p") -# -# if(HAVE_OPM_GRID) -# add_dumux_test(test_cc2pcornerpoint test_cc2pcornerpoint test_cc2pcornerpoint.cc -# python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py -# --script fuzzy -# --files ${CMAKE_SOURCE_DIR}/test/references/cc2pcornerpoint-reference.vtu -# ${CMAKE_CURRENT_BINARY_DIR}/cc2pcornerpoint-00005.vtu -# --command "${CMAKE_CURRENT_BINARY_DIR}/test_cc2pcornerpoint") -# endif() - -#install sources -install(FILES -cc2pcornerpointproblem.hh -cc2pcornerpointspatialparams.hh -generalizeddirichletproblem.hh -generalizeddirichletspatialparams.hh -test_boxadaptive2p.cc -test_cc2pcornerpoint.cc -test_ccadaptive2p.cc -test_generalizeddirichlet.cc -DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/test/implicit/2p) diff --git a/test/porousmediumflow/2p/implicit/adaptive/CMakeLists.txt b/test/porousmediumflow/2p/implicit/adaptive/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..c245d2b72f7603bdf966dc4afe7dc8406f7b5f7d --- /dev/null +++ b/test/porousmediumflow/2p/implicit/adaptive/CMakeLists.txt @@ -0,0 +1,47 @@ +dune_symlink_to_source_files(FILES "test_2p_adaptive.input") + +# using tpfa +dune_add_test(NAME test_2p_adaptive_tpfa + SOURCES test_2p_adaptive_fv.cc + COMPILE_DEFINITIONS TYPETAG=TwoPIncompressibleAdaptiveTpfa + CMAKE_GUARD dune-alugrid_FOUND + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/lensccadaptive-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/2p_adaptive_tpfa-00016.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_2p_adaptive_tpfa test_2p_adaptive.input -Problem.Name 2p_adaptive_tpfa") + +# using tpfa and point source +dune_add_test(NAME test_2p_adaptive_ps_tpfa + SOURCES test_2p_adaptive_fv.cc + COMPILE_DEFINITIONS TYPETAG=TwoPAdaptivePointSource + CMAKE_GUARD dune-alugrid_FOUND + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/lensccadaptivepointsource-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/2p_adaptive_ps_tpfa-00018.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_2p_adaptive_ps_tpfa test_2p_adaptive.input -Problem.Name 2p_adaptive_ps_tpfa") + +# using mpfa +dune_add_test(NAME test_2p_adaptive_mpfa + SOURCES test_2p_adaptive_fv.cc + COMPILE_DEFINITIONS TYPETAG=TwoPIncompressibleAdaptiveMpfa + CMAKE_GUARD dune-alugrid_FOUND + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/lensccadaptive-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/2p_adaptive_mpfa-00008.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_2p_adaptive_mpfa test_2p_adaptive.input -Problem.Name 2p_adaptive_mpfa") + +# using box +dune_add_test(NAME test_2p_adaptive_box + SOURCES test_2p_adaptive_fv.cc + COMPILE_DEFINITIONS TYPETAG=TwoPIncompressibleAdaptiveBox + CMAKE_GUARD dune-uggrid_FOUND + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/lensboxadaptive-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/2p_adaptive_box-00011.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_2p_adaptive_box test_2p_adaptive.input -Problem.Name 2p_adaptive_box") + +set(CMAKE_BUILD_TYPE Release) diff --git a/test/porousmediumflow/2p/implicit/adaptive/pointsourceproblem.hh b/test/porousmediumflow/2p/implicit/adaptive/pointsourceproblem.hh new file mode 100644 index 0000000000000000000000000000000000000000..ac9b723fd29ca7a2e5a9a7d961ca64c5a23139c7 --- /dev/null +++ b/test/porousmediumflow/2p/implicit/adaptive/pointsourceproblem.hh @@ -0,0 +1,65 @@ +// -*- 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 + * + * \brief Soil contamination problem where DNAPL infiltrates a fully + * water saturated medium. + */ + +#ifndef DUMUX_LENSPROBLEM_POINTSOURCE_HH +#define DUMUX_LENSPROBLEM_POINTSOURCE_HH + +#include "../incompressible/problem.hh" + +namespace Dumux +{ + +template <class TypeTag > +class PointSourceTestProblem : public TwoPTestProblem<TypeTag> +{ + using ParentType = TwoPTestProblem<TypeTag>; + using PointSource = typename GET_PROP_TYPE(TypeTag, PointSource); + +public: + //! Use parent's constructor + using ParentType::ParentType; + + /*! + * \brief Applies a vector of point sources. The point sources + * are possibly solution dependent. + * + * \param pointSources A vector of PointSource s that contain + source values for all phases and space positions. + * + * For this method, the \a values method of the point source + * has to return the absolute mass rate in untis + * \f$ [ \textnormal{unit of conserved quantity} / s ] \f$. + * Positive values mean that mass is created, negative ones mean that it vanishes. + */ + void addPointSources(std::vector<PointSource>& pointSources) const + { + // inject 2 kg/s of non-wetting phase at position (1, 1); + pointSources.push_back(PointSource({0.502, 3.02}, {0, 0.1})); + } +}; + +} //end namespace + +#endif diff --git a/test/porousmediumflow/2p/implicit/adaptive/test_2p_adaptive.input b/test/porousmediumflow/2p/implicit/adaptive/test_2p_adaptive.input new file mode 100644 index 0000000000000000000000000000000000000000..296ed5b9e4448153454202e517be99e11879c8e2 --- /dev/null +++ b/test/porousmediumflow/2p/implicit/adaptive/test_2p_adaptive.input @@ -0,0 +1,24 @@ +[TimeLoop] +DtInitial = 250 # [s] +TEnd = 3000 # [s] + +[Grid] +UpperRight = 6 4 +Cells = 48 32 +CellType = Cube +ClosureType = Green + +[SpatialParams] +LensLowerLeft = 1.0 2.0 # [m] coordinates of the lower left lens corner +LensUpperRight = 4.0 3.0 # [m] coordinates of the upper right lens corner + +[Problem] +Name = 2padaptive # name passed to the output routines + +[Adaptive] +RefineAtDirichletBC = 0 +RefineAtFluxBC = 1 +MinLevel = 0 +MaxLevel = 2 +CoarsenTolerance = 1e-4 +RefineTolerance = 1e-4 diff --git a/test/porousmediumflow/2p/implicit/adaptive/test_2p_adaptive_fv.cc b/test/porousmediumflow/2p/implicit/adaptive/test_2p_adaptive_fv.cc new file mode 100644 index 0000000000000000000000000000000000000000..c4cdb0d485f1c71ae304ae5f31c5d9c1ebf46f12 --- /dev/null +++ b/test/porousmediumflow/2p/implicit/adaptive/test_2p_adaptive_fv.cc @@ -0,0 +1,310 @@ +// -*- 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 + * + * \brief test for the two-phase porousmedium flow model + */ +#include <config.h> + +#include <ctime> +#include <iostream> + +#include <dune/common/parallel/mpihelper.hh> +#include <dune/common/timer.hh> +#include <dune/grid/io/file/dgfparser/dgfexception.hh> +#include <dune/grid/io/file/vtk.hh> +#include <dune/istl/io.hh> + +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/dumuxmessage.hh> +#include <dumux/common/defaultusagemessage.hh> + +#include <dumux/linear/amgbackend.hh> +#include <dumux/nonlinear/newtonmethod.hh> +#include <dumux/nonlinear/newtoncontroller.hh> + +#include <dumux/assembly/fvassembler.hh> +#include <dumux/assembly/diffmethod.hh> + +#include <dumux/discretization/methods.hh> + +#include <dumux/io/vtkoutputmodule.hh> + +#include <dumux/adaptive/adapt.hh> +#include <dumux/adaptive/markelements.hh> +#include <dumux/adaptive/initializationindicator.hh> +#include <dumux/porousmediumflow/2p/implicit/griddatatransfer.hh> +#include <dumux/porousmediumflow/2p/implicit/gridadaptindicator.hh> + +//! Use the incompressible or point source problem for this adaptive test +#include <test/porousmediumflow/2p/implicit/incompressible/problem.hh> +#include "pointsourceproblem.hh" + +//! type tags for the adaptive versions of the two-phase incompressible problem +namespace Dumux { +namespace Properties { +//! Type Tags for the adaptive tests +NEW_TYPE_TAG(TwoPIncompressibleAdaptiveTpfa, INHERITS_FROM(TwoPIncompressibleTpfa)); +NEW_TYPE_TAG(TwoPIncompressibleAdaptiveMpfa, INHERITS_FROM(TwoPIncompressibleMpfa)); +NEW_TYPE_TAG(TwoPIncompressibleAdaptiveBox, INHERITS_FROM(TwoPIncompressibleBox)); +NEW_TYPE_TAG(TwoPAdaptivePointSource, INHERITS_FROM(TwoPIncompressibleAdaptiveTpfa)); + +//! Use non-conforming refinement in the cell-centered tests, conforming for box +SET_TYPE_PROP(TwoPIncompressibleAdaptiveTpfa, Grid, Dune::ALUGrid<2, 2, Dune::cube, Dune::nonconforming>); +SET_TYPE_PROP(TwoPIncompressibleAdaptiveMpfa, Grid, Dune::ALUGrid<2, 2, Dune::cube, Dune::nonconforming>); +SET_TYPE_PROP(TwoPIncompressibleAdaptiveBox, Grid, Dune::UGGrid<2>); +SET_TYPE_PROP(TwoPAdaptivePointSource, Problem, PointSourceTestProblem<TypeTag>); +} // end namespace Properties +} // end namespace Dumux + +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(TYPETAG); + + // initialize MPI, finalize is done automatically on exit + const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); + + // print dumux start message + if (mpiHelper.rank() == 0) + DumuxMessage::print(/*firstCall=*/true); + + // parse command line arguments and input file + Parameters::init(argc, argv); + + // try to create a grid (from the given grid file or the input file) + using GridCreator = typename GET_PROP_TYPE(TypeTag, GridCreator); + GridCreator::makeGrid(); + GridCreator::loadBalance(); + + //////////////////////////////////////////////////////////// + // run instationary non-linear problem on this grid + //////////////////////////////////////////////////////////// + + // we compute on the leaf grid view + const auto& leafGridView = GridCreator::grid().leafGridView(); + + // create the finite volume grid geometry + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + auto fvGridGeometry = std::make_shared<FVGridGeometry>(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared<Problem>(fvGridGeometry); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + SolutionVector x(fvGridGeometry->numDofs()); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // instantiate indicator & data transfer, read parameters for indicator + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const Scalar refineTol = getParam<Scalar>("Adaptive.RefineTolerance"); + const Scalar coarsenTol = getParam<Scalar>("Adaptive.CoarsenTolerance"); + TwoPGridAdaptIndicator<TypeTag> indicator(fvGridGeometry); + TwoPGridDataTransfer<TypeTag> dataTransfer(problem, fvGridGeometry, gridVariables, x); + + // Do initial refinement around sources/BCs + GridAdaptInitializationIndicator<TypeTag> initIndicator(problem, fvGridGeometry, gridVariables); + + // refine up to the maximum level + const auto maxLevel = getParam<std::size_t>("Adaptive.MaxLevel", 0); + for (std::size_t i = 0; i < maxLevel; ++i) + { + initIndicator.calculate(x); + + bool wasAdapted = false; + if (markElements(GridCreator::grid(), initIndicator)) + wasAdapted = adapt(GridCreator::grid(), dataTransfer); + + // update grid data after adaption + if (wasAdapted) + { + xOld = x; //! Overwrite the old solution with the new (resized & interpolated) one + gridVariables->init(x, xOld); //! Initialize the secondary variables to the new (and "new old") solution + problem->computePointSourceMap(); //! Update the point source map + } + } + + // Do refinement for the initial conditions using our indicator + // we set coarsen tolerance to 0.0 because we do not want any coarsening to be done here + indicator.calculate(x, refineTol, /*coarsenTol*/0.0); + + bool wasAdapted = false; + if (markElements(GridCreator::grid(), indicator)) + wasAdapted = adapt(GridCreator::grid(), dataTransfer); + + // update grid data after adaption + if (wasAdapted) + { + xOld = x; //! Overwrite the old solution with the new (resized & interpolated) one + gridVariables->init(x, xOld); //! Initialize the secondary variables to the new (and "new old") solution + problem->computePointSourceMap(); //! Update the point source map + } + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); + const auto maxDivisions = getParam<int>("TimeLoop.MaxTimeStepDivisions"); + const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); + auto dt = getParam<Scalar>("TimeLoop.DtInitial"); + + // check if we are about to restart a previously interrupted simulation + Scalar restartTime = 0; + if (haveParam("Restart") || haveParam("TimeLoop.Restart")) + restartTime = getParam<Scalar>("TimeLoop.Restart"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + VtkOutputModule<TypeTag> vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + vtkWriter.write(0.0); + + // instantiate time loop + auto timeLoop = std::make_shared<TimeLoop<Scalar>>(restartTime, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; + auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = AMGBackend<TypeTag>; + auto linearSolver = std::make_shared<LinearSolver>(leafGridView, fvGridGeometry->dofMapper()); + + // the non-linear solver + using NewtonController = Dumux::NewtonController<TypeTag>; + using NewtonMethod = Dumux::NewtonMethod<NewtonController, Assembler, LinearSolver>; + auto newtonController = std::make_shared<NewtonController>(leafGridView.comm(), timeLoop); + NewtonMethod nonLinearSolver(newtonController, assembler, linearSolver); + + // time loop + timeLoop->start(); do + { + // refine/coarsen only after first time step + if (timeLoop->time() > restartTime) + { + // compute refinement indicator + indicator.calculate(x, refineTol, coarsenTol); + + // mark elements and maybe adapt grid + bool wasAdapted = false; + if (markElements(GridCreator::grid(), indicator)) + wasAdapted = adapt(GridCreator::grid(), dataTransfer); + + if (wasAdapted) + { + // Note that if we were using point sources, we would have to update the map here as well + xOld = x; //! Overwrite the old solution with the new (resized & interpolated) one + assembler->setJacobianPattern(); //! Tell the assembler to resize the matrix and set pattern + assembler->setResidualSize(); //! Tell the assembler to resize the residual + gridVariables->init(x, xOld); //! Initialize the secondary variables to the new (and "new old") solution + problem->computePointSourceMap(); //! Update the point source map + } + } + + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + for (int i = 0; i < maxDivisions; ++i) + { + // linearize & solve + auto converged = nonLinearSolver.solve(x); + + if (converged) + break; + + if (!converged && i == maxDivisions-1) + DUNE_THROW(Dune::MathError, + "Newton solver didn't converge after " + << maxDivisions + << " time-step divisions. dt=" + << timeLoop->timeStepSize() + << ".\nThe solutions of the current and the previous time steps " + << "have been saved to restart files."); + } + + // make the new solution the old solution + xOld = x; + gridVariables->advanceTimeStep(); + + // advance to the time loop to the next step + timeLoop->advanceTimeStep(); + + // write vtk output + vtkWriter.write(timeLoop->time()); + + // report statistics of this time step + timeLoop->reportTimeStep(); + + // set new dt as suggested by newton controller + timeLoop->setTimeStepSize(newtonController->suggestTimeStepSize(timeLoop->timeStepSize())); + + } while (!timeLoop->finished()); + + timeLoop->finalize(leafGridView.comm()); + + //////////////////////////////////////////////////////////// + // finalize, print dumux message to say goodbye + //////////////////////////////////////////////////////////// + + // print dumux end message + if (mpiHelper.rank() == 0) + { + Parameters::print(); + DumuxMessage::print(/*firstCall=*/false); + } + + return 0; +} // end main +catch (Dumux::ParameterException &e) +{ + std::cerr << std::endl << e << " ---> Abort!" << std::endl; + return 1; +} +catch (Dune::DGFException & e) +{ + std::cerr << "DGF exception thrown (" << e << + "). Most likely, the DGF file name is wrong " + "or the DGF file is corrupted, " + "e.g. missing hash at end of file or wrong number (dimensions) of entries." + << " ---> Abort!" << std::endl; + return 2; +} +catch (Dune::Exception &e) +{ + std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; + return 3; +} +catch (...) +{ + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; +} diff --git a/test/porousmediumflow/2p/implicit/cc2pcornerpointproblem.hh b/test/porousmediumflow/2p/implicit/cc2pcornerpointproblem.hh deleted file mode 100644 index 58bfb24dab91cc52ad842e35f676dcb75787a3ac..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/cc2pcornerpointproblem.hh +++ /dev/null @@ -1,327 +0,0 @@ -// -*- 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/>. * - *****************************************************************************/ -#ifndef DUMUX_CC2P_CORNERPOINT_PROBLEM_HH -#define DUMUX_CC2P_CORNERPOINT_PROBLEM_HH - -#if HAVE_OPM_GRID -#include <dumux/material/components/simpleh2o.hh> -#include <dumux/material/components/dnapl.hh> -#include <dumux/porousmediumflow/2p/implicit/model.hh> -#include <dumux/porousmediumflow/implicit/problem.hh> -#include <dumux/implicit/cellcentered/tpfa/properties.hh> -#include <dumux/linear/amgbackend.hh> - -#include <dumux/io/cpgridcreator.hh> - -#include "cc2pcornerpointspatialparams.hh" - -namespace Dumux -{ - -template <class TypeTag> -class CC2PCornerPointProblem; - -namespace Properties -{ -NEW_TYPE_TAG(CC2PCornerPointProblem, INHERITS_FROM(CCTpfaModel, TwoP, CC2PCornerPointSpatialParams)); - -// Set the grid type -SET_TYPE_PROP(CC2PCornerPointProblem, Grid, Dune::CpGrid); - -// Set the problem property -SET_TYPE_PROP(CC2PCornerPointProblem, Problem, CC2PCornerPointProblem<TypeTag>); - -// Set the grid creator -SET_TYPE_PROP(CC2PCornerPointProblem, GridCreator, CpGridCreator<TypeTag>); - -// Set the fluid system -SET_PROP(CC2PCornerPointProblem, FluidSystem) -{ - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); - using WettingPhase = FluidSystems::LiquidPhase<Scalar, SimpleH2O<Scalar> >; - using NonwettingPhase = FluidSystems::LiquidPhase<Scalar, DNAPL<Scalar> >; - using type = FluidSystems::TwoPImmiscible<Scalar, WettingPhase, NonwettingPhase>; -}; -} // end namespace Properties - -template <class TypeTag > -class CC2PCornerPointProblem : public ImplicitPorousMediaProblem<TypeTag> -{ - using ParentType = ImplicitPorousMediaProblem<TypeTag>; - using GridView = typename GET_PROP_TYPE(TypeTag, GridView); - using GridCreator = typename GET_PROP_TYPE(TypeTag, GridCreator); - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); - using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); - using ElementSolutionVector = typename GET_PROP_TYPE(TypeTag, ElementSolutionVector); - - // Grid and world dimension - static const int dim = GridView::dimension; - static const int dimWorld = GridView::dimensionworld; - - using Indices = typename GET_PROP_TYPE(TypeTag, Indices); - - enum { - // primary variable indices - pwIdx = Indices::pwIdx, - snIdx = Indices::snIdx, - - // equation indices - contiNEqIdx = Indices::contiNEqIdx, - }; - - using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); - using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); - using TimeManager = typename GET_PROP_TYPE(TypeTag, TimeManager); - using Element = typename GridView::template Codim<0>::Entity; - using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); - using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); - using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); - using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>; - -public: - /*! - * \brief The constructor - * - * \param timeManager The time manager - * \param gridView The grid view - */ - CC2PCornerPointProblem(TimeManager &timeManager, - const GridView &gridView) - : ParentType(timeManager, gridView), gravity_(0) - { - gravity_[dimWorld-1] = 9.81; - temperature_ = 273.15 + 20; // -> 20°C - - name_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, std::string, Problem, Name); - - injectionElement_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, int, Problem, InjectionElement); - injectionRate_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, Problem, InjectionRate); - } - - /*! - * \name Problem parameters - */ - // \{ - - /*! - * \brief Returns the problem name - * - * This is used as a prefix for files generated by the simulation. - */ - const std::string& name() const - { - return name_; - } - - /*! - * \brief User defined output after the time integration - * - * Will be called diretly after the time integration. - */ - void postTimeStep() - { - // Calculate storage terms - PrimaryVariables storage; - this->model().globalStorage(storage); - - // Write mass balance information for rank 0 - if (this->gridView().comm().rank() == 0) { - std::cout<<"Storage: " << storage << std::endl; - } - } - - const GlobalPosition& gravity() const - { - return gravity_; - } - - /*! - * \brief Returns the temperature \f$ K \f$ - * - * This problem assumes a uniform temperature of 20 degrees Celsius. - */ - Scalar temperature() const - { return temperature_; } - - /*! - * \brief Evaluate the source term for all phases within a given - * sub-control-volume. - * - * This is the method for the case where the source term is - * potentially solution dependent and requires some quantities that - * are specific to the fully-implicit method. - * - * \param element The finite element - * \param fvGeometry The finite-volume geometry - * \param elemVolVars All volume variables for the element - * \param scv The sub control volume - * - * For this method, the \a values parameter stores the conserved quantity rate - * generated or annihilate per volume unit. Positive values mean - * that the conserved quantity is created, negative ones mean that it vanishes. - * E.g. for the mass balance that would be a mass rate in \f$ [ kg / (m^3 \cdot s)] \f$. - */ - PrimaryVariables source(const Element &element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const SubControlVolume &scv) const - { - PrimaryVariables values(0.0); - - int eIdx = GridCreator::grid().leafGridView().indexSet().index(element); - if (eIdx == injectionElement_) - values[contiNEqIdx] = injectionRate_/element.geometry().volume(); - - return values; - } - - // \} - - /*! - * \name Boundary conditions - */ - // \{ - - /*! - * \brief Specifies which kind of boundary condition should be - * used for which equation on a given boundary control volume. - */ - BoundaryTypes boundaryTypes(const Element& element, const SubControlVolumeFace& scvf) const - { - BoundaryTypes values; - - // set no-flux on top and bottom, hydrostatic on the rest - // use the intersection normal to decide - const GlobalPosition normal = scvf.unitOuterNormal(); - using std::abs; - if (abs(normal[dimWorld-1]) > 0.5 - eps_) - values.setAllNeumann(); - else - values.setAllDirichlet(); - - return values; - } - - /*! - * \brief Evaluates the boundary conditions for a Dirichlet - * boundary segment - * - * \param values Stores the Dirichlet values for the conservation equations in - * \f$ [ \textnormal{unit of primary variable} ] \f$ - * \param globalPos The global position - */ - PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const - { - PrimaryVariables values(0); - - // hydrostatic pressure - Scalar densityW = 1000; - values[pwIdx] = 1e5 + densityW*(this->gravity()*globalPos); - values[snIdx] = 0.0; - - return values; - } - - /*! - * \brief Evaluate the boundary conditions for a neumann - * boundary segment. - * - * \param values Stores the Neumann values for the conservation equations in - * \f$ [ \textnormal{unit of conserved quantity} / (m^(dim-1) \cdot s )] \f$ - * \param globalPos The position of the integration point of the boundary segment. - * - * For this method, the \a values parameter stores the mass flux - * in normal direction of each phase. Negative values mean influx. - */ - PrimaryVariables neumannAtPos(const GlobalPosition &globalPos) const - { - PrimaryVariables values(0.0); - - return values; - } - // \} - - /*! - * \name Volume terms - */ - // \{ - - - /*! - * \brief Evaluates the initial values for a control volume - * - * \param values Stores the initial values for the conservation equations in - * \f$ [ \textnormal{unit of primary variables} ] \f$ - * \param globalPos The global position - */ - PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const - { - PrimaryVariables values; - - // hydrostatic pressure - Scalar densityW = 1000; - values[pwIdx] = 1e5 + densityW*(this->gravity()*globalPos); - values[snIdx] = 0.0; - - return values; - } - // \} - - - /*! - * \brief Adds additional VTK output data to the VTKWriter. Function is called by the output module on every write. - */ - template<class VtkOutputModule> - void addVtkOutputFields(VtkOutputModule& outputModule) const - { - auto& permX = outputModule.createScalarField("PERMX [mD]", 0); - auto& permZ = outputModule.createScalarField("PERMZ [mD]", 0); - - for (const auto& element : elements(this->gridView())) - { - int eIdx = this->elementMapper().index(element); - auto fvGeometry = localView(this->model().fvGridGeometry()); - fvGeometry.bindElement(element); - - for (auto&& scv : scvs(fvGeometry)) - { - auto K = this->spatialParams().permeability(element, scv, - this->model().elementSolution(element, this->model().curSol())); - - // transfer output to mD = 9.86923e-16 m^2 - permX[eIdx] = K[0][0]/9.86923e-16; - permZ[eIdx] = K[dimWorld-1][dimWorld-1]/9.86923e-16; - } - } - } - - -private: - Scalar temperature_; - static constexpr Scalar eps_ = 3e-6; - std::string name_; - GlobalPosition gravity_; - int injectionElement_; - Scalar injectionRate_; -}; -} //end namespace - -#endif // HAVE_OPM_GRID - -#endif diff --git a/test/porousmediumflow/2p/implicit/cc2pcornerpointspatialparams.hh b/test/porousmediumflow/2p/implicit/cc2pcornerpointspatialparams.hh deleted file mode 100644 index 59bffe59ccf06fd1521768f780759cc7689ed56a..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/cc2pcornerpointspatialparams.hh +++ /dev/null @@ -1,202 +0,0 @@ -// -*- 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/>. * - *****************************************************************************/ -#ifndef DUMUX_CC2P_CORNERPOINT_SPATIAL_PARAMS_HH -#define DUMUX_CC2P_CORNERPOINT_SPATIAL_PARAMS_HH - -#include <dumux/material/spatialparams/implicit.hh> -#include <dumux/material/fluidmatrixinteractions/2p/regularizedvangenuchten.hh> -#include <dumux/material/fluidmatrixinteractions/2p/linearmaterial.hh> -#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh> -#include <dumux/porousmediumflow/2p/implicit/model.hh> - -namespace Dumux -{ - -//forward declaration -template<class TypeTag> -class CC2PCornerPointSpatialParams; - -namespace Properties -{ -// The spatial parameters TypeTag -NEW_TYPE_TAG(CC2PCornerPointSpatialParams); - -// Set the spatial parameters -SET_TYPE_PROP(CC2PCornerPointSpatialParams, SpatialParams, CC2PCornerPointSpatialParams<TypeTag>); - -// Set the material Law -SET_PROP(CC2PCornerPointSpatialParams, MaterialLaw) -{ -private: - // define the material law which is parameterized by effective - // saturations - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); - using EffectiveLaw = RegularizedVanGenuchten<Scalar>; -public: - // define the material law parameterized by absolute saturations - using type = EffToAbsLaw<EffectiveLaw>; -}; -} - -template<class TypeTag> -class CC2PCornerPointSpatialParams : public ImplicitSpatialParams<TypeTag> -{ - using ParentType = ImplicitSpatialParams<TypeTag>; - using Problem = typename GET_PROP_TYPE(TypeTag, Problem); - using GridView = typename GET_PROP_TYPE(TypeTag, GridView); - using ElementSolutionVector = typename GET_PROP_TYPE(TypeTag, ElementSolutionVector); - using GridCreator = typename GET_PROP_TYPE(TypeTag, GridCreator); - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); - - enum { - dim = GridView::dimension, - dimWorld = GridView::dimensionworld - }; - - using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>; - using Tensor = Dune::FieldMatrix<Scalar, dimWorld, dimWorld>; - - using Element = typename GridView::template Codim<0>::Entity; - using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - -public: - // export permeability type - using PermeabilityType = Tensor; - - //get the material law from the property system - using MaterialLaw = typename GET_PROP_TYPE(TypeTag, MaterialLaw); - using MaterialLawParams = typename MaterialLaw::Params; - /*! - * \brief The constructor - * - * \param gridView The grid view - */ - CC2PCornerPointSpatialParams(const Problem& problem, const GridView& gridView) - : ParentType(problem, gridView) - { - homogeneous_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, bool, Problem, Homogeneous); - - const std::vector<int>& globalCell = GridCreator::grid().globalCell(); - - if (GridCreator::deck().hasKeyword("PORO")) { - std::cout << "Found PORO..." << std::endl; - std::vector<double> eclVector = GridCreator::deck().getKeyword("PORO").getRawDoubleData(); - porosity_.resize(globalCell.size()); - - for (size_t i = 0; i < globalCell.size(); ++i) { - if (homogeneous_) - porosity_[i] = 0.2; - else - porosity_[i] = eclVector[globalCell[i]]; - } - } - - if (GridCreator::deck().hasKeyword("PERMX")) { - std::cout << "Found PERMX..." << std::endl; - std::vector<double> eclVector = GridCreator::deck().getKeyword("PERMX").getRawDoubleData(); - permX_.resize(globalCell.size()); - - for (size_t i = 0; i < globalCell.size(); ++i) { - // assume that values are given in mD = 9.86923e-16 m^2 - if (homogeneous_) - permX_[i] = 9.86923e-16; - else - permX_[i] = 9.86923e-16*eclVector[globalCell[i]]; - } - } - - if (GridCreator::deck().hasKeyword("PERMZ")) { - std::cout << "Found PERMZ..." << std::endl; - std::vector<double> eclVector = GridCreator::deck().getKeyword("PERMZ").getRawDoubleData(); - permZ_.resize(globalCell.size()); - - for (size_t i = 0; i < globalCell.size(); ++i) { - // assume that values are given in mD = 9.86923e-16 m^2 - if (homogeneous_) - permZ_[i] = 9.86923e-16; - else - permZ_[i] = 9.86923e-16*eclVector[globalCell[i]]; - } - } - else { - std::cout << "PERMZ not found, set equal to PERMX..." << std::endl; - permZ_ = permX_; - } - - // parameters for the Van Genuchten law - materialParams_.setVgAlpha(0.00045); - materialParams_.setVgn(7.3); - } - - PermeabilityType permeability(const Element& element, - const SubControlVolume& scv, - const ElementSolutionVector& elemSol) const - { - int eIdx = GridCreator::grid().leafGridView().indexSet().index(element); - - Tensor K(0); - K[0][0] = K[1][1] = permX_[eIdx]; - K[2][2] = permZ_[eIdx]; - - return K; - } - - /*! - * \brief Returns the porosity \f$[-]\f$ - * - * \param element The finite element - * \param fvGeometry The finite volume geometry of the element - * \param scvIdx The local index of the sub-control volume - */ - Scalar porosity(const Element& element, - const SubControlVolume& scv, - const ElementSolutionVector& elemSol) const - { - int eIdx = GridCreator::grid().leafGridView().indexSet().index(element); - - return porosity_[eIdx]; - } - - /*! - * \brief Function for defining the parameters needed by constitutive relationships (kr-sw, pc-sw, etc.). - * - * \param element The current element - * \param scv The sub-control volume inside the element. - * \param elemSol The solution at the dofs connected to the element. - * \return the material parameters object - */ - const MaterialLawParams& materialLawParams(const Element& element, - const SubControlVolume& scv, - const ElementSolutionVector& elemSol) const - { - return materialParams_; - } - -private: - MaterialLawParams materialParams_; - std::vector<Scalar> porosity_; - std::vector<Scalar> permX_; - std::vector<Scalar> permZ_; - bool homogeneous_; -}; - -} // end namespace -#endif - diff --git a/test/porousmediumflow/2p/implicit/grids/hardsmall.grdecl b/test/porousmediumflow/2p/implicit/grids/hardsmall.grdecl deleted file mode 100644 index 5ac8ca6029c0449f3b5330dea05feba185ba0f28..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/grids/hardsmall.grdecl +++ /dev/null @@ -1,38 +0,0 @@ -MAPUNITS -'METRES' -/ - -SPECGRID -2 1 2 1 F -/ - -COORD -0 0 0 0 0 2 -1 0 0 1 0 2 -2 0 0 2 0 2 -0 1 0 0 1 2 -1 1 0 1 1 2 -2 1 0 2 1 2 -/ - -ZCORN -0 0 0 0 0 0 0 0 -1 1 0.8 1.2 1 1 1.2 1.2 -1 1 0.8 1.2 1 1 1.2 1.2 -2 2 2.2 2 2 2 1.9 2 -/ - -ACTNUM -1 1 -1 1 -/ - -PORO -0.1 0.1 -0.3 0.3 -/ - -PERMX -100 100 -500 500 -/ diff --git a/test/porousmediumflow/2p/implicit/grids/rectangle-domain.geo b/test/porousmediumflow/2p/implicit/grids/rectangle-domain.geo deleted file mode 100644 index 08298879b6390ed593b4c83a6af832b9ec6d0d7b..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/grids/rectangle-domain.geo +++ /dev/null @@ -1,18 +0,0 @@ -// Rectangular structured cube grid -// compile with gmsh -2 rectangle-domain.geo - -Point(1) = {0, 0, 0, 1.0}; -Point(2) = {6, 0, 0, 1.0}; -Point(3) = {6, 4, 0, 1.0}; -Point(4) = {0, 4, 0, 1.0}; -Line(1) = {4, 3}; -Line(2) = {3, 2}; -Line(3) = {2, 1}; -Line(4) = {1, 4}; -Line Loop(6) = {1, 2, 3, 4}; -Plane Surface(7) = {6}; - -Transfinite Line{1, 3} = 49; // 48 cells -Transfinite Line{2, 4} = 33; // 33 cells -Transfinite Surface{7}; // structured surface -Recombine Surface{7}; // make quarilateral diff --git a/test/porousmediumflow/2p/implicit/grids/rectangle-domain.msh b/test/porousmediumflow/2p/implicit/grids/rectangle-domain.msh deleted file mode 100644 index dbc6063059e7ff4e89a21019fd577f30f0be0b23..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/grids/rectangle-domain.msh +++ /dev/null @@ -1,3326 +0,0 @@ -$MeshFormat -2.2 0 8 -$EndMeshFormat -$Nodes -1617 -1 0 0 0 -2 6 0 0 -3 6 4 0 -4 0 4 0 -5 0.1249999999994456 4 0 -6 0.2499999999988841 4 0 -7 0.3749999999983335 4 0 -8 0.4999999999978768 4 0 -9 0.6249999999974307 4 0 -10 0.7499999999969633 4 0 -11 0.8749999999963076 4 0 -12 0.999999999995645 4 0 -13 1.124999999995171 4 0 -14 1.249999999994725 4 0 -15 1.374999999994279 4 0 -16 1.499999999993833 4 0 -17 1.624999999993388 4 0 -18 1.749999999992942 4 0 -19 1.874999999992496 4 0 -20 1.99999999999205 4 0 -21 2.124999999991605 4 0 -22 2.249999999991159 4 0 -23 2.374999999990713 4 0 -24 2.499999999990267 4 0 -25 2.624999999989822 4 0 -26 2.749999999989376 4 0 -27 2.874999999988931 4 0 -28 2.999999999988572 4 0 -29 3.124999999988965 4 0 -30 3.249999999989445 4 0 -31 3.374999999989924 4 0 -32 3.499999999990404 4 0 -33 3.624999999990884 4 0 -34 3.749999999991363 4 0 -35 3.874999999991843 4 0 -36 3.999999999992323 4 0 -37 4.124999999992803 4 0 -38 4.249999999993283 4 0 -39 4.374999999993763 4 0 -40 4.499999999994243 4 0 -41 4.624999999994722 4 0 -42 4.749999999995202 4 0 -43 4.874999999995682 4 0 -44 4.999999999996161 4 0 -45 5.124999999996641 4 0 -46 5.249999999997121 4 0 -47 5.374999999997601 4 0 -48 5.499999999998081 4 0 -49 5.62499999999856 4 0 -50 5.749999999999041 4 0 -51 5.87499999999952 4 0 -52 6 3.87499999999948 0 -53 6 3.749999999998959 0 -54 6 3.624999999998439 0 -55 6 3.499999999998005 0 -56 6 3.374999999998785 0 -57 6 3.249999999999653 0 -58 6 3.12500000000052 0 -59 6 3.000000000001388 0 -60 6 2.875000000002255 0 -61 6 2.750000000003122 0 -62 6 2.625000000003989 0 -63 6 2.500000000004856 0 -64 6 2.375000000005723 0 -65 6 2.25000000000659 0 -66 6 2.125000000007457 0 -67 6 2.000000000008238 0 -68 6 1.875000000007804 0 -69 6 1.750000000007284 0 -70 6 1.625000000006763 0 -71 6 1.500000000006243 0 -72 6 1.375000000005723 0 -73 6 1.250000000005203 0 -74 6 1.125000000004682 0 -75 6 1.000000000004162 0 -76 6 0.875000000003642 0 -77 6 0.7500000000031215 0 -78 6 0.6250000000026015 0 -79 6 0.500000000002081 0 -80 6 0.375000000001561 0 -81 6 0.2500000000010405 0 -82 6 0.1250000000005205 0 -83 5.8750000000015 0 0 -84 5.750000000002999 0 0 -85 5.625000000004325 0 0 -86 5.500000000004149 0 0 -87 5.375000000003798 0 0 -88 5.250000000003621 0 0 -89 5.125000000004947 0 0 -90 5.000000000006331 0 0 -91 4.875000000006212 0 0 -92 4.750000000005862 0 0 -93 4.625000000005511 0 0 -94 4.50000000000516 0 0 -95 4.37500000000481 0 0 -96 4.25000000000446 0 0 -97 4.12500000000411 0 0 -98 4.000000000003875 0 0 -99 3.875000000004391 0 0 -100 3.750000000004965 0 0 -101 3.62500000000554 0 0 -102 3.500000000006114 0 0 -103 3.375000000006688 0 0 -104 3.250000000007262 0 0 -105 3.125000000007836 0 0 -106 3.000000000008324 0 0 -107 2.875000000008061 0 0 -108 2.750000000007709 0 0 -109 2.625000000007359 0 0 -110 2.50000000000701 0 0 -111 2.375000000006658 0 0 -112 2.250000000006308 0 0 -113 2.125000000005958 0 0 -114 2.000000000005607 0 0 -115 1.875000000005257 0 0 -116 1.750000000004906 0 0 -117 1.625000000004556 0 0 -118 1.500000000004206 0 0 -119 1.375000000003856 0 0 -120 1.250000000003505 0 0 -121 1.125000000003154 0 0 -122 1.000000000002804 0 0 -123 0.8750000000024531 0 0 -124 0.7500000000021032 0 0 -125 0.6250000000017533 0 0 -126 0.5000000000014024 0 0 -127 0.3750000000010516 0 0 -128 0.2500000000007017 0 0 -129 0.1250000000003508 0 0 -130 0 0.1249999999997618 0 -131 0 0.2499999999994917 0 -132 0 0.3749999999992948 0 -133 0 0.4999999999990926 0 -134 0 0.6249999999987385 0 -135 0 0.7499999999983736 0 -136 0 0.8749999999980087 0 -137 0 0.9999999999976438 0 -138 0 1.124999999997279 0 -139 0 1.249999999996914 0 -140 0 1.374999999996549 0 -141 0 1.499999999996184 0 -142 0 1.62499999999582 0 -143 0 1.749999999995455 0 -144 0 1.87499999999509 0 -145 0 1.999999999994768 0 -146 0 2.124999999995055 0 -147 0 2.249999999995384 0 -148 0 2.374999999995714 0 -149 0 2.499999999996044 0 -150 0 2.624999999996374 0 -151 0 2.749999999996703 0 -152 0 2.874999999997033 0 -153 0 2.999999999997363 0 -154 0 3.124999999997692 0 -155 0 3.249999999998022 0 -156 0 3.374999999998352 0 -157 0 3.499999999998681 0 -158 0 3.624999999999011 0 -159 0 3.749999999999341 0 -160 0 3.87499999999967 0 -161 0.1249999999994739 3.874999999999666 0 -162 0.1249999999995022 3.749999999999333 0 -163 0.1249999999995305 3.624999999998999 0 -164 0.1249999999995588 3.499999999998667 0 -165 0.1249999999995871 3.37499999999836 0 -166 0.1249999999996153 3.249999999998056 0 -167 0.1249999999996436 3.124999999997751 0 -168 0.1249999999996719 2.999999999997446 0 -169 0.1249999999997002 2.874999999997141 0 -170 0.1249999999997285 2.749999999996837 0 -171 0.1249999999997568 2.624999999996533 0 -172 0.124999999999785 2.499999999996227 0 -173 0.1249999999998134 2.374999999995923 0 -174 0.1249999999998417 2.249999999995618 0 -175 0.12499999999987 2.124999999995313 0 -176 0.1249999999998982 1.999999999995049 0 -177 0.1249999999999265 1.874999999995354 0 -178 0.1249999999999548 1.749999999995701 0 -179 0.1249999999999831 1.624999999996048 0 -180 0.1250000000000114 1.499999999996394 0 -181 0.1250000000000397 1.37499999999674 0 -182 0.125000000000068 1.249999999997087 0 -183 0.1250000000000963 1.124999999997433 0 -184 0.1250000000001245 0.9999999999977796 0 -185 0.1250000000001528 0.8749999999981261 0 -186 0.1250000000001811 0.7499999999984727 0 -187 0.1250000000002094 0.6249999999988188 0 -188 0.1250000000002377 0.4999999999991549 0 -189 0.125000000000266 0.374999999999342 0 -190 0.1250000000002943 0.2499999999995239 0 -191 0.1250000000003225 0.1249999999997776 0 -192 0.2499999999989408 3.874999999999662 0 -193 0.2499999999989977 3.749999999999325 0 -194 0.2499999999990545 3.624999999998987 0 -195 0.2499999999991113 3.499999999998653 0 -196 0.2499999999991681 3.374999999998369 0 -197 0.2499999999992249 3.24999999999809 0 -198 0.2499999999992817 3.12499999999781 0 -199 0.2499999999993385 2.99999999999753 0 -200 0.2499999999993952 2.87499999999725 0 -201 0.2499999999994521 2.74999999999697 0 -202 0.2499999999995089 2.624999999996691 0 -203 0.2499999999995657 2.49999999999641 0 -204 0.2499999999996224 2.374999999996131 0 -205 0.2499999999996792 2.24999999999585 0 -206 0.2499999999997361 2.124999999995572 0 -207 0.2499999999997929 1.99999999999533 0 -208 0.2499999999998497 1.87499999999562 0 -209 0.2499999999999064 1.749999999995947 0 -210 0.2499999999999633 1.624999999996275 0 -211 0.2500000000000201 1.499999999996603 0 -212 0.2500000000000769 1.374999999996932 0 -213 0.2500000000001337 1.24999999999726 0 -214 0.2500000000001904 1.124999999997587 0 -215 0.2500000000002472 0.9999999999979154 0 -216 0.2500000000003041 0.8749999999982436 0 -217 0.2500000000003608 0.7499999999985714 0 -218 0.2500000000004177 0.6249999999988995 0 -219 0.2500000000004745 0.4999999999992171 0 -220 0.2500000000005312 0.3749999999993893 0 -221 0.2500000000005881 0.2499999999995562 0 -222 0.2500000000006448 0.1249999999997934 0 -223 0.3749999999984184 3.874999999999659 0 -224 0.3749999999985033 3.749999999999316 0 -225 0.3749999999985882 3.624999999998975 0 -226 0.3749999999986732 3.499999999998639 0 -227 0.3749999999987583 3.374999999998379 0 -228 0.3749999999988431 3.249999999998123 0 -229 0.374999999998928 3.124999999997868 0 -230 0.3749999999990131 2.999999999997614 0 -231 0.374999999999098 2.874999999997359 0 -232 0.3749999999991829 2.749999999997104 0 -233 0.3749999999992679 2.624999999996849 0 -234 0.3749999999993527 2.499999999996595 0 -235 0.3749999999994377 2.37499999999634 0 -236 0.3749999999995227 2.249999999996085 0 -237 0.3749999999996076 2.124999999995829 0 -238 0.3749999999996925 1.999999999995611 0 -239 0.3749999999997775 1.874999999995885 0 -240 0.3749999999998624 1.749999999996194 0 -241 0.3749999999999475 1.624999999996504 0 -242 0.3750000000000323 1.499999999996813 0 -243 0.3750000000001171 1.374999999997123 0 -244 0.3750000000002021 1.249999999997432 0 -245 0.3750000000002872 1.124999999997741 0 -246 0.3750000000003721 0.9999999999980513 0 -247 0.3750000000004571 0.8749999999983609 0 -248 0.375000000000542 0.7499999999986704 0 -249 0.3750000000006269 0.6249999999989799 0 -250 0.3750000000007118 0.4999999999992792 0 -251 0.3750000000007967 0.3749999999994365 0 -252 0.3750000000008818 0.2499999999995886 0 -253 0.3750000000009666 0.1249999999998093 0 -254 0.4999999999979869 3.874999999999655 0 -255 0.4999999999980971 3.749999999999309 0 -256 0.4999999999982072 3.624999999998963 0 -257 0.4999999999983175 3.499999999998625 0 -258 0.4999999999984276 3.374999999998388 0 -259 0.4999999999985378 3.249999999998158 0 -260 0.4999999999986479 3.124999999997928 0 -261 0.4999999999987582 2.999999999997699 0 -262 0.4999999999988685 2.874999999997468 0 -263 0.4999999999989784 2.749999999997239 0 -264 0.4999999999990887 2.624999999997008 0 -265 0.499999999999199 2.499999999996778 0 -266 0.4999999999993091 2.374999999996549 0 -267 0.4999999999994192 2.249999999996318 0 -268 0.4999999999995294 2.124999999996088 0 -269 0.4999999999996396 1.99999999999589 0 -270 0.4999999999997498 1.874999999996149 0 -271 0.4999999999998599 1.74999999999644 0 -272 0.49999999999997 1.624999999996732 0 -273 0.5000000000000802 1.499999999997023 0 -274 0.5000000000001905 1.374999999997314 0 -275 0.5000000000003006 1.249999999997605 0 -276 0.5000000000004108 1.124999999997896 0 -277 0.5000000000005209 0.9999999999981872 0 -278 0.5000000000006311 0.8749999999984781 0 -279 0.5000000000007414 0.7499999999987692 0 -280 0.5000000000008514 0.6249999999990603 0 -281 0.5000000000009617 0.4999999999993416 0 -282 0.5000000000010718 0.3749999999994837 0 -283 0.5000000000011822 0.2499999999996207 0 -284 0.5000000000012923 0.124999999999825 0 -285 0.6249999999975659 3.87499999999965 0 -286 0.6249999999977007 3.749999999999301 0 -287 0.624999999997836 3.624999999998952 0 -288 0.6249999999979711 3.499999999998611 0 -289 0.6249999999981062 3.374999999998397 0 -290 0.6249999999982411 3.249999999998193 0 -291 0.6249999999983764 3.124999999997986 0 -292 0.6249999999985114 2.999999999997782 0 -293 0.6249999999986463 2.874999999997576 0 -294 0.6249999999987816 2.749999999997372 0 -295 0.6249999999989166 2.624999999997167 0 -296 0.6249999999990516 2.499999999996962 0 -297 0.6249999999991867 2.374999999996756 0 -298 0.6249999999993219 2.249999999996551 0 -299 0.6249999999994569 2.124999999996347 0 -300 0.6249999999995919 1.999999999996171 0 -301 0.6249999999997271 1.874999999996414 0 -302 0.6249999999998621 1.749999999996687 0 -303 0.6249999999999973 1.62499999999696 0 -304 0.6250000000001321 1.499999999997232 0 -305 0.6250000000002673 1.374999999997505 0 -306 0.6250000000004022 1.249999999997778 0 -307 0.6250000000005376 1.12499999999805 0 -308 0.6250000000006726 0.9999999999983227 0 -309 0.6250000000008076 0.8749999999985956 0 -310 0.6250000000009428 0.7499999999988682 0 -311 0.6250000000010778 0.6249999999991408 0 -312 0.625000000001213 0.4999999999994038 0 -313 0.625000000001348 0.3749999999995309 0 -314 0.625000000001483 0.2499999999996531 0 -315 0.625000000001618 0.1249999999998408 0 -316 0.7499999999971241 3.874999999999647 0 -317 0.7499999999972846 3.749999999999293 0 -318 0.749999999997445 3.62499999999894 0 -319 0.7499999999976056 3.499999999998597 0 -320 0.7499999999977667 3.374999999998406 0 -321 0.749999999997927 3.249999999998226 0 -322 0.7499999999980876 3.124999999998046 0 -323 0.7499999999982483 2.999999999997865 0 -324 0.7499999999984087 2.874999999997685 0 -325 0.7499999999985696 2.749999999997505 0 -326 0.7499999999987301 2.624999999997325 0 -327 0.7499999999988907 2.499999999997145 0 -328 0.7499999999990514 2.374999999996965 0 -329 0.749999999999212 2.249999999996785 0 -330 0.7499999999993727 2.124999999996605 0 -331 0.7499999999995333 1.999999999996452 0 -332 0.7499999999996938 1.874999999996679 0 -333 0.7499999999998546 1.749999999996933 0 -334 0.750000000000015 1.624999999997188 0 -335 0.7500000000001759 1.499999999997441 0 -336 0.7500000000003364 1.374999999997696 0 -337 0.7500000000004969 1.24999999999795 0 -338 0.7500000000006577 1.124999999998204 0 -339 0.7500000000008182 0.9999999999984586 0 -340 0.7500000000009788 0.8749999999987129 0 -341 0.7500000000011395 0.749999999998967 0 -342 0.7500000000013001 0.6249999999992215 0 -343 0.7500000000014606 0.4999999999994662 0 -344 0.7500000000016214 0.3749999999995781 0 -345 0.7500000000017821 0.2499999999996854 0 -346 0.7500000000019424 0.1249999999998567 0 -347 0.8749999999964997 3.874999999999643 0 -348 0.8749999999966918 3.749999999999285 0 -349 0.8749999999968836 3.624999999998927 0 -350 0.8749999999970759 3.499999999998583 0 -351 0.874999999997268 3.374999999998415 0 -352 0.87499999999746 3.24999999999826 0 -353 0.8749999999976519 3.124999999998105 0 -354 0.8749999999978439 2.999999999997949 0 -355 0.8749999999980359 2.874999999997795 0 -356 0.8749999999982281 2.749999999997639 0 -357 0.8749999999984202 2.624999999997484 0 -358 0.8749999999986122 2.499999999997329 0 -359 0.8749999999988043 2.374999999997174 0 -360 0.8749999999989964 2.249999999997018 0 -361 0.8749999999991882 2.124999999996863 0 -362 0.8749999999993802 1.999999999996732 0 -363 0.8749999999995723 1.874999999996944 0 -364 0.8749999999997643 1.74999999999718 0 -365 0.8749999999999563 1.624999999997415 0 -366 0.8750000000001484 1.499999999997651 0 -367 0.8750000000003405 1.374999999997887 0 -368 0.8750000000005327 1.249999999998123 0 -369 0.8750000000007245 1.124999999998359 0 -370 0.8750000000009167 0.9999999999985945 0 -371 0.8750000000011086 0.8749999999988303 0 -372 0.875000000001301 0.7499999999990661 0 -373 0.875000000001493 0.6249999999993019 0 -374 0.875000000001685 0.4999999999995284 0 -375 0.8750000000018769 0.3749999999996254 0 -376 0.8750000000020692 0.2499999999997176 0 -377 0.8750000000022611 0.1249999999998724 0 -378 0.9999999999958689 3.874999999999639 0 -379 0.9999999999960925 3.749999999999277 0 -380 0.9999999999963161 3.624999999998916 0 -381 0.9999999999965398 3.499999999998569 0 -382 0.9999999999967637 3.374999999998424 0 -383 0.9999999999969872 3.249999999998294 0 -384 0.9999999999972109 3.124999999998163 0 -385 0.9999999999974347 2.999999999998034 0 -386 0.9999999999976585 2.874999999997903 0 -387 0.9999999999978821 2.749999999997773 0 -388 0.999999999998106 2.624999999997643 0 -389 0.9999999999983296 2.499999999997512 0 -390 0.9999999999985534 2.374999999997383 0 -391 0.999999999998777 2.249999999997252 0 -392 0.9999999999990008 2.124999999997121 0 -393 0.9999999999992246 1.999999999997013 0 -394 0.9999999999994482 1.874999999997209 0 -395 0.9999999999996718 1.749999999997426 0 -396 0.9999999999998955 1.624999999997644 0 -397 1.000000000000119 1.499999999997861 0 -398 1.000000000000343 1.374999999998078 0 -399 1.000000000000567 1.249999999998296 0 -400 1.00000000000079 1.124999999998513 0 -401 1.000000000001014 0.9999999999987299 0 -402 1.000000000001238 0.8749999999989475 0 -403 1.000000000001462 0.7499999999991649 0 -404 1.000000000001686 0.6249999999993823 0 -405 1.000000000001909 0.4999999999995905 0 -406 1.000000000002133 0.3749999999996725 0 -407 1.000000000002357 0.2499999999997499 0 -408 1.00000000000258 0.1249999999998883 0 -409 1.12499999999542 3.874999999999635 0 -410 1.124999999995669 3.749999999999269 0 -411 1.124999999995919 3.624999999998904 0 -412 1.124999999996168 3.499999999998554 0 -413 1.124999999996418 3.374999999998433 0 -414 1.124999999996668 3.249999999998328 0 -415 1.124999999996917 3.124999999998222 0 -416 1.124999999997166 2.999999999998117 0 -417 1.124999999997416 2.874999999998011 0 -418 1.124999999997665 2.749999999997907 0 -419 1.124999999997915 2.624999999997801 0 -420 1.124999999998164 2.499999999997697 0 -421 1.124999999998414 2.374999999997591 0 -422 1.124999999998663 2.249999999997485 0 -423 1.124999999998913 2.12499999999738 0 -424 1.124999999999162 1.999999999997294 0 -425 1.124999999999412 1.874999999997474 0 -426 1.124999999999661 1.749999999997673 0 -427 1.124999999999911 1.624999999997871 0 -428 1.12500000000016 1.49999999999807 0 -429 1.125000000000409 1.374999999998269 0 -430 1.125000000000659 1.249999999998468 0 -431 1.125000000000909 1.124999999998667 0 -432 1.125000000001158 0.9999999999988658 0 -433 1.125000000001407 0.874999999999065 0 -434 1.125000000001657 0.7499999999992637 0 -435 1.125000000001906 0.6249999999994627 0 -436 1.125000000002156 0.4999999999996529 0 -437 1.125000000002406 0.3749999999997198 0 -438 1.125000000002655 0.2499999999997822 0 -439 1.125000000002905 0.1249999999999041 0 -440 1.249999999994999 3.874999999999631 0 -441 1.249999999995274 3.749999999999261 0 -442 1.249999999995548 3.624999999998892 0 -443 1.249999999995823 3.49999999999854 0 -444 1.249999999996097 3.374999999998442 0 -445 1.249999999996371 3.249999999998361 0 -446 1.249999999996645 3.124999999998281 0 -447 1.249999999996919 2.999999999998201 0 -448 1.249999999997194 2.874999999998121 0 -449 1.249999999997468 2.74999999999804 0 -450 1.249999999997743 2.62499999999796 0 -451 1.249999999998017 2.499999999997879 0 -452 1.249999999998292 2.374999999997799 0 -453 1.249999999998566 2.249999999997719 0 -454 1.24999999999884 2.124999999997638 0 -455 1.249999999999114 1.999999999997574 0 -456 1.249999999999389 1.874999999997738 0 -457 1.249999999999663 1.749999999997919 0 -458 1.249999999999938 1.624999999998099 0 -459 1.250000000000212 1.49999999999828 0 -460 1.250000000000487 1.37499999999846 0 -461 1.250000000000761 1.249999999998641 0 -462 1.250000000001035 1.124999999998821 0 -463 1.25000000000131 0.9999999999990017 0 -464 1.250000000001584 0.8749999999991824 0 -465 1.250000000001859 0.7499999999993627 0 -466 1.250000000002133 0.6249999999995433 0 -467 1.250000000002408 0.4999999999997151 0 -468 1.250000000002682 0.374999999999767 0 -469 1.250000000002956 0.2499999999998144 0 -470 1.25000000000323 0.1249999999999198 0 -471 1.374999999994578 3.874999999999627 0 -472 1.374999999994877 3.749999999999253 0 -473 1.374999999995177 3.62499999999888 0 -474 1.374999999995476 3.499999999998526 0 -475 1.374999999995776 3.374999999998451 0 -476 1.374999999996075 3.249999999998395 0 -477 1.374999999996374 3.12499999999834 0 -478 1.374999999996673 2.999999999998285 0 -479 1.374999999996972 2.87499999999823 0 -480 1.374999999997272 2.749999999998174 0 -481 1.374999999997571 2.62499999999812 0 -482 1.37499999999787 2.499999999998062 0 -483 1.37499999999817 2.374999999998008 0 -484 1.374999999998468 2.249999999997952 0 -485 1.374999999998768 2.124999999997897 0 -486 1.374999999999068 1.999999999997855 0 -487 1.374999999999367 1.874999999998003 0 -488 1.374999999999666 1.749999999998165 0 -489 1.374999999999964 1.624999999998328 0 -490 1.375000000000264 1.49999999999849 0 -491 1.375000000000564 1.374999999998651 0 -492 1.375000000000863 1.249999999998813 0 -493 1.375000000001162 1.124999999998975 0 -494 1.375000000001461 0.9999999999991376 0 -495 1.375000000001761 0.8749999999992997 0 -496 1.37500000000206 0.7499999999994618 0 -497 1.375000000002359 0.6249999999996239 0 -498 1.375000000002659 0.4999999999997775 0 -499 1.375000000002958 0.3749999999998141 0 -500 1.375000000003257 0.2499999999998467 0 -501 1.375000000003556 0.1249999999999357 0 -502 1.499999999994157 3.874999999999623 0 -503 1.499999999994482 3.749999999999245 0 -504 1.499999999994806 3.624999999998868 0 -505 1.49999999999513 3.499999999998512 0 -506 1.499999999995454 3.37499999999846 0 -507 1.499999999995778 3.24999999999843 0 -508 1.499999999996102 3.1249999999984 0 -509 1.499999999996426 2.999999999998368 0 -510 1.499999999996751 2.874999999998338 0 -511 1.499999999997075 2.749999999998308 0 -512 1.499999999997399 2.624999999998277 0 -513 1.499999999997723 2.499999999998247 0 -514 1.499999999998047 2.374999999998217 0 -515 1.499999999998371 2.249999999998185 0 -516 1.499999999998695 2.124999999998155 0 -517 1.499999999999019 1.999999999998136 0 -518 1.499999999999344 1.874999999998268 0 -519 1.499999999999668 1.749999999998412 0 -520 1.499999999999992 1.624999999998555 0 -521 1.500000000000316 1.499999999998699 0 -522 1.50000000000064 1.374999999998842 0 -523 1.500000000000964 1.249999999998986 0 -524 1.500000000001288 1.12499999999913 0 -525 1.500000000001612 0.9999999999992735 0 -526 1.500000000001937 0.8749999999994169 0 -527 1.50000000000226 0.7499999999995606 0 -528 1.500000000002585 0.6249999999997042 0 -529 1.500000000002909 0.4999999999998397 0 -530 1.500000000003233 0.3749999999998613 0 -531 1.500000000003557 0.2499999999998789 0 -532 1.500000000003881 0.1249999999999515 0 -533 1.624999999993737 3.874999999999619 0 -534 1.624999999994086 3.749999999999237 0 -535 1.624999999994434 3.624999999998856 0 -536 1.624999999994784 3.499999999998498 0 -537 1.624999999995133 3.374999999998469 0 -538 1.624999999995482 3.249999999998463 0 -539 1.624999999995831 3.124999999998458 0 -540 1.62499999999618 2.999999999998453 0 -541 1.624999999996529 2.874999999998447 0 -542 1.624999999996878 2.749999999998441 0 -543 1.624999999997227 2.624999999998435 0 -544 1.624999999997576 2.49999999999843 0 -545 1.624999999997925 2.374999999998424 0 -546 1.624999999998274 2.249999999998419 0 -547 1.624999999998623 2.124999999998414 0 -548 1.624999999998972 1.999999999998416 0 -549 1.624999999999321 1.874999999998533 0 -550 1.62499999999967 1.749999999998658 0 -551 1.625000000000019 1.624999999998784 0 -552 1.625000000000368 1.499999999998909 0 -553 1.625000000000717 1.374999999999034 0 -554 1.625000000001066 1.249999999999159 0 -555 1.625000000001415 1.124999999999284 0 -556 1.625000000001764 0.9999999999994094 0 -557 1.625000000002113 0.8749999999995344 0 -558 1.625000000002462 0.7499999999996594 0 -559 1.625000000002811 0.6249999999997846 0 -560 1.62500000000316 0.4999999999999019 0 -561 1.625000000003509 0.3749999999999085 0 -562 1.625000000003858 0.2499999999999112 0 -563 1.625000000004207 0.1249999999999672 0 -564 1.749999999993316 3.874999999999615 0 -565 1.749999999993689 3.749999999999229 0 -566 1.749999999994063 3.624999999998844 0 -567 1.749999999994437 3.499999999998483 0 -568 1.749999999994811 3.374999999998477 0 -569 1.749999999995185 3.249999999998498 0 -570 1.749999999995559 3.124999999998517 0 -571 1.749999999995933 2.999999999998537 0 -572 1.749999999996307 2.874999999998556 0 -573 1.74999999999668 2.749999999998575 0 -574 1.749999999997055 2.624999999998596 0 -575 1.749999999997428 2.499999999998613 0 -576 1.749999999997802 2.374999999998633 0 -577 1.749999999998176 2.249999999998653 0 -578 1.74999999999855 2.124999999998672 0 -579 1.749999999998923 1.999999999998697 0 -580 1.749999999999298 1.874999999998798 0 -581 1.749999999999671 1.749999999998905 0 -582 1.750000000000045 1.624999999999011 0 -583 1.750000000000419 1.499999999999118 0 -584 1.750000000000793 1.374999999999225 0 -585 1.750000000001167 1.249999999999332 0 -586 1.750000000001541 1.124999999999438 0 -587 1.750000000001915 0.9999999999995448 0 -588 1.750000000002289 0.8749999999996519 0 -589 1.750000000002663 0.7499999999997584 0 -590 1.750000000003036 0.624999999999865 0 -591 1.75000000000341 0.499999999999964 0 -592 1.750000000003785 0.3749999999999558 0 -593 1.750000000004158 0.2499999999999434 0 -594 1.750000000004532 0.1249999999999831 0 -595 1.874999999992895 3.874999999999611 0 -596 1.874999999993294 3.749999999999221 0 -597 1.874999999993692 3.624999999998832 0 -598 1.874999999994091 3.499999999998469 0 -599 1.87499999999449 3.374999999998487 0 -600 1.874999999994888 3.249999999998532 0 -601 1.874999999995287 3.124999999998576 0 -602 1.874999999995686 2.999999999998621 0 -603 1.874999999996085 2.874999999998665 0 -604 1.874999999996484 2.749999999998709 0 -605 1.874999999996882 2.624999999998753 0 -606 1.874999999997282 2.499999999998798 0 -607 1.87499999999768 2.374999999998842 0 -608 1.874999999998079 2.249999999998886 0 -609 1.874999999998478 2.124999999998931 0 -610 1.874999999998877 1.999999999998978 0 -611 1.874999999999275 1.874999999999063 0 -612 1.874999999999674 1.749999999999151 0 -613 1.875000000000073 1.62499999999924 0 -614 1.875000000000471 1.499999999999328 0 -615 1.87500000000087 1.374999999999416 0 -616 1.875000000001269 1.249999999999504 0 -617 1.875000000001668 1.124999999999592 0 -618 1.875000000002066 0.9999999999996807 0 -619 1.875000000002465 0.8749999999997691 0 -620 1.875000000002864 0.7499999999998574 0 -621 1.875000000003263 0.6249999999999456 0 -622 1.875000000003662 0.5000000000000264 0 -623 1.875000000004061 0.375000000000003 0 -624 1.875000000004459 0.2499999999999757 0 -625 1.875000000004858 0.1249999999999989 0 -626 1.999999999992475 3.874999999999607 0 -627 1.999999999992898 3.749999999999214 0 -628 1.999999999993321 3.62499999999882 0 -629 1.999999999993745 3.499999999998455 0 -630 1.999999999994169 3.374999999998496 0 -631 1.999999999994593 3.249999999998566 0 -632 1.999999999995016 3.124999999998635 0 -633 1.99999999999544 2.999999999998704 0 -634 1.999999999995863 2.874999999998773 0 -635 1.999999999996287 2.749999999998843 0 -636 1.999999999996711 2.624999999998911 0 -637 1.999999999997134 2.499999999998981 0 -638 1.999999999997558 2.374999999999051 0 -639 1.999999999997982 2.24999999999912 0 -640 1.999999999998405 2.124999999999189 0 -641 1.999999999998829 1.999999999999258 0 -642 1.999999999999252 1.874999999999328 0 -643 1.999999999999676 1.749999999999398 0 -644 2.0000000000001 1.624999999999468 0 -645 2.000000000000524 1.499999999999538 0 -646 2.000000000000947 1.374999999999607 0 -647 2.000000000001371 1.249999999999677 0 -648 2.000000000001794 1.124999999999747 0 -649 2.000000000002218 0.9999999999998166 0 -650 2.000000000002642 0.8749999999998865 0 -651 2.000000000003065 0.7499999999999563 0 -652 2.000000000003489 0.6250000000000262 0 -653 2.000000000003912 0.5000000000000888 0 -654 2.000000000004337 0.3750000000000502 0 -655 2.000000000004761 0.250000000000008 0 -656 2.000000000005184 0.1250000000000147 0 -657 2.124999999992053 3.874999999999603 0 -658 2.124999999992502 3.749999999999206 0 -659 2.124999999992951 3.624999999998808 0 -660 2.124999999993399 3.499999999998441 0 -661 2.124999999993848 3.374999999998505 0 -662 2.124999999994296 3.249999999998599 0 -663 2.124999999994745 3.124999999998694 0 -664 2.124999999995193 2.999999999998789 0 -665 2.124999999995642 2.874999999998883 0 -666 2.12499999999609 2.749999999998977 0 -667 2.124999999996539 2.624999999999071 0 -668 2.124999999996987 2.499999999999165 0 -669 2.124999999997436 2.374999999999259 0 -670 2.124999999997884 2.249999999999353 0 -671 2.124999999998333 2.124999999999448 0 -672 2.124999999998781 1.999999999999539 0 -673 2.12499999999923 1.874999999999593 0 -674 2.124999999999678 1.749999999999644 0 -675 2.125000000000127 1.624999999999696 0 -676 2.125000000000576 1.499999999999747 0 -677 2.125000000001024 1.374999999999798 0 -678 2.125000000001473 1.24999999999985 0 -679 2.125000000001921 1.124999999999901 0 -680 2.12500000000237 0.999999999999952 0 -681 2.125000000002818 0.875000000000004 0 -682 2.125000000003267 0.7500000000000551 0 -683 2.125000000003716 0.6250000000001066 0 -684 2.125000000004164 0.500000000000151 0 -685 2.125000000004612 0.3750000000000975 0 -686 2.125000000005061 0.2500000000000402 0 -687 2.125000000005509 0.1250000000000305 0 -688 2.249999999991633 3.874999999999599 0 -689 2.249999999992106 3.749999999999197 0 -690 2.249999999992579 3.624999999998797 0 -691 2.249999999993053 3.499999999998427 0 -692 2.249999999993526 3.374999999998515 0 -693 2.249999999993999 3.249999999998634 0 -694 2.249999999994473 3.124999999998753 0 -695 2.249999999994946 2.999999999998872 0 -696 2.24999999999542 2.874999999998991 0 -697 2.249999999995893 2.74999999999911 0 -698 2.249999999996366 2.62499999999923 0 -699 2.24999999999684 2.499999999999349 0 -700 2.249999999997313 2.374999999999467 0 -701 2.249999999997787 2.249999999999586 0 -702 2.249999999998261 2.124999999999705 0 -703 2.249999999998733 1.99999999999982 0 -704 2.249999999999207 1.874999999999857 0 -705 2.24999999999968 1.749999999999891 0 -706 2.250000000000154 1.624999999999924 0 -707 2.250000000000627 1.499999999999956 0 -708 2.250000000001101 1.374999999999989 0 -709 2.250000000001574 1.250000000000022 0 -710 2.250000000002048 1.125000000000055 0 -711 2.250000000002521 1.000000000000088 0 -712 2.250000000002994 0.8750000000001212 0 -713 2.250000000003467 0.7500000000001541 0 -714 2.250000000003941 0.625000000000187 0 -715 2.250000000004414 0.5000000000002132 0 -716 2.250000000004889 0.3750000000001447 0 -717 2.250000000005361 0.2500000000000725 0 -718 2.250000000005835 0.1250000000000463 0 -719 2.374999999991211 3.874999999999595 0 -720 2.374999999991709 3.749999999999189 0 -721 2.374999999992208 3.624999999998784 0 -722 2.374999999992706 3.499999999998413 0 -723 2.374999999993205 3.374999999998524 0 -724 2.374999999993703 3.249999999998667 0 -725 2.374999999994201 3.124999999998812 0 -726 2.374999999994699 2.999999999998956 0 -727 2.374999999995198 2.874999999999099 0 -728 2.374999999995696 2.749999999999244 0 -729 2.374999999996194 2.624999999999388 0 -730 2.374999999996692 2.499999999999531 0 -731 2.374999999997191 2.374999999999676 0 -732 2.374999999997689 2.24999999999982 0 -733 2.374999999998187 2.124999999999964 0 -734 2.374999999998685 2.0000000000001 0 -735 2.374999999999185 1.875000000000122 0 -736 2.374999999999682 1.750000000000137 0 -737 2.37500000000018 1.625000000000151 0 -738 2.375000000000679 1.500000000000166 0 -739 2.375000000001177 1.37500000000018 0 -740 2.375000000001675 1.250000000000195 0 -741 2.375000000002173 1.12500000000021 0 -742 2.375000000002671 1.000000000000224 0 -743 2.375000000003171 0.8750000000002385 0 -744 2.375000000003668 0.7500000000002529 0 -745 2.375000000004167 0.6250000000002676 0 -746 2.375000000004665 0.5000000000002753 0 -747 2.375000000005163 0.3750000000001918 0 -748 2.375000000005661 0.2500000000001048 0 -749 2.37500000000616 0.1250000000000621 0 -750 2.49999999999079 3.874999999999591 0 -751 2.499999999991314 3.749999999999182 0 -752 2.499999999991837 3.624999999998773 0 -753 2.499999999992361 3.4999999999984 0 -754 2.499999999992884 3.374999999998532 0 -755 2.499999999993407 3.249999999998701 0 -756 2.499999999993929 3.124999999998871 0 -757 2.499999999994452 2.99999999999904 0 -758 2.499999999994977 2.874999999999209 0 -759 2.499999999995499 2.749999999999377 0 -760 2.499999999996023 2.624999999999547 0 -761 2.499999999996545 2.499999999999716 0 -762 2.499999999997069 2.374999999999885 0 -763 2.499999999997592 2.250000000000053 0 -764 2.499999999998115 2.125000000000222 0 -765 2.499999999998638 2.000000000000381 0 -766 2.499999999999162 1.875000000000387 0 -767 2.499999999999685 1.750000000000384 0 -768 2.500000000000208 1.62500000000038 0 -769 2.500000000000731 1.500000000000376 0 -770 2.500000000001254 1.375000000000372 0 -771 2.500000000001778 1.250000000000368 0 -772 2.5000000000023 1.125000000000364 0 -773 2.500000000002824 1.00000000000036 0 -774 2.500000000003348 0.8750000000003559 0 -775 2.500000000003871 0.7500000000003519 0 -776 2.500000000004393 0.6250000000003482 0 -777 2.500000000004917 0.5000000000003377 0 -778 2.50000000000544 0.3750000000002391 0 -779 2.500000000005963 0.250000000000137 0 -780 2.500000000006486 0.1250000000000779 0 -781 2.62499999999037 3.874999999999587 0 -782 2.624999999990918 3.749999999999174 0 -783 2.624999999991466 3.624999999998761 0 -784 2.624999999992013 3.499999999998385 0 -785 2.624999999992562 3.374999999998541 0 -786 2.62499999999311 3.249999999998736 0 -787 2.624999999993658 3.12499999999893 0 -788 2.624999999994207 2.999999999999124 0 -789 2.624999999994754 2.874999999999318 0 -790 2.624999999995303 2.749999999999512 0 -791 2.624999999995851 2.624999999999705 0 -792 2.624999999996398 2.499999999999899 0 -793 2.624999999996946 2.375000000000093 0 -794 2.624999999997495 2.250000000000287 0 -795 2.624999999998042 2.125000000000481 0 -796 2.624999999998591 2.000000000000662 0 -797 2.624999999999139 1.875000000000652 0 -798 2.624999999999687 1.75000000000063 0 -799 2.625000000000235 1.625000000000608 0 -800 2.625000000000783 1.500000000000585 0 -801 2.625000000001331 1.375000000000563 0 -802 2.625000000001879 1.25000000000054 0 -803 2.625000000002427 1.125000000000518 0 -804 2.625000000002975 1.000000000000496 0 -805 2.625000000003523 0.8750000000004734 0 -806 2.625000000004071 0.7500000000004508 0 -807 2.625000000004619 0.6250000000004285 0 -808 2.625000000005167 0.5000000000004001 0 -809 2.625000000005716 0.3750000000002863 0 -810 2.625000000006263 0.2500000000001693 0 -811 2.625000000006812 0.1250000000000937 0 -812 2.749999999989949 3.874999999999583 0 -813 2.749999999990522 3.749999999999165 0 -814 2.749999999991095 3.624999999998749 0 -815 2.749999999991668 3.499999999998372 0 -816 2.74999999999224 3.37499999999855 0 -817 2.749999999992813 3.24999999999877 0 -818 2.749999999993386 3.124999999998988 0 -819 2.749999999993959 2.999999999999208 0 -820 2.749999999994533 2.874999999999426 0 -821 2.749999999995106 2.749999999999645 0 -822 2.749999999995679 2.624999999999864 0 -823 2.749999999996251 2.500000000000082 0 -824 2.749999999996823 2.375000000000302 0 -825 2.749999999997397 2.25000000000052 0 -826 2.749999999997969 2.125000000000739 0 -827 2.749999999998543 2.000000000000942 0 -828 2.749999999999115 1.875000000000917 0 -829 2.749999999999689 1.750000000000877 0 -830 2.750000000000262 1.625000000000835 0 -831 2.750000000000834 1.500000000000795 0 -832 2.750000000001408 1.375000000000754 0 -833 2.75000000000198 1.250000000000713 0 -834 2.750000000002553 1.125000000000672 0 -835 2.750000000003126 1.000000000000631 0 -836 2.750000000003699 0.8750000000005906 0 -837 2.750000000004272 0.7500000000005498 0 -838 2.750000000004844 0.6250000000005089 0 -839 2.750000000005417 0.5000000000004623 0 -840 2.750000000005991 0.3750000000003335 0 -841 2.750000000006563 0.2500000000002016 0 -842 2.750000000007137 0.1250000000001095 0 -843 2.874999999989529 3.874999999999579 0 -844 2.874999999990126 3.749999999999158 0 -845 2.874999999990724 3.624999999998737 0 -846 2.874999999991322 3.499999999998357 0 -847 2.874999999991919 3.374999999998559 0 -848 2.874999999992518 3.249999999998804 0 -849 2.874999999993116 3.124999999999048 0 -850 2.874999999993713 2.999999999999292 0 -851 2.874999999994311 2.874999999999535 0 -852 2.874999999994909 2.749999999999779 0 -853 2.874999999995506 2.625000000000023 0 -854 2.874999999996105 2.500000000000267 0 -855 2.874999999996702 2.37500000000051 0 -856 2.874999999997301 2.250000000000753 0 -857 2.874999999997898 2.125000000000997 0 -858 2.874999999998495 2.000000000001223 0 -859 2.874999999999093 1.875000000001182 0 -860 2.874999999999692 1.750000000001123 0 -861 2.875000000000289 1.625000000001064 0 -862 2.875000000000887 1.500000000001004 0 -863 2.875000000001484 1.375000000000945 0 -864 2.875000000002083 1.250000000000886 0 -865 2.875000000002681 1.125000000000826 0 -866 2.875000000003278 1.000000000000767 0 -867 2.875000000003876 0.8750000000007079 0 -868 2.875000000004474 0.7500000000006486 0 -869 2.875000000005071 0.6250000000005895 0 -870 2.875000000005669 0.5000000000005245 0 -871 2.875000000006268 0.3750000000003807 0 -872 2.875000000006865 0.2500000000002338 0 -873 2.875000000007463 0.1250000000001253 0 -874 2.999999999989188 3.874999999999575 0 -875 2.999999999989806 3.74999999999915 0 -876 2.999999999990424 3.624999999998725 0 -877 2.999999999991041 3.499999999998343 0 -878 2.999999999991658 3.374999999998568 0 -879 2.999999999992276 3.249999999998837 0 -880 2.999999999992893 3.124999999999106 0 -881 2.99999999999351 2.999999999999376 0 -882 2.999999999994127 2.874999999999644 0 -883 2.999999999994745 2.749999999999912 0 -884 2.999999999995362 2.625000000000182 0 -885 2.999999999995979 2.50000000000045 0 -886 2.999999999996596 2.375000000000719 0 -887 2.999999999997213 2.250000000000987 0 -888 2.99999999999783 2.125000000001256 0 -889 2.999999999998448 2.000000000001503 0 -890 2.999999999999066 1.875000000001447 0 -891 2.999999999999682 1.750000000001369 0 -892 3.000000000000299 1.625000000001291 0 -893 3.000000000000917 1.500000000001214 0 -894 3.000000000001534 1.375000000001136 0 -895 3.000000000002151 1.250000000001059 0 -896 3.000000000002768 1.125000000000981 0 -897 3.000000000003387 1.000000000000903 0 -898 3.000000000004003 0.8750000000008253 0 -899 3.00000000000462 0.7500000000007476 0 -900 3.000000000005238 0.6250000000006699 0 -901 3.000000000005855 0.5000000000005866 0 -902 3.000000000006472 0.3750000000004279 0 -903 3.000000000007089 0.2500000000002661 0 -904 3.000000000007707 0.1250000000001411 0 -905 3.124999999989555 3.874999999999571 0 -906 3.124999999990145 3.749999999999142 0 -907 3.124999999990736 3.624999999998713 0 -908 3.124999999991324 3.499999999998329 0 -909 3.124999999991914 3.374999999998577 0 -910 3.124999999992504 3.249999999998871 0 -911 3.124999999993094 3.124999999999165 0 -912 3.124999999993683 2.999999999999459 0 -913 3.124999999994273 2.874999999999752 0 -914 3.124999999994862 2.750000000000046 0 -915 3.124999999995453 2.62500000000034 0 -916 3.124999999996041 2.500000000000633 0 -917 3.124999999996632 2.375000000000927 0 -918 3.124999999997221 2.25000000000122 0 -919 3.124999999997812 2.125000000001514 0 -920 3.124999999998401 2.000000000001784 0 -921 3.124999999998991 1.875000000001712 0 -922 3.124999999999581 1.750000000001616 0 -923 3.125000000000171 1.62500000000152 0 -924 3.12500000000076 1.500000000001423 0 -925 3.125000000001349 1.375000000001327 0 -926 3.125000000001939 1.250000000001231 0 -927 3.125000000002529 1.125000000001135 0 -928 3.125000000003119 1.000000000001039 0 -929 3.125000000003709 0.8750000000009428 0 -930 3.125000000004298 0.7500000000008464 0 -931 3.125000000004888 0.6250000000007505 0 -932 3.125000000005477 0.500000000000649 0 -933 3.125000000006068 0.3750000000004752 0 -934 3.125000000006657 0.2500000000002984 0 -935 3.125000000007247 0.1250000000001569 0 -936 3.249999999990003 3.874999999999567 0 -937 3.249999999990558 3.749999999999134 0 -938 3.249999999991116 3.624999999998701 0 -939 3.249999999991671 3.499999999998315 0 -940 3.249999999992229 3.374999999998586 0 -941 3.249999999992785 3.249999999998905 0 -942 3.249999999993342 3.124999999999224 0 -943 3.249999999993899 2.999999999999543 0 -944 3.249999999994457 2.874999999999861 0 -945 3.249999999995013 2.75000000000018 0 -946 3.249999999995569 2.625000000000499 0 -947 3.249999999996127 2.500000000000818 0 -948 3.249999999996684 2.375000000001136 0 -949 3.24999999999724 2.250000000001454 0 -950 3.249999999997796 2.125000000001773 0 -951 3.249999999998353 2.000000000002064 0 -952 3.24999999999891 1.875000000001977 0 -953 3.249999999999467 1.750000000001862 0 -954 3.250000000000023 1.625000000001747 0 -955 3.250000000000581 1.500000000001633 0 -956 3.250000000001137 1.375000000001518 0 -957 3.250000000001695 1.250000000001404 0 -958 3.250000000002251 1.125000000001289 0 -959 3.250000000002808 1.000000000001175 0 -960 3.250000000003364 0.87500000000106 0 -961 3.250000000003921 0.7500000000009455 0 -962 3.250000000004478 0.6250000000008309 0 -963 3.250000000005034 0.5000000000007114 0 -964 3.250000000005592 0.3750000000005224 0 -965 3.250000000006148 0.2500000000003306 0 -966 3.250000000006706 0.1250000000001728 0 -967 3.374999999990449 3.874999999999563 0 -968 3.374999999990971 3.749999999999126 0 -969 3.374999999991496 3.624999999998689 0 -970 3.37499999999202 3.4999999999983 0 -971 3.374999999992544 3.374999999998596 0 -972 3.374999999993067 3.24999999999894 0 -973 3.374999999993591 3.124999999999283 0 -974 3.374999999994115 2.999999999999627 0 -975 3.374999999994639 2.874999999999971 0 -976 3.374999999995163 2.750000000000314 0 -977 3.374999999995687 2.625000000000658 0 -978 3.37499999999621 2.500000000001001 0 -979 3.374999999996735 2.375000000001345 0 -980 3.374999999997259 2.250000000001688 0 -981 3.374999999997782 2.125000000002031 0 -982 3.374999999998306 2.000000000002345 0 -983 3.37499999999883 1.875000000002241 0 -984 3.374999999999354 1.750000000002109 0 -985 3.374999999999878 1.625000000001975 0 -986 3.375000000000401 1.500000000001843 0 -987 3.375000000000925 1.375000000001709 0 -988 3.375000000001449 1.250000000001577 0 -989 3.375000000001973 1.125000000001443 0 -990 3.375000000002496 1.00000000000131 0 -991 3.375000000003021 0.8750000000011773 0 -992 3.375000000003545 0.7500000000010443 0 -993 3.375000000004068 0.6250000000009113 0 -994 3.375000000004592 0.5000000000007736 0 -995 3.375000000005116 0.3750000000005695 0 -996 3.37500000000564 0.2500000000003629 0 -997 3.375000000006165 0.1250000000001886 0 -998 3.499999999990896 3.874999999999559 0 -999 3.499999999991387 3.749999999999118 0 -1000 3.499999999991876 3.624999999998678 0 -1001 3.499999999992369 3.499999999998287 0 -1002 3.499999999992859 3.374999999998605 0 -1003 3.49999999999335 3.249999999998973 0 -1004 3.49999999999384 3.124999999999342 0 -1005 3.499999999994332 2.99999999999971 0 -1006 3.499999999994822 2.875000000000079 0 -1007 3.499999999995314 2.750000000000448 0 -1008 3.499999999995804 2.625000000000816 0 -1009 3.499999999996296 2.500000000001184 0 -1010 3.499999999996787 2.375000000001553 0 -1011 3.499999999997277 2.250000000001921 0 -1012 3.499999999997768 2.12500000000229 0 -1013 3.49999999999826 2.000000000002625 0 -1014 3.49999999999875 1.875000000002506 0 -1015 3.499999999999241 1.750000000002355 0 -1016 3.499999999999732 1.625000000002204 0 -1017 3.500000000000222 1.500000000002052 0 -1018 3.500000000000714 1.375000000001901 0 -1019 3.500000000001206 1.250000000001749 0 -1020 3.500000000001696 1.125000000001598 0 -1021 3.500000000002187 1.000000000001446 0 -1022 3.500000000002677 0.8750000000012947 0 -1023 3.500000000003168 0.7500000000011431 0 -1024 3.500000000003659 0.6250000000009919 0 -1025 3.500000000004151 0.5000000000008358 0 -1026 3.500000000004642 0.3750000000006167 0 -1027 3.500000000005132 0.2500000000003952 0 -1028 3.500000000005624 0.1250000000002044 0 -1029 3.624999999991342 3.874999999999555 0 -1030 3.6249999999918 3.74999999999911 0 -1031 3.624999999992258 3.624999999998665 0 -1032 3.624999999992715 3.499999999998272 0 -1033 3.624999999993173 3.374999999998614 0 -1034 3.624999999993632 3.249999999999007 0 -1035 3.624999999994089 3.124999999999401 0 -1036 3.624999999994547 2.999999999999795 0 -1037 3.624999999995006 2.875000000000187 0 -1038 3.624999999995463 2.750000000000582 0 -1039 3.624999999995921 2.625000000000974 0 -1040 3.62499999999638 2.500000000001368 0 -1041 3.624999999996838 2.375000000001761 0 -1042 3.624999999997295 2.250000000002155 0 -1043 3.624999999997754 2.125000000002547 0 -1044 3.624999999998212 2.000000000002906 0 -1045 3.62499999999867 1.875000000002771 0 -1046 3.624999999999128 1.750000000002601 0 -1047 3.624999999999585 1.625000000002431 0 -1048 3.625000000000044 1.500000000002262 0 -1049 3.625000000000501 1.375000000002092 0 -1050 3.625000000000959 1.250000000001922 0 -1051 3.625000000001418 1.125000000001752 0 -1052 3.625000000001876 1.000000000001582 0 -1053 3.625000000002334 0.8750000000014122 0 -1054 3.625000000002791 0.7500000000012421 0 -1055 3.62500000000325 0.6250000000010725 0 -1056 3.625000000003707 0.5000000000008979 0 -1057 3.625000000004166 0.3750000000006639 0 -1058 3.625000000004624 0.2500000000004274 0 -1059 3.625000000005082 0.1250000000002202 0 -1060 3.749999999991787 3.874999999999551 0 -1061 3.749999999992213 3.749999999999102 0 -1062 3.749999999992638 3.624999999998654 0 -1063 3.749999999993064 3.499999999998257 0 -1064 3.74999999999349 3.374999999998623 0 -1065 3.749999999993913 3.249999999999042 0 -1066 3.749999999994339 3.12499999999946 0 -1067 3.749999999994763 2.999999999999878 0 -1068 3.749999999995189 2.875000000000297 0 -1069 3.749999999995614 2.750000000000715 0 -1070 3.74999999999604 2.625000000001134 0 -1071 3.749999999996464 2.500000000001551 0 -1072 3.749999999996889 2.37500000000197 0 -1073 3.749999999997314 2.250000000002387 0 -1074 3.749999999997739 2.125000000002807 0 -1075 3.749999999998164 2.000000000003187 0 -1076 3.74999999999859 1.875000000003036 0 -1077 3.749999999999014 1.750000000002848 0 -1078 3.74999999999944 1.625000000002659 0 -1079 3.749999999999865 1.500000000002471 0 -1080 3.75000000000029 1.375000000002283 0 -1081 3.750000000000714 1.250000000002094 0 -1082 3.75000000000114 1.125000000001906 0 -1083 3.750000000001565 1.000000000001718 0 -1084 3.75000000000199 0.8750000000015294 0 -1085 3.750000000002415 0.7500000000013411 0 -1086 3.750000000002839 0.6250000000011529 0 -1087 3.750000000003265 0.5000000000009603 0 -1088 3.750000000003689 0.3750000000007112 0 -1089 3.750000000004115 0.2500000000004596 0 -1090 3.75000000000454 0.125000000000236 0 -1091 3.874999999992236 3.874999999999547 0 -1092 3.874999999992628 3.749999999999094 0 -1093 3.874999999993021 3.624999999998641 0 -1094 3.874999999993411 3.499999999998244 0 -1095 3.874999999993804 3.374999999998632 0 -1096 3.874999999994196 3.249999999999075 0 -1097 3.874999999994589 3.124999999999519 0 -1098 3.87499999999498 2.999999999999963 0 -1099 3.874999999995373 2.875000000000406 0 -1100 3.874999999995765 2.750000000000848 0 -1101 3.874999999996156 2.625000000001292 0 -1102 3.874999999996549 2.500000000001735 0 -1103 3.874999999996941 2.375000000002178 0 -1104 3.874999999997333 2.250000000002622 0 -1105 3.874999999997726 2.125000000003064 0 -1106 3.874999999998118 2.000000000003467 0 -1107 3.874999999998509 1.875000000003301 0 -1108 3.874999999998902 1.750000000003094 0 -1109 3.874999999999295 1.625000000002887 0 -1110 3.874999999999685 1.500000000002681 0 -1111 3.875000000000078 1.375000000002474 0 -1112 3.87500000000047 1.250000000002268 0 -1113 3.875000000000862 1.125000000002061 0 -1114 3.875000000001253 1.000000000001854 0 -1115 3.875000000001646 0.8750000000016469 0 -1116 3.875000000002039 0.75000000000144 0 -1117 3.875000000002431 0.6250000000012332 0 -1118 3.875000000002822 0.5000000000010227 0 -1119 3.875000000003215 0.3750000000007584 0 -1120 3.875000000003607 0.2500000000004919 0 -1121 3.875000000003999 0.1250000000002518 0 -1122 3.999999999992684 3.874999999999543 0 -1123 3.999999999993046 3.749999999999086 0 -1124 3.999999999993406 3.62499999999863 0 -1125 3.999999999993768 3.49999999999823 0 -1126 3.999999999994128 3.374999999998641 0 -1127 3.99999999999449 3.249999999999109 0 -1128 3.999999999994849 3.124999999999578 0 -1129 3.999999999995212 3.000000000000046 0 -1130 3.999999999995573 2.875000000000514 0 -1131 3.999999999995933 2.750000000000982 0 -1132 3.999999999996294 2.625000000001451 0 -1133 3.999999999996654 2.500000000001919 0 -1134 3.999999999997017 2.375000000002387 0 -1135 3.999999999997379 2.250000000002855 0 -1136 3.999999999997739 2.125000000003323 0 -1137 3.999999999998099 2.000000000003748 0 -1138 3.999999999998461 1.875000000003566 0 -1139 3.999999999998822 1.750000000003341 0 -1140 3.999999999999182 1.625000000003115 0 -1141 3.999999999999543 1.500000000002891 0 -1142 3.999999999999905 1.375000000002665 0 -1143 4.000000000000266 1.25000000000244 0 -1144 4.000000000000626 1.125000000002215 0 -1145 4.000000000000987 1.00000000000199 0 -1146 4.000000000001348 0.8750000000017641 0 -1147 4.00000000000171 0.7500000000015388 0 -1148 4.000000000002071 0.6250000000013138 0 -1149 4.000000000002432 0.5000000000010849 0 -1150 4.000000000002792 0.3750000000008056 0 -1151 4.000000000003153 0.2500000000005242 0 -1152 4.000000000003515 0.1250000000002676 0 -1153 4.124999999993157 3.874999999999539 0 -1154 4.12499999999351 3.749999999999078 0 -1155 4.124999999993862 3.624999999998618 0 -1156 4.124999999994217 3.499999999998217 0 -1157 4.124999999994571 3.37499999999865 0 -1158 4.124999999994922 3.249999999999143 0 -1159 4.124999999995276 3.124999999999637 0 -1160 4.124999999995629 3.000000000000131 0 -1161 4.124999999995985 2.875000000000623 0 -1162 4.124999999996336 2.750000000001116 0 -1163 4.12499999999669 2.62500000000161 0 -1164 4.124999999997043 2.500000000002102 0 -1165 4.124999999997397 2.375000000002595 0 -1166 4.12499999999775 2.250000000003088 0 -1167 4.124999999998102 2.125000000003581 0 -1168 4.124999999998455 2.000000000004029 0 -1169 4.124999999998809 1.875000000003831 0 -1170 4.124999999999162 1.750000000003587 0 -1171 4.124999999999516 1.625000000003344 0 -1172 4.124999999999869 1.5000000000031 0 -1173 4.125000000000223 1.375000000002856 0 -1174 4.125000000000576 1.250000000002613 0 -1175 4.12500000000093 1.125000000002369 0 -1176 4.125000000001283 1.000000000002125 0 -1177 4.125000000001637 0.8750000000018816 0 -1178 4.125000000001989 0.7500000000016378 0 -1179 4.125000000002341 0.6250000000013942 0 -1180 4.125000000002696 0.5000000000011471 0 -1181 4.125000000003051 0.3750000000008528 0 -1182 4.125000000003403 0.2500000000005564 0 -1183 4.125000000003756 0.1250000000002834 0 -1184 4.249999999993633 3.874999999999535 0 -1185 4.249999999993983 3.74999999999907 0 -1186 4.249999999994331 3.624999999998606 0 -1187 4.249999999994678 3.499999999998202 0 -1188 4.249999999995029 3.374999999998658 0 -1189 4.249999999995378 3.249999999999177 0 -1190 4.249999999995726 3.124999999999696 0 -1191 4.249999999996078 3.000000000000214 0 -1192 4.249999999996427 2.875000000000732 0 -1193 4.249999999996774 2.75000000000125 0 -1194 4.249999999997125 2.625000000001768 0 -1195 4.249999999997475 2.500000000002286 0 -1196 4.249999999997823 2.375000000002804 0 -1197 4.249999999998173 2.250000000003322 0 -1198 4.249999999998523 2.12500000000384 0 -1199 4.249999999998871 2.000000000004309 0 -1200 4.249999999999221 1.875000000004096 0 -1201 4.249999999999571 1.750000000003833 0 -1202 4.249999999999921 1.625000000003571 0 -1203 4.250000000000269 1.50000000000331 0 -1204 4.250000000000618 1.375000000003047 0 -1205 4.250000000000967 1.250000000002785 0 -1206 4.250000000001317 1.125000000002523 0 -1207 4.250000000001665 1.000000000002261 0 -1208 4.250000000002015 0.8750000000019988 0 -1209 4.250000000002365 0.7500000000017368 0 -1210 4.250000000002713 0.6250000000014748 0 -1211 4.250000000003063 0.5000000000012093 0 -1212 4.250000000003413 0.3750000000009001 0 -1213 4.250000000003761 0.2500000000005888 0 -1214 4.25000000000411 0.1250000000002992 0 -1215 4.37499999999411 3.874999999999531 0 -1216 4.374999999994452 3.749999999999062 0 -1217 4.374999999994799 3.624999999998593 0 -1218 4.374999999995143 3.499999999998188 0 -1219 4.37499999999549 3.374999999998667 0 -1220 4.374999999995834 3.24999999999921 0 -1221 4.374999999996179 3.124999999999755 0 -1222 4.374999999996525 3.000000000000298 0 -1223 4.37499999999687 2.875000000000841 0 -1224 4.374999999997216 2.750000000001383 0 -1225 4.374999999997561 2.625000000001926 0 -1226 4.374999999997906 2.50000000000247 0 -1227 4.37499999999825 2.375000000003013 0 -1228 4.374999999998597 2.250000000003555 0 -1229 4.374999999998941 2.125000000004098 0 -1230 4.374999999999288 2.00000000000459 0 -1231 4.374999999999632 1.875000000004361 0 -1232 4.374999999999977 1.75000000000408 0 -1233 4.375000000000322 1.6250000000038 0 -1234 4.375000000000668 1.500000000003519 0 -1235 4.375000000001013 1.375000000003239 0 -1236 4.375000000001359 1.250000000002958 0 -1237 4.375000000001704 1.125000000002677 0 -1238 4.375000000002047 1.000000000002397 0 -1239 4.375000000002395 0.8750000000021163 0 -1240 4.375000000002739 0.7500000000018354 0 -1241 4.375000000003084 0.6250000000015552 0 -1242 4.37500000000343 0.5000000000012716 0 -1243 4.375000000003775 0.3750000000009472 0 -1244 4.375000000004119 0.2500000000006211 0 -1245 4.375000000004466 0.125000000000315 0 -1246 4.499999999994584 3.874999999999527 0 -1247 4.499999999994928 3.749999999999054 0 -1248 4.499999999995266 3.624999999998582 0 -1249 4.499999999995609 3.499999999998174 0 -1250 4.499999999995948 3.374999999998676 0 -1251 4.499999999996291 3.249999999999245 0 -1252 4.49999999999663 3.124999999999813 0 -1253 4.499999999996971 3.000000000000382 0 -1254 4.499999999997314 2.875000000000949 0 -1255 4.499999999997655 2.750000000001517 0 -1256 4.499999999997996 2.625000000002086 0 -1257 4.499999999998337 2.500000000002653 0 -1258 4.499999999998678 2.375000000003221 0 -1259 4.499999999999019 2.250000000003789 0 -1260 4.499999999999361 2.125000000004357 0 -1261 4.499999999999702 2.00000000000487 0 -1262 4.500000000000043 1.875000000004625 0 -1263 4.500000000000384 1.750000000004326 0 -1264 4.500000000000727 1.625000000004028 0 -1265 4.500000000001068 1.500000000003729 0 -1266 4.500000000001409 1.37500000000343 0 -1267 4.500000000001748 1.250000000003131 0 -1268 4.500000000002091 1.125000000002832 0 -1269 4.50000000000243 1.000000000002532 0 -1270 4.500000000002773 0.8750000000022335 0 -1271 4.500000000003114 0.7500000000019345 0 -1272 4.500000000003455 0.6250000000016356 0 -1273 4.500000000003796 0.5000000000013338 0 -1274 4.500000000004137 0.3750000000009944 0 -1275 4.500000000004478 0.2500000000006533 0 -1276 4.500000000004819 0.1250000000003308 0 -1277 4.62499999999506 3.874999999999524 0 -1278 4.624999999995396 3.749999999999046 0 -1279 4.624999999995732 3.62499999999857 0 -1280 4.62499999999607 3.49999999999816 0 -1281 4.624999999996408 3.374999999998686 0 -1282 4.624999999996746 3.24999999999928 0 -1283 4.624999999997083 3.124999999999872 0 -1284 4.624999999997419 3.000000000000466 0 -1285 4.624999999997756 2.875000000001059 0 -1286 4.624999999998094 2.750000000001651 0 -1287 4.624999999998431 2.625000000002244 0 -1288 4.624999999998769 2.500000000002836 0 -1289 4.624999999999106 2.375000000003429 0 -1290 4.624999999999442 2.250000000004022 0 -1291 4.62499999999978 2.125000000004615 0 -1292 4.625000000000117 2.000000000005151 0 -1293 4.625000000000453 1.87500000000489 0 -1294 4.62500000000079 1.750000000004573 0 -1295 4.625000000001128 1.625000000004255 0 -1296 4.625000000001465 1.500000000003938 0 -1297 4.625000000001803 1.375000000003621 0 -1298 4.625000000002139 1.250000000003303 0 -1299 4.625000000002476 1.125000000002986 0 -1300 4.625000000002814 1.000000000002668 0 -1301 4.625000000003151 0.875000000002351 0 -1302 4.625000000003489 0.7500000000020335 0 -1303 4.625000000003824 0.6250000000017162 0 -1304 4.625000000004162 0.5000000000013962 0 -1305 4.6250000000045 0.3750000000010416 0 -1306 4.625000000004838 0.2500000000006856 0 -1307 4.625000000005175 0.1250000000003466 0 -1308 4.749999999995533 3.874999999999519 0 -1309 4.749999999995868 3.749999999999039 0 -1310 4.749999999996202 3.624999999998558 0 -1311 4.749999999996534 3.499999999998146 0 -1312 4.749999999996868 3.374999999998696 0 -1313 4.7499999999972 3.249999999999313 0 -1314 4.749999999997534 3.124999999999932 0 -1315 4.749999999997867 3.00000000000055 0 -1316 4.7499999999982 2.875000000001167 0 -1317 4.749999999998533 2.750000000001784 0 -1318 4.749999999998865 2.625000000002402 0 -1319 4.749999999999199 2.50000000000302 0 -1320 4.749999999999533 2.375000000003638 0 -1321 4.749999999999865 2.250000000004256 0 -1322 4.750000000000199 2.125000000004873 0 -1323 4.750000000000531 2.000000000005431 0 -1324 4.750000000000865 1.875000000005155 0 -1325 4.750000000001199 1.750000000004819 0 -1326 4.750000000001531 1.625000000004484 0 -1327 4.750000000001865 1.500000000004148 0 -1328 4.750000000002197 1.375000000003812 0 -1329 4.750000000002531 1.250000000003476 0 -1330 4.750000000002863 1.12500000000314 0 -1331 4.750000000003197 1.000000000002804 0 -1332 4.75000000000353 0.8750000000024682 0 -1333 4.750000000003863 0.7500000000021325 0 -1334 4.750000000004198 0.6250000000017968 0 -1335 4.75000000000453 0.5000000000014584 0 -1336 4.750000000004861 0.3750000000010889 0 -1337 4.750000000005195 0.2500000000007179 0 -1338 4.750000000005529 0.1250000000003624 0 -1339 4.874999999996011 3.874999999999515 0 -1340 4.874999999996341 3.74999999999903 0 -1341 4.874999999996668 3.624999999998546 0 -1342 4.874999999996998 3.499999999998132 0 -1343 4.874999999997327 3.374999999998705 0 -1344 4.874999999997657 3.249999999999347 0 -1345 4.874999999997986 3.12499999999999 0 -1346 4.874999999998314 3.000000000000633 0 -1347 4.874999999998643 2.875000000001276 0 -1348 4.874999999998973 2.750000000001918 0 -1349 4.874999999999302 2.625000000002561 0 -1350 4.874999999999631 2.500000000003203 0 -1351 4.874999999999959 2.375000000003847 0 -1352 4.875000000000288 2.250000000004489 0 -1353 4.875000000000618 2.125000000005132 0 -1354 4.875000000000947 2.000000000005712 0 -1355 4.875000000001277 1.87500000000542 0 -1356 4.875000000001604 1.750000000005066 0 -1357 4.875000000001934 1.625000000004711 0 -1358 4.875000000002263 1.500000000004357 0 -1359 4.875000000002592 1.375000000004003 0 -1360 4.875000000002922 1.250000000003649 0 -1361 4.875000000003251 1.125000000003294 0 -1362 4.875000000003579 1.00000000000294 0 -1363 4.875000000003908 0.8750000000025857 0 -1364 4.875000000004238 0.7500000000022313 0 -1365 4.875000000004567 0.6250000000018772 0 -1366 4.875000000004896 0.5000000000015206 0 -1367 4.875000000005224 0.3750000000011361 0 -1368 4.875000000005555 0.2500000000007501 0 -1369 4.875000000005882 0.1250000000003783 0 -1370 4.999999999996482 3.874999999999512 0 -1371 4.999999999996795 3.749999999999023 0 -1372 4.999999999997115 3.624999999998534 0 -1373 4.999999999997433 3.499999999998118 0 -1374 4.999999999997751 3.374999999998713 0 -1375 4.999999999998069 3.249999999999381 0 -1376 4.999999999998385 3.125000000000049 0 -1377 4.999999999998703 3.000000000000717 0 -1378 4.999999999999021 2.875000000001385 0 -1379 4.999999999999339 2.750000000002053 0 -1380 4.999999999999657 2.62500000000272 0 -1381 4.999999999999975 2.500000000003388 0 -1382 5.000000000000293 2.375000000004055 0 -1383 5.000000000000611 2.250000000004722 0 -1384 5.000000000000929 2.125000000005389 0 -1385 5.000000000001245 2.000000000005993 0 -1386 5.000000000001563 1.875000000005685 0 -1387 5.000000000001881 1.750000000005312 0 -1388 5.000000000002199 1.62500000000494 0 -1389 5.000000000002517 1.500000000004567 0 -1390 5.000000000002835 1.375000000004194 0 -1391 5.000000000003153 1.250000000003822 0 -1392 5.000000000003469 1.125000000003449 0 -1393 5.000000000003789 1.000000000003076 0 -1394 5.000000000004105 0.8750000000027032 0 -1395 5.000000000004425 0.7500000000023301 0 -1396 5.000000000004741 0.6250000000019575 0 -1397 5.000000000005059 0.500000000001583 0 -1398 5.000000000005377 0.3750000000011833 0 -1399 5.000000000005695 0.2500000000007824 0 -1400 5.000000000006014 0.125000000000394 0 -1401 5.124999999996899 3.874999999999508 0 -1402 5.124999999997161 3.749999999999015 0 -1403 5.124999999997419 3.624999999998522 0 -1404 5.124999999997677 3.499999999998103 0 -1405 5.124999999997939 3.374999999998722 0 -1406 5.124999999998199 3.249999999999415 0 -1407 5.124999999998458 3.125000000000108 0 -1408 5.124999999998717 3.000000000000801 0 -1409 5.124999999998977 2.875000000001493 0 -1410 5.124999999999238 2.750000000002186 0 -1411 5.124999999999497 2.625000000002878 0 -1412 5.124999999999757 2.500000000003571 0 -1413 5.125000000000014 2.375000000004263 0 -1414 5.125000000000275 2.250000000004956 0 -1415 5.125000000000535 2.125000000005649 0 -1416 5.125000000000794 2.000000000006273 0 -1417 5.125000000001053 1.875000000005949 0 -1418 5.125000000001313 1.750000000005559 0 -1419 5.125000000001572 1.625000000005167 0 -1420 5.125000000001831 1.500000000004777 0 -1421 5.125000000002093 1.375000000004385 0 -1422 5.125000000002351 1.250000000003994 0 -1423 5.125000000002611 1.125000000003603 0 -1424 5.125000000002871 1.000000000003212 0 -1425 5.12500000000313 0.8750000000028204 0 -1426 5.12500000000339 0.7500000000024292 0 -1427 5.12500000000365 0.6250000000020381 0 -1428 5.12500000000391 0.5000000000016451 0 -1429 5.125000000004169 0.3750000000012305 0 -1430 5.125000000004428 0.2500000000008147 0 -1431 5.125000000004687 0.1250000000004098 0 -1432 5.249999999997323 3.874999999999504 0 -1433 5.249999999997527 3.749999999999007 0 -1434 5.249999999997731 3.62499999999851 0 -1435 5.249999999997933 3.499999999998089 0 -1436 5.249999999998137 3.374999999998731 0 -1437 5.249999999998342 3.249999999999448 0 -1438 5.249999999998542 3.125000000000167 0 -1439 5.249999999998746 3.000000000000886 0 -1440 5.249999999998948 2.875000000001602 0 -1441 5.249999999999151 2.750000000002319 0 -1442 5.249999999999355 2.625000000003037 0 -1443 5.249999999999558 2.500000000003754 0 -1444 5.249999999999762 2.375000000004472 0 -1445 5.249999999999963 2.25000000000519 0 -1446 5.250000000000169 2.125000000005906 0 -1447 5.250000000000371 2.000000000006554 0 -1448 5.250000000000574 1.875000000006215 0 -1449 5.250000000000778 1.750000000005805 0 -1450 5.250000000000981 1.625000000005396 0 -1451 5.250000000001183 1.500000000004986 0 -1452 5.250000000001387 1.375000000004576 0 -1453 5.25000000000159 1.250000000004167 0 -1454 5.250000000001792 1.125000000003757 0 -1455 5.250000000001997 1.000000000003347 0 -1456 5.250000000002199 0.8750000000029379 0 -1457 5.250000000002403 0.750000000002528 0 -1458 5.250000000002606 0.6250000000021185 0 -1459 5.250000000002808 0.5000000000017075 0 -1460 5.250000000003011 0.3750000000012776 0 -1461 5.250000000003215 0.2500000000008469 0 -1462 5.250000000003418 0.1250000000004257 0 -1463 5.374999999997796 3.874999999999499 0 -1464 5.374999999997988 3.749999999998999 0 -1465 5.374999999998182 3.624999999998498 0 -1466 5.374999999998376 3.499999999998075 0 -1467 5.37499999999857 3.37499999999874 0 -1468 5.374999999998765 3.249999999999483 0 -1469 5.374999999998957 3.125000000000226 0 -1470 5.374999999999151 3.000000000000969 0 -1471 5.374999999999345 2.875000000001712 0 -1472 5.37499999999954 2.750000000002453 0 -1473 5.374999999999731 2.625000000003196 0 -1474 5.374999999999925 2.500000000003938 0 -1475 5.375000000000119 2.375000000004681 0 -1476 5.375000000000312 2.250000000005423 0 -1477 5.375000000000505 2.125000000006166 0 -1478 5.3750000000007 2.000000000006835 0 -1479 5.375000000000894 1.87500000000648 0 -1480 5.375000000001087 1.750000000006052 0 -1481 5.375000000001281 1.625000000005624 0 -1482 5.375000000001473 1.500000000005195 0 -1483 5.375000000001667 1.375000000004767 0 -1484 5.375000000001861 1.25000000000434 0 -1485 5.375000000002055 1.125000000003911 0 -1486 5.375000000002249 1.000000000003483 0 -1487 5.375000000002442 0.8750000000030553 0 -1488 5.375000000002637 0.7500000000026268 0 -1489 5.375000000002829 0.6250000000021991 0 -1490 5.375000000003024 0.5000000000017697 0 -1491 5.375000000003217 0.3750000000013249 0 -1492 5.375000000003411 0.2500000000008792 0 -1493 5.375000000003603 0.1250000000004414 0 -1494 5.499999999998271 3.874999999999496 0 -1495 5.499999999998462 3.749999999998991 0 -1496 5.499999999998651 3.624999999998487 0 -1497 5.499999999998839 3.499999999998061 0 -1498 5.499999999999029 3.374999999998749 0 -1499 5.49999999999922 3.249999999999517 0 -1500 5.499999999999407 3.125000000000284 0 -1501 5.499999999999599 3.000000000001052 0 -1502 5.499999999999786 2.87500000000182 0 -1503 5.499999999999976 2.750000000002587 0 -1504 5.500000000000165 2.625000000003354 0 -1505 5.500000000000356 2.500000000004122 0 -1506 5.500000000000544 2.375000000004889 0 -1507 5.500000000000736 2.250000000005657 0 -1508 5.500000000000925 2.125000000006423 0 -1509 5.500000000001115 2.000000000007115 0 -1510 5.500000000001305 1.875000000006744 0 -1511 5.500000000001493 1.750000000006298 0 -1512 5.500000000001685 1.625000000005851 0 -1513 5.500000000001873 1.500000000005405 0 -1514 5.500000000002063 1.375000000004958 0 -1515 5.500000000002252 1.250000000004512 0 -1516 5.500000000002442 1.125000000004066 0 -1517 5.500000000002632 1.000000000003619 0 -1518 5.500000000002821 0.8750000000031726 0 -1519 5.50000000000301 0.7500000000027258 0 -1520 5.500000000003202 0.6250000000022795 0 -1521 5.500000000003389 0.5000000000018319 0 -1522 5.50000000000358 0.3750000000013721 0 -1523 5.50000000000377 0.2500000000009115 0 -1524 5.500000000003959 0.1250000000004572 0 -1525 5.62499999999874 3.874999999999492 0 -1526 5.62499999999892 3.749999999998983 0 -1527 5.6249999999991 3.624999999998474 0 -1528 5.624999999999279 3.499999999998046 0 -1529 5.62499999999946 3.374999999998758 0 -1530 5.624999999999642 3.249999999999551 0 -1531 5.624999999999821 3.125000000000343 0 -1532 5.625000000000001 3.000000000001137 0 -1533 5.625000000000183 2.875000000001928 0 -1534 5.625000000000362 2.75000000000272 0 -1535 5.625000000000544 2.625000000003513 0 -1536 5.625000000000721 2.500000000004305 0 -1537 5.625000000000902 2.375000000005098 0 -1538 5.625000000001082 2.25000000000589 0 -1539 5.625000000001261 2.125000000006682 0 -1540 5.625000000001442 2.000000000007396 0 -1541 5.625000000001624 1.875000000007009 0 -1542 5.625000000001801 1.750000000006545 0 -1543 5.625000000001983 1.62500000000608 0 -1544 5.625000000002162 1.500000000005615 0 -1545 5.625000000002344 1.375000000005149 0 -1546 5.625000000002522 1.250000000004685 0 -1547 5.625000000002704 1.12500000000422 0 -1548 5.625000000002885 1.000000000003754 0 -1549 5.625000000003063 0.8750000000032898 0 -1550 5.625000000003244 0.7500000000028249 0 -1551 5.625000000003425 0.6250000000023599 0 -1552 5.625000000003603 0.5000000000018943 0 -1553 5.625000000003784 0.3750000000014193 0 -1554 5.625000000003965 0.2500000000009437 0 -1555 5.625000000004145 0.1250000000004731 0 -1556 5.749999999999165 3.874999999999487 0 -1557 5.749999999999289 3.749999999998975 0 -1558 5.749999999999412 3.624999999998462 0 -1559 5.749999999999536 3.499999999998033 0 -1560 5.749999999999661 3.374999999998767 0 -1561 5.749999999999783 3.249999999999585 0 -1562 5.749999999999908 3.125000000000403 0 -1563 5.75000000000003 3.00000000000122 0 -1564 5.750000000000155 2.875000000002037 0 -1565 5.750000000000276 2.750000000002855 0 -1566 5.750000000000401 2.625000000003672 0 -1567 5.750000000000526 2.500000000004489 0 -1568 5.750000000000648 2.375000000005306 0 -1569 5.750000000000771 2.250000000006123 0 -1570 5.750000000000897 2.12500000000694 0 -1571 5.75000000000102 2.000000000007677 0 -1572 5.750000000001144 1.875000000007274 0 -1573 5.750000000001267 1.750000000006791 0 -1574 5.750000000001391 1.625000000006308 0 -1575 5.750000000001515 1.500000000005824 0 -1576 5.750000000001638 1.375000000005341 0 -1577 5.750000000001762 1.250000000004857 0 -1578 5.750000000001886 1.125000000004374 0 -1579 5.750000000002011 1.00000000000389 0 -1580 5.750000000002133 0.8750000000034073 0 -1581 5.750000000002257 0.7500000000029237 0 -1582 5.75000000000238 0.6250000000024407 0 -1583 5.750000000002505 0.5000000000019564 0 -1584 5.750000000002629 0.3750000000014666 0 -1585 5.750000000002751 0.2500000000009759 0 -1586 5.750000000002876 0.1250000000004888 0 -1587 5.874999999999583 3.874999999999483 0 -1588 5.874999999999643 3.749999999998967 0 -1589 5.874999999999705 3.624999999998451 0 -1590 5.874999999999767 3.499999999998019 0 -1591 5.874999999999829 3.374999999998776 0 -1592 5.874999999999894 3.249999999999619 0 -1593 5.874999999999955 3.125000000000462 0 -1594 5.875000000000016 3.000000000001305 0 -1595 5.875000000000076 2.875000000002147 0 -1596 5.87500000000014 2.750000000002989 0 -1597 5.875000000000201 2.62500000000383 0 -1598 5.875000000000263 2.500000000004672 0 -1599 5.875000000000325 2.375000000005515 0 -1600 5.875000000000387 2.250000000006358 0 -1601 5.875000000000448 2.125000000007199 0 -1602 5.87500000000051 2.000000000007957 0 -1603 5.875000000000572 1.875000000007539 0 -1604 5.875000000000632 1.750000000007037 0 -1605 5.875000000000695 1.625000000006535 0 -1606 5.875000000000757 1.500000000006034 0 -1607 5.875000000000819 1.375000000005532 0 -1608 5.875000000000881 1.25000000000503 0 -1609 5.875000000000944 1.125000000004528 0 -1610 5.875000000001005 1.000000000004026 0 -1611 5.875000000001066 0.8750000000035247 0 -1612 5.87500000000113 0.7500000000030225 0 -1613 5.87500000000119 0.6250000000025211 0 -1614 5.875000000001254 0.5000000000020188 0 -1615 5.875000000001315 0.3750000000015138 0 -1616 5.875000000001377 0.2500000000010083 0 -1617 5.875000000001439 0.1250000000005047 0 -$EndNodes -$Elements -1700 -1 15 2 0 1 1 -2 15 2 0 2 2 -3 15 2 0 3 3 -4 15 2 0 4 4 -5 1 2 0 1 4 5 -6 1 2 0 1 5 6 -7 1 2 0 1 6 7 -8 1 2 0 1 7 8 -9 1 2 0 1 8 9 -10 1 2 0 1 9 10 -11 1 2 0 1 10 11 -12 1 2 0 1 11 12 -13 1 2 0 1 12 13 -14 1 2 0 1 13 14 -15 1 2 0 1 14 15 -16 1 2 0 1 15 16 -17 1 2 0 1 16 17 -18 1 2 0 1 17 18 -19 1 2 0 1 18 19 -20 1 2 0 1 19 20 -21 1 2 0 1 20 21 -22 1 2 0 1 21 22 -23 1 2 0 1 22 23 -24 1 2 0 1 23 24 -25 1 2 0 1 24 25 -26 1 2 0 1 25 26 -27 1 2 0 1 26 27 -28 1 2 0 1 27 28 -29 1 2 0 1 28 29 -30 1 2 0 1 29 30 -31 1 2 0 1 30 31 -32 1 2 0 1 31 32 -33 1 2 0 1 32 33 -34 1 2 0 1 33 34 -35 1 2 0 1 34 35 -36 1 2 0 1 35 36 -37 1 2 0 1 36 37 -38 1 2 0 1 37 38 -39 1 2 0 1 38 39 -40 1 2 0 1 39 40 -41 1 2 0 1 40 41 -42 1 2 0 1 41 42 -43 1 2 0 1 42 43 -44 1 2 0 1 43 44 -45 1 2 0 1 44 45 -46 1 2 0 1 45 46 -47 1 2 0 1 46 47 -48 1 2 0 1 47 48 -49 1 2 0 1 48 49 -50 1 2 0 1 49 50 -51 1 2 0 1 50 51 -52 1 2 0 1 51 3 -53 1 2 0 2 3 52 -54 1 2 0 2 52 53 -55 1 2 0 2 53 54 -56 1 2 0 2 54 55 -57 1 2 0 2 55 56 -58 1 2 0 2 56 57 -59 1 2 0 2 57 58 -60 1 2 0 2 58 59 -61 1 2 0 2 59 60 -62 1 2 0 2 60 61 -63 1 2 0 2 61 62 -64 1 2 0 2 62 63 -65 1 2 0 2 63 64 -66 1 2 0 2 64 65 -67 1 2 0 2 65 66 -68 1 2 0 2 66 67 -69 1 2 0 2 67 68 -70 1 2 0 2 68 69 -71 1 2 0 2 69 70 -72 1 2 0 2 70 71 -73 1 2 0 2 71 72 -74 1 2 0 2 72 73 -75 1 2 0 2 73 74 -76 1 2 0 2 74 75 -77 1 2 0 2 75 76 -78 1 2 0 2 76 77 -79 1 2 0 2 77 78 -80 1 2 0 2 78 79 -81 1 2 0 2 79 80 -82 1 2 0 2 80 81 -83 1 2 0 2 81 82 -84 1 2 0 2 82 2 -85 1 2 0 3 2 83 -86 1 2 0 3 83 84 -87 1 2 0 3 84 85 -88 1 2 0 3 85 86 -89 1 2 0 3 86 87 -90 1 2 0 3 87 88 -91 1 2 0 3 88 89 -92 1 2 0 3 89 90 -93 1 2 0 3 90 91 -94 1 2 0 3 91 92 -95 1 2 0 3 92 93 -96 1 2 0 3 93 94 -97 1 2 0 3 94 95 -98 1 2 0 3 95 96 -99 1 2 0 3 96 97 -100 1 2 0 3 97 98 -101 1 2 0 3 98 99 -102 1 2 0 3 99 100 -103 1 2 0 3 100 101 -104 1 2 0 3 101 102 -105 1 2 0 3 102 103 -106 1 2 0 3 103 104 -107 1 2 0 3 104 105 -108 1 2 0 3 105 106 -109 1 2 0 3 106 107 -110 1 2 0 3 107 108 -111 1 2 0 3 108 109 -112 1 2 0 3 109 110 -113 1 2 0 3 110 111 -114 1 2 0 3 111 112 -115 1 2 0 3 112 113 -116 1 2 0 3 113 114 -117 1 2 0 3 114 115 -118 1 2 0 3 115 116 -119 1 2 0 3 116 117 -120 1 2 0 3 117 118 -121 1 2 0 3 118 119 -122 1 2 0 3 119 120 -123 1 2 0 3 120 121 -124 1 2 0 3 121 122 -125 1 2 0 3 122 123 -126 1 2 0 3 123 124 -127 1 2 0 3 124 125 -128 1 2 0 3 125 126 -129 1 2 0 3 126 127 -130 1 2 0 3 127 128 -131 1 2 0 3 128 129 -132 1 2 0 3 129 1 -133 1 2 0 4 1 130 -134 1 2 0 4 130 131 -135 1 2 0 4 131 132 -136 1 2 0 4 132 133 -137 1 2 0 4 133 134 -138 1 2 0 4 134 135 -139 1 2 0 4 135 136 -140 1 2 0 4 136 137 -141 1 2 0 4 137 138 -142 1 2 0 4 138 139 -143 1 2 0 4 139 140 -144 1 2 0 4 140 141 -145 1 2 0 4 141 142 -146 1 2 0 4 142 143 -147 1 2 0 4 143 144 -148 1 2 0 4 144 145 -149 1 2 0 4 145 146 -150 1 2 0 4 146 147 -151 1 2 0 4 147 148 -152 1 2 0 4 148 149 -153 1 2 0 4 149 150 -154 1 2 0 4 150 151 -155 1 2 0 4 151 152 -156 1 2 0 4 152 153 -157 1 2 0 4 153 154 -158 1 2 0 4 154 155 -159 1 2 0 4 155 156 -160 1 2 0 4 156 157 -161 1 2 0 4 157 158 -162 1 2 0 4 158 159 -163 1 2 0 4 159 160 -164 1 2 0 4 160 4 -165 3 2 0 7 4 5 161 160 -166 3 2 0 7 160 161 162 159 -167 3 2 0 7 159 162 163 158 -168 3 2 0 7 158 163 164 157 -169 3 2 0 7 157 164 165 156 -170 3 2 0 7 156 165 166 155 -171 3 2 0 7 155 166 167 154 -172 3 2 0 7 154 167 168 153 -173 3 2 0 7 153 168 169 152 -174 3 2 0 7 152 169 170 151 -175 3 2 0 7 151 170 171 150 -176 3 2 0 7 150 171 172 149 -177 3 2 0 7 149 172 173 148 -178 3 2 0 7 148 173 174 147 -179 3 2 0 7 147 174 175 146 -180 3 2 0 7 146 175 176 145 -181 3 2 0 7 145 176 177 144 -182 3 2 0 7 144 177 178 143 -183 3 2 0 7 143 178 179 142 -184 3 2 0 7 142 179 180 141 -185 3 2 0 7 141 180 181 140 -186 3 2 0 7 140 181 182 139 -187 3 2 0 7 139 182 183 138 -188 3 2 0 7 138 183 184 137 -189 3 2 0 7 137 184 185 136 -190 3 2 0 7 136 185 186 135 -191 3 2 0 7 135 186 187 134 -192 3 2 0 7 134 187 188 133 -193 3 2 0 7 133 188 189 132 -194 3 2 0 7 132 189 190 131 -195 3 2 0 7 131 190 191 130 -196 3 2 0 7 130 191 129 1 -197 3 2 0 7 5 6 192 161 -198 3 2 0 7 161 192 193 162 -199 3 2 0 7 162 193 194 163 -200 3 2 0 7 163 194 195 164 -201 3 2 0 7 164 195 196 165 -202 3 2 0 7 165 196 197 166 -203 3 2 0 7 166 197 198 167 -204 3 2 0 7 167 198 199 168 -205 3 2 0 7 168 199 200 169 -206 3 2 0 7 169 200 201 170 -207 3 2 0 7 170 201 202 171 -208 3 2 0 7 171 202 203 172 -209 3 2 0 7 172 203 204 173 -210 3 2 0 7 173 204 205 174 -211 3 2 0 7 174 205 206 175 -212 3 2 0 7 175 206 207 176 -213 3 2 0 7 176 207 208 177 -214 3 2 0 7 177 208 209 178 -215 3 2 0 7 178 209 210 179 -216 3 2 0 7 179 210 211 180 -217 3 2 0 7 180 211 212 181 -218 3 2 0 7 181 212 213 182 -219 3 2 0 7 182 213 214 183 -220 3 2 0 7 183 214 215 184 -221 3 2 0 7 184 215 216 185 -222 3 2 0 7 185 216 217 186 -223 3 2 0 7 186 217 218 187 -224 3 2 0 7 187 218 219 188 -225 3 2 0 7 188 219 220 189 -226 3 2 0 7 189 220 221 190 -227 3 2 0 7 190 221 222 191 -228 3 2 0 7 191 222 128 129 -229 3 2 0 7 6 7 223 192 -230 3 2 0 7 192 223 224 193 -231 3 2 0 7 193 224 225 194 -232 3 2 0 7 194 225 226 195 -233 3 2 0 7 195 226 227 196 -234 3 2 0 7 196 227 228 197 -235 3 2 0 7 197 228 229 198 -236 3 2 0 7 198 229 230 199 -237 3 2 0 7 199 230 231 200 -238 3 2 0 7 200 231 232 201 -239 3 2 0 7 201 232 233 202 -240 3 2 0 7 202 233 234 203 -241 3 2 0 7 203 234 235 204 -242 3 2 0 7 204 235 236 205 -243 3 2 0 7 205 236 237 206 -244 3 2 0 7 206 237 238 207 -245 3 2 0 7 207 238 239 208 -246 3 2 0 7 208 239 240 209 -247 3 2 0 7 209 240 241 210 -248 3 2 0 7 210 241 242 211 -249 3 2 0 7 211 242 243 212 -250 3 2 0 7 212 243 244 213 -251 3 2 0 7 213 244 245 214 -252 3 2 0 7 214 245 246 215 -253 3 2 0 7 215 246 247 216 -254 3 2 0 7 216 247 248 217 -255 3 2 0 7 217 248 249 218 -256 3 2 0 7 218 249 250 219 -257 3 2 0 7 219 250 251 220 -258 3 2 0 7 220 251 252 221 -259 3 2 0 7 221 252 253 222 -260 3 2 0 7 222 253 127 128 -261 3 2 0 7 7 8 254 223 -262 3 2 0 7 223 254 255 224 -263 3 2 0 7 224 255 256 225 -264 3 2 0 7 225 256 257 226 -265 3 2 0 7 226 257 258 227 -266 3 2 0 7 227 258 259 228 -267 3 2 0 7 228 259 260 229 -268 3 2 0 7 229 260 261 230 -269 3 2 0 7 230 261 262 231 -270 3 2 0 7 231 262 263 232 -271 3 2 0 7 232 263 264 233 -272 3 2 0 7 233 264 265 234 -273 3 2 0 7 234 265 266 235 -274 3 2 0 7 235 266 267 236 -275 3 2 0 7 236 267 268 237 -276 3 2 0 7 237 268 269 238 -277 3 2 0 7 238 269 270 239 -278 3 2 0 7 239 270 271 240 -279 3 2 0 7 240 271 272 241 -280 3 2 0 7 241 272 273 242 -281 3 2 0 7 242 273 274 243 -282 3 2 0 7 243 274 275 244 -283 3 2 0 7 244 275 276 245 -284 3 2 0 7 245 276 277 246 -285 3 2 0 7 246 277 278 247 -286 3 2 0 7 247 278 279 248 -287 3 2 0 7 248 279 280 249 -288 3 2 0 7 249 280 281 250 -289 3 2 0 7 250 281 282 251 -290 3 2 0 7 251 282 283 252 -291 3 2 0 7 252 283 284 253 -292 3 2 0 7 253 284 126 127 -293 3 2 0 7 8 9 285 254 -294 3 2 0 7 254 285 286 255 -295 3 2 0 7 255 286 287 256 -296 3 2 0 7 256 287 288 257 -297 3 2 0 7 257 288 289 258 -298 3 2 0 7 258 289 290 259 -299 3 2 0 7 259 290 291 260 -300 3 2 0 7 260 291 292 261 -301 3 2 0 7 261 292 293 262 -302 3 2 0 7 262 293 294 263 -303 3 2 0 7 263 294 295 264 -304 3 2 0 7 264 295 296 265 -305 3 2 0 7 265 296 297 266 -306 3 2 0 7 266 297 298 267 -307 3 2 0 7 267 298 299 268 -308 3 2 0 7 268 299 300 269 -309 3 2 0 7 269 300 301 270 -310 3 2 0 7 270 301 302 271 -311 3 2 0 7 271 302 303 272 -312 3 2 0 7 272 303 304 273 -313 3 2 0 7 273 304 305 274 -314 3 2 0 7 274 305 306 275 -315 3 2 0 7 275 306 307 276 -316 3 2 0 7 276 307 308 277 -317 3 2 0 7 277 308 309 278 -318 3 2 0 7 278 309 310 279 -319 3 2 0 7 279 310 311 280 -320 3 2 0 7 280 311 312 281 -321 3 2 0 7 281 312 313 282 -322 3 2 0 7 282 313 314 283 -323 3 2 0 7 283 314 315 284 -324 3 2 0 7 284 315 125 126 -325 3 2 0 7 9 10 316 285 -326 3 2 0 7 285 316 317 286 -327 3 2 0 7 286 317 318 287 -328 3 2 0 7 287 318 319 288 -329 3 2 0 7 288 319 320 289 -330 3 2 0 7 289 320 321 290 -331 3 2 0 7 290 321 322 291 -332 3 2 0 7 291 322 323 292 -333 3 2 0 7 292 323 324 293 -334 3 2 0 7 293 324 325 294 -335 3 2 0 7 294 325 326 295 -336 3 2 0 7 295 326 327 296 -337 3 2 0 7 296 327 328 297 -338 3 2 0 7 297 328 329 298 -339 3 2 0 7 298 329 330 299 -340 3 2 0 7 299 330 331 300 -341 3 2 0 7 300 331 332 301 -342 3 2 0 7 301 332 333 302 -343 3 2 0 7 302 333 334 303 -344 3 2 0 7 303 334 335 304 -345 3 2 0 7 304 335 336 305 -346 3 2 0 7 305 336 337 306 -347 3 2 0 7 306 337 338 307 -348 3 2 0 7 307 338 339 308 -349 3 2 0 7 308 339 340 309 -350 3 2 0 7 309 340 341 310 -351 3 2 0 7 310 341 342 311 -352 3 2 0 7 311 342 343 312 -353 3 2 0 7 312 343 344 313 -354 3 2 0 7 313 344 345 314 -355 3 2 0 7 314 345 346 315 -356 3 2 0 7 315 346 124 125 -357 3 2 0 7 10 11 347 316 -358 3 2 0 7 316 347 348 317 -359 3 2 0 7 317 348 349 318 -360 3 2 0 7 318 349 350 319 -361 3 2 0 7 319 350 351 320 -362 3 2 0 7 320 351 352 321 -363 3 2 0 7 321 352 353 322 -364 3 2 0 7 322 353 354 323 -365 3 2 0 7 323 354 355 324 -366 3 2 0 7 324 355 356 325 -367 3 2 0 7 325 356 357 326 -368 3 2 0 7 326 357 358 327 -369 3 2 0 7 327 358 359 328 -370 3 2 0 7 328 359 360 329 -371 3 2 0 7 329 360 361 330 -372 3 2 0 7 330 361 362 331 -373 3 2 0 7 331 362 363 332 -374 3 2 0 7 332 363 364 333 -375 3 2 0 7 333 364 365 334 -376 3 2 0 7 334 365 366 335 -377 3 2 0 7 335 366 367 336 -378 3 2 0 7 336 367 368 337 -379 3 2 0 7 337 368 369 338 -380 3 2 0 7 338 369 370 339 -381 3 2 0 7 339 370 371 340 -382 3 2 0 7 340 371 372 341 -383 3 2 0 7 341 372 373 342 -384 3 2 0 7 342 373 374 343 -385 3 2 0 7 343 374 375 344 -386 3 2 0 7 344 375 376 345 -387 3 2 0 7 345 376 377 346 -388 3 2 0 7 346 377 123 124 -389 3 2 0 7 11 12 378 347 -390 3 2 0 7 347 378 379 348 -391 3 2 0 7 348 379 380 349 -392 3 2 0 7 349 380 381 350 -393 3 2 0 7 350 381 382 351 -394 3 2 0 7 351 382 383 352 -395 3 2 0 7 352 383 384 353 -396 3 2 0 7 353 384 385 354 -397 3 2 0 7 354 385 386 355 -398 3 2 0 7 355 386 387 356 -399 3 2 0 7 356 387 388 357 -400 3 2 0 7 357 388 389 358 -401 3 2 0 7 358 389 390 359 -402 3 2 0 7 359 390 391 360 -403 3 2 0 7 360 391 392 361 -404 3 2 0 7 361 392 393 362 -405 3 2 0 7 362 393 394 363 -406 3 2 0 7 363 394 395 364 -407 3 2 0 7 364 395 396 365 -408 3 2 0 7 365 396 397 366 -409 3 2 0 7 366 397 398 367 -410 3 2 0 7 367 398 399 368 -411 3 2 0 7 368 399 400 369 -412 3 2 0 7 369 400 401 370 -413 3 2 0 7 370 401 402 371 -414 3 2 0 7 371 402 403 372 -415 3 2 0 7 372 403 404 373 -416 3 2 0 7 373 404 405 374 -417 3 2 0 7 374 405 406 375 -418 3 2 0 7 375 406 407 376 -419 3 2 0 7 376 407 408 377 -420 3 2 0 7 377 408 122 123 -421 3 2 0 7 12 13 409 378 -422 3 2 0 7 378 409 410 379 -423 3 2 0 7 379 410 411 380 -424 3 2 0 7 380 411 412 381 -425 3 2 0 7 381 412 413 382 -426 3 2 0 7 382 413 414 383 -427 3 2 0 7 383 414 415 384 -428 3 2 0 7 384 415 416 385 -429 3 2 0 7 385 416 417 386 -430 3 2 0 7 386 417 418 387 -431 3 2 0 7 387 418 419 388 -432 3 2 0 7 388 419 420 389 -433 3 2 0 7 389 420 421 390 -434 3 2 0 7 390 421 422 391 -435 3 2 0 7 391 422 423 392 -436 3 2 0 7 392 423 424 393 -437 3 2 0 7 393 424 425 394 -438 3 2 0 7 394 425 426 395 -439 3 2 0 7 395 426 427 396 -440 3 2 0 7 396 427 428 397 -441 3 2 0 7 397 428 429 398 -442 3 2 0 7 398 429 430 399 -443 3 2 0 7 399 430 431 400 -444 3 2 0 7 400 431 432 401 -445 3 2 0 7 401 432 433 402 -446 3 2 0 7 402 433 434 403 -447 3 2 0 7 403 434 435 404 -448 3 2 0 7 404 435 436 405 -449 3 2 0 7 405 436 437 406 -450 3 2 0 7 406 437 438 407 -451 3 2 0 7 407 438 439 408 -452 3 2 0 7 408 439 121 122 -453 3 2 0 7 13 14 440 409 -454 3 2 0 7 409 440 441 410 -455 3 2 0 7 410 441 442 411 -456 3 2 0 7 411 442 443 412 -457 3 2 0 7 412 443 444 413 -458 3 2 0 7 413 444 445 414 -459 3 2 0 7 414 445 446 415 -460 3 2 0 7 415 446 447 416 -461 3 2 0 7 416 447 448 417 -462 3 2 0 7 417 448 449 418 -463 3 2 0 7 418 449 450 419 -464 3 2 0 7 419 450 451 420 -465 3 2 0 7 420 451 452 421 -466 3 2 0 7 421 452 453 422 -467 3 2 0 7 422 453 454 423 -468 3 2 0 7 423 454 455 424 -469 3 2 0 7 424 455 456 425 -470 3 2 0 7 425 456 457 426 -471 3 2 0 7 426 457 458 427 -472 3 2 0 7 427 458 459 428 -473 3 2 0 7 428 459 460 429 -474 3 2 0 7 429 460 461 430 -475 3 2 0 7 430 461 462 431 -476 3 2 0 7 431 462 463 432 -477 3 2 0 7 432 463 464 433 -478 3 2 0 7 433 464 465 434 -479 3 2 0 7 434 465 466 435 -480 3 2 0 7 435 466 467 436 -481 3 2 0 7 436 467 468 437 -482 3 2 0 7 437 468 469 438 -483 3 2 0 7 438 469 470 439 -484 3 2 0 7 439 470 120 121 -485 3 2 0 7 14 15 471 440 -486 3 2 0 7 440 471 472 441 -487 3 2 0 7 441 472 473 442 -488 3 2 0 7 442 473 474 443 -489 3 2 0 7 443 474 475 444 -490 3 2 0 7 444 475 476 445 -491 3 2 0 7 445 476 477 446 -492 3 2 0 7 446 477 478 447 -493 3 2 0 7 447 478 479 448 -494 3 2 0 7 448 479 480 449 -495 3 2 0 7 449 480 481 450 -496 3 2 0 7 450 481 482 451 -497 3 2 0 7 451 482 483 452 -498 3 2 0 7 452 483 484 453 -499 3 2 0 7 453 484 485 454 -500 3 2 0 7 454 485 486 455 -501 3 2 0 7 455 486 487 456 -502 3 2 0 7 456 487 488 457 -503 3 2 0 7 457 488 489 458 -504 3 2 0 7 458 489 490 459 -505 3 2 0 7 459 490 491 460 -506 3 2 0 7 460 491 492 461 -507 3 2 0 7 461 492 493 462 -508 3 2 0 7 462 493 494 463 -509 3 2 0 7 463 494 495 464 -510 3 2 0 7 464 495 496 465 -511 3 2 0 7 465 496 497 466 -512 3 2 0 7 466 497 498 467 -513 3 2 0 7 467 498 499 468 -514 3 2 0 7 468 499 500 469 -515 3 2 0 7 469 500 501 470 -516 3 2 0 7 470 501 119 120 -517 3 2 0 7 15 16 502 471 -518 3 2 0 7 471 502 503 472 -519 3 2 0 7 472 503 504 473 -520 3 2 0 7 473 504 505 474 -521 3 2 0 7 474 505 506 475 -522 3 2 0 7 475 506 507 476 -523 3 2 0 7 476 507 508 477 -524 3 2 0 7 477 508 509 478 -525 3 2 0 7 478 509 510 479 -526 3 2 0 7 479 510 511 480 -527 3 2 0 7 480 511 512 481 -528 3 2 0 7 481 512 513 482 -529 3 2 0 7 482 513 514 483 -530 3 2 0 7 483 514 515 484 -531 3 2 0 7 484 515 516 485 -532 3 2 0 7 485 516 517 486 -533 3 2 0 7 486 517 518 487 -534 3 2 0 7 487 518 519 488 -535 3 2 0 7 488 519 520 489 -536 3 2 0 7 489 520 521 490 -537 3 2 0 7 490 521 522 491 -538 3 2 0 7 491 522 523 492 -539 3 2 0 7 492 523 524 493 -540 3 2 0 7 493 524 525 494 -541 3 2 0 7 494 525 526 495 -542 3 2 0 7 495 526 527 496 -543 3 2 0 7 496 527 528 497 -544 3 2 0 7 497 528 529 498 -545 3 2 0 7 498 529 530 499 -546 3 2 0 7 499 530 531 500 -547 3 2 0 7 500 531 532 501 -548 3 2 0 7 501 532 118 119 -549 3 2 0 7 16 17 533 502 -550 3 2 0 7 502 533 534 503 -551 3 2 0 7 503 534 535 504 -552 3 2 0 7 504 535 536 505 -553 3 2 0 7 505 536 537 506 -554 3 2 0 7 506 537 538 507 -555 3 2 0 7 507 538 539 508 -556 3 2 0 7 508 539 540 509 -557 3 2 0 7 509 540 541 510 -558 3 2 0 7 510 541 542 511 -559 3 2 0 7 511 542 543 512 -560 3 2 0 7 512 543 544 513 -561 3 2 0 7 513 544 545 514 -562 3 2 0 7 514 545 546 515 -563 3 2 0 7 515 546 547 516 -564 3 2 0 7 516 547 548 517 -565 3 2 0 7 517 548 549 518 -566 3 2 0 7 518 549 550 519 -567 3 2 0 7 519 550 551 520 -568 3 2 0 7 520 551 552 521 -569 3 2 0 7 521 552 553 522 -570 3 2 0 7 522 553 554 523 -571 3 2 0 7 523 554 555 524 -572 3 2 0 7 524 555 556 525 -573 3 2 0 7 525 556 557 526 -574 3 2 0 7 526 557 558 527 -575 3 2 0 7 527 558 559 528 -576 3 2 0 7 528 559 560 529 -577 3 2 0 7 529 560 561 530 -578 3 2 0 7 530 561 562 531 -579 3 2 0 7 531 562 563 532 -580 3 2 0 7 532 563 117 118 -581 3 2 0 7 17 18 564 533 -582 3 2 0 7 533 564 565 534 -583 3 2 0 7 534 565 566 535 -584 3 2 0 7 535 566 567 536 -585 3 2 0 7 536 567 568 537 -586 3 2 0 7 537 568 569 538 -587 3 2 0 7 538 569 570 539 -588 3 2 0 7 539 570 571 540 -589 3 2 0 7 540 571 572 541 -590 3 2 0 7 541 572 573 542 -591 3 2 0 7 542 573 574 543 -592 3 2 0 7 543 574 575 544 -593 3 2 0 7 544 575 576 545 -594 3 2 0 7 545 576 577 546 -595 3 2 0 7 546 577 578 547 -596 3 2 0 7 547 578 579 548 -597 3 2 0 7 548 579 580 549 -598 3 2 0 7 549 580 581 550 -599 3 2 0 7 550 581 582 551 -600 3 2 0 7 551 582 583 552 -601 3 2 0 7 552 583 584 553 -602 3 2 0 7 553 584 585 554 -603 3 2 0 7 554 585 586 555 -604 3 2 0 7 555 586 587 556 -605 3 2 0 7 556 587 588 557 -606 3 2 0 7 557 588 589 558 -607 3 2 0 7 558 589 590 559 -608 3 2 0 7 559 590 591 560 -609 3 2 0 7 560 591 592 561 -610 3 2 0 7 561 592 593 562 -611 3 2 0 7 562 593 594 563 -612 3 2 0 7 563 594 116 117 -613 3 2 0 7 18 19 595 564 -614 3 2 0 7 564 595 596 565 -615 3 2 0 7 565 596 597 566 -616 3 2 0 7 566 597 598 567 -617 3 2 0 7 567 598 599 568 -618 3 2 0 7 568 599 600 569 -619 3 2 0 7 569 600 601 570 -620 3 2 0 7 570 601 602 571 -621 3 2 0 7 571 602 603 572 -622 3 2 0 7 572 603 604 573 -623 3 2 0 7 573 604 605 574 -624 3 2 0 7 574 605 606 575 -625 3 2 0 7 575 606 607 576 -626 3 2 0 7 576 607 608 577 -627 3 2 0 7 577 608 609 578 -628 3 2 0 7 578 609 610 579 -629 3 2 0 7 579 610 611 580 -630 3 2 0 7 580 611 612 581 -631 3 2 0 7 581 612 613 582 -632 3 2 0 7 582 613 614 583 -633 3 2 0 7 583 614 615 584 -634 3 2 0 7 584 615 616 585 -635 3 2 0 7 585 616 617 586 -636 3 2 0 7 586 617 618 587 -637 3 2 0 7 587 618 619 588 -638 3 2 0 7 588 619 620 589 -639 3 2 0 7 589 620 621 590 -640 3 2 0 7 590 621 622 591 -641 3 2 0 7 591 622 623 592 -642 3 2 0 7 592 623 624 593 -643 3 2 0 7 593 624 625 594 -644 3 2 0 7 594 625 115 116 -645 3 2 0 7 19 20 626 595 -646 3 2 0 7 595 626 627 596 -647 3 2 0 7 596 627 628 597 -648 3 2 0 7 597 628 629 598 -649 3 2 0 7 598 629 630 599 -650 3 2 0 7 599 630 631 600 -651 3 2 0 7 600 631 632 601 -652 3 2 0 7 601 632 633 602 -653 3 2 0 7 602 633 634 603 -654 3 2 0 7 603 634 635 604 -655 3 2 0 7 604 635 636 605 -656 3 2 0 7 605 636 637 606 -657 3 2 0 7 606 637 638 607 -658 3 2 0 7 607 638 639 608 -659 3 2 0 7 608 639 640 609 -660 3 2 0 7 609 640 641 610 -661 3 2 0 7 610 641 642 611 -662 3 2 0 7 611 642 643 612 -663 3 2 0 7 612 643 644 613 -664 3 2 0 7 613 644 645 614 -665 3 2 0 7 614 645 646 615 -666 3 2 0 7 615 646 647 616 -667 3 2 0 7 616 647 648 617 -668 3 2 0 7 617 648 649 618 -669 3 2 0 7 618 649 650 619 -670 3 2 0 7 619 650 651 620 -671 3 2 0 7 620 651 652 621 -672 3 2 0 7 621 652 653 622 -673 3 2 0 7 622 653 654 623 -674 3 2 0 7 623 654 655 624 -675 3 2 0 7 624 655 656 625 -676 3 2 0 7 625 656 114 115 -677 3 2 0 7 20 21 657 626 -678 3 2 0 7 626 657 658 627 -679 3 2 0 7 627 658 659 628 -680 3 2 0 7 628 659 660 629 -681 3 2 0 7 629 660 661 630 -682 3 2 0 7 630 661 662 631 -683 3 2 0 7 631 662 663 632 -684 3 2 0 7 632 663 664 633 -685 3 2 0 7 633 664 665 634 -686 3 2 0 7 634 665 666 635 -687 3 2 0 7 635 666 667 636 -688 3 2 0 7 636 667 668 637 -689 3 2 0 7 637 668 669 638 -690 3 2 0 7 638 669 670 639 -691 3 2 0 7 639 670 671 640 -692 3 2 0 7 640 671 672 641 -693 3 2 0 7 641 672 673 642 -694 3 2 0 7 642 673 674 643 -695 3 2 0 7 643 674 675 644 -696 3 2 0 7 644 675 676 645 -697 3 2 0 7 645 676 677 646 -698 3 2 0 7 646 677 678 647 -699 3 2 0 7 647 678 679 648 -700 3 2 0 7 648 679 680 649 -701 3 2 0 7 649 680 681 650 -702 3 2 0 7 650 681 682 651 -703 3 2 0 7 651 682 683 652 -704 3 2 0 7 652 683 684 653 -705 3 2 0 7 653 684 685 654 -706 3 2 0 7 654 685 686 655 -707 3 2 0 7 655 686 687 656 -708 3 2 0 7 656 687 113 114 -709 3 2 0 7 21 22 688 657 -710 3 2 0 7 657 688 689 658 -711 3 2 0 7 658 689 690 659 -712 3 2 0 7 659 690 691 660 -713 3 2 0 7 660 691 692 661 -714 3 2 0 7 661 692 693 662 -715 3 2 0 7 662 693 694 663 -716 3 2 0 7 663 694 695 664 -717 3 2 0 7 664 695 696 665 -718 3 2 0 7 665 696 697 666 -719 3 2 0 7 666 697 698 667 -720 3 2 0 7 667 698 699 668 -721 3 2 0 7 668 699 700 669 -722 3 2 0 7 669 700 701 670 -723 3 2 0 7 670 701 702 671 -724 3 2 0 7 671 702 703 672 -725 3 2 0 7 672 703 704 673 -726 3 2 0 7 673 704 705 674 -727 3 2 0 7 674 705 706 675 -728 3 2 0 7 675 706 707 676 -729 3 2 0 7 676 707 708 677 -730 3 2 0 7 677 708 709 678 -731 3 2 0 7 678 709 710 679 -732 3 2 0 7 679 710 711 680 -733 3 2 0 7 680 711 712 681 -734 3 2 0 7 681 712 713 682 -735 3 2 0 7 682 713 714 683 -736 3 2 0 7 683 714 715 684 -737 3 2 0 7 684 715 716 685 -738 3 2 0 7 685 716 717 686 -739 3 2 0 7 686 717 718 687 -740 3 2 0 7 687 718 112 113 -741 3 2 0 7 22 23 719 688 -742 3 2 0 7 688 719 720 689 -743 3 2 0 7 689 720 721 690 -744 3 2 0 7 690 721 722 691 -745 3 2 0 7 691 722 723 692 -746 3 2 0 7 692 723 724 693 -747 3 2 0 7 693 724 725 694 -748 3 2 0 7 694 725 726 695 -749 3 2 0 7 695 726 727 696 -750 3 2 0 7 696 727 728 697 -751 3 2 0 7 697 728 729 698 -752 3 2 0 7 698 729 730 699 -753 3 2 0 7 699 730 731 700 -754 3 2 0 7 700 731 732 701 -755 3 2 0 7 701 732 733 702 -756 3 2 0 7 702 733 734 703 -757 3 2 0 7 703 734 735 704 -758 3 2 0 7 704 735 736 705 -759 3 2 0 7 705 736 737 706 -760 3 2 0 7 706 737 738 707 -761 3 2 0 7 707 738 739 708 -762 3 2 0 7 708 739 740 709 -763 3 2 0 7 709 740 741 710 -764 3 2 0 7 710 741 742 711 -765 3 2 0 7 711 742 743 712 -766 3 2 0 7 712 743 744 713 -767 3 2 0 7 713 744 745 714 -768 3 2 0 7 714 745 746 715 -769 3 2 0 7 715 746 747 716 -770 3 2 0 7 716 747 748 717 -771 3 2 0 7 717 748 749 718 -772 3 2 0 7 718 749 111 112 -773 3 2 0 7 23 24 750 719 -774 3 2 0 7 719 750 751 720 -775 3 2 0 7 720 751 752 721 -776 3 2 0 7 721 752 753 722 -777 3 2 0 7 722 753 754 723 -778 3 2 0 7 723 754 755 724 -779 3 2 0 7 724 755 756 725 -780 3 2 0 7 725 756 757 726 -781 3 2 0 7 726 757 758 727 -782 3 2 0 7 727 758 759 728 -783 3 2 0 7 728 759 760 729 -784 3 2 0 7 729 760 761 730 -785 3 2 0 7 730 761 762 731 -786 3 2 0 7 731 762 763 732 -787 3 2 0 7 732 763 764 733 -788 3 2 0 7 733 764 765 734 -789 3 2 0 7 734 765 766 735 -790 3 2 0 7 735 766 767 736 -791 3 2 0 7 736 767 768 737 -792 3 2 0 7 737 768 769 738 -793 3 2 0 7 738 769 770 739 -794 3 2 0 7 739 770 771 740 -795 3 2 0 7 740 771 772 741 -796 3 2 0 7 741 772 773 742 -797 3 2 0 7 742 773 774 743 -798 3 2 0 7 743 774 775 744 -799 3 2 0 7 744 775 776 745 -800 3 2 0 7 745 776 777 746 -801 3 2 0 7 746 777 778 747 -802 3 2 0 7 747 778 779 748 -803 3 2 0 7 748 779 780 749 -804 3 2 0 7 749 780 110 111 -805 3 2 0 7 24 25 781 750 -806 3 2 0 7 750 781 782 751 -807 3 2 0 7 751 782 783 752 -808 3 2 0 7 752 783 784 753 -809 3 2 0 7 753 784 785 754 -810 3 2 0 7 754 785 786 755 -811 3 2 0 7 755 786 787 756 -812 3 2 0 7 756 787 788 757 -813 3 2 0 7 757 788 789 758 -814 3 2 0 7 758 789 790 759 -815 3 2 0 7 759 790 791 760 -816 3 2 0 7 760 791 792 761 -817 3 2 0 7 761 792 793 762 -818 3 2 0 7 762 793 794 763 -819 3 2 0 7 763 794 795 764 -820 3 2 0 7 764 795 796 765 -821 3 2 0 7 765 796 797 766 -822 3 2 0 7 766 797 798 767 -823 3 2 0 7 767 798 799 768 -824 3 2 0 7 768 799 800 769 -825 3 2 0 7 769 800 801 770 -826 3 2 0 7 770 801 802 771 -827 3 2 0 7 771 802 803 772 -828 3 2 0 7 772 803 804 773 -829 3 2 0 7 773 804 805 774 -830 3 2 0 7 774 805 806 775 -831 3 2 0 7 775 806 807 776 -832 3 2 0 7 776 807 808 777 -833 3 2 0 7 777 808 809 778 -834 3 2 0 7 778 809 810 779 -835 3 2 0 7 779 810 811 780 -836 3 2 0 7 780 811 109 110 -837 3 2 0 7 25 26 812 781 -838 3 2 0 7 781 812 813 782 -839 3 2 0 7 782 813 814 783 -840 3 2 0 7 783 814 815 784 -841 3 2 0 7 784 815 816 785 -842 3 2 0 7 785 816 817 786 -843 3 2 0 7 786 817 818 787 -844 3 2 0 7 787 818 819 788 -845 3 2 0 7 788 819 820 789 -846 3 2 0 7 789 820 821 790 -847 3 2 0 7 790 821 822 791 -848 3 2 0 7 791 822 823 792 -849 3 2 0 7 792 823 824 793 -850 3 2 0 7 793 824 825 794 -851 3 2 0 7 794 825 826 795 -852 3 2 0 7 795 826 827 796 -853 3 2 0 7 796 827 828 797 -854 3 2 0 7 797 828 829 798 -855 3 2 0 7 798 829 830 799 -856 3 2 0 7 799 830 831 800 -857 3 2 0 7 800 831 832 801 -858 3 2 0 7 801 832 833 802 -859 3 2 0 7 802 833 834 803 -860 3 2 0 7 803 834 835 804 -861 3 2 0 7 804 835 836 805 -862 3 2 0 7 805 836 837 806 -863 3 2 0 7 806 837 838 807 -864 3 2 0 7 807 838 839 808 -865 3 2 0 7 808 839 840 809 -866 3 2 0 7 809 840 841 810 -867 3 2 0 7 810 841 842 811 -868 3 2 0 7 811 842 108 109 -869 3 2 0 7 26 27 843 812 -870 3 2 0 7 812 843 844 813 -871 3 2 0 7 813 844 845 814 -872 3 2 0 7 814 845 846 815 -873 3 2 0 7 815 846 847 816 -874 3 2 0 7 816 847 848 817 -875 3 2 0 7 817 848 849 818 -876 3 2 0 7 818 849 850 819 -877 3 2 0 7 819 850 851 820 -878 3 2 0 7 820 851 852 821 -879 3 2 0 7 821 852 853 822 -880 3 2 0 7 822 853 854 823 -881 3 2 0 7 823 854 855 824 -882 3 2 0 7 824 855 856 825 -883 3 2 0 7 825 856 857 826 -884 3 2 0 7 826 857 858 827 -885 3 2 0 7 827 858 859 828 -886 3 2 0 7 828 859 860 829 -887 3 2 0 7 829 860 861 830 -888 3 2 0 7 830 861 862 831 -889 3 2 0 7 831 862 863 832 -890 3 2 0 7 832 863 864 833 -891 3 2 0 7 833 864 865 834 -892 3 2 0 7 834 865 866 835 -893 3 2 0 7 835 866 867 836 -894 3 2 0 7 836 867 868 837 -895 3 2 0 7 837 868 869 838 -896 3 2 0 7 838 869 870 839 -897 3 2 0 7 839 870 871 840 -898 3 2 0 7 840 871 872 841 -899 3 2 0 7 841 872 873 842 -900 3 2 0 7 842 873 107 108 -901 3 2 0 7 27 28 874 843 -902 3 2 0 7 843 874 875 844 -903 3 2 0 7 844 875 876 845 -904 3 2 0 7 845 876 877 846 -905 3 2 0 7 846 877 878 847 -906 3 2 0 7 847 878 879 848 -907 3 2 0 7 848 879 880 849 -908 3 2 0 7 849 880 881 850 -909 3 2 0 7 850 881 882 851 -910 3 2 0 7 851 882 883 852 -911 3 2 0 7 852 883 884 853 -912 3 2 0 7 853 884 885 854 -913 3 2 0 7 854 885 886 855 -914 3 2 0 7 855 886 887 856 -915 3 2 0 7 856 887 888 857 -916 3 2 0 7 857 888 889 858 -917 3 2 0 7 858 889 890 859 -918 3 2 0 7 859 890 891 860 -919 3 2 0 7 860 891 892 861 -920 3 2 0 7 861 892 893 862 -921 3 2 0 7 862 893 894 863 -922 3 2 0 7 863 894 895 864 -923 3 2 0 7 864 895 896 865 -924 3 2 0 7 865 896 897 866 -925 3 2 0 7 866 897 898 867 -926 3 2 0 7 867 898 899 868 -927 3 2 0 7 868 899 900 869 -928 3 2 0 7 869 900 901 870 -929 3 2 0 7 870 901 902 871 -930 3 2 0 7 871 902 903 872 -931 3 2 0 7 872 903 904 873 -932 3 2 0 7 873 904 106 107 -933 3 2 0 7 28 29 905 874 -934 3 2 0 7 874 905 906 875 -935 3 2 0 7 875 906 907 876 -936 3 2 0 7 876 907 908 877 -937 3 2 0 7 877 908 909 878 -938 3 2 0 7 878 909 910 879 -939 3 2 0 7 879 910 911 880 -940 3 2 0 7 880 911 912 881 -941 3 2 0 7 881 912 913 882 -942 3 2 0 7 882 913 914 883 -943 3 2 0 7 883 914 915 884 -944 3 2 0 7 884 915 916 885 -945 3 2 0 7 885 916 917 886 -946 3 2 0 7 886 917 918 887 -947 3 2 0 7 887 918 919 888 -948 3 2 0 7 888 919 920 889 -949 3 2 0 7 889 920 921 890 -950 3 2 0 7 890 921 922 891 -951 3 2 0 7 891 922 923 892 -952 3 2 0 7 892 923 924 893 -953 3 2 0 7 893 924 925 894 -954 3 2 0 7 894 925 926 895 -955 3 2 0 7 895 926 927 896 -956 3 2 0 7 896 927 928 897 -957 3 2 0 7 897 928 929 898 -958 3 2 0 7 898 929 930 899 -959 3 2 0 7 899 930 931 900 -960 3 2 0 7 900 931 932 901 -961 3 2 0 7 901 932 933 902 -962 3 2 0 7 902 933 934 903 -963 3 2 0 7 903 934 935 904 -964 3 2 0 7 904 935 105 106 -965 3 2 0 7 29 30 936 905 -966 3 2 0 7 905 936 937 906 -967 3 2 0 7 906 937 938 907 -968 3 2 0 7 907 938 939 908 -969 3 2 0 7 908 939 940 909 -970 3 2 0 7 909 940 941 910 -971 3 2 0 7 910 941 942 911 -972 3 2 0 7 911 942 943 912 -973 3 2 0 7 912 943 944 913 -974 3 2 0 7 913 944 945 914 -975 3 2 0 7 914 945 946 915 -976 3 2 0 7 915 946 947 916 -977 3 2 0 7 916 947 948 917 -978 3 2 0 7 917 948 949 918 -979 3 2 0 7 918 949 950 919 -980 3 2 0 7 919 950 951 920 -981 3 2 0 7 920 951 952 921 -982 3 2 0 7 921 952 953 922 -983 3 2 0 7 922 953 954 923 -984 3 2 0 7 923 954 955 924 -985 3 2 0 7 924 955 956 925 -986 3 2 0 7 925 956 957 926 -987 3 2 0 7 926 957 958 927 -988 3 2 0 7 927 958 959 928 -989 3 2 0 7 928 959 960 929 -990 3 2 0 7 929 960 961 930 -991 3 2 0 7 930 961 962 931 -992 3 2 0 7 931 962 963 932 -993 3 2 0 7 932 963 964 933 -994 3 2 0 7 933 964 965 934 -995 3 2 0 7 934 965 966 935 -996 3 2 0 7 935 966 104 105 -997 3 2 0 7 30 31 967 936 -998 3 2 0 7 936 967 968 937 -999 3 2 0 7 937 968 969 938 -1000 3 2 0 7 938 969 970 939 -1001 3 2 0 7 939 970 971 940 -1002 3 2 0 7 940 971 972 941 -1003 3 2 0 7 941 972 973 942 -1004 3 2 0 7 942 973 974 943 -1005 3 2 0 7 943 974 975 944 -1006 3 2 0 7 944 975 976 945 -1007 3 2 0 7 945 976 977 946 -1008 3 2 0 7 946 977 978 947 -1009 3 2 0 7 947 978 979 948 -1010 3 2 0 7 948 979 980 949 -1011 3 2 0 7 949 980 981 950 -1012 3 2 0 7 950 981 982 951 -1013 3 2 0 7 951 982 983 952 -1014 3 2 0 7 952 983 984 953 -1015 3 2 0 7 953 984 985 954 -1016 3 2 0 7 954 985 986 955 -1017 3 2 0 7 955 986 987 956 -1018 3 2 0 7 956 987 988 957 -1019 3 2 0 7 957 988 989 958 -1020 3 2 0 7 958 989 990 959 -1021 3 2 0 7 959 990 991 960 -1022 3 2 0 7 960 991 992 961 -1023 3 2 0 7 961 992 993 962 -1024 3 2 0 7 962 993 994 963 -1025 3 2 0 7 963 994 995 964 -1026 3 2 0 7 964 995 996 965 -1027 3 2 0 7 965 996 997 966 -1028 3 2 0 7 966 997 103 104 -1029 3 2 0 7 31 32 998 967 -1030 3 2 0 7 967 998 999 968 -1031 3 2 0 7 968 999 1000 969 -1032 3 2 0 7 969 1000 1001 970 -1033 3 2 0 7 970 1001 1002 971 -1034 3 2 0 7 971 1002 1003 972 -1035 3 2 0 7 972 1003 1004 973 -1036 3 2 0 7 973 1004 1005 974 -1037 3 2 0 7 974 1005 1006 975 -1038 3 2 0 7 975 1006 1007 976 -1039 3 2 0 7 976 1007 1008 977 -1040 3 2 0 7 977 1008 1009 978 -1041 3 2 0 7 978 1009 1010 979 -1042 3 2 0 7 979 1010 1011 980 -1043 3 2 0 7 980 1011 1012 981 -1044 3 2 0 7 981 1012 1013 982 -1045 3 2 0 7 982 1013 1014 983 -1046 3 2 0 7 983 1014 1015 984 -1047 3 2 0 7 984 1015 1016 985 -1048 3 2 0 7 985 1016 1017 986 -1049 3 2 0 7 986 1017 1018 987 -1050 3 2 0 7 987 1018 1019 988 -1051 3 2 0 7 988 1019 1020 989 -1052 3 2 0 7 989 1020 1021 990 -1053 3 2 0 7 990 1021 1022 991 -1054 3 2 0 7 991 1022 1023 992 -1055 3 2 0 7 992 1023 1024 993 -1056 3 2 0 7 993 1024 1025 994 -1057 3 2 0 7 994 1025 1026 995 -1058 3 2 0 7 995 1026 1027 996 -1059 3 2 0 7 996 1027 1028 997 -1060 3 2 0 7 997 1028 102 103 -1061 3 2 0 7 32 33 1029 998 -1062 3 2 0 7 998 1029 1030 999 -1063 3 2 0 7 999 1030 1031 1000 -1064 3 2 0 7 1000 1031 1032 1001 -1065 3 2 0 7 1001 1032 1033 1002 -1066 3 2 0 7 1002 1033 1034 1003 -1067 3 2 0 7 1003 1034 1035 1004 -1068 3 2 0 7 1004 1035 1036 1005 -1069 3 2 0 7 1005 1036 1037 1006 -1070 3 2 0 7 1006 1037 1038 1007 -1071 3 2 0 7 1007 1038 1039 1008 -1072 3 2 0 7 1008 1039 1040 1009 -1073 3 2 0 7 1009 1040 1041 1010 -1074 3 2 0 7 1010 1041 1042 1011 -1075 3 2 0 7 1011 1042 1043 1012 -1076 3 2 0 7 1012 1043 1044 1013 -1077 3 2 0 7 1013 1044 1045 1014 -1078 3 2 0 7 1014 1045 1046 1015 -1079 3 2 0 7 1015 1046 1047 1016 -1080 3 2 0 7 1016 1047 1048 1017 -1081 3 2 0 7 1017 1048 1049 1018 -1082 3 2 0 7 1018 1049 1050 1019 -1083 3 2 0 7 1019 1050 1051 1020 -1084 3 2 0 7 1020 1051 1052 1021 -1085 3 2 0 7 1021 1052 1053 1022 -1086 3 2 0 7 1022 1053 1054 1023 -1087 3 2 0 7 1023 1054 1055 1024 -1088 3 2 0 7 1024 1055 1056 1025 -1089 3 2 0 7 1025 1056 1057 1026 -1090 3 2 0 7 1026 1057 1058 1027 -1091 3 2 0 7 1027 1058 1059 1028 -1092 3 2 0 7 1028 1059 101 102 -1093 3 2 0 7 33 34 1060 1029 -1094 3 2 0 7 1029 1060 1061 1030 -1095 3 2 0 7 1030 1061 1062 1031 -1096 3 2 0 7 1031 1062 1063 1032 -1097 3 2 0 7 1032 1063 1064 1033 -1098 3 2 0 7 1033 1064 1065 1034 -1099 3 2 0 7 1034 1065 1066 1035 -1100 3 2 0 7 1035 1066 1067 1036 -1101 3 2 0 7 1036 1067 1068 1037 -1102 3 2 0 7 1037 1068 1069 1038 -1103 3 2 0 7 1038 1069 1070 1039 -1104 3 2 0 7 1039 1070 1071 1040 -1105 3 2 0 7 1040 1071 1072 1041 -1106 3 2 0 7 1041 1072 1073 1042 -1107 3 2 0 7 1042 1073 1074 1043 -1108 3 2 0 7 1043 1074 1075 1044 -1109 3 2 0 7 1044 1075 1076 1045 -1110 3 2 0 7 1045 1076 1077 1046 -1111 3 2 0 7 1046 1077 1078 1047 -1112 3 2 0 7 1047 1078 1079 1048 -1113 3 2 0 7 1048 1079 1080 1049 -1114 3 2 0 7 1049 1080 1081 1050 -1115 3 2 0 7 1050 1081 1082 1051 -1116 3 2 0 7 1051 1082 1083 1052 -1117 3 2 0 7 1052 1083 1084 1053 -1118 3 2 0 7 1053 1084 1085 1054 -1119 3 2 0 7 1054 1085 1086 1055 -1120 3 2 0 7 1055 1086 1087 1056 -1121 3 2 0 7 1056 1087 1088 1057 -1122 3 2 0 7 1057 1088 1089 1058 -1123 3 2 0 7 1058 1089 1090 1059 -1124 3 2 0 7 1059 1090 100 101 -1125 3 2 0 7 34 35 1091 1060 -1126 3 2 0 7 1060 1091 1092 1061 -1127 3 2 0 7 1061 1092 1093 1062 -1128 3 2 0 7 1062 1093 1094 1063 -1129 3 2 0 7 1063 1094 1095 1064 -1130 3 2 0 7 1064 1095 1096 1065 -1131 3 2 0 7 1065 1096 1097 1066 -1132 3 2 0 7 1066 1097 1098 1067 -1133 3 2 0 7 1067 1098 1099 1068 -1134 3 2 0 7 1068 1099 1100 1069 -1135 3 2 0 7 1069 1100 1101 1070 -1136 3 2 0 7 1070 1101 1102 1071 -1137 3 2 0 7 1071 1102 1103 1072 -1138 3 2 0 7 1072 1103 1104 1073 -1139 3 2 0 7 1073 1104 1105 1074 -1140 3 2 0 7 1074 1105 1106 1075 -1141 3 2 0 7 1075 1106 1107 1076 -1142 3 2 0 7 1076 1107 1108 1077 -1143 3 2 0 7 1077 1108 1109 1078 -1144 3 2 0 7 1078 1109 1110 1079 -1145 3 2 0 7 1079 1110 1111 1080 -1146 3 2 0 7 1080 1111 1112 1081 -1147 3 2 0 7 1081 1112 1113 1082 -1148 3 2 0 7 1082 1113 1114 1083 -1149 3 2 0 7 1083 1114 1115 1084 -1150 3 2 0 7 1084 1115 1116 1085 -1151 3 2 0 7 1085 1116 1117 1086 -1152 3 2 0 7 1086 1117 1118 1087 -1153 3 2 0 7 1087 1118 1119 1088 -1154 3 2 0 7 1088 1119 1120 1089 -1155 3 2 0 7 1089 1120 1121 1090 -1156 3 2 0 7 1090 1121 99 100 -1157 3 2 0 7 35 36 1122 1091 -1158 3 2 0 7 1091 1122 1123 1092 -1159 3 2 0 7 1092 1123 1124 1093 -1160 3 2 0 7 1093 1124 1125 1094 -1161 3 2 0 7 1094 1125 1126 1095 -1162 3 2 0 7 1095 1126 1127 1096 -1163 3 2 0 7 1096 1127 1128 1097 -1164 3 2 0 7 1097 1128 1129 1098 -1165 3 2 0 7 1098 1129 1130 1099 -1166 3 2 0 7 1099 1130 1131 1100 -1167 3 2 0 7 1100 1131 1132 1101 -1168 3 2 0 7 1101 1132 1133 1102 -1169 3 2 0 7 1102 1133 1134 1103 -1170 3 2 0 7 1103 1134 1135 1104 -1171 3 2 0 7 1104 1135 1136 1105 -1172 3 2 0 7 1105 1136 1137 1106 -1173 3 2 0 7 1106 1137 1138 1107 -1174 3 2 0 7 1107 1138 1139 1108 -1175 3 2 0 7 1108 1139 1140 1109 -1176 3 2 0 7 1109 1140 1141 1110 -1177 3 2 0 7 1110 1141 1142 1111 -1178 3 2 0 7 1111 1142 1143 1112 -1179 3 2 0 7 1112 1143 1144 1113 -1180 3 2 0 7 1113 1144 1145 1114 -1181 3 2 0 7 1114 1145 1146 1115 -1182 3 2 0 7 1115 1146 1147 1116 -1183 3 2 0 7 1116 1147 1148 1117 -1184 3 2 0 7 1117 1148 1149 1118 -1185 3 2 0 7 1118 1149 1150 1119 -1186 3 2 0 7 1119 1150 1151 1120 -1187 3 2 0 7 1120 1151 1152 1121 -1188 3 2 0 7 1121 1152 98 99 -1189 3 2 0 7 36 37 1153 1122 -1190 3 2 0 7 1122 1153 1154 1123 -1191 3 2 0 7 1123 1154 1155 1124 -1192 3 2 0 7 1124 1155 1156 1125 -1193 3 2 0 7 1125 1156 1157 1126 -1194 3 2 0 7 1126 1157 1158 1127 -1195 3 2 0 7 1127 1158 1159 1128 -1196 3 2 0 7 1128 1159 1160 1129 -1197 3 2 0 7 1129 1160 1161 1130 -1198 3 2 0 7 1130 1161 1162 1131 -1199 3 2 0 7 1131 1162 1163 1132 -1200 3 2 0 7 1132 1163 1164 1133 -1201 3 2 0 7 1133 1164 1165 1134 -1202 3 2 0 7 1134 1165 1166 1135 -1203 3 2 0 7 1135 1166 1167 1136 -1204 3 2 0 7 1136 1167 1168 1137 -1205 3 2 0 7 1137 1168 1169 1138 -1206 3 2 0 7 1138 1169 1170 1139 -1207 3 2 0 7 1139 1170 1171 1140 -1208 3 2 0 7 1140 1171 1172 1141 -1209 3 2 0 7 1141 1172 1173 1142 -1210 3 2 0 7 1142 1173 1174 1143 -1211 3 2 0 7 1143 1174 1175 1144 -1212 3 2 0 7 1144 1175 1176 1145 -1213 3 2 0 7 1145 1176 1177 1146 -1214 3 2 0 7 1146 1177 1178 1147 -1215 3 2 0 7 1147 1178 1179 1148 -1216 3 2 0 7 1148 1179 1180 1149 -1217 3 2 0 7 1149 1180 1181 1150 -1218 3 2 0 7 1150 1181 1182 1151 -1219 3 2 0 7 1151 1182 1183 1152 -1220 3 2 0 7 1152 1183 97 98 -1221 3 2 0 7 37 38 1184 1153 -1222 3 2 0 7 1153 1184 1185 1154 -1223 3 2 0 7 1154 1185 1186 1155 -1224 3 2 0 7 1155 1186 1187 1156 -1225 3 2 0 7 1156 1187 1188 1157 -1226 3 2 0 7 1157 1188 1189 1158 -1227 3 2 0 7 1158 1189 1190 1159 -1228 3 2 0 7 1159 1190 1191 1160 -1229 3 2 0 7 1160 1191 1192 1161 -1230 3 2 0 7 1161 1192 1193 1162 -1231 3 2 0 7 1162 1193 1194 1163 -1232 3 2 0 7 1163 1194 1195 1164 -1233 3 2 0 7 1164 1195 1196 1165 -1234 3 2 0 7 1165 1196 1197 1166 -1235 3 2 0 7 1166 1197 1198 1167 -1236 3 2 0 7 1167 1198 1199 1168 -1237 3 2 0 7 1168 1199 1200 1169 -1238 3 2 0 7 1169 1200 1201 1170 -1239 3 2 0 7 1170 1201 1202 1171 -1240 3 2 0 7 1171 1202 1203 1172 -1241 3 2 0 7 1172 1203 1204 1173 -1242 3 2 0 7 1173 1204 1205 1174 -1243 3 2 0 7 1174 1205 1206 1175 -1244 3 2 0 7 1175 1206 1207 1176 -1245 3 2 0 7 1176 1207 1208 1177 -1246 3 2 0 7 1177 1208 1209 1178 -1247 3 2 0 7 1178 1209 1210 1179 -1248 3 2 0 7 1179 1210 1211 1180 -1249 3 2 0 7 1180 1211 1212 1181 -1250 3 2 0 7 1181 1212 1213 1182 -1251 3 2 0 7 1182 1213 1214 1183 -1252 3 2 0 7 1183 1214 96 97 -1253 3 2 0 7 38 39 1215 1184 -1254 3 2 0 7 1184 1215 1216 1185 -1255 3 2 0 7 1185 1216 1217 1186 -1256 3 2 0 7 1186 1217 1218 1187 -1257 3 2 0 7 1187 1218 1219 1188 -1258 3 2 0 7 1188 1219 1220 1189 -1259 3 2 0 7 1189 1220 1221 1190 -1260 3 2 0 7 1190 1221 1222 1191 -1261 3 2 0 7 1191 1222 1223 1192 -1262 3 2 0 7 1192 1223 1224 1193 -1263 3 2 0 7 1193 1224 1225 1194 -1264 3 2 0 7 1194 1225 1226 1195 -1265 3 2 0 7 1195 1226 1227 1196 -1266 3 2 0 7 1196 1227 1228 1197 -1267 3 2 0 7 1197 1228 1229 1198 -1268 3 2 0 7 1198 1229 1230 1199 -1269 3 2 0 7 1199 1230 1231 1200 -1270 3 2 0 7 1200 1231 1232 1201 -1271 3 2 0 7 1201 1232 1233 1202 -1272 3 2 0 7 1202 1233 1234 1203 -1273 3 2 0 7 1203 1234 1235 1204 -1274 3 2 0 7 1204 1235 1236 1205 -1275 3 2 0 7 1205 1236 1237 1206 -1276 3 2 0 7 1206 1237 1238 1207 -1277 3 2 0 7 1207 1238 1239 1208 -1278 3 2 0 7 1208 1239 1240 1209 -1279 3 2 0 7 1209 1240 1241 1210 -1280 3 2 0 7 1210 1241 1242 1211 -1281 3 2 0 7 1211 1242 1243 1212 -1282 3 2 0 7 1212 1243 1244 1213 -1283 3 2 0 7 1213 1244 1245 1214 -1284 3 2 0 7 1214 1245 95 96 -1285 3 2 0 7 39 40 1246 1215 -1286 3 2 0 7 1215 1246 1247 1216 -1287 3 2 0 7 1216 1247 1248 1217 -1288 3 2 0 7 1217 1248 1249 1218 -1289 3 2 0 7 1218 1249 1250 1219 -1290 3 2 0 7 1219 1250 1251 1220 -1291 3 2 0 7 1220 1251 1252 1221 -1292 3 2 0 7 1221 1252 1253 1222 -1293 3 2 0 7 1222 1253 1254 1223 -1294 3 2 0 7 1223 1254 1255 1224 -1295 3 2 0 7 1224 1255 1256 1225 -1296 3 2 0 7 1225 1256 1257 1226 -1297 3 2 0 7 1226 1257 1258 1227 -1298 3 2 0 7 1227 1258 1259 1228 -1299 3 2 0 7 1228 1259 1260 1229 -1300 3 2 0 7 1229 1260 1261 1230 -1301 3 2 0 7 1230 1261 1262 1231 -1302 3 2 0 7 1231 1262 1263 1232 -1303 3 2 0 7 1232 1263 1264 1233 -1304 3 2 0 7 1233 1264 1265 1234 -1305 3 2 0 7 1234 1265 1266 1235 -1306 3 2 0 7 1235 1266 1267 1236 -1307 3 2 0 7 1236 1267 1268 1237 -1308 3 2 0 7 1237 1268 1269 1238 -1309 3 2 0 7 1238 1269 1270 1239 -1310 3 2 0 7 1239 1270 1271 1240 -1311 3 2 0 7 1240 1271 1272 1241 -1312 3 2 0 7 1241 1272 1273 1242 -1313 3 2 0 7 1242 1273 1274 1243 -1314 3 2 0 7 1243 1274 1275 1244 -1315 3 2 0 7 1244 1275 1276 1245 -1316 3 2 0 7 1245 1276 94 95 -1317 3 2 0 7 40 41 1277 1246 -1318 3 2 0 7 1246 1277 1278 1247 -1319 3 2 0 7 1247 1278 1279 1248 -1320 3 2 0 7 1248 1279 1280 1249 -1321 3 2 0 7 1249 1280 1281 1250 -1322 3 2 0 7 1250 1281 1282 1251 -1323 3 2 0 7 1251 1282 1283 1252 -1324 3 2 0 7 1252 1283 1284 1253 -1325 3 2 0 7 1253 1284 1285 1254 -1326 3 2 0 7 1254 1285 1286 1255 -1327 3 2 0 7 1255 1286 1287 1256 -1328 3 2 0 7 1256 1287 1288 1257 -1329 3 2 0 7 1257 1288 1289 1258 -1330 3 2 0 7 1258 1289 1290 1259 -1331 3 2 0 7 1259 1290 1291 1260 -1332 3 2 0 7 1260 1291 1292 1261 -1333 3 2 0 7 1261 1292 1293 1262 -1334 3 2 0 7 1262 1293 1294 1263 -1335 3 2 0 7 1263 1294 1295 1264 -1336 3 2 0 7 1264 1295 1296 1265 -1337 3 2 0 7 1265 1296 1297 1266 -1338 3 2 0 7 1266 1297 1298 1267 -1339 3 2 0 7 1267 1298 1299 1268 -1340 3 2 0 7 1268 1299 1300 1269 -1341 3 2 0 7 1269 1300 1301 1270 -1342 3 2 0 7 1270 1301 1302 1271 -1343 3 2 0 7 1271 1302 1303 1272 -1344 3 2 0 7 1272 1303 1304 1273 -1345 3 2 0 7 1273 1304 1305 1274 -1346 3 2 0 7 1274 1305 1306 1275 -1347 3 2 0 7 1275 1306 1307 1276 -1348 3 2 0 7 1276 1307 93 94 -1349 3 2 0 7 41 42 1308 1277 -1350 3 2 0 7 1277 1308 1309 1278 -1351 3 2 0 7 1278 1309 1310 1279 -1352 3 2 0 7 1279 1310 1311 1280 -1353 3 2 0 7 1280 1311 1312 1281 -1354 3 2 0 7 1281 1312 1313 1282 -1355 3 2 0 7 1282 1313 1314 1283 -1356 3 2 0 7 1283 1314 1315 1284 -1357 3 2 0 7 1284 1315 1316 1285 -1358 3 2 0 7 1285 1316 1317 1286 -1359 3 2 0 7 1286 1317 1318 1287 -1360 3 2 0 7 1287 1318 1319 1288 -1361 3 2 0 7 1288 1319 1320 1289 -1362 3 2 0 7 1289 1320 1321 1290 -1363 3 2 0 7 1290 1321 1322 1291 -1364 3 2 0 7 1291 1322 1323 1292 -1365 3 2 0 7 1292 1323 1324 1293 -1366 3 2 0 7 1293 1324 1325 1294 -1367 3 2 0 7 1294 1325 1326 1295 -1368 3 2 0 7 1295 1326 1327 1296 -1369 3 2 0 7 1296 1327 1328 1297 -1370 3 2 0 7 1297 1328 1329 1298 -1371 3 2 0 7 1298 1329 1330 1299 -1372 3 2 0 7 1299 1330 1331 1300 -1373 3 2 0 7 1300 1331 1332 1301 -1374 3 2 0 7 1301 1332 1333 1302 -1375 3 2 0 7 1302 1333 1334 1303 -1376 3 2 0 7 1303 1334 1335 1304 -1377 3 2 0 7 1304 1335 1336 1305 -1378 3 2 0 7 1305 1336 1337 1306 -1379 3 2 0 7 1306 1337 1338 1307 -1380 3 2 0 7 1307 1338 92 93 -1381 3 2 0 7 42 43 1339 1308 -1382 3 2 0 7 1308 1339 1340 1309 -1383 3 2 0 7 1309 1340 1341 1310 -1384 3 2 0 7 1310 1341 1342 1311 -1385 3 2 0 7 1311 1342 1343 1312 -1386 3 2 0 7 1312 1343 1344 1313 -1387 3 2 0 7 1313 1344 1345 1314 -1388 3 2 0 7 1314 1345 1346 1315 -1389 3 2 0 7 1315 1346 1347 1316 -1390 3 2 0 7 1316 1347 1348 1317 -1391 3 2 0 7 1317 1348 1349 1318 -1392 3 2 0 7 1318 1349 1350 1319 -1393 3 2 0 7 1319 1350 1351 1320 -1394 3 2 0 7 1320 1351 1352 1321 -1395 3 2 0 7 1321 1352 1353 1322 -1396 3 2 0 7 1322 1353 1354 1323 -1397 3 2 0 7 1323 1354 1355 1324 -1398 3 2 0 7 1324 1355 1356 1325 -1399 3 2 0 7 1325 1356 1357 1326 -1400 3 2 0 7 1326 1357 1358 1327 -1401 3 2 0 7 1327 1358 1359 1328 -1402 3 2 0 7 1328 1359 1360 1329 -1403 3 2 0 7 1329 1360 1361 1330 -1404 3 2 0 7 1330 1361 1362 1331 -1405 3 2 0 7 1331 1362 1363 1332 -1406 3 2 0 7 1332 1363 1364 1333 -1407 3 2 0 7 1333 1364 1365 1334 -1408 3 2 0 7 1334 1365 1366 1335 -1409 3 2 0 7 1335 1366 1367 1336 -1410 3 2 0 7 1336 1367 1368 1337 -1411 3 2 0 7 1337 1368 1369 1338 -1412 3 2 0 7 1338 1369 91 92 -1413 3 2 0 7 43 44 1370 1339 -1414 3 2 0 7 1339 1370 1371 1340 -1415 3 2 0 7 1340 1371 1372 1341 -1416 3 2 0 7 1341 1372 1373 1342 -1417 3 2 0 7 1342 1373 1374 1343 -1418 3 2 0 7 1343 1374 1375 1344 -1419 3 2 0 7 1344 1375 1376 1345 -1420 3 2 0 7 1345 1376 1377 1346 -1421 3 2 0 7 1346 1377 1378 1347 -1422 3 2 0 7 1347 1378 1379 1348 -1423 3 2 0 7 1348 1379 1380 1349 -1424 3 2 0 7 1349 1380 1381 1350 -1425 3 2 0 7 1350 1381 1382 1351 -1426 3 2 0 7 1351 1382 1383 1352 -1427 3 2 0 7 1352 1383 1384 1353 -1428 3 2 0 7 1353 1384 1385 1354 -1429 3 2 0 7 1354 1385 1386 1355 -1430 3 2 0 7 1355 1386 1387 1356 -1431 3 2 0 7 1356 1387 1388 1357 -1432 3 2 0 7 1357 1388 1389 1358 -1433 3 2 0 7 1358 1389 1390 1359 -1434 3 2 0 7 1359 1390 1391 1360 -1435 3 2 0 7 1360 1391 1392 1361 -1436 3 2 0 7 1361 1392 1393 1362 -1437 3 2 0 7 1362 1393 1394 1363 -1438 3 2 0 7 1363 1394 1395 1364 -1439 3 2 0 7 1364 1395 1396 1365 -1440 3 2 0 7 1365 1396 1397 1366 -1441 3 2 0 7 1366 1397 1398 1367 -1442 3 2 0 7 1367 1398 1399 1368 -1443 3 2 0 7 1368 1399 1400 1369 -1444 3 2 0 7 1369 1400 90 91 -1445 3 2 0 7 44 45 1401 1370 -1446 3 2 0 7 1370 1401 1402 1371 -1447 3 2 0 7 1371 1402 1403 1372 -1448 3 2 0 7 1372 1403 1404 1373 -1449 3 2 0 7 1373 1404 1405 1374 -1450 3 2 0 7 1374 1405 1406 1375 -1451 3 2 0 7 1375 1406 1407 1376 -1452 3 2 0 7 1376 1407 1408 1377 -1453 3 2 0 7 1377 1408 1409 1378 -1454 3 2 0 7 1378 1409 1410 1379 -1455 3 2 0 7 1379 1410 1411 1380 -1456 3 2 0 7 1380 1411 1412 1381 -1457 3 2 0 7 1381 1412 1413 1382 -1458 3 2 0 7 1382 1413 1414 1383 -1459 3 2 0 7 1383 1414 1415 1384 -1460 3 2 0 7 1384 1415 1416 1385 -1461 3 2 0 7 1385 1416 1417 1386 -1462 3 2 0 7 1386 1417 1418 1387 -1463 3 2 0 7 1387 1418 1419 1388 -1464 3 2 0 7 1388 1419 1420 1389 -1465 3 2 0 7 1389 1420 1421 1390 -1466 3 2 0 7 1390 1421 1422 1391 -1467 3 2 0 7 1391 1422 1423 1392 -1468 3 2 0 7 1392 1423 1424 1393 -1469 3 2 0 7 1393 1424 1425 1394 -1470 3 2 0 7 1394 1425 1426 1395 -1471 3 2 0 7 1395 1426 1427 1396 -1472 3 2 0 7 1396 1427 1428 1397 -1473 3 2 0 7 1397 1428 1429 1398 -1474 3 2 0 7 1398 1429 1430 1399 -1475 3 2 0 7 1399 1430 1431 1400 -1476 3 2 0 7 1400 1431 89 90 -1477 3 2 0 7 45 46 1432 1401 -1478 3 2 0 7 1401 1432 1433 1402 -1479 3 2 0 7 1402 1433 1434 1403 -1480 3 2 0 7 1403 1434 1435 1404 -1481 3 2 0 7 1404 1435 1436 1405 -1482 3 2 0 7 1405 1436 1437 1406 -1483 3 2 0 7 1406 1437 1438 1407 -1484 3 2 0 7 1407 1438 1439 1408 -1485 3 2 0 7 1408 1439 1440 1409 -1486 3 2 0 7 1409 1440 1441 1410 -1487 3 2 0 7 1410 1441 1442 1411 -1488 3 2 0 7 1411 1442 1443 1412 -1489 3 2 0 7 1412 1443 1444 1413 -1490 3 2 0 7 1413 1444 1445 1414 -1491 3 2 0 7 1414 1445 1446 1415 -1492 3 2 0 7 1415 1446 1447 1416 -1493 3 2 0 7 1416 1447 1448 1417 -1494 3 2 0 7 1417 1448 1449 1418 -1495 3 2 0 7 1418 1449 1450 1419 -1496 3 2 0 7 1419 1450 1451 1420 -1497 3 2 0 7 1420 1451 1452 1421 -1498 3 2 0 7 1421 1452 1453 1422 -1499 3 2 0 7 1422 1453 1454 1423 -1500 3 2 0 7 1423 1454 1455 1424 -1501 3 2 0 7 1424 1455 1456 1425 -1502 3 2 0 7 1425 1456 1457 1426 -1503 3 2 0 7 1426 1457 1458 1427 -1504 3 2 0 7 1427 1458 1459 1428 -1505 3 2 0 7 1428 1459 1460 1429 -1506 3 2 0 7 1429 1460 1461 1430 -1507 3 2 0 7 1430 1461 1462 1431 -1508 3 2 0 7 1431 1462 88 89 -1509 3 2 0 7 46 47 1463 1432 -1510 3 2 0 7 1432 1463 1464 1433 -1511 3 2 0 7 1433 1464 1465 1434 -1512 3 2 0 7 1434 1465 1466 1435 -1513 3 2 0 7 1435 1466 1467 1436 -1514 3 2 0 7 1436 1467 1468 1437 -1515 3 2 0 7 1437 1468 1469 1438 -1516 3 2 0 7 1438 1469 1470 1439 -1517 3 2 0 7 1439 1470 1471 1440 -1518 3 2 0 7 1440 1471 1472 1441 -1519 3 2 0 7 1441 1472 1473 1442 -1520 3 2 0 7 1442 1473 1474 1443 -1521 3 2 0 7 1443 1474 1475 1444 -1522 3 2 0 7 1444 1475 1476 1445 -1523 3 2 0 7 1445 1476 1477 1446 -1524 3 2 0 7 1446 1477 1478 1447 -1525 3 2 0 7 1447 1478 1479 1448 -1526 3 2 0 7 1448 1479 1480 1449 -1527 3 2 0 7 1449 1480 1481 1450 -1528 3 2 0 7 1450 1481 1482 1451 -1529 3 2 0 7 1451 1482 1483 1452 -1530 3 2 0 7 1452 1483 1484 1453 -1531 3 2 0 7 1453 1484 1485 1454 -1532 3 2 0 7 1454 1485 1486 1455 -1533 3 2 0 7 1455 1486 1487 1456 -1534 3 2 0 7 1456 1487 1488 1457 -1535 3 2 0 7 1457 1488 1489 1458 -1536 3 2 0 7 1458 1489 1490 1459 -1537 3 2 0 7 1459 1490 1491 1460 -1538 3 2 0 7 1460 1491 1492 1461 -1539 3 2 0 7 1461 1492 1493 1462 -1540 3 2 0 7 1462 1493 87 88 -1541 3 2 0 7 47 48 1494 1463 -1542 3 2 0 7 1463 1494 1495 1464 -1543 3 2 0 7 1464 1495 1496 1465 -1544 3 2 0 7 1465 1496 1497 1466 -1545 3 2 0 7 1466 1497 1498 1467 -1546 3 2 0 7 1467 1498 1499 1468 -1547 3 2 0 7 1468 1499 1500 1469 -1548 3 2 0 7 1469 1500 1501 1470 -1549 3 2 0 7 1470 1501 1502 1471 -1550 3 2 0 7 1471 1502 1503 1472 -1551 3 2 0 7 1472 1503 1504 1473 -1552 3 2 0 7 1473 1504 1505 1474 -1553 3 2 0 7 1474 1505 1506 1475 -1554 3 2 0 7 1475 1506 1507 1476 -1555 3 2 0 7 1476 1507 1508 1477 -1556 3 2 0 7 1477 1508 1509 1478 -1557 3 2 0 7 1478 1509 1510 1479 -1558 3 2 0 7 1479 1510 1511 1480 -1559 3 2 0 7 1480 1511 1512 1481 -1560 3 2 0 7 1481 1512 1513 1482 -1561 3 2 0 7 1482 1513 1514 1483 -1562 3 2 0 7 1483 1514 1515 1484 -1563 3 2 0 7 1484 1515 1516 1485 -1564 3 2 0 7 1485 1516 1517 1486 -1565 3 2 0 7 1486 1517 1518 1487 -1566 3 2 0 7 1487 1518 1519 1488 -1567 3 2 0 7 1488 1519 1520 1489 -1568 3 2 0 7 1489 1520 1521 1490 -1569 3 2 0 7 1490 1521 1522 1491 -1570 3 2 0 7 1491 1522 1523 1492 -1571 3 2 0 7 1492 1523 1524 1493 -1572 3 2 0 7 1493 1524 86 87 -1573 3 2 0 7 48 49 1525 1494 -1574 3 2 0 7 1494 1525 1526 1495 -1575 3 2 0 7 1495 1526 1527 1496 -1576 3 2 0 7 1496 1527 1528 1497 -1577 3 2 0 7 1497 1528 1529 1498 -1578 3 2 0 7 1498 1529 1530 1499 -1579 3 2 0 7 1499 1530 1531 1500 -1580 3 2 0 7 1500 1531 1532 1501 -1581 3 2 0 7 1501 1532 1533 1502 -1582 3 2 0 7 1502 1533 1534 1503 -1583 3 2 0 7 1503 1534 1535 1504 -1584 3 2 0 7 1504 1535 1536 1505 -1585 3 2 0 7 1505 1536 1537 1506 -1586 3 2 0 7 1506 1537 1538 1507 -1587 3 2 0 7 1507 1538 1539 1508 -1588 3 2 0 7 1508 1539 1540 1509 -1589 3 2 0 7 1509 1540 1541 1510 -1590 3 2 0 7 1510 1541 1542 1511 -1591 3 2 0 7 1511 1542 1543 1512 -1592 3 2 0 7 1512 1543 1544 1513 -1593 3 2 0 7 1513 1544 1545 1514 -1594 3 2 0 7 1514 1545 1546 1515 -1595 3 2 0 7 1515 1546 1547 1516 -1596 3 2 0 7 1516 1547 1548 1517 -1597 3 2 0 7 1517 1548 1549 1518 -1598 3 2 0 7 1518 1549 1550 1519 -1599 3 2 0 7 1519 1550 1551 1520 -1600 3 2 0 7 1520 1551 1552 1521 -1601 3 2 0 7 1521 1552 1553 1522 -1602 3 2 0 7 1522 1553 1554 1523 -1603 3 2 0 7 1523 1554 1555 1524 -1604 3 2 0 7 1524 1555 85 86 -1605 3 2 0 7 49 50 1556 1525 -1606 3 2 0 7 1525 1556 1557 1526 -1607 3 2 0 7 1526 1557 1558 1527 -1608 3 2 0 7 1527 1558 1559 1528 -1609 3 2 0 7 1528 1559 1560 1529 -1610 3 2 0 7 1529 1560 1561 1530 -1611 3 2 0 7 1530 1561 1562 1531 -1612 3 2 0 7 1531 1562 1563 1532 -1613 3 2 0 7 1532 1563 1564 1533 -1614 3 2 0 7 1533 1564 1565 1534 -1615 3 2 0 7 1534 1565 1566 1535 -1616 3 2 0 7 1535 1566 1567 1536 -1617 3 2 0 7 1536 1567 1568 1537 -1618 3 2 0 7 1537 1568 1569 1538 -1619 3 2 0 7 1538 1569 1570 1539 -1620 3 2 0 7 1539 1570 1571 1540 -1621 3 2 0 7 1540 1571 1572 1541 -1622 3 2 0 7 1541 1572 1573 1542 -1623 3 2 0 7 1542 1573 1574 1543 -1624 3 2 0 7 1543 1574 1575 1544 -1625 3 2 0 7 1544 1575 1576 1545 -1626 3 2 0 7 1545 1576 1577 1546 -1627 3 2 0 7 1546 1577 1578 1547 -1628 3 2 0 7 1547 1578 1579 1548 -1629 3 2 0 7 1548 1579 1580 1549 -1630 3 2 0 7 1549 1580 1581 1550 -1631 3 2 0 7 1550 1581 1582 1551 -1632 3 2 0 7 1551 1582 1583 1552 -1633 3 2 0 7 1552 1583 1584 1553 -1634 3 2 0 7 1553 1584 1585 1554 -1635 3 2 0 7 1554 1585 1586 1555 -1636 3 2 0 7 1555 1586 84 85 -1637 3 2 0 7 50 51 1587 1556 -1638 3 2 0 7 1556 1587 1588 1557 -1639 3 2 0 7 1557 1588 1589 1558 -1640 3 2 0 7 1558 1589 1590 1559 -1641 3 2 0 7 1559 1590 1591 1560 -1642 3 2 0 7 1560 1591 1592 1561 -1643 3 2 0 7 1561 1592 1593 1562 -1644 3 2 0 7 1562 1593 1594 1563 -1645 3 2 0 7 1563 1594 1595 1564 -1646 3 2 0 7 1564 1595 1596 1565 -1647 3 2 0 7 1565 1596 1597 1566 -1648 3 2 0 7 1566 1597 1598 1567 -1649 3 2 0 7 1567 1598 1599 1568 -1650 3 2 0 7 1568 1599 1600 1569 -1651 3 2 0 7 1569 1600 1601 1570 -1652 3 2 0 7 1570 1601 1602 1571 -1653 3 2 0 7 1571 1602 1603 1572 -1654 3 2 0 7 1572 1603 1604 1573 -1655 3 2 0 7 1573 1604 1605 1574 -1656 3 2 0 7 1574 1605 1606 1575 -1657 3 2 0 7 1575 1606 1607 1576 -1658 3 2 0 7 1576 1607 1608 1577 -1659 3 2 0 7 1577 1608 1609 1578 -1660 3 2 0 7 1578 1609 1610 1579 -1661 3 2 0 7 1579 1610 1611 1580 -1662 3 2 0 7 1580 1611 1612 1581 -1663 3 2 0 7 1581 1612 1613 1582 -1664 3 2 0 7 1582 1613 1614 1583 -1665 3 2 0 7 1583 1614 1615 1584 -1666 3 2 0 7 1584 1615 1616 1585 -1667 3 2 0 7 1585 1616 1617 1586 -1668 3 2 0 7 1586 1617 83 84 -1669 3 2 0 7 51 3 52 1587 -1670 3 2 0 7 1587 52 53 1588 -1671 3 2 0 7 1588 53 54 1589 -1672 3 2 0 7 1589 54 55 1590 -1673 3 2 0 7 1590 55 56 1591 -1674 3 2 0 7 1591 56 57 1592 -1675 3 2 0 7 1592 57 58 1593 -1676 3 2 0 7 1593 58 59 1594 -1677 3 2 0 7 1594 59 60 1595 -1678 3 2 0 7 1595 60 61 1596 -1679 3 2 0 7 1596 61 62 1597 -1680 3 2 0 7 1597 62 63 1598 -1681 3 2 0 7 1598 63 64 1599 -1682 3 2 0 7 1599 64 65 1600 -1683 3 2 0 7 1600 65 66 1601 -1684 3 2 0 7 1601 66 67 1602 -1685 3 2 0 7 1602 67 68 1603 -1686 3 2 0 7 1603 68 69 1604 -1687 3 2 0 7 1604 69 70 1605 -1688 3 2 0 7 1605 70 71 1606 -1689 3 2 0 7 1606 71 72 1607 -1690 3 2 0 7 1607 72 73 1608 -1691 3 2 0 7 1608 73 74 1609 -1692 3 2 0 7 1609 74 75 1610 -1693 3 2 0 7 1610 75 76 1611 -1694 3 2 0 7 1611 76 77 1612 -1695 3 2 0 7 1612 77 78 1613 -1696 3 2 0 7 1613 78 79 1614 -1697 3 2 0 7 1614 79 80 1615 -1698 3 2 0 7 1615 80 81 1616 -1699 3 2 0 7 1616 81 82 1617 -1700 3 2 0 7 1617 82 2 83 -$EndElements diff --git a/test/porousmediumflow/2p/implicit/incompressible/problem.hh b/test/porousmediumflow/2p/implicit/incompressible/problem.hh index 25030f51616406645395da2ee8f4bccd20fe7fc3..5acd0b3f31ffef9bcaf7ab55b1cc8cb560f90821 100644 --- a/test/porousmediumflow/2p/implicit/incompressible/problem.hh +++ b/test/porousmediumflow/2p/implicit/incompressible/problem.hh @@ -20,8 +20,8 @@ * \file * \brief The properties for the incompressible test */ -#ifndef DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_HH -#define DUMUX_INCOMPRESSIBLE_ONEP_TEST_PROBLEM_HH +#ifndef DUMUX_INCOMPRESSIBLE_TWOP_TEST_PROBLEM_HH +#define DUMUX_INCOMPRESSIBLE_TWOP_TEST_PROBLEM_HH #include <dumux/discretization/box/properties.hh> #include <dumux/discretization/cellcentered/tpfa/properties.hh> @@ -29,6 +29,8 @@ #include <dumux/material/components/dnapl.hh> #include <dumux/material/components/simpleh2o.hh> +#include <dumux/material/fluidsystems/liquidphase.hh> +#include <dumux/material/fluidsystems/2pimmiscible.hh> #include <dumux/porousmediumflow/problem.hh> #include <dumux/porousmediumflow/2p/implicit/model.hh> diff --git a/test/porousmediumflow/2p/implicit/incompressible/spatialparams.hh b/test/porousmediumflow/2p/implicit/incompressible/spatialparams.hh index 4867db01ce86ab5cf5448cb0f3adedfa477b7f59..6ce0becd8a63f920a5c6cc0d22853d7b8aea19c5 100644 --- a/test/porousmediumflow/2p/implicit/incompressible/spatialparams.hh +++ b/test/porousmediumflow/2p/implicit/incompressible/spatialparams.hh @@ -100,13 +100,19 @@ public: } /*! - * \brief Returns the scalar intrinsic permeability \f$[m^2]\f$ + * \brief Function for defining the (intrinsic) permeability \f$[m^2]\f$. + * In this test, we use element-wise distributed permeabilities. * - * \param globalPos The global position + * \param element The current element + * \param scv The sub-control volume inside the element. + * \param elemSol The solution at the dofs connected to the element. + * \return permeability */ - Scalar permeabilityAtPos(const GlobalPosition& globalPos) const + PermeabilityType permeability(const Element& element, + const SubControlVolume& scv, + const ElementSolutionVector& elemSol) const { - if (isInLens_(globalPos)) + if (isInLens_(element.geometry().center())) return lensK_; return outerK_; } @@ -120,13 +126,19 @@ public: { return 0.4; } /*! - * \brief Returns the parameter object for the Brooks-Corey material law + * \brief Returns the parameter object for the Brooks-Corey material law. + * In this test, we use element-wise distributed material parameters. * - * \param globalPos The global position + * \param element The current element + * \param scv The sub-control volume inside the element. + * \param elemSol The solution at the dofs connected to the element. + * \return the material parameters object */ - const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition& globalPos) const + const MaterialLawParams& materialLawParams(const Element& element, + const SubControlVolume& scv, + const ElementSolutionVector& elemSol) const { - if (isInLens_(globalPos)) + if (isInLens_(element.geometry().center())) return lensMaterialParams_; return outerMaterialParams_; } diff --git a/test/porousmediumflow/2p/implicit/pointsources/CMakeLists.txt b/test/porousmediumflow/2p/implicit/pointsources/CMakeLists.txt deleted file mode 100644 index 5124037a1f1229b477346f372b954971260a59f0..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/pointsources/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -add_dumux_test(test_ccadaptive2ppointsource test_ccadaptive2ppointsource test_ccadaptive2ppointsource.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/lensccadaptivepointsource-reference.vtu - ${CMAKE_CURRENT_BINARY_DIR}/lensccadaptive-00010.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_ccadaptive2ppointsource") - -#install sources -install(FILES -lensproblem.hh -test_ccadaptive2ppointsource.cc -DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/test/implicit/2p/pointsources) diff --git a/test/porousmediumflow/2p/implicit/pointsources/lensproblem.hh b/test/porousmediumflow/2p/implicit/pointsources/lensproblem.hh deleted file mode 100644 index 69c1178fa56425ee2e2c29e41c54de742135bd4d..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/pointsources/lensproblem.hh +++ /dev/null @@ -1,132 +0,0 @@ -// -*- 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 - * - * \brief Soil contamination problem where DNAPL infiltrates a fully - * water saturated medium. - */ - -#ifndef DUMUX_LENSPROBLEM_POINTSOURCE_HH -#define DUMUX_LENSPROBLEM_POINTSOURCE_HH - -#include "../lensproblem.hh" - -#if HAVE_UG -namespace Dumux -{ -template <class TypeTag> -class LensProblemPointSource; - -////////// -// Specify the properties for the lens problem -////////// -namespace Properties -{ -NEW_TYPE_TAG(LensProblemPointSource, INHERITS_FROM(LensCCAdaptiveProblem)); -NEW_PROP_TAG(BaseProblem); -SET_TYPE_PROP(LensProblemPointSource, BaseProblem, ImplicitPorousMediaProblem<TypeTag>); -SET_BOOL_PROP(LensProblemPointSource, AdaptiveGrid, true); -SET_TYPE_PROP(LensProblemPointSource, AdaptionIndicator, TwoPImplicitGridAdaptIndicator<TypeTag>); -SET_TYPE_PROP(LensProblemPointSource, AdaptionInitializationIndicator, ImplicitGridAdaptInitializationIndicator<TypeTag>); -SET_TYPE_PROP(LensProblemPointSource, Grid, Dune::UGGrid<2>); -SET_TYPE_PROP(LensProblemPointSource, Problem, LensProblemPointSource<TypeTag>); -} - -/*! - * \ingroup TwoPModel - * \ingroup ImplicitTestProblems - * \brief Soil contamination problem where DNAPL infiltrates a fully - * water saturated medium. - * - * The domain is sized 6m times 4m and features a rectangular lens - * with low permeablility which spans from (1 m , 2 m) to (4 m, 3 m) - * and is surrounded by a medium with higher permability. Note that - * this problem is discretized using only two dimensions, so from the - * point of view of the two-phase model, the depth of the domain - * implicitly is 1 m everywhere. - * - * On the top and the bottom of the domain neumann boundary conditions - * are used, while dirichlet conditions apply on the left and right - * boundaries. - * - * DNAPL is injected at the top boundary from 3m to 4m at a rate of - * 0.04 kg/(s m^2), the remaining neumann boundaries are no-flow - * boundaries. - * - * The dirichlet boundaries on the left boundary is the hydrostatic - * pressure scaled by a factor of 1.125, while on the right side it is - * just the hydrostatic pressure. The DNAPL saturation on both sides - * is zero. - * - * This problem uses the \ref TwoPModel. - * - * This problem should typically be simulated until \f$t_{\text{end}} - * \approx 20\,000\;s\f$ is reached. A good choice for the initial time step - * size is \f$t_{\text{inital}} = 250\;s\f$. - * - * To run the simulation execute the following line in shell: - * <tt>./test_box2p -parameterFile test_box2p.input</tt> or - * <tt>./test_cc2p -parameterFile test_cc2p.input</tt> - */ -template <class TypeTag > -class LensProblemPointSource : public LensProblem<TypeTag> -{ - typedef LensProblem<TypeTag> ParentType; - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - typedef typename GET_PROP_TYPE(TypeTag, PointSource) PointSource; - typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager; - -public: - /*! - * \brief The constructor - * - * \param timeManager The time manager - * \param gridView The grid view - */ - LensProblemPointSource(TimeManager &timeManager, const GridView &gridView) - : ParentType(timeManager, gridView) - {} - - /*! - * \brief Applies a vector of point sources. The point sources - * are possibly solution dependent. - * - * \param pointSources A vector of PointSource s that contain - source values for all phases and space positions. - * - * For this method, the \a values method of the point source - * has to return the absolute mass rate in untis - * \f$ [ \textnormal{unit of conserved quantity} / s ] \f$. - * Positive values mean that mass is created, negative ones mean that it vanishes. - */ - void addPointSources(std::vector<PointSource>& pointSources) const - { - // inject 2 kg/s of non-wetting phase at position (1, 1); - pointSources.push_back(PointSource({0.502, 3.02}, {0, 0.1})); - } -}; - -} //end namespace - -#endif // HAVE_UG - -#endif diff --git a/test/porousmediumflow/2p/implicit/pointsources/test_ccadaptive2ppointsource.cc b/test/porousmediumflow/2p/implicit/pointsources/test_ccadaptive2ppointsource.cc deleted file mode 100644 index 36c0cd2c97865af6474e8ec70428c49e1004a563..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/pointsources/test_ccadaptive2ppointsource.cc +++ /dev/null @@ -1,74 +0,0 @@ -// -*- 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 - * - * \brief Test for the two-phase CC model with point source - */ -#include <config.h> -#if HAVE_UG -#include "lensproblem.hh" -#endif -#include <dumux/common/start.hh> - -/*! - * \brief Provides an interface for customizing error messages associated with - * reading in parameters. - * - * \param progName The name of the program, that was tried to be started. - * \param errorMsg The error message that was issued by the start function. - * Comprises the thing that went wrong and a general help message. - */ -void usage(const char *progName, const std::string &errorMsg) -{ - if (errorMsg.size() > 0) { - std::string errorMessageOut = "\nUsage: "; - errorMessageOut += progName; - errorMessageOut += " [options]\n"; - errorMessageOut += errorMsg; - errorMessageOut += "\n\nThe list of mandatory options for this program is:\n" - "\t-TimeManager.TEnd End of the simulation [s] \n" - "\t-TimeManager.DtInitial Initial timestep size [s] \n" - "\t-Grid.File Name of the file containing the grid \n" - "\t definition in DGF format\n" - "\t-SpatialParams.LensLowerLeft coordinates of the lower left corner of the lens [m] \n" - "\t-SpatialParams.LensUpperRight coordinates of the upper right corner of the lens [m] \n" - "\t-Problem.Name String for naming of the output files \n" - "\n"; - - std::cout << errorMessageOut << std::endl; - } -} - -//////////////////////// -// the main function -//////////////////////// -int main(int argc, char** argv) -{ - -#if HAVE_UG - typedef TTAG(LensProblemPointSource) TypeTag; - return Dumux::start<TypeTag>(argc, argv, usage); -#else -#warning You need UGGrid to run this test. - std::cerr << "You need UGGrid to run this test." << std::endl; - return 77; -#endif - -} diff --git a/test/porousmediumflow/2p/implicit/pointsources/test_ccadaptive2ppointsource.input b/test/porousmediumflow/2p/implicit/pointsources/test_ccadaptive2ppointsource.input deleted file mode 100644 index 1047a2871e3b617b29ba6cb62fdd42c8d77b70cf..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/pointsources/test_ccadaptive2ppointsource.input +++ /dev/null @@ -1,28 +0,0 @@ -[TimeManager] -DtInitial = 25 # [s] -TEnd = 500 # [s] - -[Grid] -LowerLeft = 0 0 -UpperRight = 6 4 -Cells = 48 32 - -[SpatialParams] -LensLowerLeft = 1.0 2.0 # [m] coordinates of the lower left lens corner -LensUpperRight = 4.0 3.0 # [m] coordinate of the upper right lens corner - -[Problem] -Name = lensccadaptive # name passed to the output routines - -[Implicit] -EnablePartialReassemble = 1 # enable partial reassembly of the jacobian matrix? -EnableJacobianRecycling = 1 # Enable reuse of jacobian matrices? - -[GridAdapt] -EnableInitializationIndicator = 1 -RefineAtDirichletBC = 1 -RefineAtFluxBC = 1 -MinLevel = 0 -MaxLevel = 2 -CoarsenTolerance = 1.0e-4 -RefineTolerance = 1.0e-4 diff --git a/test/porousmediumflow/2p/implicit/test_boxadaptive2p.cc b/test/porousmediumflow/2p/implicit/test_boxadaptive2p.cc deleted file mode 100644 index f560ef63065654a602e76d729e23319ebc13c110..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/test_boxadaptive2p.cc +++ /dev/null @@ -1,70 +0,0 @@ -// -*- 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 - * - * \brief Test for the two-phase box model - */ -#include <config.h> -#include "lensproblem.hh" -#include <dumux/common/start.hh> - -/*! - * \brief Provides an interface for customizing error messages associated with - * reading in parameters. - * - * \param progName The name of the program, that was tried to be started. - * \param errorMsg The error message that was issued by the start function. - * Comprises the thing that went wrong and a general help message. - */ -void usage(const char *progName, const std::string &errorMsg) -{ - if (errorMsg.size() > 0) { - std::string errorMessageOut = "\nUsage: "; - errorMessageOut += progName; - errorMessageOut += " [options]\n"; - errorMessageOut += errorMsg; - errorMessageOut += "\n\nThe list of mandatory options for this program is:\n" - "\t-TimeManager.TEnd End of the simulation [s] \n" - "\t-TimeManager.DtInitial Initial timestep size [s] \n" - "\t-Grid.File Name of the file containing the grid \n" - "\t definition in DGF format\n" - "\t-SpatialParams.LensLowerLeft coordinates of the lower left corner of the lens [m] \n" - "\t-SpatialParams.LensUpperRight coordinates of the upper right corner of the lens [m] \n" - "\t-Problem.Name String for naming of the output files \n" - "\n"; - - std::cout << errorMessageOut << std::endl; - } -} - -//////////////////////// -// the main function -//////////////////////// -int main(int argc, char** argv) -{ -#if HAVE_UG - typedef TTAG(LensBoxAdaptiveProblem) TypeTag; - return Dumux::start<TypeTag>(argc, argv, usage); -#else -#warning You need UGGrid to run this test. - std::cerr << "You need UGGrid to run this test." << std::endl; - return 77; -#endif -} diff --git a/test/porousmediumflow/2p/implicit/test_boxadaptive2p.input b/test/porousmediumflow/2p/implicit/test_boxadaptive2p.input deleted file mode 100644 index ff185bdc7ca3c38f1df59a5a962291f21ba25e57..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/test_boxadaptive2p.input +++ /dev/null @@ -1,31 +0,0 @@ -[TimeManager] -DtInitial = 250 # [s] -TEnd = 3000 # [s] - -[Grid] -LowerLeft = 0 0 -UpperRight = 6 4 -Cells = 48 32 -Refinement = 0 -CellType = Cube -ClosureType = Green - -[SpatialParams] -LensLowerLeft = 1.0 2.0 # [m] coordinates of the lower left lens corner -LensUpperRight = 4.0 3.0 # [m] coordinates of the upper right lens corner - -[Problem] -Name = lensboxadaptive # name passed to the output routines - -[Implicit] -EnablePartialReassemble = 1 # enable partial reassembly of the jacobian matrix? -EnableJacobianRecycling = 1 # Enable reuse of jacobian matrices? - -[GridAdapt] -EnableInitializationIndicator = 1 -RefineAtDirichletBC = 1 -RefineAtFluxBC = 1 -MinLevel = 0 -MaxLevel = 2 -CoarsenTolerance = 1.0e-4 -RefineTolerance = 1.0e-4 \ No newline at end of file diff --git a/test/porousmediumflow/2p/implicit/test_cc2pcornerpoint.cc b/test/porousmediumflow/2p/implicit/test_cc2pcornerpoint.cc deleted file mode 100644 index ba154429ce438c6b799f28f7a753848790ee6580..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/test_cc2pcornerpoint.cc +++ /dev/null @@ -1,75 +0,0 @@ -// -*- 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 - * - * \brief Test for the fully-implicit two-phase cell-centered model that uses - * a cornerpoint grid. - */ -#include <config.h> - -#if HAVE_OPM_GRID - -#include "cc2pcornerpointproblem.hh" -#include <dumux/common/start.hh> - -/*! - * \brief Provides an interface for customizing error messages associated with - * reading in parameters. - * - * \param progName The name of the program, that was tried to be started. - * \param errorMsg The error message that was issued by the start function. - * Comprises the thing that went wrong and a general help message. - */ -void usage(const char *progName, const std::string &errorMsg) -{ - if (errorMsg.size() > 0) { - std::string errorMessageOut = "\nUsage: "; - errorMessageOut += progName; - errorMessageOut += " [options]\n"; - errorMessageOut += errorMsg; - errorMessageOut += "\n\nThe list of mandatory options for this program is:\n" - "\t-TimeManager.TEnd End of the simulation [s] \n" - "\t-TimeManager.DtInitial Initial timestep size [s] \n" - "\t-Grid.File Name of the file containing the grid \n" - "\t definition in Petrel/Eclipse format\n" - "\t-Problem.Name String for naming of the output files \n" - "\n"; - - std::cout << errorMessageOut << std::endl; - } -} - -//////////////////////// -// the main function -//////////////////////// -int main(int argc, char** argv) -{ - typedef TTAG(CC2PCornerPointProblem) TypeTag; - return Dumux::start<TypeTag>(argc, argv, usage); -} -#else -#include<iostream> -int main(int argc, char** argv) -{ -#warning You need to have opm-grid installed to run this test - std::cerr << "You need to have opm-grid installed to run this test\n"; - return 77; -} -#endif diff --git a/test/porousmediumflow/2p/implicit/test_cc2pcornerpoint.input b/test/porousmediumflow/2p/implicit/test_cc2pcornerpoint.input deleted file mode 100644 index 19f0f5f6bd479f5ba1d4bd242ed17a420bb38ffb..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/test_cc2pcornerpoint.input +++ /dev/null @@ -1,12 +0,0 @@ -[TimeManager] -DtInitial = 1e3 # [s] -TEnd = 1e4 # [s] - -[Grid] -File = ./grids/hardsmall.grdecl - -[Problem] -Name = cc2pcornerpoint # name passed to the output routines -Homogeneous = 0 # use a homogeneous permeablity/porosity distribution -InjectionElement = 0 # index of the element where injection should take place -InjectionRate = 0.1 # injection rate in kg/s diff --git a/test/porousmediumflow/2p/implicit/test_ccadaptive2p.cc b/test/porousmediumflow/2p/implicit/test_ccadaptive2p.cc deleted file mode 100644 index 06912047125e6203dcd05fee13e665cb6a16a95c..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/test_ccadaptive2p.cc +++ /dev/null @@ -1,72 +0,0 @@ -// -*- 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 - * - * \brief Test for the two-phase CC model - */ -#include <config.h> -#include "lensproblem.hh" -#include <dumux/common/start.hh> - -/*! - * \brief Provides an interface for customizing error messages associated with - * reading in parameters. - * - * \param progName The name of the program, that was tried to be started. - * \param errorMsg The error message that was issued by the start function. - * Comprises the thing that went wrong and a general help message. - */ -void usage(const char *progName, const std::string &errorMsg) -{ - if (errorMsg.size() > 0) { - std::string errorMessageOut = "\nUsage: "; - errorMessageOut += progName; - errorMessageOut += " [options]\n"; - errorMessageOut += errorMsg; - errorMessageOut += "\n\nThe list of mandatory options for this program is:\n" - "\t-TimeManager.TEnd End of the simulation [s] \n" - "\t-TimeManager.DtInitial Initial timestep size [s] \n" - "\t-Grid.File Name of the file containing the grid \n" - "\t definition in DGF format\n" - "\t-SpatialParams.LensLowerLeft coordinates of the lower left corner of the lens [m] \n" - "\t-SpatialParams.LensUpperRight coordinates of the upper right corner of the lens [m] \n" - "\t-Problem.Name String for naming of the output files \n" - "\n"; - - std::cout << errorMessageOut << std::endl; - } -} - -//////////////////////// -// the main function -//////////////////////// -int main(int argc, char** argv) -{ - -#if HAVE_DUNE_ALUGRID - typedef TTAG(LensCCAdaptiveProblem) TypeTag; - return Dumux::start<TypeTag>(argc, argv, usage); -#else -#warning You need dune-ALUGrid to run this test. - std::cerr << "You need dune-ALUGrid to run this test." << std::endl; - return 77; -#endif - -} diff --git a/test/porousmediumflow/2p/implicit/test_ccadaptive2p.input b/test/porousmediumflow/2p/implicit/test_ccadaptive2p.input deleted file mode 100644 index 4a3dff50e752ee0faef529cf7dc89079357c2136..0000000000000000000000000000000000000000 --- a/test/porousmediumflow/2p/implicit/test_ccadaptive2p.input +++ /dev/null @@ -1,26 +0,0 @@ -[TimeManager] -DtInitial = 250 # [s] -TEnd = 3000 # [s] - -[Grid] -File = ./grids/rectangle-domain.msh - -[SpatialParams] -LensLowerLeft = 1.0 2.0 # [m] coordinates of the lower left lens corner -LensUpperRight = 4.0 3.0 # [m] coordinates of the upper right lens corner - -[Problem] -Name = lensccadaptive # name passed to the output routines - -[Implicit] -EnablePartialReassemble = 1 # enable partial reassembly of the jacobian matrix? -EnableJacobianRecycling = 1 # Enable reuse of jacobian matrices? - -[GridAdapt] -EnableInitializationIndicator = 1 -RefineAtDirichletBC = 1 -RefineAtFluxBC = 1 -MinLevel = 0 -MaxLevel = 2 -CoarsenTolerance = 1.0e-4 -RefineTolerance = 1.0e-4 diff --git a/test/references/lensboxadaptive-reference.vtu b/test/references/lensboxadaptive-reference.vtu index 192343b08581d4bddbc6110c159c7be6b66a171d..162c0578c37ee50a0200a67591e99d2e7d3c536b 100644 --- a/test/references/lensboxadaptive-reference.vtu +++ b/test/references/lensboxadaptive-reference.vtu @@ -3033,309 +3033,6 @@ 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 </DataArray> - <DataArray type="Float32" Name="temperature" NumberOfComponents="1" format="ascii"> - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - </DataArray> </PointData> <CellData Scalars="process rank"> <DataArray type="Float32" Name="process rank" NumberOfComponents="1" format="ascii"> diff --git a/test/references/lensccadaptive-reference.vtu b/test/references/lensccadaptive-reference.vtu index 034df4ddcc67e0317f5bc9cb22ffe6866ea07cff..05264d541e2e2f4e9d5f00b00a6f3dd36cc50a39 100644 --- a/test/references/lensccadaptive-reference.vtu +++ b/test/references/lensccadaptive-reference.vtu @@ -4053,411 +4053,6 @@ 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 </DataArray> - <DataArray type="Float32" Name="temperature" NumberOfComponents="1" format="ascii"> - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - </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 diff --git a/test/references/lensccadaptivepointsource-reference.vtu b/test/references/lensccadaptivepointsource-reference.vtu index a0e673a553bb82114320b04a2237d1c5571ac23e..048aa6d7b43134c07091ad95dcca633fe69ecab2 100644 --- a/test/references/lensccadaptivepointsource-reference.vtu +++ b/test/references/lensccadaptivepointsource-reference.vtu @@ -2183,224 +2183,6 @@ 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 0.4 </DataArray> - <DataArray type="Float32" Name="temperature" NumberOfComponents="1" format="ascii"> - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 293.15 - 293.15 293.15 293.15 293.15 - </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