diff --git a/dumux/assembly/staggeredfvassembler.hh b/dumux/assembly/staggeredfvassembler.hh new file mode 100644 index 0000000000000000000000000000000000000000..da1834dd3ef8a4df2e42a8f3e30a3fbc6958f41a --- /dev/null +++ b/dumux/assembly/staggeredfvassembler.hh @@ -0,0 +1,457 @@ +// -*- 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 . * + *****************************************************************************/ +/*! + * \file + * \brief An assembler for the global linear system + * for fully implicit models and vertex-centered discretization schemes. + */ +#ifndef DUMUX_STAGGERED_FV_ASSEMBLER_HH +#define DUMUX_STAGGERED_FV_ASSEMBLER_HH + +#include + +#include + +#include +#include +#include + +#include "diffmethod.hh" +#include "staggeredlocalassembler.hh" + +namespace Dumux { + +/*! + * \ingroup ImplicitModel + * \brief An assembler for the global linear system + * for fully implicit models and cell-centered discretization schemes. + */ +template +class StaggeredFVAssembler +{ + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using LocalResidual = typename GET_PROP_TYPE(TypeTag, LocalResidual); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + using JacobianMatrix = typename GET_PROP_TYPE(TypeTag, JacobianMatrix); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using TimeLoop = TimeLoopBase; + + static constexpr int dim = GridView::dimension; + static constexpr bool isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox); + static constexpr int dofCodim = isBox ? dim : 0; + + using LocalAssembler =StaggeredLocalAssembler; + + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + + using CCToCCMatrixBlock = typename GET_PROP(TypeTag, JacobianMatrix)::MatrixBlockCCToCC; + using CCToFaceMatrixBlock = typename GET_PROP(TypeTag, JacobianMatrix)::MatrixBlockCCToFace; + using FaceToFaceMatrixBlock = typename GET_PROP(TypeTag, JacobianMatrix)::MatrixBlockFaceToFace; + using FaceToCCMatrixBlock = typename GET_PROP(TypeTag, JacobianMatrix)::MatrixBlockFaceToCC; + +public: + using ResidualType = SolutionVector; + + //! The constructor for stationary problems + StaggeredFVAssembler(std::shared_ptr problem, + std::shared_ptr fvGridGeometry, + std::shared_ptr gridVariables) + : problem_(problem) + , fvGridGeometry_(fvGridGeometry) + , gridVariables_(gridVariables) + , stationary_(true) + { + static_assert(isImplicit, "Explicit assembler for stationary problem doesn't make sense!"); + } + + //! The constructor for instationary problems + StaggeredFVAssembler(std::shared_ptr problem, + std::shared_ptr fvGridGeometry, + std::shared_ptr gridVariables, + std::shared_ptr timeLoop) + : problem_(problem) + , fvGridGeometry_(fvGridGeometry) + , gridVariables_(gridVariables) + , localResidual_(timeLoop) + , stationary_(false) + {} + + /*! + * \brief Assembles the global Jacobian of the residual + * and the residual for the current solution. + */ + void assembleJacobianAndResidual(const SolutionVector& curSol) + { + if (!stationary_ && localResidual_.isStationary()) + DUNE_THROW(Dune::InvalidStateException, "Assembling instationary problem but previous solution was not set!"); + + if(!jacobian_) + { + setLinearSystem(); + } + + if(!residual_) + { + residual_ = std::make_shared(); + setResidualSize(); + } + + resetJacobian_(); + resetResidual_(); + + bool succeeded; + // try assembling the global linear system + try + { + // let the local assembler add the element contributions + for (const auto element : elements(gridView())) + LocalAssembler::assembleJacobianAndResidual(*this, *jacobian_, *residual_, element, curSol); + + // if we get here, everything worked well + succeeded = true; + if (gridView().comm().size() > 1) + succeeded = gridView().comm().min(succeeded); + + // printmatrix(std::cout, (*jacobian_)[cellCenterIdx][cellCenterIdx], "A11", ""); + // printmatrix(std::cout, (*jacobian_)[cellCenterIdx][faceIdx], "A12", ""); + // printmatrix(std::cout, (*jacobian_)[faceIdx][cellCenterIdx], "A21", ""); + // printmatrix(std::cout, (*jacobian_)[faceIdx][faceIdx], "A22", ""); + } + // throw exception if a problem ocurred + catch (NumericalProblem &e) + { + std::cout << "rank " << gridView().comm().rank() + << " caught an exception while assembling:" << e.what() + << "\n"; + succeeded = false; + if (gridView().comm().size() > 1) + succeeded = gridView().comm().min(succeeded); + } + if (!succeeded) + DUNE_THROW(NumericalProblem, "A process did not succeed in linearizing the system"); + } + + /*! + * \brief Assembles only the global Jacobian of the residual. + */ + void assembleJacobian(const SolutionVector& curSol) + { + if (!stationary_ && localResidual_.isStationary()) + DUNE_THROW(Dune::InvalidStateException, "Assembling instationary problem but previous solution was not set!"); + + if(!jacobian_) + { + jacobian_ = std::make_shared(); + jacobian_->setBuildMode(JacobianMatrix::random); + setJacobianPattern(); + } + + resetJacobian_(); + + bool succeeded; + // try assembling the global linear system + try + { + // let the local assembler add the element contributions + for (const auto element : elements(gridView())) + LocalAssembler::assemble(*this, *jacobian_, element, curSol); + + // if we get here, everything worked well + succeeded = true; + if (gridView().comm().size() > 1) + succeeded = gridView().comm().min(succeeded); + } + // throw exception if a problem ocurred + catch (NumericalProblem &e) + { + std::cout << "rank " << gridView().comm().rank() + << " caught an exception while assembling:" << e.what() + << "\n"; + succeeded = false; + if (gridView().comm().size() > 1) + succeeded = gridView().comm().min(succeeded); + } + if (!succeeded) + DUNE_THROW(NumericalProblem, "A process did not succeed in linearizing the system"); + } + + //! compute the residuals + void assembleResidual(const SolutionVector& curSol) + { + if(!residual_) + { + residual_ = std::make_shared(); + setResidualSize(); + } + + assembleResidual(*residual_, curSol); + } + + //! compute the residuals + void assembleResidual(ResidualType& r, const SolutionVector& curSol) const + { + if (!stationary_ && localResidual_.isStationary()) + DUNE_THROW(Dune::InvalidStateException, "Assembling instationary problem but previous solution was not set!"); + + // let the local assembler add the element contributions + for (const auto element : elements(gridView())) + LocalAssembler::assemble(*this, r, element, curSol); + } + + //! computes the residual norm + Scalar residualNorm(const SolutionVector& curSol) const + { + ResidualType residual; + residual[cellCenterIdx].resize(fvGridGeometry().numCellCenterDofs()); + residual[faceIdx].resize(fvGridGeometry().numFaceDofs()); + assembleResidual(residual, curSol); + + // calculate the square norm of the residual + Scalar result2 = residual.two_norm2(); + if (gridView().comm().size() > 1) + result2 = gridView().comm().sum(result2); + + using std::sqrt; + return sqrt(result2); + } + + /*! + * \brief Tells the assembler which jacobian and residual to use. + * This also resizes the containers to the required sizes and sets the + * sparsity pattern of the jacobian matrix. + */ + void setLinearSystem(std::shared_ptr A, + std::shared_ptr r) + { + jacobian_ = A; + residual_ = r; + // + // check and/or set the BCRS matrix's build mode + // convenience references + CCToCCMatrixBlock& A11 = (*jacobian_)[cellCenterIdx][cellCenterIdx]; + CCToFaceMatrixBlock& A12 = (*jacobian_)[cellCenterIdx][faceIdx]; + FaceToCCMatrixBlock& A21 = (*jacobian_)[faceIdx][cellCenterIdx]; + FaceToFaceMatrixBlock& A22 = (*jacobian_)[faceIdx][faceIdx]; + + A11.setBuildMode(CCToCCMatrixBlock::random); + A12.setBuildMode(CCToFaceMatrixBlock::random); + A21.setBuildMode(FaceToCCMatrixBlock::random); + A22.setBuildMode(FaceToFaceMatrixBlock::random); + + setJacobianPattern(); + setResidualSize(); + // if (jacobian_->buildMode() == JacobianMatrix::BuildMode::unknown) + // jacobian_->setBuildMode(JacobianMatrix::random); + // else if (jacobian_->buildMode() != JacobianMatrix::BuildMode::random) + // DUNE_THROW(Dune::NotImplemented, "Only BCRS matrices with random build mode are supported at the moment"); + // + // setJacobianPattern(); + // setResidualSize(); + } + + /*! + * \brief The version without arguments uses the default constructor to create + * the jacobian and residual objects in this assembler. + */ + void setLinearSystem() + { + jacobian_ = std::make_shared(); + + // convenience references + CCToCCMatrixBlock& A11 = (*jacobian_)[cellCenterIdx][cellCenterIdx]; + CCToFaceMatrixBlock& A12 = (*jacobian_)[cellCenterIdx][faceIdx]; + FaceToCCMatrixBlock& A21 = (*jacobian_)[faceIdx][cellCenterIdx]; + FaceToFaceMatrixBlock& A22 = (*jacobian_)[faceIdx][faceIdx]; + + A11.setBuildMode(CCToCCMatrixBlock::random); + A12.setBuildMode(CCToFaceMatrixBlock::random); + A21.setBuildMode(FaceToCCMatrixBlock::random); + A22.setBuildMode(FaceToFaceMatrixBlock::random); + + residual_ = std::make_shared(); + + setJacobianPattern(); + setResidualSize(); + } + + /*! + * \brief Sets the solution from which to start the time integration. Has to be + * called prior to assembly for time-dependent problems. + */ + void setPreviousSolution(const SolutionVector& u) + { localResidual_.setPreviousSolution(u); } + + /*! + * \brief Return the solution that has been set as the previous one. + */ + const SolutionVector& prevSol() const + { return localResidual_.prevSol(); } + + /*! + * \brief Resizes the jacobian and sets the jacobian' sparsity pattern. + */ + + void setJacobianPattern() + { + // resize the jacobian and the residual + const auto numDofsCC = fvGridGeometry().numCellCenterDofs(); + const auto numDofsFace = fvGridGeometry().numFaceDofs(); + + // convenience references + CCToCCMatrixBlock& A11 = (*jacobian_)[cellCenterIdx][cellCenterIdx]; + CCToFaceMatrixBlock& A12 = (*jacobian_)[cellCenterIdx][faceIdx]; + FaceToCCMatrixBlock& A21 = (*jacobian_)[faceIdx][cellCenterIdx]; + FaceToFaceMatrixBlock& A22 = (*jacobian_)[faceIdx][faceIdx]; + + // set the size of the sub-matrizes + A11.setSize(numDofsCC, numDofsCC); + A12.setSize(numDofsCC, numDofsFace); + A21.setSize(numDofsFace, numDofsCC); + A22.setSize(numDofsFace, numDofsFace); + + + // set occupation pattern of the jacobian + Dune::MatrixIndexSet occupationPatternA11; + Dune::MatrixIndexSet occupationPatternA12; + Dune::MatrixIndexSet occupationPatternA21; + Dune::MatrixIndexSet occupationPatternA22; + occupationPatternA11.resize(numDofsCC, numDofsCC); + occupationPatternA12.resize(numDofsCC, numDofsFace); + occupationPatternA21.resize(numDofsFace, numDofsCC); + occupationPatternA22.resize(numDofsFace, numDofsFace); + + const auto& connectivityMap = fvGridGeometry().connectivityMap(); + + // evaluate the acutal pattern + for (const auto& element : elements(fvGridGeometry().gridView())) + { + // the global index of the element at hand + const auto ccGlobalI = fvGridGeometry().elementMapper().index(element); + + for (auto&& ccGlobalJ : connectivityMap(cellCenterIdx, cellCenterIdx, ccGlobalI)) + occupationPatternA11.add(ccGlobalI, ccGlobalJ); + for (auto&& faceGlobalJ : connectivityMap(cellCenterIdx, faceIdx, ccGlobalI)) + occupationPatternA12.add(ccGlobalI, faceGlobalJ); + + auto fvGeometry = localView(fvGridGeometry()); + fvGeometry.bindElement(element); + + // loop over sub control faces + for (auto&& scvf : scvfs(fvGeometry)) + { + const auto faceGlobalI = scvf.dofIndex(); + for (auto&& ccGlobalJ : connectivityMap(faceIdx, cellCenterIdx, scvf.index())) + occupationPatternA21.add(faceGlobalI, ccGlobalJ); + for (auto&& faceGlobalJ : connectivityMap(faceIdx, faceIdx, scvf.index())) + occupationPatternA22.add(faceGlobalI, faceGlobalJ); + } + } + + occupationPatternA11.exportIdx(A11); + occupationPatternA12.exportIdx(A12); + occupationPatternA21.exportIdx(A21); + occupationPatternA22.exportIdx(A22); + } + + /*! + * \brief Resizes the residual + */ + void setResidualSize() + { + (*residual_)[cellCenterIdx].resize(fvGridGeometry().numCellCenterDofs()); + (*residual_)[faceIdx].resize(fvGridGeometry().numFaceDofs()); + } + + const Problem& problem() const + { return *problem_; } + + const FVGridGeometry& fvGridGeometry() const + { return *fvGridGeometry_; } + + const GridView& gridView() const + { return fvGridGeometry().gridView(); } + + GridVariables& gridVariables() + { return *gridVariables_; } + + const GridVariables& gridVariables() const + { return *gridVariables_; } + + JacobianMatrix& jacobian() + { + if (!residual_) + DUNE_THROW(Dune::InvalidStateException, "No jacobian was set."); + return *jacobian_; + } + + SolutionVector& residual() + { + if (!residual_) + DUNE_THROW(Dune::InvalidStateException, "No residual was set."); + return *residual_; + } + + const LocalResidual& localResidual() const + { return localResidual_; } + +private: + // reset the residual to 0.0 + void resetResidual_() + { + (*residual_)[cellCenterIdx] = 0.0; + (*residual_)[faceIdx] = 0.0; + } + + // reset the jacobian to 0.0 + void resetJacobian_() + { + (*jacobian_)[cellCenterIdx][cellCenterIdx] = 0.0; + (*jacobian_)[cellCenterIdx][faceIdx] = 0.0; + (*jacobian_)[faceIdx][cellCenterIdx] = 0.0; + (*jacobian_)[faceIdx][faceIdx] = 0.0; + } + + // pointer to the problem to be solved + std::shared_ptr problem_; + + // the finite volume geometry of the grid + std::shared_ptr fvGridGeometry_; + + // the variables container for the grid + std::shared_ptr gridVariables_; + + // shared pointers to the jacobian matrix and residual + std::shared_ptr jacobian_; + std::shared_ptr residual_; + + // class computing the residual of an element + LocalResidual localResidual_; + + // if this assembler is assembling a time dependent problem + bool stationary_; +}; + +} // namespace Dumux + +#endif diff --git a/dumux/assembly/staggeredlocalassembler.hh b/dumux/assembly/staggeredlocalassembler.hh new file mode 100644 index 0000000000000000000000000000000000000000..65dad662104a2c5ff5995191aa2d799d0d383709 --- /dev/null +++ b/dumux/assembly/staggeredlocalassembler.hh @@ -0,0 +1,625 @@ +// -*- 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 . * + *****************************************************************************/ +/*! + * \file + * \brief An assembler for the global linear system for fully implicit models + * and cell-centered discretization schemes using Newton's method. + */ +#ifndef DUMUX_CC_LOCAL_ASSEMBLER_HH +#define DUMUX_CC_LOCAL_ASSEMBLER_HH + +#include +#include + +#include +#include + +#include +#include + +namespace Dumux { + +/*! + * \ingroup ImplicitModel + * \brief An assembler for the local contributions (per element) to the global + * linear system for fully implicit models and cell-centered discretization schemes. + */ +template +class StaggeredLocalAssembler; + + +template +class StaggeredLocalAssembler +{ + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using NumEqVector = typename GET_PROP_TYPE(TypeTag, NumEqVector); + using ElementBoundaryTypes = typename GET_PROP_TYPE(TypeTag, ElementBoundaryTypes); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); + using ElementFluxVariablesCache = typename GET_PROP_TYPE(TypeTag, ElementFluxVariablesCache); + using Element = typename GET_PROP_TYPE(TypeTag, GridView)::template Codim<0>::Entity; + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using ElementSolutionVector = typename GET_PROP_TYPE(TypeTag, ElementSolutionVector); + using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); + using GridVolumeVariables = typename GET_PROP_TYPE(TypeTag, GlobalVolumeVariables); + using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); + using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); + using JacobianMatrix = typename GET_PROP_TYPE(TypeTag, JacobianMatrix); + + using NumCellCenterEqVector = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); + using NumFaceEqVector = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); + + using FaceSolutionVector = typename GET_PROP_TYPE(TypeTag, FaceSolutionVector); + using FaceSolution = typename GET_PROP_TYPE(TypeTag, StaggeredFaceSolution); + + enum { numEq = GET_PROP_VALUE(TypeTag, NumEq) }; + + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); + using PriVarIndices = typename Dumux::PriVarIndices; + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); + using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); + using FaceVariables = typename GET_PROP_TYPE(TypeTag, FaceVariables); + using ElementFaceVariables = typename GET_PROP_TYPE(TypeTag, ElementFaceVariables); + using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); + + static constexpr bool enableGlobalFluxVarsCache = GET_PROP_VALUE(TypeTag, EnableGlobalFluxVariablesCache); + +public: + + /*! + * \brief Computes the derivatives with respect to the given element and adds them + * to the global matrix. The element residual is written into the right hand side. + */ + template + static void assembleJacobianAndResidual(Assembler& assembler, JacobianMatrix& jac, SolutionVector& res, + const Element& element, const SolutionVector& curSol) + { + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + + + // get some references for convenience + const auto& problem = assembler.problem(); + auto& localResidual = assembler.localResidual(); + auto& gridVariables = assembler.gridVariables(); + + // prepare the local views + auto fvGeometry = localView(assembler.fvGridGeometry()); + fvGeometry.bind(element); + + auto curElemVolVars = localView(gridVariables.curGridVolVars()); + curElemVolVars.bind(element, fvGeometry, curSol); + + auto elemFluxVarsCache = localView(gridVariables.gridFluxVarsCache()); + elemFluxVarsCache.bind(element, fvGeometry, curElemVolVars); + + auto curElemFaceVars = localView(gridVariables.curGridFaceVars()); + curElemFaceVars.bind(element, fvGeometry, curSol); + + const bool isStationary = localResidual.isStationary(); + auto prevElemVolVars = localView(gridVariables.prevGridVolVars()); + auto prevElemFaceVars = localView(gridVariables.prevGridFaceVars()); + if (!isStationary) + { + prevElemVolVars.bindElement(element, fvGeometry, localResidual.prevSol()); + prevElemFaceVars.bindElement(element, fvGeometry, localResidual.prevSol()); + } + + // for compatibility with box models + ElementBoundaryTypes elemBcTypes; + + const auto cellCenterGlobalI = assembler.fvGridGeometry().elementMapper().index(element); + res[cellCenterIdx][cellCenterGlobalI] = localResidual.evalCellCenter(problem, + element, + fvGeometry, + prevElemVolVars, + curElemVolVars, + prevElemFaceVars, + curElemFaceVars, + elemBcTypes, + elemFluxVarsCache); + + // treat the local residua of the face dofs: + // create a cache to reuse some results for the calculation of the derivatives + FaceSolutionVector faceResidualCache; + faceResidualCache.resize(fvGeometry.numScvf()); + faceResidualCache = 0.0; + + for(auto&& scvf : scvfs(fvGeometry)) + { + faceResidualCache[scvf.localFaceIdx()] = localResidual.evalFace(problem, + element, + fvGeometry, + scvf, + prevElemVolVars, + curElemVolVars, + prevElemFaceVars, + curElemFaceVars, + elemBcTypes, + elemFluxVarsCache); + + res[faceIdx][scvf.dofIndex()] += faceResidualCache[scvf.localFaceIdx()] ; + } + + // calculate derivatives of all dofs in stencil with respect to the dofs in the element + evalPartialDerivatives_(assembler, + element, + fvGeometry, + curSol, + prevElemVolVars, + curElemVolVars, + prevElemFaceVars, + curElemFaceVars, + elemFluxVarsCache, + elemBcTypes, + jac, + res[cellCenterIdx][cellCenterGlobalI], + faceResidualCache); + + } + + /*! + * \brief Computes the derivatives with respect to the given element and adds them + * to the global matrix. + */ + template + static void assemble(Assembler& assembler, JacobianMatrix& jac, + const Element& element, const SolutionVector& curSol) + { + std::cout << "calling wrong \n"; + assemble_(assembler, jac, element, curSol); + } + + /*! + * \brief Assemble the residual only + */ + template + static void assemble(Assembler& assembler, SolutionVector& res, + const Element& element, const SolutionVector& curSol) + { + std::cout << "calling wrong \n"; + // using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + // typename DofTypeIndices::CellCenterIdx cellCenterIdx; + // typename DofTypeIndices::FaceIdx faceIdx; + + // const auto cellCenterGlobalI = assembler.fvGridGeometry().elementMapper().index(element); + // res[cellCenterIdx][cellCenterGlobalI] = localResidual.evalCellCenter(problem, + // element, + // fvGeometry, + // prevElemVolVars, + // curElemVolVars, + // curGlobalFaceVars, + // prevGlobalFaceVars, + // elemBcTypes, + // elemFluxVarsCache)[0]; + + + + // treat the local residua of the face dofs: + // create a cache to reuse some results for the calculation of the derivatives + // FaceSolutionVector faceResidualCache; + // faceResidualCache.resize(assembler.fvGridGeometry().numScvf()); + // faceResidualCache = 0.0; + // + // auto fvGeometry = localView(assembler.fvGridGeometry()); + // fvGeometry.bind(element); + // auto faceResiduals = assembleFace_(assembler, element, curSol); + // + // for(auto&& scvf : scvfs(fvGeometry)) + // { + // res[faceIdx][scvf.dofIndex()] += faceResiduals[scvf.localFaceIdx()]; + // faceResidualCache[scvf.localFaceIdx()] = faceResiduals[scvf.localFaceIdx()]; + // } + } + + /*! + * \brief Computes the epsilon used for numeric differentiation + * for a given value of a primary variable. + * + * \param priVar The value of the primary variable + */ + static Scalar numericEpsilon(const Scalar priVar) + { + // define the base epsilon as the geometric mean of 1 and the + // resolution of the scalar type. E.g. for standard 64 bit + // floating point values, the resolution is about 10^-16 and + // the base epsilon is thus approximately 10^-8. + /* + static const Scalar baseEps + = Dumux::geometricMean(std::numeric_limits::epsilon(), 1.0); + */ + static const Scalar baseEps = 1e-10; + assert(std::numeric_limits::epsilon()*1e4 < baseEps); + // the epsilon value used for the numeric differentiation is + // now scaled by the absolute value of the primary variable... + return baseEps*(std::abs(priVar) + 1.0); + } + +protected: + template + static void evalPartialDerivatives_(Assembler& assembler, + const Element& element, + const FVElementGeometry& fvGeometry, + const SolutionVector& curSol, + const ElementVolumeVariables& prevElemVolVars, + ElementVolumeVariables& curElemVolVars, + const ElementFaceVariables& prevElemFaceVars, + ElementFaceVariables& curElemFaceVars, + ElementFluxVariablesCache& elemFluxVarsCache, + const ElementBoundaryTypes& elemBcTypes, + JacobianMatrix& matrix, + const NumCellCenterEqVector& ccResidual, + const FaceSolutionVector& faceResidualCache) +{ + // compute the derivatives of the cell center residuals with respect to cell center dofs + dCCdCC_(assembler, element, fvGeometry, curSol, prevElemVolVars, curElemVolVars, prevElemFaceVars, curElemFaceVars, elemFluxVarsCache, elemBcTypes, matrix, ccResidual); + + // compute the derivatives of the cell center residuals with respect to face dofs + dCCdFace_(assembler, element, fvGeometry, curSol, prevElemVolVars, curElemVolVars, prevElemFaceVars, curElemFaceVars, elemFluxVarsCache, elemBcTypes, matrix, ccResidual); + + // compute the derivatives of the face residuals with respect to cell center dofs + dFacedCC_(assembler, element, fvGeometry, curSol, prevElemVolVars, curElemVolVars, prevElemFaceVars, curElemFaceVars, elemFluxVarsCache, elemBcTypes, matrix, faceResidualCache); + + // compute the derivatives of the face residuals with respect to face dofs + dFacedFace_(assembler, element, fvGeometry, curSol, prevElemVolVars, curElemVolVars, prevElemFaceVars, curElemFaceVars, elemFluxVarsCache, elemBcTypes, matrix, faceResidualCache); +} + +/*! +* \brief Computes the derivatives of the cell center residuals with respect to cell center dofs +*/ +template +static void dCCdCC_(Assembler& assembler, + const Element& element, + const FVElementGeometry& fvGeometry, + const SolutionVector& curSol, + const ElementVolumeVariables& prevElemVolVars, + ElementVolumeVariables& curElemVolVars, + const ElementFaceVariables& prevElemFaceVars, + const ElementFaceVariables& curElemFaceVars, + ElementFluxVariablesCache& elemFluxVarsCache, + const ElementBoundaryTypes& elemBcTypes, + JacobianMatrix& matrix, + const NumCellCenterEqVector& ccResidual) +{ + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + + const auto& problem = assembler.problem(); + auto& localResidual = assembler.localResidual(); + auto& gridVariables = assembler.gridVariables(); + + // build derivatives with for cell center dofs w.r.t. cell center dofs + const auto cellCenterGlobalI = assembler.fvGridGeometry().elementMapper().index(element); + + const auto& connectivityMap = assembler.fvGridGeometry().connectivityMap(); + + for(const auto& globalJ : connectivityMap(cellCenterIdx, cellCenterIdx, cellCenterGlobalI)) + { + // get the volVars of the element with respect to which we are going to build the derivative + auto&& scvJ = fvGeometry.scv(globalJ); + const auto elementJ = fvGeometry.fvGridGeometry().element(globalJ); + auto& curVolVars = getVolVarAccess(gridVariables.curGridVolVars(), curElemVolVars, scvJ); + VolumeVariables origVolVars(curVolVars); + + for(auto pvIdx : PriVarIndices(cellCenterIdx)) + { + PrimaryVariables priVars(CellCenterPrimaryVariables(curSol[cellCenterIdx][globalJ]), + FacePrimaryVariables(0.0)); + + const Scalar eps = numericEpsilon(priVars[pvIdx], cellCenterIdx, cellCenterIdx); + priVars[pvIdx] += eps; + ElementSolutionVector elemSol{std::move(priVars)}; + curVolVars.update(elemSol, problem, elementJ, scvJ); + + const auto deflectedResidual = localResidual.evalCellCenter(problem, element, fvGeometry, prevElemVolVars, curElemVolVars, + prevElemFaceVars, curElemFaceVars, + elemBcTypes, elemFluxVarsCache); + + auto partialDeriv = (deflectedResidual - ccResidual); + partialDeriv /= eps; + + // update the global jacobian matrix with the current partial derivatives + updateGlobalJacobian_(matrix[cellCenterIdx][cellCenterIdx], cellCenterGlobalI, globalJ, pvIdx, partialDeriv); + + // restore the original volVars + curVolVars = origVolVars; + } + } +} + +/*! +* \brief Computes the derivatives of the cell center residuals with respect to face dofs +*/ +template +static void dCCdFace_(Assembler& assembler, + const Element& element, + const FVElementGeometry& fvGeometry, + const SolutionVector& curSol, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars, + const ElementFaceVariables& prevElemFaceVars, + ElementFaceVariables& curElemFaceVars, + ElementFluxVariablesCache& elemFluxVarsCache, + const ElementBoundaryTypes& elemBcTypes, + JacobianMatrix& matrix, + const NumCellCenterEqVector& ccResidual) +{ + // build derivatives with for cell center dofs w.r.t. face dofs + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + + const auto& problem = assembler.problem(); + auto& localResidual = assembler.localResidual(); + auto& gridVariables = assembler.gridVariables(); + + // build derivatives with for cell center dofs w.r.t. cell center dofs + const auto cellCenterGlobalI = assembler.fvGridGeometry().elementMapper().index(element); + + for(const auto& scvfJ : scvfs(fvGeometry)) + { + const auto globalJ = scvfJ.dofIndex(); + + // get the faceVars of the face with respect to which we are going to build the derivative + auto& faceVars = getFaceVarAccess(gridVariables.curGridFaceVars(), curElemFaceVars, scvfJ); + const auto origFaceVars(faceVars); + + for(auto pvIdx : PriVarIndices(faceIdx)) + { + FacePrimaryVariables facePriVars(curSol[faceIdx][globalJ]); + const Scalar eps = numericEpsilon(facePriVars[pvIdx], cellCenterIdx, faceIdx); + facePriVars[pvIdx] += eps; + + faceVars.updateOwnFaceOnly(facePriVars); + + const auto deflectedResidual = localResidual.evalCellCenter(problem, element, fvGeometry, + prevElemVolVars, curElemVolVars, + prevElemFaceVars, curElemFaceVars, + elemBcTypes, elemFluxVarsCache); + + auto partialDeriv = (deflectedResidual - ccResidual); + partialDeriv /= eps; + + // update the global jacobian matrix with the current partial derivatives + updateGlobalJacobian_(matrix[cellCenterIdx][faceIdx], cellCenterGlobalI, globalJ, pvIdx - Indices::faceOffset, partialDeriv); + + // restore the original faceVars + faceVars = origFaceVars; + } + } +} + +/*! +* \brief Computes the derivatives of the face residuals with respect to cell center dofs +*/ +template +static void dFacedCC_(Assembler& assembler, + const Element& element, + const FVElementGeometry& fvGeometry, + const SolutionVector& curSol, + const ElementVolumeVariables& prevElemVolVars, + ElementVolumeVariables& curElemVolVars, + const ElementFaceVariables& prevElemFaceVars, + const ElementFaceVariables& curElemFaceVars, + ElementFluxVariablesCache& elemFluxVarsCache, + const ElementBoundaryTypes& elemBcTypes, + JacobianMatrix& matrix, + const FaceSolutionVector& cachedResidual) +{ + for(auto&& scvf : scvfs(fvGeometry)) + { + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + + const auto& problem = assembler.problem(); + auto& localResidual = assembler.localResidual(); + auto& gridVariables = assembler.gridVariables(); + const auto& connectivityMap = assembler.fvGridGeometry().connectivityMap(); + + // set the actual dof index + const auto faceGlobalI = scvf.dofIndex(); + + // build derivatives with for face dofs w.r.t. cell center dofs + for(const auto& globalJ : connectivityMap(faceIdx, cellCenterIdx, scvf.index())) + { + // get the volVars of the element with respect to which we are going to build the derivative + auto&& scvJ = fvGeometry.scv(globalJ); + const auto elementJ = fvGeometry.fvGridGeometry().element(globalJ); + auto& curVolVars = getVolVarAccess(gridVariables.curGridVolVars(), curElemVolVars, scvJ); + VolumeVariables origVolVars(curVolVars); + + for(auto pvIdx : PriVarIndices(cellCenterIdx)) + { + PrimaryVariables priVars(CellCenterPrimaryVariables(curSol[cellCenterIdx][globalJ]), + FacePrimaryVariables(0.0)); + + const Scalar eps = numericEpsilon(priVars[pvIdx], faceIdx, cellCenterIdx); + priVars[pvIdx] += eps; + ElementSolutionVector elemSol{std::move(priVars)}; + curVolVars.update(elemSol, problem, elementJ, scvJ); + + const auto deflectedResidual = localResidual.evalFace(problem, element, fvGeometry, scvf, + prevElemVolVars, curElemVolVars, + prevElemFaceVars, curElemFaceVars, + elemBcTypes, elemFluxVarsCache); + + auto partialDeriv = (deflectedResidual - cachedResidual[scvf.localFaceIdx()]); + partialDeriv /= eps; + + // update the global jacobian matrix with the current partial derivatives + updateGlobalJacobian_(matrix[faceIdx][cellCenterIdx], faceGlobalI, globalJ, pvIdx, partialDeriv); + + // restore the original volVars + curVolVars = origVolVars; + } + } + } +} + +/*! +* \brief Computes the derivatives of the face residuals with respect to cell center dofs +*/ +template +static void dFacedFace_(Assembler& assembler, + const Element& element, + const FVElementGeometry& fvGeometry, + const SolutionVector& curSol, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars, + const ElementFaceVariables& prevElemFaceVars, + ElementFaceVariables& curElemFaceVars, + ElementFluxVariablesCache& elemFluxVarsCache, + const ElementBoundaryTypes& elemBcTypes, + JacobianMatrix& matrix, + const FaceSolutionVector& cachedResidual) +{ + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::FaceIdx faceIdx; + + const auto& problem = assembler.problem(); + auto& localResidual = assembler.localResidual(); + const auto& connectivityMap = assembler.fvGridGeometry().connectivityMap(); + auto& gridVariables = assembler.gridVariables(); + + for(auto&& scvf : scvfs(fvGeometry)) + { + // set the actual dof index + const auto faceGlobalI = scvf.dofIndex(); + + // build derivatives with for face dofs w.r.t. cell center dofs + for(const auto& globalJ : connectivityMap(faceIdx, faceIdx, scvf.index())) + { + // get the faceVars of the face with respect to which we are going to build the derivative + auto& faceVars = getFaceVarAccess(gridVariables.curGridFaceVars(), curElemFaceVars, scvf); + const auto origFaceVars(faceVars); + + for(auto pvIdx : PriVarIndices(faceIdx)) + { + auto faceSolution = FaceSolution(scvf, curSol[faceIdx], assembler.fvGridGeometry()); + + const Scalar eps = numericEpsilon(faceSolution[globalJ][pvIdx], faceIdx, faceIdx); + + faceSolution[globalJ][pvIdx] += eps; + faceVars.update(faceSolution, problem, element, fvGeometry, scvf); + + const auto deflectedResidual = localResidual.evalFace(problem, element, fvGeometry, scvf, + prevElemVolVars, curElemVolVars, + prevElemFaceVars, curElemFaceVars, + elemBcTypes, elemFluxVarsCache); + + auto partialDeriv = (deflectedResidual - cachedResidual[scvf.localFaceIdx()]); + partialDeriv /= eps; + + // update the global jacobian matrix with the current partial derivatives + updateGlobalJacobian_(matrix[faceIdx][faceIdx], faceGlobalI, globalJ, pvIdx - Indices::faceOffset, partialDeriv); + + // restore the original faceVars + faceVars = origFaceVars; + } + } + } +} + + + +static Scalar numericEpsilon(const Scalar priVar, const int idx1, const int idx2) +{ + // define the base epsilon as the geometric mean of 1 and the + // resolution of the scalar type. E.g. for standard 64 bit + // floating point values, the resolution is about 10^-16 and + // the base epsilon is thus approximately 10^-8. + /* + static const Scalar baseEps + = Dumux::geometricMean(std::numeric_limits::epsilon(), 1.0); + */ + using BaseEpsilon = typename GET_PROP(TypeTag, BaseEpsilon); + const std::array, 2> baseEps_ = BaseEpsilon::getEps(); + + + static const Scalar baseEps = baseEps_[idx1][idx2]; + assert(std::numeric_limits::epsilon()*1e4 < baseEps); + // the epsilon value used for the numeric differentiation is + // now scaled by the absolute value of the primary variable... + return baseEps*(std::abs(priVar) + 1.0); +} + + +/*! + * \brief Updates the current global Jacobian matrix with the + * partial derivatives of all equations in regard to the + * primary variable 'pvIdx' at dof 'col'. Specialization for cc methods. + */ +template +static void updateGlobalJacobian_(SubMatrix& matrix, + const int globalI, + const int globalJ, + const int pvIdx, + const CCOrFacePrimaryVariables &partialDeriv) +{ + for (int eqIdx = 0; eqIdx < partialDeriv.size(); eqIdx++) + { + // A[i][col][eqIdx][pvIdx] is the rate of change of + // the residual of equation 'eqIdx' at dof 'i' + // depending on the primary variable 'pvIdx' at dof + // 'col'. + + assert(pvIdx >= 0); + assert(eqIdx < matrix[globalI][globalJ].size()); + assert(pvIdx < matrix[globalI][globalJ][eqIdx].size()); + matrix[globalI][globalJ][eqIdx][pvIdx] += partialDeriv[eqIdx]; + Valgrind::CheckDefined(matrix[globalI][globalJ][eqIdx][pvIdx]); + } +} + + + + + +private: + template + static typename std::enable_if::type + getVolVarAccess(GridVolumeVariables& gridVolVars, ElementVolumeVariables& elemVolVars, const SubControlVolume& scv) + { return elemVolVars[scv]; } + + template + static typename std::enable_if::type + getVolVarAccess(GridVolumeVariables& gridVolVars, ElementVolumeVariables& elemVolVars, const SubControlVolume& scv) + { return gridVolVars.volVars(scv); } + + template + static typename std::enable_if::type + getFaceVarAccess(GlobalFaceVars& gridFaceVars, ElementFaceVariables& elemFaceVars, const SubControlVolumeFace& scvf) + { return elemFaceVars[scvf]; } + + template + static typename std::enable_if::type + getFaceVarAccess(GlobalFaceVars& gridFaceVars, ElementFaceVariables& elemFaceVars, const SubControlVolumeFace& scvf) + { return gridFaceVars.faceVars(scvf.index()); } +}; + +} // end namespace Dumux + +#endif diff --git a/dumux/common/properties.hh b/dumux/common/properties.hh index 5b79cae1e2e6bbd18de694e8887539754146c77a..cb03e8348de6ba7a5988adbebbd6b9a33283ba84 100644 --- a/dumux/common/properties.hh +++ b/dumux/common/properties.hh @@ -157,5 +157,23 @@ NEW_PROP_TAG(EvaluatePermeabilityAtScvfIP); NEW_PROP_TAG(Chemistry); //!< The chemistry class with which solves equlibrium reactions NEW_PROP_TAG(NumMajorComponents); //!< Number of major fluid components which are considered in the calculation of the phase density NEW_PROP_TAG(SetMoleFractionsForWettingPhase); //!< Set the mole fraction in the wetting or non-wetting phase + +///////////////////////////////////////////////////////////// +// Properties used by the staggered-grid discretization method +///////////////////////////////////////////////////////////// +NEW_PROP_TAG(NumEqCellCenter); //! The number of equations for cell-centered dofs +NEW_PROP_TAG(NumEqFace); //! The number of equations for face dofs +NEW_PROP_TAG(CellCenterSolutionVector); //! The solution vector type for cell-centered dofs +NEW_PROP_TAG(FaceSolutionVector); //! The solution vector type for face dofs +NEW_PROP_TAG(GlobalFaceVars); //! Class containing face-related data +NEW_PROP_TAG(CellCenterPrimaryVariables); //! The primary variables container type for cell-centered dofs +NEW_PROP_TAG(FacePrimaryVariables); //! The primary variables container type for face dofs +NEW_PROP_TAG(IntersectionMapper); //! Specifies the intersection mapper +NEW_PROP_TAG(DofTypeIndices); //! Specifies index types for accessing the multi type block vectors/matrices +NEW_PROP_TAG(StaggeredGeometryHelper); //! Specifies a helper class for the staggered grid geometry +NEW_PROP_TAG(StaggeredPrimaryVariables); //! The hybrid primary variables container type +NEW_PROP_TAG(BaseEpsilon); //! A base epsilon for numerical differentiation, can contain multiple values +NEW_PROP_TAG(FaceVariables); //! Class containing local face-related data +NEW_PROP_TAG(BoundaryValues); //! Class containing local boundary data } } diff --git a/dumux/common/staggeredfvproblem.hh b/dumux/common/staggeredfvproblem.hh new file mode 100644 index 0000000000000000000000000000000000000000..384bbcd3cc62d210a4c12ef3400a86185bc7d51d --- /dev/null +++ b/dumux/common/staggeredfvproblem.hh @@ -0,0 +1,159 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + *****************************************************************************/ +/*! + * \file + * \brief Base class for all problems + */ +#ifndef DUMUX_STAGGERD_FV_PROBLEM_HH +#define DUMUX_STAGGERD_FV_PROBLEM_HH + +#include +#include + +namespace Dumux +{ +/*! + * \ingroup Problems + * \brief Base class for all finite-volume problems + * + * \note All quantities (regarding the units) are specified assuming a + * three-dimensional world. Problems discretized using 2D grids + * are assumed to be extruded by \f$1 m\f$ and 1D grids are assumed + * to have a cross section of \f$1m \times 1m\f$. + */ +template +class StaggeredFVProblem : public FVProblem +{ + using ParentType = FVProblem; + using Implementation = typename GET_PROP_TYPE(TypeTag, Problem); + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using VertexMapper = typename GET_PROP_TYPE(TypeTag, VertexMapper); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + 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 BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using PointSource = typename GET_PROP_TYPE(TypeTag, PointSource); + using PointSourceHelper = typename GET_PROP_TYPE(TypeTag, PointSourceHelper); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using ElementSolutionVector = typename GET_PROP_TYPE(TypeTag, ElementSolutionVector); + using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); + using InitialValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); + + enum { + dim = GridView::dimension, + dimWorld = GridView::dimensionworld + }; + + using Element = typename GridView::template Codim<0>::Entity; + using Vertex = typename GridView::template Codim::Entity; + using CoordScalar = typename GridView::ctype; + using GlobalPosition = Dune::FieldVector; + + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + + + // using GridAdaptModel = ImplicitGridAdapt; + +public: + /*! + * \brief Constructor + * + * \param gridView The simulation's idea about physical space + */ + StaggeredFVProblem(std::shared_ptr fvGridGeometry) + : ParentType(fvGridGeometry) + { } + + /*! + * \brief Evaluate the initial value for a control volume. + * + * \param globalPos The global position + */ + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + { + // Throw an exception (there is no reasonable default value + // for initial values) + DUNE_THROW(Dune::InvalidStateException, + "The problem does not provide " + "an initial() or an initialAtPos() method."); + } + + /*! + * \brief Evaluate the initial value for + * an element (for cell-centered models) + * or vertex (for box / vertex-centered models) + * + * \param entity The dof entity (element or vertex) + */ + template + InitialValues initial(const Entity& entity) const + { + // static_assert(int(Entity::codimension) == 0 || int(Entity::codimension) == dim, "Entity must be element or vertex"); + return asImp_().initialAtPos(entity.center()); + } + + /*! + * \brief Applies the initial solution for all degrees of freedom of the grid. + * + */ + void applyInitialSolution(SolutionVector& sol) const + { + for (const auto& element : elements(this->fvGridGeometry().gridView())) + { + auto fvGeometry = localView(this->fvGridGeometry()); + fvGeometry.bindElement(element); + + // loop over sub control volumes + for (auto&& scv : scvs(fvGeometry)) + { + // let the problem do the dirty work of nailing down + // the initial solution. + auto initPriVars = asImp_().initial(scv)[cellCenterIdx]; + auto dofIdxGlobal = scv.dofIndex(); + sol[cellCenterIdx][dofIdxGlobal] += initPriVars; + } + + // loop over faces + for(auto&& scvf : scvfs(fvGeometry)) + { + auto initPriVars = asImp_().initial(scvf)[faceIdx][scvf.directionIndex()]; + sol[faceIdx][scvf.dofIndex()] = initPriVars; + } + } + } + +protected: + //! Returns the implementation of the problem (i.e. static polymorphism) + Implementation &asImp_() + { return *static_cast(this); } + + //! \copydoc asImp_() + const Implementation &asImp_() const + { return *static_cast(this); } + +}; + +} // end namespace Dumux + +#endif diff --git a/dumux/implicit/staggered/assemblymap.hh b/dumux/discretization/staggered/connectivitymap.hh similarity index 83% rename from dumux/implicit/staggered/assemblymap.hh rename to dumux/discretization/staggered/connectivitymap.hh index 45331e432b4a90986a1eb1e197e625b90f069f33..c71587679a5aa483b30114db32352ed029a7cb98 100644 --- a/dumux/implicit/staggered/assemblymap.hh +++ b/dumux/discretization/staggered/connectivitymap.hh @@ -22,22 +22,22 @@ * that contribute to the derivative calculation. This is used for * finite-volume schemes with symmetric sparsity pattern in the global matrix. */ -#ifndef DUMUX_STAGGERED_ASSEMBLY_MAP_HH -#define DUMUX_STAGGERED_ASSEMBLY_MAP_HH +#ifndef DUMUX_STAGGERED_CONNECTIVITY_MAP_HH +#define DUMUX_STAGGERED_CONNECTIVITY_MAP_HH -#include - -#include +#include +#include namespace Dumux { template -class StaggeredAssemblyMap +class StaggeredConnectivityMap { using Problem = typename GET_PROP_TYPE(TypeTag, Problem); using GridView = typename GET_PROP_TYPE(TypeTag, GridView); using FluxVariables = typename GET_PROP_TYPE(TypeTag, FluxVariables); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); using IndexType = typename GridView::IndexSet::IndexType; @@ -62,11 +62,11 @@ public: * * \param problem The problem which we want to simulate. */ - void init(const Problem& problem) + void update(const FVGridGeometry& fvGridGeometry) { - const auto numDofsCC = problem.model().numCellCenterDofs(); - const auto numDofsFace = problem.model().numFaceDofs(); - const auto numBoundaryFacets = problem.model().fvGridGeometry().numBoundaryScvf(); + const auto numDofsCC = fvGridGeometry.gridView().size(0); + const auto numDofsFace = fvGridGeometry.gridView().size(1); + const auto numBoundaryFacets = fvGridGeometry.numBoundaryScvf(); cellCenterToCellCenterMap_.resize(numDofsCC); cellCenterToFaceMap_.resize(numDofsCC); faceToCellCenterMap_.resize(2*numDofsFace - numBoundaryFacets); @@ -78,22 +78,22 @@ public: fullfaceToFaceStencils.resize(numDofsFace); FluxVariables fluxVars; - for(auto&& element: elements(problem.gridView())) + for(auto&& element: elements(fvGridGeometry.gridView())) { // restrict the FvGeometry locally and bind to the element - auto fvGeometry = localView(problem.model().fvGridGeometry()); + auto fvGeometry = localView(fvGridGeometry); fvGeometry.bindElement(element); // loop over sub control faces for (auto&& scvf : scvfs(fvGeometry)) { - const auto dofIdxCellCenter = problem.elementMapper().index(element); - fluxVars.computeCellCenterToCellCenterStencil(cellCenterToCellCenterMap_[dofIdxCellCenter], problem, element, fvGeometry, scvf); - fluxVars.computeCellCenterToFaceStencil(cellCenterToFaceMap_[dofIdxCellCenter], problem, element, fvGeometry, scvf); + const auto dofIdxCellCenter = fvGridGeometry.elementMapper().index(element); + fluxVars.computeCellCenterToCellCenterStencil(cellCenterToCellCenterMap_[dofIdxCellCenter], element, fvGeometry, scvf); + fluxVars.computeCellCenterToFaceStencil(cellCenterToFaceMap_[dofIdxCellCenter], element, fvGeometry, scvf); const auto scvfIdx = scvf.index(); - fluxVars.computeFaceToCellCenterStencil(faceToCellCenterMap_[scvfIdx],problem, fvGeometry, scvf); - fluxVars.computeFaceToFaceStencil(faceToFaceMap_[scvfIdx],problem, fvGeometry, scvf); + fluxVars.computeFaceToCellCenterStencil(faceToCellCenterMap_[scvfIdx], fvGeometry, scvf); + fluxVars.computeFaceToFaceStencil(faceToFaceMap_[scvfIdx], fvGeometry, scvf); } } } diff --git a/dumux/discretization/staggered/elementfacevariables.hh b/dumux/discretization/staggered/elementfacevariables.hh new file mode 100644 index 0000000000000000000000000000000000000000..b9ab9e87f191d906fdb7a6a6063c4d335c54a1c9 --- /dev/null +++ b/dumux/discretization/staggered/elementfacevariables.hh @@ -0,0 +1,175 @@ +// -*- 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 . * + *****************************************************************************/ +/*! + * \file + * \brief The face variables class for free flow staggered grid models + */ +#ifndef DUMUX_DISCRETIZATION_STAGGERED_ELEMENTFACEVARIABLES_HH +#define DUMUX_DISCRETIZATION_STAGGERED_ELEMENTFACEVARIABLES_HH + +#include + +namespace Dumux +{ + +/*! + * \ingroup ImplicitModel + * \brief Base class for the face variables vector + */ +template +class StaggeredElementFaceVariables +{}; + + +template +class StaggeredElementFaceVariables +{ + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Element = typename GridView::template Codim<0>::Entity; + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); + using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); + using FaceVariables = typename GET_PROP_TYPE(TypeTag, FaceVariables); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using IndexType = typename GridView::IndexSet::IndexType; + +public: + + StaggeredElementFaceVariables(const GlobalFaceVars& globalFacesVars) : globalFaceVarsPtr_(&globalFacesVars) {} + + const FaceVariables& operator [](const SubControlVolumeFace& scvf) const + { return globalFaceVars().faceVars(scvf.index()); } + + // operator for the access with an index + // needed for cc methods for the access to the boundary volume variables + const FaceVariables& operator [](const IndexType scvfIdx) const + { return globalFaceVars().faceVars(scvfIdx); } + + + //! For compatibility reasons with the case of not storing the face vars. + //! function to be called before assembling an element, preparing the vol vars within the stencil + void bind(const Element& element, + const FVElementGeometry& fvGeometry, + const SolutionVector& sol) + {} + + // Binding of an element, prepares only the face variables of the element + // specialization for Staggered models + void bindElement(const Element& element, + const FVElementGeometry& fvGeometry, + const SolutionVector& sol) + {} + + + //! The global volume variables object we are a restriction of + const GlobalFaceVars& globalFaceVars() const + { return *globalFaceVarsPtr_; } + + +private: + const GlobalFaceVars* globalFaceVarsPtr_; +}; + +template +class StaggeredElementFaceVariables +{ + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Element = typename GridView::template Codim<0>::Entity; + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); + using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); + using FaceVariables = typename GET_PROP_TYPE(TypeTag, FaceVariables); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using IndexType = typename GridView::IndexSet::IndexType; + + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + +public: + + StaggeredElementFaceVariables(const GlobalFaceVars& globalFacesVars) : globalFaceVarsPtr_(&globalFacesVars) {} + + const FaceVariables& operator [](const SubControlVolumeFace& scvf) const + { return faceVariables_[scvf.localFaceIdx()]; } + + // operator for the access with an index + const FaceVariables& operator [](const IndexType scvfIdx) const + { return faceVariables_[getLocalIdx_(scvfIdx)]; } + + FaceVariables& operator [](const SubControlVolumeFace& scvf) + { return faceVariables_[scvf.localFaceIdx()]; } + + // operator for the access with an index + FaceVariables& operator [](const IndexType scvfIdx) + { return faceVariables_[getLocalIdx_(scvfIdx)]; } + + //! For compatibility reasons with the case of not storing the vol vars. + //! function to be called before assembling an element, preparing the vol vars within the stencil + void bind(const Element& element, + const FVElementGeometry& fvGeometry, + const SolutionVector& sol) + { + faceVariables_.resize(fvGeometry.numScvf()); + faceVarIndices_.resize(fvGeometry.numScvf()); + + for(auto&& scvf : scvfs(fvGeometry)) + { + faceVariables_[scvf.localFaceIdx()].update(sol[faceIdx], globalFaceVars().problem(), element, fvGeometry, scvf); + faceVarIndices_[scvf.localFaceIdx()] = scvf.index(); + } + } + + // Binding of an element, prepares only the face variables of the element + // specialization for Staggered models + void bindElement(const Element& element, + const FVElementGeometry& fvGeometry, + const SolutionVector& sol) + { + faceVariables_.resize(fvGeometry.numScvf()); + faceVarIndices_.resize(fvGeometry.numScvf()); + + for(auto&& scvf : scvfs(fvGeometry)) + { + faceVariables_[scvf.localFaceIdx()].updateOwnFaceOnly(sol[faceIdx][scvf.dofIndex()]); + faceVarIndices_[scvf.localFaceIdx()] = scvf.index(); + } + } + + //! The global volume variables object we are a restriction of + const GlobalFaceVars& globalFaceVars() const + { return *globalFaceVarsPtr_; } + +private: + + const int getLocalIdx_(const int scvfIdx) const + { + auto it = std::find(faceVarIndices_.begin(), faceVarIndices_.end(), scvfIdx); + assert(it != faceVarIndices_.end() && "Could not find the current face variables for scvfIdx!"); + return std::distance(faceVarIndices_.begin(), it); + } + + const GlobalFaceVars* globalFaceVarsPtr_; + std::vector faceVarIndices_; + std::vector faceVariables_; +}; + +} // end namespace + +#endif diff --git a/dumux/discretization/staggered/elementfluxvariablescache.hh b/dumux/discretization/staggered/elementfluxvariablescache.hh index 5feb420cea47a244087e541603edce95dcf22c73..adf2e895cefcf40fee06d28c5d556ee3f1ca30c3 100644 --- a/dumux/discretization/staggered/elementfluxvariablescache.hh +++ b/dumux/discretization/staggered/elementfluxvariablescache.hh @@ -23,7 +23,7 @@ #ifndef DUMUX_DISCRETIZATION_STAGGERED_ELEMENT_FLUXVARSCACHE_HH #define DUMUX_DISCRETIZATION_STAGGERED_ELEMENT_FLUXVARSCACHE_HH -#include +#include namespace Dumux { diff --git a/dumux/discretization/staggered/elementvolumevariables.hh b/dumux/discretization/staggered/elementvolumevariables.hh index 0ada499689039043105ab4dbc8ba6542af3f6e9b..9e2cc021ceed2da95fcc04fa9cc5385fa7c8c1ea 100644 --- a/dumux/discretization/staggered/elementvolumevariables.hh +++ b/dumux/discretization/staggered/elementvolumevariables.hh @@ -23,7 +23,7 @@ #ifndef DUMUX_DISCRETIZATION_STAGGERED_ELEMENT_VOLUMEVARIABLES_HH #define DUMUX_DISCRETIZATION_STAGGERED_ELEMENT_VOLUMEVARIABLES_HH -#include +#include namespace Dumux { @@ -93,8 +93,11 @@ class StaggeredElementVolumeVariables::Entity; + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + + static constexpr auto numEqCellCenter = GET_PROP_VALUE(TypeTag, NumEqCellCenter); + public: //! Constructor @@ -115,30 +124,35 @@ public: const FVElementGeometry& fvGeometry, const SolutionVector& sol) { - auto eIdx = globalVolVars().problem_().elementMapper().index(element); + clear(); - // stencil information - const auto& neighborStencil = globalVolVars().problem_().model().stencils(element).neighborStencil(); - const auto numDofs = neighborStencil.size() + 1; + const auto& problem = globalVolVars().problem(); + const auto& fvGridGeometry = fvGeometry.fvGridGeometry(); + const auto globalI = fvGridGeometry.elementMapper().index(element); + const auto map = fvGridGeometry.connectivityMap(); + const auto& connectivityMapI = map(cellCenterIdx, cellCenterIdx, globalI); + const auto numDofs = connectivityMapI.size(); + + auto&& scvI = fvGeometry.scv(globalI); // resize local containers to the required size (for internal elements) volumeVariables_.resize(numDofs); volVarIndices_.resize(numDofs); int localIdx = 0; - // update the volume variables of the element at hand - auto&& scvI = fvGeometry.scv(eIdx); - volumeVariables_[localIdx].update(sol[eIdx], globalVolVars().problem_(), element, scvI); - volVarIndices_[localIdx] = scvI.index(); - ++localIdx; - - // Update the volume variables of the neighboring elements - for (auto globalJ : neighborStencil) + // Update the volume variables of the element at hand and the neighboring elements + for (auto globalJ : connectivityMapI) { - const auto& elementJ = fvGeometry.fvGridGeometry().element(globalJ); + const auto& elementJ = fvGridGeometry.element(globalJ); auto&& scvJ = fvGeometry.scv(globalJ); - volumeVariables_[localIdx].update(sol[globalJ], globalVolVars().problem_(), elementJ, scvJ); - volVarIndices_[localIdx] = scvJ.index(); + PrimaryVariables priVars(0.0); + priVars[cellCenterIdx] = sol[cellCenterIdx][globalJ]; + ElementSolution elemSol{std::move(priVars)}; + volumeVariables_[localIdx].update(elemSol, + problem, + elementJ, + scvJ); + volVarIndices_[localIdx] = scvJ.dofIndex(); ++localIdx; } @@ -149,18 +163,33 @@ public: if (!scvf.boundary()) continue; - // check if boundary is a pure dirichlet boundary - const auto bcTypes = globalVolVars().problem_().boundaryTypes(element, scvf); - if (bcTypes.hasOnlyDirichlet()) - { - const auto dirichletPriVars = globalVolVars().problem_().dirichlet(element, scvf); + const auto bcTypes = problem.boundaryTypes(element, scvf); + + PrimaryVariables boundaryPriVars(0.0); - volumeVariables_.resize(localIdx+1); - volVarIndices_.resize(localIdx+1); - volumeVariables_[localIdx].update(dirichletPriVars, globalVolVars().problem_(), element, scvI); - volVarIndices_[localIdx] = scvf.outsideScvIdx(); - ++localIdx; + for(int eqIdx = 0; eqIdx < numEqCellCenter; ++eqIdx) + { + if(bcTypes.isDirichlet(eqIdx) || bcTypes.isDirichletCell(eqIdx)) + boundaryPriVars[cellCenterIdx][eqIdx] = problem.dirichlet(element, scvf)[cellCenterIdx][eqIdx]; + else if(bcTypes.isNeumann(eqIdx) || bcTypes.isOutflow(eqIdx) || bcTypes.isSymmetry()) + boundaryPriVars[cellCenterIdx][eqIdx] = sol[cellCenterIdx][scvf.insideScvIdx()][eqIdx]; + //TODO: this assumes a zero-gradient for e.g. the pressure on the boundary + // could be made more general by allowing a non-zero-gradient, provided in problem file + else + if(eqIdx == Indices::pressureIdx) + DUNE_THROW(Dune::InvalidStateException, "Face at: " << scvf.center() << " has neither Dirichlet nor Neumann BC."); } + + volumeVariables_.resize(localIdx+1); + volVarIndices_.resize(localIdx+1); + + ElementSolution elemSol{std::move(boundaryPriVars)}; + volumeVariables_[localIdx].update(elemSol, + problem, + element, + scvI); + volVarIndices_[localIdx] = scvf.outsideScvIdx(); + ++localIdx; } } @@ -170,13 +199,21 @@ public: const FVElementGeometry& fvGeometry, const SolutionVector& sol) { - auto eIdx = globalVolVars().problem_().elementMapper().index(element); + clear(); + + const auto eIdx = fvGeometry.fvGridGeometry().elementMapper().index(element); volumeVariables_.resize(1); volVarIndices_.resize(1); // update the volume variables of the element auto&& scv = fvGeometry.scv(eIdx); - volumeVariables_[0].update(sol[eIdx], globalVolVars().problem_(), element, scv); + PrimaryVariables priVars(0.0); + priVars[cellCenterIdx] = sol[cellCenterIdx][eIdx]; + ElementSolution elemSol{std::move(priVars)}; + volumeVariables_[0].update(elemSol, + globalVolVars().problem(), + element, + scv); volVarIndices_[0] = scv.dofIndex(); } @@ -196,6 +233,13 @@ public: const GlobalVolumeVariables& globalVolVars() const { return *globalVolVarsPtr_; } + //! Clear all local storage + void clear() + { + volVarIndices_.clear(); + volumeVariables_.clear(); + } + private: const GlobalVolumeVariables* globalVolVarsPtr_; diff --git a/dumux/discretization/staggered/facesolution.hh b/dumux/discretization/staggered/facesolution.hh new file mode 100644 index 0000000000000000000000000000000000000000..d36ea605aa5dd38704e9f01a6c16e3e82e6f8ccd --- /dev/null +++ b/dumux/discretization/staggered/facesolution.hh @@ -0,0 +1,92 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * 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 . * + *****************************************************************************/ +/*! + * \file + * \brief The global volume variables class for cell centered models + */ +#ifndef DUMUX_DISCRETIZATION_STAGGERED_FACE_SOLUTION_HH +#define DUMUX_DISCRETIZATION_STAGGERED_FACE_SOLUTION_HH + +#include +#include + +namespace Dumux +{ + +template +class StaggeredFaceSolution +{ + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using Element = typename GridView::template Codim<0>::Entity; + using FaceSolutionVector = typename GET_PROP_TYPE(TypeTag, FaceSolutionVector); + using FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); + + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + +public: + + StaggeredFaceSolution(const SubControlVolumeFace& scvf, const FaceSolutionVector& sol, + const FVGridGeometry& fvGridGeometry) + { + const auto& connectivityMap = fvGridGeometry.connectivityMap(); + const auto& stencil = connectivityMap(faceIdx, faceIdx, scvf.index()); + + facePriVars_.reserve(stencil.size()); + map_.reserve(stencil.size()); + + for(const auto dofJ : stencil) + { + map_.push_back(dofJ); + facePriVars_.push_back(sol[dofJ]); + } + } + + //! bracket operator const access + template + const FacePrimaryVariables& operator [](IndexType globalFaceDofIdx) const + { + const auto pos = std::find(map_.begin(), map_.end(), globalFaceDofIdx); + assert (pos != map_.end()); + return facePriVars_[pos - map_.begin()]; + } + + //! bracket operator + template + FacePrimaryVariables& operator [](IndexType globalFaceDofIdx) + { + const auto pos = std::find(map_.begin(), map_.end(), globalFaceDofIdx); + assert (pos != map_.end()); + return facePriVars_[pos - map_.begin()]; + } + + +private: + + std::vector facePriVars_; + std::vector map_; +}; + +} // end namespace + +#endif diff --git a/dumux/discretization/staggered/freeflow/facevariables.hh b/dumux/discretization/staggered/freeflow/facevariables.hh index f9591f5101453f9afe0099efc4b7e13a72187293..337b6e419d801d6615d80ff09232be05117b7f4b 100644 --- a/dumux/discretization/staggered/freeflow/facevariables.hh +++ b/dumux/discretization/staggered/freeflow/facevariables.hh @@ -18,34 +18,171 @@ *****************************************************************************/ /*! * \file - * \brief The face variables class for free flow staggered grid models + * \brief The face variables class for free flow staggered grid models. + * Contains all relevant velocities for the assembly of the momentum balance. */ #ifndef DUMUX_DISCRETIZATION_STAGGERED_FREEFLOW_FACEVARIABLES_HH #define DUMUX_DISCRETIZATION_STAGGERED_FREEFLOW_FACEVARIABLES_HH -#include +#include namespace Dumux { + +namespace Properties +{ + NEW_PROP_TAG(StaggeredFaceSolution); +} + template class StaggeredFaceVariables { 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 FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); + using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + + static constexpr int dimWorld = GridView::dimensionworld; + static constexpr int numPairs = (dimWorld == 2) ? 2 : 4; + + using GlobalPosition = Dune::FieldVector; + using Element = typename GridView::template Codim<0>::Entity; + + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + public: - void update(const FacePrimaryVariables &facePrivars) + + /*! + * \brief Partial update of the face variables. Only the face itself is considered. + * + * \param priVars The face-specific primary variales + */ + void updateOwnFaceOnly(const FacePrimaryVariables& priVars) + { + velocitySelf_ = priVars[0]; + } + + /*! + * \brief Complete update of the face variables (i.e. velocities for free flow) + * for a given face + * + * \param faceSol The face-specific solution vector + * \param problem The problem + * \param element The element + * \param fvGeometry The finite-volume geometry + * \param scvf The sub-control volume face of interest + */ + template + void update(const SolVector& faceSol, + const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const SubControlVolumeFace& scvf) + { + velocitySelf_ = faceSol[scvf.dofIndex()]; + velocityOpposite_ = faceSol[scvf.dofIndexOpposingFace()]; + + // lambda to conveniently create a ghost face which is outside the domain, parallel to the scvf of interest + auto makeGhostFace = [](const auto& pos) + { + return SubControlVolumeFace(pos, std::vector{0,0}); + }; + + // lambda to check whether there is a parallel face neighbor + auto hasParallelNeighbor = [](const auto& subFaceData) + { + return subFaceData.outerParallelFaceDofIdx >= 0; + }; + + // lambda to check whether there is a normal face neighbor + auto hasNormalNeighbor = [](const auto& subFaceData) + { + return subFaceData.normalPair.second >= 0; + }; + + // handle all sub faces + for(int i = 0; i < scvf.pairData().size(); ++i) + { + const auto& subFaceData = scvf.pairData(i); + + // treat the velocities normal to the face + velocityNormalInside_[i] = faceSol[subFaceData.normalPair.first]; + + if(hasNormalNeighbor(subFaceData)) + { + velocityNormalOutside_[i] = faceSol[subFaceData.normalPair.second]; + } + else + { + const auto& normalFace = fvGeometry.scvf(scvf.insideScvIdx(), subFaceData.localNormalFaceIdx); + const auto normalDirIdx = normalFace.directionIndex(); + velocityNormalOutside_[i] = problem.dirichlet(element, makeGhostFace(subFaceData.virtualOuterNormalFaceDofPos))[faceIdx][normalDirIdx]; + } + + // treat the velocity parallel to the face + velocityParallel_[i] = hasParallelNeighbor(subFaceData) ? + velocityParallel_[i] = faceSol[subFaceData.outerParallelFaceDofIdx] : + problem.dirichlet(element, makeGhostFace(subFaceData.virtualOuterParallelFaceDofPos))[faceIdx][scvf.directionIndex()]; + } + } + + /*! + * \brief Returns the velocity at the face itself + */ + Scalar velocitySelf() const { - velocity_ = facePrivars[0]; + return velocitySelf_; } - Scalar velocity() const + /*! + * \brief Returns the velocity at the opposing face + */ + Scalar velocityOpposite() const { - return velocity_; + return velocityOpposite_; } + /*! + * \brief Returns the velocity at the parallel face + * + * \param localSubFaceIdx The local index of the subface + */ + Scalar velocityParallel(const int localSubFaceIdx) const + { + return velocityParallel_[localSubFaceIdx]; + } + + /*! + * \brief Returns the velocity at the inner normal face + * + * \param localSubFaceIdx The local index of the subface + */ + Scalar velocityNormalInside(const int localSubFaceIdx) const + { + return velocityNormalInside_[localSubFaceIdx]; + } + + /*! + * \brief Returns the velocity at the outer normal face + * + * \param localSubFaceIdx The local index of the subface + */ + Scalar velocityNormalOutside(const int localSubFaceIdx) const + { + return velocityNormalOutside_[localSubFaceIdx]; + } private: - Scalar velocity_; + + Scalar velocitySelf_; + Scalar velocityOpposite_; + std::array velocityParallel_; + std::array velocityNormalInside_; + std::array velocityNormalOutside_; }; } // end namespace diff --git a/dumux/discretization/staggered/fvelementgeometry.hh b/dumux/discretization/staggered/fvelementgeometry.hh index 1806d66e596e7dbd4a06c773229daf0cebf70624..ef34bf41c2da24b92ad7bb0891fc67ad7db5afb5 100644 --- a/dumux/discretization/staggered/fvelementgeometry.hh +++ b/dumux/discretization/staggered/fvelementgeometry.hh @@ -28,7 +28,6 @@ #include #include -#include namespace Dumux { @@ -135,7 +134,7 @@ public: void bindElement(const Element& element) { elementPtr_ = &element; - scvIndices_ = std::vector({fvGridGeometry().problem_().elementMapper().index(*elementPtr_)}); + scvIndices_ = std::vector({fvGridGeometry().elementMapper().index(*elementPtr_)}); } //! The global finite volume geometry we are a restriction of diff --git a/dumux/discretization/staggered/fvgridgeometry.hh b/dumux/discretization/staggered/fvgridgeometry.hh index 8fd8b53b95d5c96c2d172ca38b4420143fa82da5..5dce791e7350f3791322887ed8071b0b15658762 100644 --- a/dumux/discretization/staggered/fvgridgeometry.hh +++ b/dumux/discretization/staggered/fvgridgeometry.hh @@ -26,7 +26,9 @@ #define DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_FVGEOMETRY_HH #include -#include +#include +#include +#include namespace Dumux { @@ -43,9 +45,9 @@ class StaggeredFVGridGeometry // specialization in case the FVElementGeometries are stored globally template -class StaggeredFVGridGeometry +class StaggeredFVGridGeometry : public BaseFVGridGeometry { - using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + using ParentType = BaseFVGridGeometry; using GridView = typename GET_PROP_TYPE(TypeTag, GridView); using IndexType = typename GridView::IndexSet::IndexType; using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); @@ -64,11 +66,12 @@ class StaggeredFVGridGeometry }; using GeometryHelper = typename GET_PROP_TYPE(TypeTag, StaggeredGeometryHelper); + using ConnectivityMap = StaggeredConnectivityMap; public: //! Constructor StaggeredFVGridGeometry(const GridView& gridView) - : gridView_(gridView), elementMap_(gridView), intersectionMapper_(gridView) {} + : ParentType(gridView), elementMap_(gridView), intersectionMapper_(gridView) {} //! The total number of sub control volumes std::size_t numScv() const @@ -94,6 +97,16 @@ public: return intersectionMapper_.numIntersections(); } + //! the total number of dofs + std::size_t numDofs() const + { return numCellCenterDofs() + numFaceDofs(); } + + std::size_t numCellCenterDofs() const + { return this->gridView().size(0); } + + std::size_t numFaceDofs() const + { return this->gridView().size(1); } + // Get an element from a sub control volume contained in it Element element(const SubControlVolume& scv) const { return elementMap_.element(scv.elementIndex()); } @@ -102,15 +115,9 @@ public: Element element(IndexType eIdx) const { return elementMap_.element(eIdx); } - //! Return the gridView this global object lives on - const GridView& gridView() const - { return gridView_; } - //! update all fvElementGeometries (do this again after grid adaption) - void update(const Problem& problem) + void update() { - problemPtr_ = &problem; - // clear containers (necessary after grid refinement) scvs_.clear(); scvfs_.clear(); @@ -119,9 +126,9 @@ public: intersectionMapper_.update(); // determine size of containers - IndexType numScvs = gridView_.size(0); + IndexType numScvs = this->gridView().size(0); IndexType numScvf = 0; - for (const auto& element : elements(gridView_)) + for (const auto& element : elements(this->gridView())) numScvf += element.subEntities(1); // reserve memory @@ -134,9 +141,9 @@ public: // Build the scvs and scv faces IndexType scvfIdx = 0; numBoundaryScvf_ = 0; - for (const auto& element : elements(gridView_)) + for (const auto& element : elements(this->gridView())) { - auto eIdx = problem.elementMapper().index(element); + auto eIdx = this->elementMapper().index(element); // reserve memory for the localToGlobalScvfIdx map auto numLocalFaces = intersectionMapper_.numFaces(element); @@ -151,9 +158,9 @@ public: std::vector scvfsIndexSet; scvfsIndexSet.reserve(numLocalFaces); - GeometryHelper geometryHelper(element, gridView_); + GeometryHelper geometryHelper(element, this->gridView()); - for (const auto& intersection : intersections(gridView_, element)) + for (const auto& intersection : intersections(this->gridView(), element)) { geometryHelper.updateLocalFace(intersectionMapper_, intersection); const int localFaceIndex = geometryHelper.localFaceIndex(); @@ -161,7 +168,7 @@ public: // inner sub control volume faces if (intersection.neighbor()) { - auto nIdx = problem.elementMapper().index(intersection.outside()); + auto nIdx = this->elementMapper().index(intersection.outside()); scvfs_.emplace_back(intersection, intersection.geometry(), scvfIdx, @@ -177,7 +184,7 @@ public: scvfs_.emplace_back(intersection, intersection.geometry(), scvfIdx, - std::vector({eIdx, gridView_.size(0) + numBoundaryScvf_++}), + std::vector({eIdx, this->gridView().size(0) + numBoundaryScvf_++}), geometryHelper ); localToGlobalScvfIndices_[eIdx][localFaceIndex] = scvfIdx; @@ -188,15 +195,10 @@ public: // Save the scvf indices belonging to this scv to build up fv element geometries fast scvfIndicesOfScv_[eIdx] = scvfsIndexSet; } - } - /*! - * \brief Return a local restriction of this global object - * The local object is only functional after calling its bind/bindElement method - * This is a free function that will be found by means of ADL - */ - friend inline FVElementGeometry localView(const StaggeredFVGridGeometry& global) - { return FVElementGeometry(global); } + // build the connectivity map for an effecient assembly + connectivityMap_.update(*this); + } //private: @@ -228,16 +230,21 @@ public: return scvf(localToGlobalScvfIndex(eIdx, localScvfIdx)); } + /*! + * \brief Returns the connectivity map of which dofs have derivatives with respect + * to a given dof. + */ + const ConnectivityMap &connectivityMap() const + { return connectivityMap_; } -private: - const Problem& problem_() const - { return *problemPtr_; } - const Problem* problemPtr_; +private: - const GridView gridView_; + // mappers + ConnectivityMap connectivityMap_; Dumux::ElementMap elementMap_; IntersectionMapper intersectionMapper_; + std::vector scvs_; std::vector scvfs_; std::vector> scvfIndicesOfScv_; @@ -249,132 +256,7 @@ private: template class StaggeredFVGridGeometry { - using Problem = typename GET_PROP_TYPE(TypeTag, Problem); - using GridView = typename GET_PROP_TYPE(TypeTag, GridView); - using IndexType = typename GridView::IndexSet::IndexType; - using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); - using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); - using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); - using Element = typename GridView::template Codim<0>::Entity; - //! The local fvGeometry needs access to the problem - friend typename GET_PROP_TYPE(TypeTag, FVElementGeometry); - -public: - //! Constructor - StaggeredFVGridGeometry(const GridView& gridView) - : gridView_(gridView), elementMap_(gridView) {} - - //! The total number of sub control volumes - std::size_t numScv() const - { - return numScvs_; - } - - //! The total number of sub control volume faces - std::size_t numScvf() const - { - return numScvf_; - } - - //! The total number of boundary sub control volume faces - std::size_t numBoundaryScvf() const - { - return numBoundaryScvf_; - } - - // Get an element from a sub control volume contained in it - Element element(const SubControlVolume& scv) const - { return elementMap_.element(scv.elementIndex()); } - - // Get an element from a global element index - Element element(IndexType eIdx) const - { return elementMap_.element(eIdx); } - - //! Return the gridView this global object lives on - const GridView& gridView() const - { return gridView_; } - - //! update all fvElementGeometries (do this again after grid adaption) - void update(const Problem& problem) - { - problemPtr_ = &problem; - elementMap_.clear(); - - // reserve memory or resize the containers - numScvs_ = gridView_.size(0); - numScvf_ = 0; - numBoundaryScvf_ = 0; - elementMap_.resize(numScvs_); - scvfIndicesOfScv_.resize(numScvs_); - neighborVolVarIndices_.resize(numScvs_); - - // Build the SCV and SCV face - for (const auto& element : elements(gridView_)) - { - auto eIdx = problem.elementMapper().index(element); - - // fill the element map with seeds - elementMap_[eIdx] = element.seed(); - - // the element-wise index sets for finite volume geometry - auto numLocalFaces = element.subEntities(1); - std::vector scvfsIndexSet; - std::vector neighborVolVarIndexSet; - scvfsIndexSet.reserve(numLocalFaces); - neighborVolVarIndexSet.reserve(numLocalFaces); - for (const auto& intersection : intersections(gridView_, element)) - { - // inner sub control volume faces - if (intersection.neighbor()) - { - scvfsIndexSet.push_back(numScvf_++); - neighborVolVarIndexSet.push_back(problem.elementMapper().index(intersection.outside())); - } - // boundary sub control volume faces - else if (intersection.boundary()) - { - scvfsIndexSet.push_back(numScvf_++); - neighborVolVarIndexSet.push_back(numScvs_ + numBoundaryScvf_++); - } - } - - // store the sets of indices in the data container - scvfIndicesOfScv_[eIdx] = scvfsIndexSet; - neighborVolVarIndices_[eIdx] = neighborVolVarIndexSet; - } - } - - const std::vector& scvfIndicesOfScv(IndexType scvIdx) const - { return scvfIndicesOfScv_[scvIdx]; } - - const std::vector& neighborVolVarIndices(IndexType scvIdx) const - { return neighborVolVarIndices_[scvIdx]; } - - /*! - * \brief Return a local restriction of this global object - * The local object is only functional after calling its bind/bindElement method - * This is a free function that will be found by means of ADL - */ - friend inline FVElementGeometry localView(const StaggeredFVGridGeometry& global) - { return FVElementGeometry(global); } - -private: - const Problem& problem_() const - { return *problemPtr_; } - - const Problem* problemPtr_; - - const GridView gridView_; - - // Information on the global number of geometries - IndexType numScvs_; - IndexType numScvf_; - IndexType numBoundaryScvf_; - - // vectors that store the global data - Dumux::ElementMap elementMap_; - std::vector> scvfIndicesOfScv_; - std::vector> neighborVolVarIndices_; + // TODO: implement without caching }; } // end namespace diff --git a/dumux/discretization/staggered/globalfacevariables.hh b/dumux/discretization/staggered/globalfacevariables.hh index 1e63de429179b8050d417206313404084c7870ed..f368f250da120fc90bad067e4be0eea2fba402e6 100644 --- a/dumux/discretization/staggered/globalfacevariables.hh +++ b/dumux/discretization/staggered/globalfacevariables.hh @@ -23,32 +23,54 @@ #ifndef DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_FACEVARIABLES_HH #define DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_FACEVARIABLES_HH -#include +#include +#include namespace Dumux { -template +namespace Properties +{ + NEW_PROP_TAG(ElementFaceVariables); +} + +template class StaggeredGlobalFaceVariables +{}; + +template +class StaggeredGlobalFaceVariables { 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 FaceSolutionVector = typename GET_PROP_TYPE(TypeTag, FaceSolutionVector); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); using FaceVariables = typename GET_PROP_TYPE(TypeTag, FaceVariables); + using ElementFaceVariables = typename GET_PROP_TYPE(TypeTag, ElementFaceVariables); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); using IndexType = typename GridView::IndexSet::IndexType; + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + public: - void update(Problem& problem, const FaceSolutionVector& sol) - { - problemPtr_ = &problem; + StaggeredGlobalFaceVariables(const Problem& problem) : problemPtr_(&problem) {} - faceVariables_.resize(problem.model().numFaceDofs()); - assert(faceVariables_.size() == sol.size()); + void update(const FVGridGeometry& fvGridGeometry, const SolutionVector& sol) + { + const auto& faceSol = sol[faceIdx]; + faceVariables_.resize(fvGridGeometry.numScvf()); - for(int i = 0; i < problem.model().numFaceDofs(); ++i) + for(auto&& element : elements(fvGridGeometry.gridView())) { - faceVariables_[i].update(sol[i]); + auto fvGeometry = localView(fvGridGeometry); + fvGeometry.bindElement(element); + + for(auto&& scvf : scvfs(fvGeometry)) + { + faceVariables_[scvf.index()].update(faceSol, problem(), element, fvGeometry, scvf); + } } } @@ -57,15 +79,65 @@ public: FaceVariables& faceVars(const IndexType facetIdx) { return faceVariables_[facetIdx]; } -private: - const Problem& problem_() const + + + /*! + * \brief Return a local restriction of this global object + * The local object is only functional after calling its bind/bindElement method + * This is a free function that will be found by means of ADL + */ + friend inline ElementFaceVariables localView(const StaggeredGlobalFaceVariables& global) + { return ElementFaceVariables(global); } + + const Problem& problem() const { return *problemPtr_; } +private: + const Problem* problemPtr_; std::vector faceVariables_; }; +template +class StaggeredGlobalFaceVariables +{ + 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 SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using FaceVariables = typename GET_PROP_TYPE(TypeTag, FaceVariables); + using ElementFaceVariables = typename GET_PROP_TYPE(TypeTag, ElementFaceVariables); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using IndexType = typename GridView::IndexSet::IndexType; + + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + +public: + StaggeredGlobalFaceVariables(const Problem& problem) : problemPtr_(&problem) {} + + void update(const FVGridGeometry& fvGridGeometry, const SolutionVector& sol) + { } + + /*! + * \brief Return a local restriction of this global object + * The local object is only functional after calling its bind/bindElement method + * This is a free function that will be found by means of ADL + */ + friend inline ElementFaceVariables localView(const StaggeredGlobalFaceVariables& global) + { return ElementFaceVariables(global); } + + const Problem& problem() const + { return *problemPtr_; } + + +private: + + const Problem* problemPtr_; +}; + } // end namespace diff --git a/dumux/discretization/staggered/globalfluxvariablescache.hh b/dumux/discretization/staggered/globalfluxvariablescache.hh index 5e4dfd38cf687086c75fab3990c21e668ffdd51f..432b148255209f516fe418e4dc5eca446a5dbffb 100644 --- a/dumux/discretization/staggered/globalfluxvariablescache.hh +++ b/dumux/discretization/staggered/globalfluxvariablescache.hh @@ -23,7 +23,7 @@ #ifndef DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_FLUXVARSCACHE_HH #define DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_FLUXVARSCACHE_HH -#include +#include #include namespace Dumux @@ -47,32 +47,38 @@ class StaggeredGlobalFluxVariablesCache friend StaggeredElementFluxVariablesCache; using Problem = typename GET_PROP_TYPE(TypeTag, Problem); using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using GridVolumeVariables = typename GET_PROP_TYPE(TypeTag, GlobalVolumeVariables); using IndexType = typename GridView::IndexSet::IndexType; using FluxVariablesCache = typename GET_PROP_TYPE(TypeTag, FluxVariablesCache); using ElementFluxVariablesCache = typename GET_PROP_TYPE(TypeTag, ElementFluxVariablesCache); using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); public: + StaggeredGlobalFluxVariablesCache(const Problem& problem) : problemPtr_(&problem) {} + // When global caching is enabled, precompute transmissibilities and stencils for all the scv faces - void update(Problem& problem) + void update(const FVGridGeometry& fvGridGeometry, + const GridVolumeVariables& gridVolVars, + const SolutionVector& sol, + bool forceUpdate = false) { - problemPtr_ = &problem; - const auto& fvGridGeometry = problem.model().fvGridGeometry(); - fluxVarsCache_.resize(fvGridGeometry.numScvf()); - for (const auto& element : elements(problem.gridView())) - { - // Prepare the geometries within the elements of the stencil - auto fvGeometry = localView(fvGridGeometry); - fvGeometry.bind(element); - - auto elemVolVars = localView(problem.model().curGlobalVolVars()); - elemVolVars.bind(element, fvGeometry, problem.model().curSol()); - - for (auto&& scvf : scvfs(fvGeometry)) - { - fluxVarsCache_[scvf.index()].update(problem, element, fvGeometry, elemVolVars, scvf); - } - } + // fluxVarsCache_.resize(fvGridGeometry.numScvf()); + // for (const auto& element : elements(fvGridGeometry.gridView())) + // { + // // Prepare the geometries within the elements of the stencil + // auto fvGeometry = localView(fvGridGeometry); + // fvGeometry.bind(element); + // + // auto elemVolVars = localView(gridVolVars); + // elemVolVars.bind(element, fvGeometry, sol); + // + // for (auto&& scvf : scvfs(fvGeometry)) + // { + // fluxVarsCache_[scvf.index()].update(problem, element, fvGeometry, elemVolVars, scvf); + // } + // } } /*! @@ -83,6 +89,9 @@ public: friend inline ElementFluxVariablesCache localView(const StaggeredGlobalFluxVariablesCache& global) { return ElementFluxVariablesCache(global); } + const Problem& problem() const + { return *problemPtr_; } + private: // access operators in the case of caching const FluxVariablesCache& operator [](IndexType scvfIdx) const @@ -91,9 +100,6 @@ private: FluxVariablesCache& operator [](IndexType scvfIdx) { return fluxVarsCache_[scvfIdx]; } - const Problem& problem_() const - { return *problemPtr_; } - const Problem* problemPtr_; std::vector fluxVarsCache_; diff --git a/dumux/discretization/staggered/globalvolumevariables.hh b/dumux/discretization/staggered/globalvolumevariables.hh index 04477eb7bd04e9b3da4cd60026d604e2f077634e..3514b8c35e38dbb0566edc8c1a6dc38fbf56358b 100644 --- a/dumux/discretization/staggered/globalvolumevariables.hh +++ b/dumux/discretization/staggered/globalvolumevariables.hh @@ -23,9 +23,6 @@ #ifndef DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_VOLUMEVARIABLES_HH #define DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_VOLUMEVARIABLES_HH -#include -#include - namespace Dumux { @@ -41,17 +38,10 @@ class StaggeredGlobalVolumeVariables template class StaggeredGlobalVolumeVariables { - // The local class needs to access and change volVars - friend StaggeredElementVolumeVariables; - // The local jacobian needs to access and change volVars for derivative calculation - friend typename GET_PROP_TYPE(TypeTag, LocalJacobian); - // as does the primary variable switch - friend class PrimaryVariableSwitch; - friend typename GET_PROP_TYPE(TypeTag, PrimaryVariableSwitch); - using Problem = typename GET_PROP_TYPE(TypeTag, Problem); using GridView = typename GET_PROP_TYPE(TypeTag, GridView); using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); @@ -71,17 +61,17 @@ class StaggeredGlobalVolumeVariables enum { numEqCellCenter = GET_PROP_VALUE(TypeTag, NumEqCellCenter) }; public: - void update(Problem& problem, const SolutionVector& sol) - { - problemPtr_ = &problem; + StaggeredGlobalVolumeVariables(const Problem& problem) : problemPtr_(&problem) {} - auto numScv = problem.model().fvGridGeometry().numScv(); - auto numBoundaryScvf = problem.model().fvGridGeometry().numBoundaryScvf(); + void update(const FVGridGeometry& fvGridGeometry, const SolutionVector& sol) + { + auto numScv = fvGridGeometry.numScv(); + auto numBoundaryScvf = fvGridGeometry.numBoundaryScvf(); volumeVariables_.resize(numScv + numBoundaryScvf); - for (const auto& element : elements(problem.gridView())) + for (const auto& element : elements(fvGridGeometry.gridView())) { - auto fvGeometry = localView(problem.model().fvGridGeometry()); + auto fvGeometry = localView(fvGridGeometry); fvGeometry.bindElement(element); for (auto&& scv : scvs(fvGeometry)) @@ -89,7 +79,7 @@ public: PrimaryVariables priVars(0.0); priVars[cellCenterIdx] = sol[cellCenterIdx][scv.dofIndex()]; ElementSolutionVector elemSol{std::move(priVars)}; - volumeVariables_[scv.dofIndex()].update(elemSol, problem, element, scv); + volumeVariables_[scv.dofIndex()].update(elemSol, problem(), element, scv); } // handle the boundary volume variables @@ -99,7 +89,7 @@ public: if (!scvf.boundary()) continue; - const auto bcTypes = problem.boundaryTypes(element, scvf); + const auto bcTypes = problem().boundaryTypes(element, scvf); const auto insideScvIdx = scvf.insideScvIdx(); const auto& insideScv = fvGeometry.scv(insideScvIdx); @@ -108,7 +98,7 @@ public: for(int eqIdx = 0; eqIdx < numEqCellCenter; ++eqIdx) { if(bcTypes.isDirichlet(eqIdx) || bcTypes.isDirichletCell(eqIdx)) - boundaryPriVars[cellCenterIdx][eqIdx] = problem.dirichlet(element, scvf)[cellCenterIdx][eqIdx]; + boundaryPriVars[cellCenterIdx][eqIdx] = problem().dirichlet(element, scvf)[cellCenterIdx][eqIdx]; else if(bcTypes.isNeumann(eqIdx) || bcTypes.isOutflow(eqIdx) || bcTypes.isSymmetry()) boundaryPriVars[cellCenterIdx][eqIdx] = sol[cellCenterIdx][scvf.insideScvIdx()][eqIdx]; //TODO: this assumes a zero-gradient for e.g. the pressure on the boundary @@ -118,7 +108,7 @@ public: DUNE_THROW(Dune::InvalidStateException, "Face at: " << scvf.center() << " has neither Dirichlet nor Neumann BC."); } ElementSolutionVector elemSol{std::move(boundaryPriVars)}; - volumeVariables_[scvf.outsideScvIdx()].update(elemSol, problem, element, insideScv); + volumeVariables_[scvf.outsideScvIdx()].update(elemSol, problem(), element, insideScv); } } } @@ -143,10 +133,11 @@ public: VolumeVariables& volVars(const SubControlVolume scv) { return volumeVariables_[scv.dofIndex()]; } -private: - const Problem& problem_() const + const Problem& problem() const { return *problemPtr_; } +private: + const Problem* problemPtr_; std::vector volumeVariables_; @@ -157,15 +148,15 @@ private: template class StaggeredGlobalVolumeVariables { - // local class needs access to the problem - friend StaggeredElementVolumeVariables; using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); public: - void update(Problem& problem, const SolutionVector& sol) - { problemPtr_ = &problem; } + StaggeredGlobalVolumeVariables(const Problem& problem) : problemPtr_(&problem) {} + + void update(const FVGridGeometry& fvGridGeometry, const SolutionVector& sol) {} /*! * \brief Return a local restriction of this global object @@ -175,11 +166,12 @@ public: friend inline ElementVolumeVariables localView(const StaggeredGlobalVolumeVariables& global) { return ElementVolumeVariables(global); } -private: - Problem& problem_() const + const Problem& problem() const { return *problemPtr_;} - Problem* problemPtr_; +private: + + const Problem* problemPtr_; }; } // end namespace diff --git a/dumux/implicit/staggered/propertydefaults.hh b/dumux/discretization/staggered/properties.hh similarity index 70% rename from dumux/implicit/staggered/propertydefaults.hh rename to dumux/discretization/staggered/properties.hh index b1dc5044a9c3fc1800217f696484d76b2e3b794e..c54fbf52041ec073d39c76d9c2c5c78f2a734be0 100644 --- a/dumux/implicit/staggered/propertydefaults.hh +++ b/dumux/discretization/staggered/properties.hh @@ -18,69 +18,69 @@ *****************************************************************************/ /*! * \ingroup Properties - * \ingroup CCTpfaProperties - * \ingroup StaggeredModel * \file * - * \brief Default properties for cell centered models + * \brief Defines a type tag and some properties for models using the staggered scheme. */ -#ifndef DUMUX_STAGGERED_PROPERTY_DEFAULTS_HH -#define DUMUX_STAGGERED_PROPERTY_DEFAULTS_HH -#include -#include -#include -#include +#ifndef DUMUX_STAGGERDs_PROPERTIES_HH +#define DUMUX_STAGGERDs_PROPERTIES_HH + +#include + #include +#include +#include +#include +#include +#include + +#include #include #include - -#include #include +#include +#include +#include #include +#include +#include -#include -#include -#include -#include +#include #include #include -#include - -#include -#include - -#include "assembler.hh" -#include "localresidual.hh" -#include "localjacobian.hh" -#include "properties.hh" -#include "newtoncontroller.hh" -#include "newtonconvergencewriter.hh" -#include "model.hh" -#include "primaryvariables.hh" +#include -namespace Dumux { +namespace Dumux +{ // forward declarations template class CCElementBoundaryTypes; -namespace Properties { +namespace Properties +{ + +NEW_PROP_TAG(CellCenterSolutionVector); +NEW_PROP_TAG(FaceSolutionVector); +NEW_PROP_TAG(StaggeredFaceSolution); +NEW_PROP_TAG(ElementFaceVariables); +NEW_PROP_TAG(EnableGlobalFaceVariablesCache); + +//! Type tag for the box scheme. +NEW_TYPE_TAG(StaggeredModel, INHERITS_FROM(FiniteVolumeModel, NumericModel, LinearSolverTypeTag)); + //! Set the corresponding discretization method property SET_PROP(StaggeredModel, DiscretizationMethod) { static const DiscretizationMethods value = DiscretizationMethods::Staggered; }; - -SET_TYPE_PROP(StaggeredModel, BaseModel, StaggeredBaseModel); - - -//! Set the default for the global finite volume geometry +//! Set the default for the FVElementGeometry vector SET_TYPE_PROP(StaggeredModel, FVGridGeometry, StaggeredFVGridGeometry); -//! Set the default for the local finite volume geometry +//! Set the default for the FVElementGeometry vector SET_TYPE_PROP(StaggeredModel, FVElementGeometry, StaggeredFVElementGeometry); //! The sub control volume @@ -94,53 +94,39 @@ public: typedef Dumux::CCSubControlVolume type; }; -SET_TYPE_PROP(StaggeredModel, GlobalFaceVars, Dumux::StaggeredGlobalFaceVariables); +SET_TYPE_PROP(StaggeredModel, GlobalFaceVars, Dumux::StaggeredGlobalFaceVariables); //! Set the default for the ElementBoundaryTypes SET_TYPE_PROP(StaggeredModel, ElementBoundaryTypes, Dumux::CCElementBoundaryTypes); -//! Mapper for the degrees of freedoms. -SET_TYPE_PROP(StaggeredModel, DofMapper, typename GET_PROP_TYPE(TypeTag, ElementMapper)); +//! The global volume variables vector class +SET_TYPE_PROP(StaggeredModel, GlobalVolumeVariables, StaggeredGlobalVolumeVariables); -//! The global current volume variables vector class -SET_TYPE_PROP(StaggeredModel, GlobalVolumeVariables, Dumux::StaggeredGlobalVolumeVariables); +//! The element volume variables vector class +SET_TYPE_PROP(StaggeredModel, ElementVolumeVariables, StaggeredElementVolumeVariables); //! The global flux variables cache vector class -SET_TYPE_PROP(StaggeredModel, GlobalFluxVariablesCache, Dumux::StaggeredGlobalFluxVariablesCache); - -//! The local jacobian operator -SET_TYPE_PROP(StaggeredModel, LocalJacobian, Dumux::StaggeredLocalJacobian); - -//! Assembler for the global jacobian matrix -SET_TYPE_PROP(StaggeredModel, JacobianAssembler, Dumux::StaggeredAssembler); +SET_TYPE_PROP(StaggeredModel, GlobalFluxVariablesCache, StaggeredGlobalFluxVariablesCache); //! The local flux variables cache vector class -SET_TYPE_PROP(StaggeredModel, ElementFluxVariablesCache, Dumux::StaggeredElementFluxVariablesCache); - -//! The global previous volume variables vector class -SET_TYPE_PROP(StaggeredModel, ElementVolumeVariables, Dumux::StaggeredElementVolumeVariables); +SET_TYPE_PROP(StaggeredModel, ElementFluxVariablesCache, StaggeredElementFluxVariablesCache); //! Set the BaseLocalResidual to StaggeredLocalResidual -SET_TYPE_PROP(StaggeredModel, BaseLocalResidual, Dumux::StaggeredLocalResidual); +SET_TYPE_PROP(StaggeredModel, BaseLocalResidual, StaggeredLocalResidual); -//! Set the BaseLocalResidual to StaggeredLocalResidual SET_TYPE_PROP(StaggeredModel, IntersectionMapper, Dumux::ConformingGridIntersectionMapper); -//! indicate that this is no box discretization -SET_BOOL_PROP(StaggeredModel, ImplicitIsBox, false); +SET_TYPE_PROP(StaggeredModel, StaggeredFaceSolution, StaggeredFaceSolution); -SET_TYPE_PROP(StaggeredModel, NewtonController, StaggeredNewtonController); +SET_TYPE_PROP(StaggeredModel, ElementFaceVariables, StaggeredElementFaceVariables); -SET_INT_PROP(StaggeredModel, NumEqCellCenter, 1); -SET_INT_PROP(StaggeredModel, NumEqFace, 1); +SET_BOOL_PROP(StaggeredModel, EnableGlobalFaceVariablesCache, true); -SET_PROP(StaggeredModel, NumEq) +//! Definition of the indices for cell center and face dofs in the global solution vector +SET_PROP(StaggeredModel, DofTypeIndices) { -private: - static constexpr auto numEqCellCenter = GET_PROP_VALUE(TypeTag, NumEqCellCenter); - static constexpr auto numEqFace = GET_PROP_VALUE(TypeTag, NumEqFace); -public: - static constexpr auto value = numEqCellCenter + numEqFace; + using CellCenterIdx = Dune::index_constant<0>; + using FaceIdx = Dune::index_constant<1>; }; //! A vector of primary variables @@ -208,19 +194,23 @@ public: using type = typename Dune::MultiTypeBlockMatrix; }; -//! Definition of the indices for cell center and face dofs in the global solution vector -SET_PROP(StaggeredModel, DofTypeIndices) +SET_PROP(StaggeredModel, NumEq) { - using CellCenterIdx = Dune::index_constant<0>; - using FaceIdx = Dune::index_constant<1>; +private: + static constexpr auto numEqCellCenter = GET_PROP_VALUE(TypeTag, NumEqCellCenter); + static constexpr auto numEqFace = GET_PROP_VALUE(TypeTag, NumEqFace); +public: + static constexpr auto value = numEqCellCenter + numEqFace; }; -//! set default solver -// SET_TYPE_PROP(StaggeredModel, LinearSolver, Dumux::GSBiCGSTABBackend); -SET_TYPE_PROP(StaggeredModel, LinearSolver, Dumux::UMFPackBackend); +SET_PROP(StaggeredModel, LinearSolverBlockSize) +{ + // LinearSolverAcceptsMultiTypeMatrix::value + // TODO: make somehow dependend? or only relevant for direct solvers? +public: + static constexpr auto value = 1; +}; -//! set the block level to 2, suitable for e.g. the Dune::MultiTypeBlockMatrix -SET_INT_PROP(StaggeredModel, LinearSolverPreconditionerBlockLevel, 2); //! Boundary types at a single degree of freedom SET_PROP(StaggeredModel, BoundaryTypes) @@ -243,17 +233,7 @@ public: using type = StaggeredPrimaryVariables; }; -//! use the plain newton convergence writer by default -SET_TYPE_PROP(StaggeredModel, NewtonConvergenceWriter, StaggeredNewtonConvergenceWriter); - -//! Write separate vtp files for face variables by default -SET_BOOL_PROP(StaggeredModel, VtkWriteFaceData, true); - -//! For compatibility -SET_BOOL_PROP(StaggeredModel, EnableInteriorBoundaries, false); - -//! Set staggered vtk output module -SET_TYPE_PROP(StaggeredModel, VtkOutputModule, StaggeredVtkOutputModule); +SET_TYPE_PROP(StaggeredModel, GridVariables, StaggeredGridVariables); //! Set one or different base epsilons for the calculations of the localJacobian's derivatives SET_PROP(StaggeredModel, BaseEpsilon) @@ -273,8 +253,9 @@ public: } }; -} // namespace Properties + +} // namespace Properties } // namespace Dumux #endif diff --git a/dumux/freeflow/properties.hh b/dumux/freeflow/properties.hh new file mode 100644 index 0000000000000000000000000000000000000000..b959a7503797421f4baf2ea3c5279557ac1ffcd7 --- /dev/null +++ b/dumux/freeflow/properties.hh @@ -0,0 +1,88 @@ +// -*- 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 . * + *****************************************************************************/ +/*! + * \ingroup Properties + * \file + * + * \brief Defines a type tag and some properties for free flow models. + */ + +#ifndef DUMUX_FREE_FLOW_PROPERTIES_HH +#define DUMUX_FREE_FLOW_PROPERTIES_HH + +#include +#include +#include +#include + +#include "./staggered/boundarytypes.hh" + +namespace Dumux +{ +namespace Properties +{ +//! Type tag for models involving flow in porous media +NEW_TYPE_TAG(FreeFlow); + +SET_INT_PROP(FreeFlow, NumEqFace, 1); //!< set the number of equations to 1 + +//! The sub-controlvolume face +SET_PROP(FreeFlow, SubControlVolumeFace) +{ +private: + using Grid = typename GET_PROP_TYPE(TypeTag, Grid); + using ScvfGeometry = typename Grid::template Codim<1>::Geometry; + using IndexType = typename Grid::LeafGridView::IndexSet::IndexType; +public: + typedef Dumux::StaggeredSubControlVolumeFace type; +}; + +//! The geometry helper required for the stencils, etc. +SET_PROP(FreeFlow, StaggeredGeometryHelper) +{ +private: + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); +public: + using type = StaggeredGeometryHelper; +}; + +//! The variables living on the faces +SET_TYPE_PROP(FreeFlow, FaceVariables, StaggeredFaceVariables); + +//! A container class used to specify values for boundary conditions +SET_PROP(FreeFlow, BoundaryValues) +{ +private: + using CellCenterBoundaryValues = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using FaceBoundaryValues = Dune::FieldVector; +public: + using type = StaggeredPrimaryVariables; +}; + +//! Boundary types at a single degree of freedom +SET_TYPE_PROP(FreeFlow, + BoundaryTypes, + StaggeredFreeFlowBoundaryTypes); + +} // namespace Properties +} // namespace Dumux + + #endif diff --git a/dumux/freeflow/staggered/fluxvariables.hh b/dumux/freeflow/staggered/fluxvariables.hh index 0d941b9df6fbdebd7bcee224c9b121bca47ed2ac..a85555cdc4279fbe4201b78ae96dbff8f178247b 100644 --- a/dumux/freeflow/staggered/fluxvariables.hh +++ b/dumux/freeflow/staggered/fluxvariables.hh @@ -23,7 +23,7 @@ #ifndef DUMUX_FREELOW_IMPLICIT_FLUXVARIABLES_HH #define DUMUX_FREELOW_IMPLICIT_FLUXVARIABLES_HH -#include +#include #include namespace Dumux @@ -66,7 +66,6 @@ class FreeFlowFluxVariablesImpl using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); using Indices = typename GET_PROP_TYPE(TypeTag, Indices); using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); - using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); using FluxVariablesCache = typename GET_PROP_TYPE(TypeTag, FluxVariablesCache); using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); @@ -74,6 +73,9 @@ class FreeFlowFluxVariablesImpl using IndexType = typename GridView::IndexSet::IndexType; using Stencil = std::vector; + using ElementFaceVariables = typename GET_PROP_TYPE(TypeTag, ElementFaceVariables); + using FaceVariables = typename GET_PROP_TYPE(TypeTag, FaceVariables); + static constexpr bool navierStokes = GET_PROP_VALUE(TypeTag, EnableInertiaTerms); enum { @@ -100,7 +102,7 @@ public: const Element &element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars, + const ElementFaceVariables& elemFaceVars, const SubControlVolumeFace &scvf, const FluxVariablesCache& fluxVarsCache) { @@ -111,13 +113,13 @@ public: const auto& outsideVolVars = scvf.boundary() ? insideVolVars : elemVolVars[scvf.outsideScvIdx()]; CellCenterPrimaryVariables flux(0.0); - const Scalar velocity = globalFaceVars.faceVars(scvf.dofIndex()).velocity(); + const Scalar velocity = elemFaceVars[scvf].velocitySelf(); const bool insideIsUpstream = sign(scvf.outerNormalScalar()) == sign(velocity) ? true : false; const auto& upstreamVolVars = insideIsUpstream ? insideVolVars : outsideVolVars; const auto& downstreamVolVars = insideIsUpstream ? insideVolVars : outsideVolVars; - const Scalar upWindWeight = GET_PROP_VALUE(TypeTag, ImplicitUpwindWeight); + static const Scalar upWindWeight = getParamFromGroup(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Implicit.UpwindWeight"); flux = (upWindWeight * upstreamVolVars.density() + (1.0 - upWindWeight) * downstreamVolVars.density()) * velocity; @@ -128,7 +130,6 @@ public: } void computeCellCenterToCellCenterStencil(Stencil& stencil, - const Problem& problem, const Element& element, const FVElementGeometry& fvGeometry, const SubControlVolumeFace& scvf) @@ -141,7 +142,6 @@ public: } void computeCellCenterToFaceStencil(Stencil& stencil, - const Problem& problem, const Element& element, const FVElementGeometry& fvGeometry, const SubControlVolumeFace& scvf) @@ -150,7 +150,6 @@ public: } void computeFaceToCellCenterStencil(Stencil& stencil, - const Problem& problem, const FVElementGeometry& fvGeometry, const SubControlVolumeFace& scvf) { @@ -167,7 +166,6 @@ public: } void computeFaceToFaceStencil(Stencil& stencil, - const Problem& problem, const FVElementGeometry& fvGeometry, const SubControlVolumeFace& scvf) { @@ -194,19 +192,19 @@ public: * \param scvf The sub control volume face * \param fvGeometry The finite-volume geometry * \param elemVolVars All volume variables for the element - * \param globalFaceVars The face variables + * \param elementFaceVars The face variables */ FacePrimaryVariables computeNormalMomentumFlux(const Problem& problem, const Element& element, const SubControlVolumeFace& scvf, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars) + const ElementFaceVariables& elementFaceVars) { const auto insideScvIdx = scvf.insideScvIdx(); const auto& insideVolVars = elemVolVars[insideScvIdx]; - const Scalar velocitySelf = globalFaceVars.faceVars(scvf.dofIndex()).velocity() ; - const Scalar velocityOpposite = globalFaceVars.faceVars(scvf.dofIndexOpposingFace()).velocity(); + const Scalar velocitySelf = elementFaceVars[scvf].velocitySelf() ; + const Scalar velocityOpposite = elementFaceVars[scvf].velocityOpposite(); FacePrimaryVariables normalFlux(0.0); if(navierStokes) @@ -246,31 +244,27 @@ public: * \param scvf The sub control volume face * \param fvGeometry The finite-volume geometry * \param elemVolVars All volume variables for the element - * \param globalFaceVars The face variables + * \param elementFaceVars The face variables */ FacePrimaryVariables computeTangetialMomentumFlux(const Problem& problem, const Element& element, const SubControlVolumeFace& scvf, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars) + const ElementFaceVariables& elementFaceVars) { FacePrimaryVariables tangentialFlux(0.0); - - // convenience function to get the velocity on a face - auto velocity = [&globalFaceVars](const int dofIdx) - { - return globalFaceVars.faceVars(dofIdx).velocity(); - }; + auto& faceVars = elementFaceVars[scvf]; + const int numSubFaces = scvf.pairData().size(); // account for all sub-faces - for(const auto& subFaceData : scvf.pairData()) + for(int localSubFaceIdx = 0; localSubFaceIdx < numSubFaces; ++localSubFaceIdx) { const auto eIdx = scvf.insideScvIdx(); - const auto& normalFace = fvGeometry.scvf(eIdx, subFaceData.localNormalFaceIdx); + const auto& normalFace = fvGeometry.scvf(eIdx, scvf.pairData()[localSubFaceIdx].localNormalFaceIdx); // Check if we have a symmetry boundary condition. If yes, the tangental part of the momentum flux can be neglected. - if(subFaceData.outerParallelFaceDofIdx < 0) + if(scvf.pairData()[localSubFaceIdx].outerParallelFaceDofIdx < 0) { // lambda to conveniently create a ghost face which is outside the domain, parallel to the scvf of interest auto makeGhostFace = [eIdx] (const GlobalPosition& pos) @@ -279,58 +273,41 @@ public: }; // use the ghost face to check if there is a symmetry boundary condition and skip any further steps if yes - const auto bcTypes = problem.boundaryTypes(element, makeGhostFace(subFaceData.virtualOuterParallelFaceDofPos)); + const auto bcTypes = problem.boundaryTypes(element, makeGhostFace(scvf.pairData()[localSubFaceIdx].virtualOuterParallelFaceDofPos)); if(bcTypes.isSymmetry()) continue; } // if there is no symmetry boundary condition, proceed to calculate the tangential momentum flux if(navierStokes) - tangentialFlux += computeAdvectivePartOfTangentialMomentumFlux_(problem, element, scvf, normalFace, subFaceData, elemVolVars, velocity); + tangentialFlux += computeAdvectivePartOfTangentialMomentumFlux_(problem, element, scvf, normalFace, elemVolVars, faceVars, localSubFaceIdx); - tangentialFlux += computeDiffusivePartOfTangentialMomentumFlux_(problem, element, scvf, normalFace, subFaceData, elemVolVars, velocity); + tangentialFlux += computeDiffusivePartOfTangentialMomentumFlux_(problem, element, scvf, normalFace, elemVolVars, faceVars, localSubFaceIdx); } return tangentialFlux; } private: - template FacePrimaryVariables computeAdvectivePartOfTangentialMomentumFlux_(const Problem& problem, const Element& element, const SubControlVolumeFace& scvf, const SubControlVolumeFace& normalFace, - const SubFaceData& subFaceData, const ElementVolumeVariables& elemVolVars, - VelocityHelper velocity) + const FaceVariables& faceVars, + const int localSubFaceIdx) { - const Scalar transportingVelocity = velocity(subFaceData.normalPair.first); + const Scalar transportingVelocity = faceVars.velocityNormalInside(localSubFaceIdx); const auto insideScvIdx = normalFace.insideScvIdx(); const auto outsideScvIdx = normalFace.outsideScvIdx(); - // lambda to conveniently create a ghost face which is outside the domain, parallel to the scvf of interest - // auto makeGhostFace = [insideScvIdx] (const GlobalPosition& pos) - // { - // return SubControlVolumeFace(pos, std::vector{insideScvIdx,insideScvIdx}); - // }; - const bool innerElementIsUpstream = ( sign(normalFace.outerNormalScalar()) == sign(transportingVelocity) ); const auto& upVolVars = innerElementIsUpstream ? elemVolVars[insideScvIdx] : elemVolVars[outsideScvIdx]; - Scalar transportedVelocity(0.0); - - if(innerElementIsUpstream) - transportedVelocity = velocity(scvf.dofIndex()); - else - { - const int outerDofIdx = subFaceData.outerParallelFaceDofIdx; - if(outerDofIdx >= 0) - transportedVelocity = velocity(outerDofIdx); - else // this is the case when the outer parallal dof would lie outside the domain TODO: discuss which one is better - // transportedVelocity = problem.dirichlet(makeGhostFace(subFaceData.virtualOuterParallelFaceDofPos))[faceIdx][scvf.directionIndex()]; - transportedVelocity = problem.dirichlet(element, scvf)[faceIdx][scvf.directionIndex()]; - } + const Scalar transportedVelocity = innerElementIsUpstream ? + faceVars.velocitySelf() : + faceVars.velocityParallel(localSubFaceIdx); const Scalar momentum = upVolVars.density() * transportedVelocity; const int sgn = sign(normalFace.outerNormalScalar()); @@ -338,63 +315,46 @@ private: return transportingVelocity * momentum * sgn * normalFace.area() * 0.5; } - template FacePrimaryVariables computeDiffusivePartOfTangentialMomentumFlux_(const Problem& problem, const Element& element, const SubControlVolumeFace& scvf, const SubControlVolumeFace& normalFace, - const SubFaceData& subFaceData, const ElementVolumeVariables& elemVolVars, - VelocityHelper velocity) + const FaceVariables& faceVars, + const int localSubFaceIdx) { FacePrimaryVariables tangentialDiffusiveFlux(0.0); - const auto normalDirIdx = normalFace.directionIndex(); const auto insideScvIdx = normalFace.insideScvIdx(); const auto outsideScvIdx = normalFace.outsideScvIdx(); const auto& insideVolVars = elemVolVars[insideScvIdx]; const auto& outsideVolVars = elemVolVars[outsideScvIdx]; - // lambda to conveniently create a ghost face which is outside the domain, parallel to the scvf of interest - auto makeGhostFace = [insideScvIdx] (const GlobalPosition& pos) - { - return SubControlVolumeFace(pos, std::vector{insideScvIdx,insideScvIdx}); - }; - // the averaged viscosity at the face normal to our face of interest (where we assemble the face residual) const Scalar muAvg = (insideVolVars.viscosity() + outsideVolVars.viscosity()) * 0.5; // the normal derivative - const int innerNormalVelocityIdx = subFaceData.normalPair.first; - const int outerNormalVelocityIdx = subFaceData.normalPair.second; - - const Scalar innerNormalVelocity = velocity(innerNormalVelocityIdx); - - const Scalar outerNormalVelocity = outerNormalVelocityIdx >= 0 ? - velocity(outerNormalVelocityIdx) : - problem.dirichlet(element, makeGhostFace(subFaceData.virtualOuterNormalFaceDofPos))[faceIdx][normalDirIdx]; + const Scalar innerNormalVelocity = faceVars.velocityNormalInside(localSubFaceIdx); + const Scalar outerNormalVelocity = faceVars.velocityNormalOutside(localSubFaceIdx); const Scalar normalDeltaV = scvf.normalInPosCoordDir() ? (outerNormalVelocity - innerNormalVelocity) : (innerNormalVelocity - outerNormalVelocity); - const Scalar normalDerivative = normalDeltaV / subFaceData.normalDistance; + const Scalar normalDerivative = normalDeltaV / scvf.pairData(localSubFaceIdx).normalDistance; tangentialDiffusiveFlux -= muAvg * normalDerivative; // the parallel derivative - const Scalar innerParallelVelocity = velocity(scvf.dofIndex()); + const Scalar innerParallelVelocity = faceVars.velocitySelf(); - const int outerParallelFaceDofIdx = subFaceData.outerParallelFaceDofIdx; - const Scalar outerParallelVelocity = outerParallelFaceDofIdx >= 0 ? - velocity(outerParallelFaceDofIdx) : - problem.dirichlet(element, makeGhostFace(subFaceData.virtualOuterParallelFaceDofPos))[faceIdx][scvf.directionIndex()]; + const Scalar outerParallelVelocity = faceVars.velocityParallel(localSubFaceIdx); const Scalar parallelDeltaV = normalFace.normalInPosCoordDir() ? (outerParallelVelocity - innerParallelVelocity) : (innerParallelVelocity - outerParallelVelocity); - const Scalar parallelDerivative = parallelDeltaV / subFaceData.parallelDistance; + const Scalar parallelDerivative = parallelDeltaV / scvf.pairData(localSubFaceIdx).parallelDistance; tangentialDiffusiveFlux -= muAvg * parallelDerivative; const Scalar sgn = sign(normalFace.outerNormalScalar()); diff --git a/dumux/freeflow/staggered/fluxvariablescache.hh b/dumux/freeflow/staggered/fluxvariablescache.hh index e84095a7f12495816c0d8cef5de0836362b87b4c..10a568425b87c1889ae6b5617eca65425824af3c 100644 --- a/dumux/freeflow/staggered/fluxvariablescache.hh +++ b/dumux/freeflow/staggered/fluxvariablescache.hh @@ -23,7 +23,7 @@ #ifndef DUMUX_FREEFLOW_IMPLICIT_FLUXVARIABLESCACHE_HH #define DUMUX_FREEFLOW_IMPLICIT_FLUXVARIABLESCACHE_HH -#include +#include #include #include diff --git a/dumux/freeflow/staggered/localresidual.hh b/dumux/freeflow/staggered/localresidual.hh index 4d9ab7b95c43f4bd1e4c523cd39bed66229ff142..62933ed306af9a0d00eeea2bf23e136575eeae82 100644 --- a/dumux/freeflow/staggered/localresidual.hh +++ b/dumux/freeflow/staggered/localresidual.hh @@ -23,12 +23,6 @@ #ifndef DUMUX_STAGGERED_NAVIERSTOKES_LOCAL_RESIDUAL_HH #define DUMUX_STAGGERED_NAVIERSTOKES_LOCAL_RESIDUAL_HH -#include - -#include -#include - -#include "properties.hh" namespace Dumux { @@ -39,6 +33,9 @@ namespace Properties NEW_PROP_TAG(EnableComponentTransport); NEW_PROP_TAG(EnableInertiaTerms); NEW_PROP_TAG(ReplaceCompEqIdx); +NEW_PROP_TAG(EnergyFluxVariables); +NEW_PROP_TAG(NormalizePressure); +NEW_PROP_TAG(ElementFaceVariables); } /*! @@ -90,12 +87,17 @@ class StaggeredNavierStokesResidualImpl : public Dumux::Staggere using FluxVariables = typename GET_PROP_TYPE(TypeTag, FluxVariables); using EnergyLocalResidual = typename GET_PROP_TYPE(TypeTag, EnergyLocalResidual); using EnergyFluxVariables = typename GET_PROP_TYPE(TypeTag, EnergyFluxVariables); + using ElementFaceVariables = typename GET_PROP_TYPE(TypeTag, ElementFaceVariables); using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); typename DofTypeIndices::CellCenterIdx cellCenterIdx; typename DofTypeIndices::FaceIdx faceIdx; + using CellCenterResidual = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); + using FaceResidual = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); + using FaceResidualVector = typename GET_PROP_TYPE(TypeTag, FaceSolutionVector); + enum { // grid and world dimension dim = GridView::dimension, @@ -109,41 +111,41 @@ class StaggeredNavierStokesResidualImpl : public Dumux::Staggere }; using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); - using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); static constexpr bool navierStokes = GET_PROP_VALUE(TypeTag, EnableInertiaTerms); static constexpr bool normalizePressure = GET_PROP_VALUE(TypeTag, NormalizePressure); public: - // copying the local residual class is not a good idea - StaggeredNavierStokesResidualImpl(const StaggeredNavierStokesResidualImpl &) = delete; - StaggeredNavierStokesResidualImpl() = default; + using ParentType::ParentType; - CellCenterPrimaryVariables computeFluxForCellCenter(const Element &element, + CellCenterPrimaryVariables computeFluxForCellCenter(const Problem& problem, + const Element &element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars, + const ElementFaceVariables& elemFaceVars, const SubControlVolumeFace &scvf, - const ElementFluxVariablesCache& elemFluxVarsCache) + const ElementFluxVariablesCache& elemFluxVarsCache) const { FluxVariables fluxVars; - CellCenterPrimaryVariables flux = fluxVars.computeFluxForCellCenter(this->problem(), element, fvGeometry, elemVolVars, - globalFaceVars, scvf, elemFluxVarsCache[scvf]); + CellCenterPrimaryVariables flux = fluxVars.computeFluxForCellCenter(problem, element, fvGeometry, elemVolVars, + elemFaceVars, scvf, elemFluxVarsCache[scvf]); - EnergyFluxVariables::energyFlux(flux, this->problem(), element, fvGeometry, elemVolVars, globalFaceVars, scvf, elemFluxVarsCache[scvf]); + EnergyFluxVariables::energyFlux(flux, problem, element, fvGeometry, elemVolVars, elemFaceVars, scvf, elemFluxVarsCache[scvf]); return flux; } - CellCenterPrimaryVariables computeSourceForCellCenter(const Element &element, + CellCenterPrimaryVariables computeSourceForCellCenter(const Problem& problem, + const Element &element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars, - const SubControlVolume &scv) + const ElementFaceVariables& elemFaceVars, + const SubControlVolume &scv) const { return CellCenterPrimaryVariables(0.0); + // TODO sources } @@ -157,8 +159,9 @@ public: * \note The volVars can be different to allow computing * the implicit euler time derivative here */ - CellCenterPrimaryVariables computeStorageForCellCenter(const SubControlVolume& scv, - const VolumeVariables& volVars) + CellCenterPrimaryVariables computeStorageForCellCenter(const Problem& problem, + const SubControlVolume& scv, + const VolumeVariables& volVars) const { CellCenterPrimaryVariables storage; storage[0] = volVars.density(); @@ -176,26 +179,28 @@ public: * \note The volVars can be different to allow computing * the implicit euler time derivative here */ - FacePrimaryVariables computeStorageForFace(const SubControlVolumeFace& scvf, + FacePrimaryVariables computeStorageForFace(const Problem& problem, + const SubControlVolumeFace& scvf, const VolumeVariables& volVars, - const GlobalFaceVars& globalFaceVars) + const ElementFaceVariables& elementFaceVars) const { FacePrimaryVariables storage(0.0); - const Scalar velocity = globalFaceVars.faceVars(scvf.dofIndex()).velocity(); + const Scalar velocity = elementFaceVars[scvf].velocitySelf(); storage[0] = volVars.density() * velocity; return storage; } - FacePrimaryVariables computeSourceForFace(const SubControlVolumeFace& scvf, + FacePrimaryVariables computeSourceForFace(const Problem& problem, + const SubControlVolumeFace& scvf, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars) + const ElementFaceVariables& elementFaceVars) const { FacePrimaryVariables source(0.0); const auto insideScvIdx = scvf.insideScvIdx(); const auto& insideVolVars = elemVolVars[insideScvIdx]; - source += this->problem().gravity()[scvf.directionIndex()] * insideVolVars.density(); + source += problem.gravity()[scvf.directionIndex()] * insideVolVars.density(); - source += this->problem().sourceAtPos(scvf.center())[faceIdx][scvf.directionIndex()]; + source += problem.sourceAtPos(scvf.center())[faceIdx][scvf.directionIndex()]; return source; } @@ -205,20 +210,21 @@ public: * \param scvf The sub control volume face * \param fvGeometry The finite-volume geometry * \param elemVolVars All volume variables for the element - * \param globalFaceVars The face variables + * \param elementFaceVars The face variables */ - FacePrimaryVariables computeFluxForFace(const Element& element, + FacePrimaryVariables computeFluxForFace(const Problem& problem, + const Element& element, const SubControlVolumeFace& scvf, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars, - const ElementFluxVariablesCache& elemFluxVarsCache) + const ElementFaceVariables& elementFaceVars, + const ElementFluxVariablesCache& elemFluxVarsCache) const { FacePrimaryVariables flux(0.0); FluxVariables fluxVars; - flux += fluxVars.computeNormalMomentumFlux(this->problem(), element, scvf, fvGeometry, elemVolVars, globalFaceVars); - flux += fluxVars.computeTangetialMomentumFlux(this->problem(), element, scvf, fvGeometry, elemVolVars, globalFaceVars); - flux += computePressureTerm_(element, scvf, fvGeometry, elemVolVars, globalFaceVars); + flux += fluxVars.computeNormalMomentumFlux(problem, element, scvf, fvGeometry, elemVolVars, elementFaceVars); + flux += fluxVars.computeTangetialMomentumFlux(problem, element, scvf, fvGeometry, elemVolVars, elementFaceVars); + flux += computePressureTerm_(problem, element, scvf, fvGeometry, elemVolVars, elementFaceVars); return flux; } @@ -230,35 +236,37 @@ protected: void evalBoundary_(const Element& element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& faceVars, + const ElementFaceVariables& elemFaceVars, const ElementBoundaryTypes& elemBcTypes, const ElementFluxVariablesCache& elemFluxVarsCache) { - evalBoundaryForCellCenter_(element, fvGeometry, elemVolVars, faceVars, elemBcTypes, elemFluxVarsCache); + evalBoundaryForCellCenter_(element, fvGeometry, elemVolVars, elemFaceVars, elemBcTypes, elemFluxVarsCache); for (auto&& scvf : scvfs(fvGeometry)) { - evalBoundaryForFace_(element, fvGeometry, scvf, elemVolVars, faceVars, elemBcTypes, elemFluxVarsCache); + evalBoundaryForFace_(element, fvGeometry, scvf, elemVolVars, elemFaceVars, elemBcTypes, elemFluxVarsCache); } } /*! * \brief Evaluate boundary conditions for a cell center dof */ - void evalBoundaryForCellCenter_(const Element& element, + void evalBoundaryForCellCenter_(CellCenterResidual& residual, + const Problem& problem, + const Element& element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& faceVars, + const ElementFaceVariables& elemFaceVars, const ElementBoundaryTypes& elemBcTypes, - const ElementFluxVariablesCache& elemFluxVarsCache) + const ElementFluxVariablesCache& elemFluxVarsCache) const { for (auto&& scvf : scvfs(fvGeometry)) { if (scvf.boundary()) { - auto boundaryFlux = computeFluxForCellCenter(element, fvGeometry, elemVolVars, faceVars, scvf, elemFluxVarsCache); + auto boundaryFlux = computeFluxForCellCenter(problem, element, fvGeometry, elemVolVars, elemFaceVars, scvf, elemFluxVarsCache); // handle the actual boundary conditions: - const auto bcTypes = this->problem().boundaryTypes(element, scvf); + const auto bcTypes = problem.boundaryTypes(element, scvf); if(bcTypes.hasNeumann()) { @@ -267,14 +275,14 @@ protected: if(bcTypes.isNeumann(eqIdx)) { const auto extrusionFactor = 1.0; //TODO: get correct extrusion factor - boundaryFlux[eqIdx] = this->problem().neumannAtPos(scvf.center())[cellCenterIdx][eqIdx] + boundaryFlux[eqIdx] = problem.neumann(element, scvf)[cellCenterIdx][eqIdx] * extrusionFactor * scvf.area(); } } - this->ccResidual_ += boundaryFlux; + residual += boundaryFlux; - asImp_().setFixedCell_(fvGeometry.scv(scvf.insideScvIdx()), elemVolVars, bcTypes); + asImp_().setFixedCell_(residual, problem, fvGeometry.scv(scvf.insideScvIdx()), elemVolVars, bcTypes); } } } @@ -287,56 +295,62 @@ protected: * \param elemVolVars The current or previous element volVars * \param bcTypes The boundary types */ - void setFixedCell_(const SubControlVolume& insideScv, + void setFixedCell_(CellCenterResidual& residual, + const Problem& problem, + const SubControlVolume& insideScv, const ElementVolumeVariables& elemVolVars, - const BoundaryTypes& bcTypes) + const BoundaryTypes& bcTypes) const { // set a fixed pressure for cells adjacent to a wall if(bcTypes.isDirichletCell(massBalanceIdx)) { const auto& insideVolVars = elemVolVars[insideScv]; - this->ccResidual_[pressureIdx] = insideVolVars.pressure() - this->problem().dirichletAtPos(insideScv.center())[cellCenterIdx][pressureIdx]; + residual[pressureIdx] = insideVolVars.pressure() - problem.dirichletAtPos(insideScv.center())[cellCenterIdx][pressureIdx]; } } /*! * \brief Evaluate boundary conditions for a face dof */ - void evalBoundaryForFace_(const Element& element, + void evalBoundaryForFace_(FaceResidual& residual, + const Problem& problem, + const Element& element, const FVElementGeometry& fvGeometry, const SubControlVolumeFace& scvf, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& faceVars, + const ElementFaceVariables& elementFaceVars, const ElementBoundaryTypes& elemBcTypes, - const ElementFluxVariablesCache& elemFluxVarsCache) + const ElementFluxVariablesCache& elemFluxVarsCache) const { if (scvf.boundary()) { // handle the actual boundary conditions: - const auto bcTypes = this->problem().boundaryTypes(element, scvf); + const auto bcTypes = problem.boundaryTypes(element, scvf); // set a fixed value for the velocity for Dirichlet boundary conditions if(bcTypes.isDirichlet(momentumBalanceIdx)) { - const Scalar velocity = faceVars.faceVars(scvf.dofIndex()).velocity(); - const Scalar dirichletValue = this->problem().dirichlet(element, scvf)[faceIdx][scvf.directionIndex()]; - this->faceResiduals_[scvf.localFaceIdx()] = velocity - dirichletValue; + // const Scalar velocity = faceVars.faceVars(scvf.dofIndex()).velocity(); + const Scalar velocity = elementFaceVars[scvf].velocitySelf(); + const Scalar dirichletValue = problem.dirichlet(element, scvf)[faceIdx][scvf.directionIndex()]; + residual = velocity - dirichletValue; } // For symmetry boundary conditions, there is no flow accross the boundary and // we therefore treat it like a Dirichlet boundary conditions with zero velocity if(bcTypes.isSymmetry()) { - const Scalar velocity = faceVars.faceVars(scvf.dofIndex()).velocity(); + // const Scalar velocity = faceVars.faceVars(scvf.dofIndex()).velocity(); + const Scalar velocity = elementFaceVars[scvf].velocitySelf(); const Scalar fixedValue = 0.0; - this->faceResiduals_[scvf.localFaceIdx()] = velocity - fixedValue; + residual = velocity - fixedValue; } // outflow condition for the momentum balance equation if(bcTypes.isOutflow(momentumBalanceIdx)) { if(bcTypes.isDirichlet(massBalanceIdx)) - this->faceResiduals_[scvf.localFaceIdx()] += computeFluxForFace(element, scvf, fvGeometry, elemVolVars, faceVars, elemFluxVarsCache); + residual += computeFluxForFace(problem, element, scvf, fvGeometry, elemVolVars, elementFaceVars, elemFluxVarsCache); else DUNE_THROW(Dune::InvalidStateException, "Face at " << scvf.center() << " has an outflow BC for the momentum balance but no Dirichlet BC for the pressure!"); } @@ -353,25 +367,26 @@ private: * \param scvf The sub control volume face * \param fvGeometry The finite-volume geometry * \param elemVolVars All volume variables for the element - * \param globalFaceVars The face variables + * \param elementFaceVars The face variables */ - FacePrimaryVariables computePressureTerm_(const Element& element, + FacePrimaryVariables computePressureTerm_(const Problem& problem, + const Element& element, const SubControlVolumeFace& scvf, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars) + const ElementFaceVariables& elementFaceVars) const { const auto insideScvIdx = scvf.insideScvIdx(); const auto& insideVolVars = elemVolVars[insideScvIdx]; - const Scalar deltaP = normalizePressure ? this->problem().initialAtPos(scvf.center())[cellCenterIdx][pressureIdx] : 0.0; + const Scalar deltaP = normalizePressure ? problem.initialAtPos(scvf.center())[cellCenterIdx][pressureIdx] : 0.0; Scalar result = (insideVolVars.pressure() - deltaP) * scvf.area() * -1.0 * sign(scvf.outerNormalScalar()); // treat outflow BCs if(scvf.boundary()) { - const Scalar pressure = this->problem().dirichlet(element, scvf)[cellCenterIdx][pressureIdx] - deltaP; + const Scalar pressure = problem.dirichlet(element, scvf)[cellCenterIdx][pressureIdx] - deltaP; result += pressure * scvf.area() * sign(scvf.outerNormalScalar()); } return result; diff --git a/dumux/freeflow/staggered/model.hh b/dumux/freeflow/staggered/model.hh index 4e781c517d5e588985d16a4b710acdffa4fe440e..7a1bc622195dc5d2c4c021c8aeb6d25d78fed2c9 100644 --- a/dumux/freeflow/staggered/model.hh +++ b/dumux/freeflow/staggered/model.hh @@ -27,12 +27,7 @@ #ifndef DUMUX_NAVIERSTOKES_MODEL_HH #define DUMUX_NAVIERSTOKES_MODEL_HH -// #include -#include "../staggeredni/model.hh" -#include "properties.hh" -namespace Dumux -{ /*! * \ingroup NavierStokesModel * \brief A single-phase, isothermal flow model using the fully implicit scheme. @@ -54,49 +49,5 @@ namespace Dumux * and the implicit Euler method as time discretization. * The model supports compressible as well as incompressible fluids. */ -template -class NavierStokesModel : public GET_PROP_TYPE(TypeTag, BaseModel) -{ - using ParentType = typename GET_PROP_TYPE(TypeTag, BaseModel); - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - typedef typename GET_PROP_TYPE(TypeTag, FVGridGeometry) FVGridGeometry; - typedef typename GET_PROP_TYPE(TypeTag, SolutionVector) SolutionVector; - typedef typename GET_PROP_TYPE(TypeTag, JacobianAssembler) JacobianAssembler; - - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - enum { dim = GridView::dimension }; - enum { dimWorld = GridView::dimensionworld }; - - enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) }; - enum { dofCodim = isBox ? dim : 0 }; - using Element = typename GridView::template Codim<0>::Entity; - - using GlobalPosition = Dune::FieldVector; - - using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); - typename DofTypeIndices::CellCenterIdx cellCenterIdx; - typename DofTypeIndices::FaceIdx faceIdx; - -public: - - void init(Problem& problem) - { - ParentType::init(problem); - - // register standardized vtk output fields - auto& vtkOutputModule = problem.vtkOutputModule(); - vtkOutputModule.addPrimaryVariable("pressure", Indices::pressureIdx); - vtkOutputModule.addFacePrimaryVariable("scalarFaceVelocity", 0); - vtkOutputModule.addFacePrimaryVariable("faceVelocity", std::vector{0,1, 2}); - -// NonIsothermalModel::maybeAddTemperature(vtkOutputModule); - } -}; -} - -#include "propertydefaults.hh" #endif diff --git a/dumux/freeflow/staggered/problem.hh b/dumux/freeflow/staggered/problem.hh index d9d5b54486f26bcbc6d388cd4f4d6ef055c3433a..75bcc68644c37482b592d938ce9139bcfb0fa74c 100644 --- a/dumux/freeflow/staggered/problem.hh +++ b/dumux/freeflow/staggered/problem.hh @@ -23,9 +23,9 @@ #ifndef DUMUX_NAVIERSTOKES_PROBLEM_HH #define DUMUX_NAVIERSTOKES_PROBLEM_HH -#include - +#include #include "properties.hh" +#include namespace Dumux { @@ -37,26 +37,24 @@ namespace Dumux * This implements gravity (if desired) and a function returning the temperature. */ template -class NavierStokesProblem : public ImplicitProblem +class NavierStokesProblem : public StaggeredFVProblem { - typedef ImplicitProblem ParentType; - typedef typename GET_PROP_TYPE(TypeTag, Problem) Implementation; - - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager; - typedef typename GridView::Grid Grid; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + using ParentType = StaggeredFVProblem; + using Implementation = typename GET_PROP_TYPE(TypeTag, Problem); - typedef typename GridView::template Codim<0>::Entity Element; - typedef typename GridView::Intersection Intersection; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Grid = typename GridView::Grid; + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; + using Element = typename GridView::template Codim<0>::Entity; + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); using FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); + using BoundaryValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); enum { dim = Grid::dimension, @@ -68,18 +66,18 @@ class NavierStokesProblem : public ImplicitProblem velocityYIdx = Indices::velocityYIdx }; - typedef Dune::FieldVector GlobalPosition; + using GlobalPosition = Dune::FieldVector; using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); typename DofTypeIndices::CellCenterIdx cellCenterIdx; typename DofTypeIndices::FaceIdx faceIdx; public: - NavierStokesProblem(TimeManager &timeManager, const GridView &gridView) - : ParentType(timeManager, gridView), + NavierStokesProblem(std::shared_ptr fvGridGeometry) + : ParentType(fvGridGeometry), gravity_(0) { - if (GET_PARAM_FROM_GROUP(TypeTag, bool, Problem, EnableGravity)) + if (getParamFromGroup(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Problem.EnableGravity")) gravity_[dim-1] = -9.81; } @@ -94,11 +92,32 @@ public: * * \param scvf The sub control volume face */ - auto dirichlet(const Element &element, const SubControlVolumeFace &scvf) const + BoundaryValues dirichlet(const Element &element, const SubControlVolumeFace &scvf) const { return asImp_().dirichletAtPos(scvf.center()); } + /*! + * \brief Returns neumann values at a given scv face. + This method can be overloaded in the actual problem, e.g. for coupling strategies + * + * \param scvf The sub control volume face + */ + BoundaryValues neumann(const Element &element, const SubControlVolumeFace &scvf) const + { + return asImp_().neumannAtPos(scvf.center()); + } + + /*! + * \brief Returns neumann values at a position. + * + * \param scvf The sub control volume face + */ + BoundaryValues neumannAtPos(const GlobalPosition& globalPos) const + { + return BoundaryValues(0.0); + } + /*! * \brief Returns the temperature \f$\mathrm{[K]}\f$ at a given global position. * diff --git a/dumux/freeflow/staggered/properties.hh b/dumux/freeflow/staggered/properties.hh index 246bcc04d70650ea5e3aa111a6e78f5b7e49e1d8..3a97aee983611ed1bd3366d898227c335f860369 100644 --- a/dumux/freeflow/staggered/properties.hh +++ b/dumux/freeflow/staggered/properties.hh @@ -27,8 +27,26 @@ #ifndef DUMUX_NAVIERSTOKES_PROPERTIES_HH #define DUMUX_NAVIERSTOKES_PROPERTIES_HH +#include +#include + +#include #include +#include "localresidual.hh" +#include "volumevariables.hh" +#include "fluxvariables.hh" +#include "fluxvariablescache.hh" +#include "indices.hh" +#include "velocityoutput.hh" +#include "vtkoutputfields.hh" +#include "boundarytypes.hh" + +#include +#include +#include +#include + namespace Dumux { @@ -43,7 +61,7 @@ namespace Properties { ////////////////////////////////////////////////////////////////// //! The type tags for the implicit single-phase problems -NEW_TYPE_TAG(NavierStokes); +NEW_TYPE_TAG(NavierStokes, INHERITS_FROM(FreeFlow)); //! The type tags for the corresponding non-isothermal problems NEW_TYPE_TAG(NavierStokesNI, INHERITS_FROM(NavierStokes, NavierStokesNonIsothermal)); @@ -52,23 +70,96 @@ NEW_TYPE_TAG(NavierStokesNI, INHERITS_FROM(NavierStokes, NavierStokesNonIsotherm // Property tags ////////////////////////////////////////////////////////////////// -NEW_PROP_TAG(NumPhases); //!< Number of fluid phases in the system -NEW_PROP_TAG(Indices); //!< Enumerations for the model -NEW_PROP_TAG(FluidSystem); //!< The type of the fluid system to use -NEW_PROP_TAG(Fluid); //!< The fluid used for the default fluid system -NEW_PROP_TAG(FluidState); //!< The type of the fluid state to use -NEW_PROP_TAG(ProblemEnableGravity); //!< Returns whether gravity is considered in the problem -NEW_PROP_TAG(ImplicitMassUpwindWeight); //!< Returns weight of the upwind cell when calculating fluxes -NEW_PROP_TAG(ImplicitMobilityUpwindWeight); //!< Weight for the upwind mobility in the velocity calculation -NEW_PROP_TAG(VtkAddVelocity); //!< Returns whether velocity vectors are written into the vtk output NEW_PROP_TAG(EnableInertiaTerms); //!< Returns whether to include inertia terms in the momentum balance eq or not (Stokes / Navier-Stokes) -NEW_PROP_TAG(BoundaryValues); //!< Type to set values on the boundary NEW_PROP_TAG(EnableComponentTransport); //!< Returns whether to consider component transport or not NEW_PROP_TAG(EnableEnergyTransport); //!< Returns whether to consider energy transport or not -NEW_PROP_TAG(FaceVariables); //!< Returns whether to consider energy transport or not NEW_PROP_TAG(NormalizePressure); //!< Returns whether to normalize the pressure term in the momentum balance or not NEW_PROP_TAG(EnergyLocalResidual); //!< The energy local residual NEW_PROP_TAG(EnergyFluxVariables); //!< The energy flux variables + +/////////////////////////////////////////////////////////////////////////// +// default property values for the isothermal single phase model +/////////////////////////////////////////////////////////////////////////// +SET_INT_PROP(NavierStokes, NumEqCellCenter, 1); //!< set the number of equations to 1 +SET_INT_PROP(NavierStokes, NumPhases, 1); //!< The number of phases in the 1p model is 1 + +//! The fluid system to use by default +SET_TYPE_PROP(NavierStokes, FluidSystem, Dumux::FluidSystems::OneP); + +SET_PROP(NavierStokes, Fluid) +{ private: + typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; +public: + typedef FluidSystems::LiquidPhase > type; +}; + +/*! + * \brief The fluid state which is used by the volume variables to + * store the thermodynamic state. This should be chosen + * appropriately for the model ((non-)isothermal, equilibrium, ...). + * This can be done in the problem. + */ +SET_PROP(NavierStokes, FluidState){ + private: + typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem; + public: + typedef Dumux::ImmiscibleFluidState type; +}; + +//! The local residual function +SET_TYPE_PROP(NavierStokes, LocalResidual, StaggeredNavierStokesResidual); + +//! the VolumeVariables property +SET_TYPE_PROP(NavierStokes, VolumeVariables, NavierStokesVolumeVariables); + +//! The class that contains the different flux variables (i.e. darcy, diffusion, energy) +//! by default, we set the flux variables to ones for porous media +SET_TYPE_PROP(NavierStokes, FluxVariables, FreeFlowFluxVariables); + +//! The flux variables cache class, by default the one for porous media +SET_TYPE_PROP(NavierStokes, FluxVariablesCache, FreeFlowFluxVariablesCache); + +//! Enable advection +SET_BOOL_PROP(NavierStokes, EnableAdvection, true); + +//! The one-phase model has no molecular diffusion +SET_BOOL_PROP(NavierStokes, EnableMolecularDiffusion, false); + +//! The indices required by the isothermal single-phase model +SET_TYPE_PROP(NavierStokes, Indices, NavierStokesCommonIndices); + +SET_TYPE_PROP(NavierStokes, EnergyLocalResidual, FreeFlowEnergyLocalResidual); + +SET_TYPE_PROP(NavierStokes, EnergyFluxVariables, FreeFlowEnergyFluxVariables); + +SET_BOOL_PROP(NavierStokes, EnableEnergyBalance, false); + +SET_TYPE_PROP(NavierStokes, VelocityOutput, StaggeredFreeFlowVelocityOutput); + +SET_TYPE_PROP(NavierStokes, VtkOutputFields, NavierStokesVtkOutputFields); + +SET_BOOL_PROP(NavierStokes, EnableInertiaTerms, true); + +SET_BOOL_PROP(NavierStokes, EnableEnergyTransport, false); + +SET_BOOL_PROP(NavierStokes, EnableComponentTransport, false); + +//! Normalize the pressure term in the momentum balance or not +SET_BOOL_PROP(NavierStokes, NormalizePressure, true); + +////////////////////////////////////////////////////////////////// +// Property values for isothermal model required for the general non-isothermal model +////////////////////////////////////////////////////////////////// + +//set isothermal Indices +SET_TYPE_PROP(NavierStokesNI, IsothermalIndices, NavierStokesCommonIndices); +SET_TYPE_PROP(NavierStokesNI, IsothermalVtkOutputFields, NavierStokesVtkOutputFields); + +//set isothermal NumEq +SET_INT_PROP(NavierStokesNI, IsothermalNumEqCellCenter, 1); //!< set the number of equations to 1 +SET_INT_PROP(NavierStokesNI, IsothermalNumEqFace, 1); //!< set the number of equations to 1 + // \} } diff --git a/dumux/freeflow/staggered/propertydefaults.hh b/dumux/freeflow/staggered/propertydefaults.hh deleted file mode 100644 index 4206e1fa9c452c73ec9885f7797ad60a409877be..0000000000000000000000000000000000000000 --- a/dumux/freeflow/staggered/propertydefaults.hh +++ /dev/null @@ -1,224 +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 . * - *****************************************************************************/ -/*! - * \ingroup Properties - * \ingroup ImplicitProperties - * \ingroup NavierStokesModel - * \file - * - * \brief Defines the properties required for the one-phase fully implicit model. - */ -#ifndef DUMUX_NAVIERSTOKES_PROPERTY_DEFAULTS_HH -#define DUMUX_NAVIERSTOKES_PROPERTY_DEFAULTS_HH - -#include "properties.hh" - -#include "model.hh" -#include "volumevariables.hh" -#include "indices.hh" -#include "problem.hh" -#include "localresidual.hh" -#include "fluxvariables.hh" -#include "fluxvariablescache.hh" -#include "velocityoutput.hh" -#include "vtkoutputmodule.hh" -#include "boundarytypes.hh" - -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - - - -namespace Dumux -{ - -namespace Properties -{ -// forward declaration -NEW_PROP_TAG(FluxVariables); -NEW_PROP_TAG(FluxVariablesCache); -NEW_PROP_TAG(StaggeredGeometryHelper); -} -// \{ - -/////////////////////////////////////////////////////////////////////////// -// default property values for the isothermal single phase model -/////////////////////////////////////////////////////////////////////////// -namespace Properties { -SET_INT_PROP(NavierStokes, NumEqCellCenter, 1); //!< set the number of equations to 1 -SET_INT_PROP(NavierStokes, NumEqFace, 1); //!< set the number of equations to 1 -SET_INT_PROP(NavierStokes, NumPhases, 1); //!< The number of phases in the 1p model is 1 - -//! The sub-controlvolume face -SET_PROP(NavierStokes, SubControlVolumeFace) -{ -private: - using Grid = typename GET_PROP_TYPE(TypeTag, Grid); - using ScvfGeometry = typename Grid::template Codim<1>::Geometry; - using IndexType = typename Grid::LeafGridView::IndexSet::IndexType; -public: - typedef Dumux::StaggeredSubControlVolumeFace type; -}; - -//! The geometry helper required for the stencils, etc. -SET_PROP(NavierStokes, StaggeredGeometryHelper) -{ -private: - using GridView = typename GET_PROP_TYPE(TypeTag, GridView); -public: - using type = StaggeredGeometryHelper; -}; - -//! The variables living on the faces -SET_TYPE_PROP(NavierStokes, FaceVariables, StaggeredFaceVariables); - -//! The local residual function -SET_TYPE_PROP(NavierStokes, LocalResidual, StaggeredNavierStokesResidual); - -//! the Model property -SET_TYPE_PROP(NavierStokes, Model, NavierStokesModel); - -//! the VolumeVariables property -SET_TYPE_PROP(NavierStokes, VolumeVariables, NavierStokesVolumeVariables); - -//! The class that contains the different flux variables (i.e. darcy, diffusion, energy) -//! by default, we set the flux variables to ones for porous media -SET_TYPE_PROP(NavierStokes, FluxVariables, FreeFlowFluxVariables); - -//! The flux variables cache class, by default the one for porous media -SET_TYPE_PROP(NavierStokes, FluxVariablesCache, FreeFlowFluxVariablesCache); - -//! Enable advection -SET_BOOL_PROP(NavierStokes, EnableAdvection, true); - -//! The one-phase model has no molecular diffusion -SET_BOOL_PROP(NavierStokes, EnableMolecularDiffusion, false); - -//! The indices required by the isothermal single-phase model -SET_TYPE_PROP(NavierStokes, Indices, NavierStokesCommonIndices); - -//! The weight of the upwind control volume when calculating -//! fluxes. Use central differences by default. -SET_SCALAR_PROP(NavierStokes, ImplicitMassUpwindWeight, 0.5); - -//! weight for the upwind mobility in the velocity calculation -//! fluxes. Use central differences by default. -SET_SCALAR_PROP(NavierStokes, ImplicitMobilityUpwindWeight, 0.5); - -//! The fluid system to use by default -SET_TYPE_PROP(NavierStokes, FluidSystem, Dumux::FluidSystems::OneP); - -SET_PROP(NavierStokes, Fluid) -{ private: - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; -public: - typedef FluidSystems::LiquidPhase > type; -}; - -/*! - * \brief The fluid state which is used by the volume variables to - * store the thermodynamic state. This should be chosen - * appropriately for the model ((non-)isothermal, equilibrium, ...). - * This can be done in the problem. - */ -SET_PROP(NavierStokes, FluidState){ - private: - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem; - public: - typedef Dumux::ImmiscibleFluidState type; -}; - -// disable velocity output by default -SET_BOOL_PROP(NavierStokes, VtkAddVelocity, true); - -// enable gravity by default -SET_BOOL_PROP(NavierStokes, ProblemEnableGravity, true); - -SET_BOOL_PROP(NavierStokes, EnableInertiaTerms, true); - -SET_BOOL_PROP(NavierStokes, EnableEnergyTransport, false); - -SET_BOOL_PROP(NavierStokes, EnableComponentTransport, false); - -//! Normalize the pressure term in the momentum balance or not -SET_BOOL_PROP(NavierStokes, NormalizePressure, true); - -SET_PROP(NavierStokes, BoundaryValues) -{ -private: - using CellCenterBoundaryValues = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); - using GridView = typename GET_PROP_TYPE(TypeTag, GridView); - using FaceBoundaryValues = Dune::FieldVector; -public: - using type = StaggeredPrimaryVariables; -}; - -//! Boundary types at a single degree of freedom -SET_TYPE_PROP(NavierStokes, - BoundaryTypes, - StaggeredFreeFlowBoundaryTypes); - -SET_TYPE_PROP(NavierStokes, VtkOutputModule, FreeFlowStaggeredVtkOutputModule); - -SET_TYPE_PROP(NavierStokes, VelocityOutput, StaggeredFreeFlowVelocityOutput); - -SET_TYPE_PROP(NavierStokes, EnergyLocalResidual, FreeFlowEnergyLocalResidual); - -SET_TYPE_PROP(NavierStokes, EnergyFluxVariables, FreeFlowEnergyFluxVariables); - -//! average is used as default model to compute the effective thermal heat conductivity -// SET_PROP(NavierStokesNI, ThermalConductivityModel) -// { private : -// typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; -// public: -// typedef ThermalConductivityAverage type; -// }; - -////////////////////////////////////////////////////////////////// -// Property values for isothermal model required for the general non-isothermal model -////////////////////////////////////////////////////////////////// - -// set isothermal Model -SET_TYPE_PROP(NavierStokesNI, IsothermalModel, NavierStokesModel); - -//set isothermal Indices -SET_TYPE_PROP(NavierStokesNI, IsothermalIndices, NavierStokesCommonIndices); - -//set isothermal NumEq -SET_INT_PROP(NavierStokesNI, IsothermalNumEqCellCenter, 1); //!< set the number of equations to 1 -SET_INT_PROP(NavierStokesNI, IsothermalNumEqFace, 1); //!< set the number of equations to 1 - -// \} -} // end namespace Properties - -} // end namespace Dumux - -#endif diff --git a/dumux/freeflow/staggered/velocityoutput.hh b/dumux/freeflow/staggered/velocityoutput.hh index 2fa4415f305691400664c58e65fa732f1e2656ae..75484aa8527660fbadf691acc04208b5d98c92d7 100644 --- a/dumux/freeflow/staggered/velocityoutput.hh +++ b/dumux/freeflow/staggered/velocityoutput.hh @@ -28,7 +28,7 @@ #include #include -#include +#include #include namespace Dumux @@ -57,6 +57,10 @@ class StaggeredFreeFlowVelocityOutput using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + static const bool isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox); static const int dim = GridView::dimension; static const int dimWorld = GridView::dimensionworld; @@ -75,11 +79,17 @@ public: * * \param problem The problem to be solved */ - StaggeredFreeFlowVelocityOutput(const Problem& problem) + StaggeredFreeFlowVelocityOutput(const Problem& problem, + const FVGridGeometry& fvGridGeometry, + const GridVariables& gridVariables, + const SolutionVector& sol) : problem_(problem) + , fvGridGeometry_(fvGridGeometry) + , gridVariables_(gridVariables) + , sol_(sol) { // check, if velocity output can be used (works only for cubes so far) - velocityOutput_ = GET_PARAM_FROM_GROUP(TypeTag, bool, Vtk, AddVelocity); + velocityOutput_ = getParamFromGroup(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Vtk.AddVelocity"); } bool enableOutput() @@ -97,15 +107,16 @@ public: const Element& element, int phaseIdx) { + auto elemFaceVars = localView(gridVariables_.curGridFaceVars()); + elemFaceVars.bindElement(element, fvGeometry, sol_); for (auto&& scv : scvs(fvGeometry)) { auto dofIdxGlobal = scv.dofIndex(); for (auto&& scvf : scvfs(fvGeometry)) { - auto& origFaceVars = problem_.model().curGlobalFaceVars().faceVars(scvf.dofIndex()); auto dirIdx = scvf.directionIndex(); - velocity[dofIdxGlobal][dirIdx] += 0.5*origFaceVars.velocity(); + velocity[dofIdxGlobal][dirIdx] += 0.5*elemFaceVars[scvf].velocitySelf(); } } } @@ -113,6 +124,9 @@ public: private: const Problem& problem_; + const FVGridGeometry& fvGridGeometry_; + const GridVariables& gridVariables_; + const SolutionVector& sol_; bool velocityOutput_; }; diff --git a/dumux/freeflow/staggered/vtkoutputfields.hh b/dumux/freeflow/staggered/vtkoutputfields.hh new file mode 100644 index 0000000000000000000000000000000000000000..53fee98bfe6fbff20a29b6e8e3e32e0319c6131e --- /dev/null +++ b/dumux/freeflow/staggered/vtkoutputfields.hh @@ -0,0 +1,71 @@ +// -*- 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 . * + *****************************************************************************/ +/*! + * \file + * \brief Adds vtk output fields specific to the twop model + */ +#ifndef DUMUX_NAVIER_STOKES_VTK_OUTPUT_FIELDS_HH +#define DUMUX_NAVIER_STOKES_VTK_OUTPUT_FIELDS_HH + +#include +#include + +namespace Dumux +{ + +/*! + * \ingroup TwoP, InputOutput + * \brief Adds vtk output fields specific to the twop model + */ +template +class NavierStokesVtkOutputFields +{ + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); + using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); + using FaceVariables = typename GET_PROP_TYPE(TypeTag, FaceVariables); + + using GlobalPosition = Dune::FieldVector; + +public: + template + static void init(VtkOutputModule& vtk) + { + vtk.addVolumeVariable([](const VolumeVariables& v){ return v.pressure(); }, "p"); + + const bool writeFaceVars_ = getParamFromGroup(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Vtk.WriteFaceData", false); + if(writeFaceVars_) + { + auto faceVelocityVector = [](const SubControlVolumeFace& scvf, const FaceVariables& f) + { + GlobalPosition velocity(0.0); + velocity[scvf.directionIndex()] = f.velocitySelf(); + return velocity; + }; + + vtk.addFaceVariable(faceVelocityVector, "faceVelocity"); + } + } +}; + +} // end namespace Dumux + +#endif diff --git a/dumux/freeflow/staggered/vtkoutputmodule.hh b/dumux/freeflow/staggered/vtkoutputmodule.hh deleted file mode 100644 index 3a55f7c8281ebed939b0c0e6e933131c7fdddf43..0000000000000000000000000000000000000000 --- a/dumux/freeflow/staggered/vtkoutputmodule.hh +++ /dev/null @@ -1,86 +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 . * - *****************************************************************************/ -/*! - * \file - * \brief A VTK output module to simplify writing dumux simulation data to VTK format. - * This is a specialization for a staggered free-flow implementation on a regular grid. - */ -#ifndef FREEFLOW_STAGGERED_VTK_OUTPUT_MODULE_HH -#define FREEFLOW_STAGGERED_VTK_OUTPUT_MODULE_HH - -#include - -#include -#include - -namespace Properties -{ -NEW_PROP_TAG(VtkAddVelocity); -NEW_PROP_TAG(VtkAddProcessRank); -} - -namespace Dumux -{ - -/*! - * \ingroup InputOutput - * \brief A VTK output module to simplify writing dumux simulation data to VTK format - * This is a specialization for a staggered free-flow implementation on a regular grid. - */ -template -class FreeFlowStaggeredVtkOutputModule : public StaggeredVtkOutputModule -{ - friend class StaggeredVtkOutputModule; - using ParentType = StaggeredVtkOutputModule; - using Problem = typename GET_PROP_TYPE(TypeTag, Problem); - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); - - using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); - typename DofTypeIndices::FaceIdx faceIdx; - - using Data = std::vector>; - -public: - FreeFlowStaggeredVtkOutputModule(const Problem& problem, - Dune::VTK::DataMode dm = Dune::VTK::conforming) : ParentType(problem, dm) - - {} - -private: - - /*! - * \brief Retrives vector-valued data from the face. This is a specialization for a free-flow implementation on a regular grid. - * - * \param priVarVectorData Container to store the data - * \param face The face - */ - template - void getPrivarVectorData_(Data& priVarVectorData, const Face& face) - { - const int dofIdxGlobal = face.dofIndex(); - const int dirIdx = directionIndex(face.unitOuterNormal()); - const Scalar velocity = this->problem().model().curSol()[faceIdx][dofIdxGlobal][0]; - for (int i = 0; i < this->priVarVectorDataInfo_.size(); ++i) - priVarVectorData[i][dofIdxGlobal * this->priVarVectorDataInfo_[i].pvIdx.size() + dirIdx] = velocity; - } -}; - -} // end namespace Dumux - -#endif diff --git a/dumux/freeflow/staggerednc/fluxvariables.hh b/dumux/freeflow/staggerednc/fluxvariables.hh index ae4a1c6574fc62824519dc7137bf5c5fd55f838c..8639c26ebfbac28cd785f22749cd9c9f1658bdd1 100644 --- a/dumux/freeflow/staggerednc/fluxvariables.hh +++ b/dumux/freeflow/staggerednc/fluxvariables.hh @@ -23,7 +23,7 @@ #ifndef DUMUX_FREELOW_IMPLICIT_NC_FLUXVARIABLES_HH #define DUMUX_FREELOW_IMPLICIT_NC_FLUXVARIABLES_HH -#include +#include #include #include "../staggered/fluxvariables.hh" @@ -36,6 +36,7 @@ namespace Properties NEW_PROP_TAG(EnableComponentTransport); NEW_PROP_TAG(EnableEnergyBalance); NEW_PROP_TAG(EnableInertiaTerms); +NEW_PROP_TAG(ElementFaceVariables); } // // forward declaration @@ -60,7 +61,7 @@ class FreeFlowFluxVariablesImpl : public FreeFlowFluxVariablesImp using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); using Indices = typename GET_PROP_TYPE(TypeTag, Indices); using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); - using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); + using ElementFaceVariables = typename GET_PROP_TYPE(TypeTag, ElementFaceVariables); using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); using FluxVariablesCache = typename GET_PROP_TYPE(TypeTag, FluxVariablesCache); using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); @@ -95,17 +96,18 @@ class FreeFlowFluxVariablesImpl : public FreeFlowFluxVariablesImp }; public: + CellCenterPrimaryVariables computeFluxForCellCenter(const Problem& problem, const Element &element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars, + const ElementFaceVariables& elemFaceVars, const SubControlVolumeFace &scvf, const FluxVariablesCache& fluxVarsCache) { CellCenterPrimaryVariables flux(0.0); - flux += advectiveFluxForCellCenter_(problem, fvGeometry, elemVolVars, globalFaceVars, scvf); + flux += advectiveFluxForCellCenter_(problem, fvGeometry, elemVolVars, elemFaceVars, scvf); flux += MolecularDiffusionType::diffusiveFluxForCellCenter(problem, fvGeometry, elemVolVars, scvf); return flux; } @@ -115,7 +117,7 @@ private: CellCenterPrimaryVariables advectiveFluxForCellCenter_(const Problem& problem, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars, + const ElementFaceVariables& elemFaceVars, const SubControlVolumeFace &scvf) { CellCenterPrimaryVariables flux(0.0); @@ -123,10 +125,10 @@ private: const auto& insideScv = fvGeometry.scv(scvf.insideScvIdx()); const auto& insideVolVars = elemVolVars[insideScv]; - const Scalar velocity = globalFaceVars.faceVars(scvf.dofIndex()).velocity(); + const Scalar velocity = elemFaceVars[scvf].velocitySelf(); const bool insideIsUpstream = sign(scvf.outerNormalScalar()) == sign(velocity); - const Scalar upWindWeight = GET_PROP_VALUE(TypeTag, ImplicitUpwindWeight); + const Scalar upWindWeight = getParamFromGroup(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Implicit.UpwindWeight"); for (int compIdx = 0; compIdx < numComponents; ++compIdx) { diff --git a/dumux/freeflow/staggerednc/indices.hh b/dumux/freeflow/staggerednc/indices.hh index b68c4d4ea0c6b0c992d1f8acb13854b6c178ee0d..d6a83c1eff5913d812d4a944b84a62309cac3bf3 100644 --- a/dumux/freeflow/staggerednc/indices.hh +++ b/dumux/freeflow/staggerednc/indices.hh @@ -24,6 +24,7 @@ #define DUMUX_STAGGERED_NAVIERSTOKES_NC_INDICES_HH #include +#include namespace Dumux { diff --git a/dumux/freeflow/staggerednc/localresidual.hh b/dumux/freeflow/staggerednc/localresidual.hh index 0fb4538ede8936bb1c70cdedda1fc4d08b8e96ca..6edb9805f33ba6d24492498964491645db94cf30 100644 --- a/dumux/freeflow/staggerednc/localresidual.hh +++ b/dumux/freeflow/staggerednc/localresidual.hh @@ -23,7 +23,6 @@ #ifndef DUMUX_STAGGERED_NAVIERSTOKES_NC_LOCAL_RESIDUAL_HH #define DUMUX_STAGGERED_NAVIERSTOKES_NC_LOCAL_RESIDUAL_HH -#include #include #include @@ -65,17 +64,17 @@ class StaggeredNavierStokesResidualImpl : public StaggeredNavierS friend ParentType; using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); using Indices = typename GET_PROP_TYPE(TypeTag, Indices); - using FluxVariables = typename GET_PROP_TYPE(TypeTag, FluxVariables); using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using CellCenterResidual = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); typename DofTypeIndices::CellCenterIdx cellCenterIdx; - typename DofTypeIndices::FaceIdx faceIdx; enum { conti0EqIdx = Indices::conti0EqIdx, @@ -87,12 +86,13 @@ class StaggeredNavierStokesResidualImpl : public StaggeredNavierS }; using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); - using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); using EnergyLocalResidual = typename GET_PROP_TYPE(TypeTag, EnergyLocalResidual); static constexpr int numComponents = GET_PROP_VALUE(TypeTag, NumComponents); static constexpr bool useMoles = GET_PROP_VALUE(TypeTag, UseMoles); +public: + using ParentType::ParentType; /*! * \brief Evaluate the rate of change of all conservation @@ -104,7 +104,8 @@ class StaggeredNavierStokesResidualImpl : public StaggeredNavierS * \note The volVars can be different to allow computing * the implicit euler time derivative here */ - CellCenterPrimaryVariables computeStorageForCellCenter(const SubControlVolume& scv, + CellCenterPrimaryVariables computeStorageForCellCenter(const Problem& problem, + const SubControlVolume& scv, const VolumeVariables& volVars) const { CellCenterPrimaryVariables storage(0.0); @@ -141,11 +142,13 @@ protected: * \param elemVolVars The current or previous element volVars * \param bcTypes The boundary types */ - void setFixedCell_(const SubControlVolume& insideScv, + void setFixedCell_(CellCenterResidual& residual, + const Problem& problem, + const SubControlVolume& insideScv, const ElementVolumeVariables& elemVolVars, - const BoundaryTypes& bcTypes) + const BoundaryTypes& bcTypes) const { - ParentType::setFixedCell_(insideScv, elemVolVars, bcTypes); + ParentType::setFixedCell_(residual, problem, insideScv, elemVolVars, bcTypes); for (int compIdx = 0; compIdx < numComponents; ++compIdx) { @@ -157,7 +160,7 @@ protected: { const auto& insideVolVars = elemVolVars[insideScv]; const Scalar massOrMoleFraction = useMoles ? insideVolVars.moleFraction(phaseIdx, compIdx) : insideVolVars.massFraction(phaseIdx, compIdx); - this->ccResidual_[eqIdx] = massOrMoleFraction - this->problem().dirichletAtPos(insideScv.center())[cellCenterIdx][eqIdx]; + residual[eqIdx] = massOrMoleFraction - problem.dirichletAtPos(insideScv.center())[cellCenterIdx][eqIdx]; } } diff --git a/dumux/freeflow/staggerednc/model.hh b/dumux/freeflow/staggerednc/model.hh index f65194ab28971e01cc8140bc36b3dd00e16a5a5f..1c6c25cb78db68c0b86e3549500b168626eed0c9 100644 --- a/dumux/freeflow/staggerednc/model.hh +++ b/dumux/freeflow/staggerednc/model.hh @@ -27,15 +27,9 @@ #ifndef DUMUX_NAVIERSTOKES_NC_MODEL_HH #define DUMUX_NAVIERSTOKES_NC_MODEL_HH -// #include -#include "properties.hh" -#include "../staggered/model.hh" -#include "../staggeredni/model.hh" -namespace Dumux -{ /*! - * \ingroup NavierStokesModel + * \ingroup NavierStokesModel TODO: doc me properly! * \brief A single-phase, isothermal flow model using the fully implicit scheme. * * Single-phase, isothermal flow model, which uses a standard Darcy approach as the @@ -55,63 +49,6 @@ namespace Dumux * and the implicit Euler method as time discretization. * The model supports compressible as well as incompressible fluids. */ -template -class NavierStokesNCModel : public NavierStokesModel -{ - using ParentType = NavierStokesModel; - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - typedef typename GET_PROP_TYPE(TypeTag, FVGridGeometry) FVGridGeometry; - typedef typename GET_PROP_TYPE(TypeTag, SolutionVector) SolutionVector; - typedef typename GET_PROP_TYPE(TypeTag, JacobianAssembler) JacobianAssembler; - using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); - using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); - - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - enum { dim = GridView::dimension }; - enum { dimWorld = GridView::dimensionworld }; - - enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) }; - enum { dofCodim = isBox ? dim : 0 }; - using Element = typename GridView::template Codim<0>::Entity; - - using GlobalPosition = Dune::FieldVector; - - static constexpr int numComponents = GET_PROP_VALUE(TypeTag, NumComponents); - - using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); - typename DofTypeIndices::CellCenterIdx cellCenterIdx; - typename DofTypeIndices::FaceIdx faceIdx; - - enum { phaseIdx = Indices::phaseIdx }; - -public: - - void init(Problem& problem) - { - ParentType::init(problem); - - // register standardized vtk output fields - auto& vtkOutputModule = problem.vtkOutputModule(); - vtkOutputModule.addSecondaryVariable("rhoMolar",[](const VolumeVariables& v){ return v.molarDensity(); }); - vtkOutputModule.addSecondaryVariable("rho",[](const VolumeVariables& v){ return v.density(); }); - for (int j = 0; j < numComponents; ++j) - { - vtkOutputModule.addSecondaryVariable("X^" + FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(phaseIdx), - [j](const VolumeVariables& v){ return v.massFraction(phaseIdx,j); }); - - vtkOutputModule.addSecondaryVariable("x^" + FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(phaseIdx), - [j](const VolumeVariables& v){ return v.moleFraction(phaseIdx,j); }); - } - -// NonIsothermalModel::maybeAddTemperature(vtkOutputModule); - } -}; -} - -#include "propertydefaults.hh" #endif diff --git a/dumux/freeflow/staggerednc/properties.hh b/dumux/freeflow/staggerednc/properties.hh index 4fdcc281361f1e882df54be7320fbfc3c67ead3b..e3cf94efcb7243d0bbfa3fba594f84f97a9f1f2c 100644 --- a/dumux/freeflow/staggerednc/properties.hh +++ b/dumux/freeflow/staggerednc/properties.hh @@ -29,6 +29,19 @@ #include #include +#include + +#include "volumevariables.hh" +#include "indices.hh" +#include "localresidual.hh" +#include "fluxvariables.hh" +#include "vtkoutputfields.hh" + +#include +#include +#include + +#include namespace Dumux { @@ -46,27 +59,74 @@ namespace Properties { NEW_TYPE_TAG(NavierStokesNC, INHERITS_FROM(NavierStokes)); NEW_TYPE_TAG(NavierStokesNCNI, INHERITS_FROM(NavierStokesNC, NavierStokesNonIsothermal)); -////////////////////////////////////////////////////////////////// -// Property tags -////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////// +// default property values for the isothermal single phase model +/////////////////////////////////////////////////////////////////////////// +SET_PROP(NavierStokesNC, NumEqCellCenter) +{ +private: + static constexpr int numComponents = GET_PROP_VALUE(TypeTag, NumComponents); +public: + static constexpr int value = numComponents; +}; + +SET_INT_PROP(NavierStokesNC, ReplaceCompEqIdx, 0); + +/*! +* \brief Set the property for the number of components. +* +* We just forward the number from the fluid system +* +*/ +SET_PROP(NavierStokesNC, NumComponents) +{ +private: + typedef typename GET_PROP_TYPE(TypeTag, PTAG(FluidSystem)) FluidSystem; + +public: + static constexpr int value = FluidSystem::numComponents; + +}; + +//! the VolumeVariables property +SET_TYPE_PROP(NavierStokesNC, VolumeVariables, NavierStokesNCVolumeVariables); +SET_TYPE_PROP(NavierStokesNC, Indices, NavierStokesNCIndices); + +/*! + * \brief The fluid state which is used by the volume variables to + * store the thermodynamic state. This should be chosen + * appropriately for the model ((non-)isothermal, equilibrium, ...). + * This can be done in the problem. + */ +SET_PROP(NavierStokesNC, FluidState) +{ + private: + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + public: + using type = CompositionalFluidState; +}; + +SET_BOOL_PROP(NavierStokesNC, EnableComponentTransport, true); + +//! The one-phase model has no molecular diffusion +SET_BOOL_PROP(NavierStokesNC, EnableMolecularDiffusion, true); + +SET_TYPE_PROP(NavierStokesNC, MolecularDiffusionType, FicksLaw); + +SET_BOOL_PROP(NavierStokesNC, UseMoles, false); //!< Defines whether molar (true) or mass (false) density is used + +SET_INT_PROP(NavierStokesNC, PhaseIdx, 0); //!< Defines the phaseIdx + +SET_TYPE_PROP(NavierStokesNC, VtkOutputFields, NavierStokesNCVtkOutputFields); //! the vtk output fields + +// non-isothermal properties +SET_INT_PROP(NavierStokesNCNI, IsothermalNumEqCellCenter, GET_PROP_VALUE(TypeTag, NumComponents)); //!< set the number of equations on the cell centers +SET_INT_PROP(NavierStokesNCNI, IsothermalNumEqFace, 1); //!< set the number of equations on the faces +SET_TYPE_PROP(NavierStokesNCNI, IsothermalIndices, NavierStokesNCIndices); //! the isothermal indices +SET_TYPE_PROP(NavierStokesNCNI, IsothermalVtkOutputFields, NavierStokesNCVtkOutputFields); //! the isothermal vtk output fields + -NEW_PROP_TAG(NumPhases); //!< Number of fluid phases in the system -NEW_PROP_TAG(Indices); //!< Enumerations for the model -NEW_PROP_TAG(FluidSystem); //!< The type of the fluid system to use -NEW_PROP_TAG(Fluid); //!< The fluid used for the default fluid system -NEW_PROP_TAG(FluidState); //!< The type of the fluid state to use -NEW_PROP_TAG(ProblemEnableGravity); //!< Returns whether gravity is considered in the problem -NEW_PROP_TAG(ImplicitMassUpwindWeight); //!< Returns weight of the upwind cell when calculating fluxes -NEW_PROP_TAG(ImplicitMobilityUpwindWeight); //!< Weight for the upwind mobility in the velocity calculation -NEW_PROP_TAG(VtkAddVelocity); //!< Returns whether velocity vectors are written into the vtk output -NEW_PROP_TAG(EnableInertiaTerms); //!< Returns whether to include inertia terms in the momentum balance eq or not (Stokes / Navier-Stokes) -NEW_PROP_TAG(BoundaryValues); //!< Type to set values on the boundary -NEW_PROP_TAG(EnableComponentTransport); //!< Returns whether to consider component transport or not -NEW_PROP_TAG(EnableEnergyTransport); //!< Returns whether to consider energy transport or not -NEW_PROP_TAG(FaceVariables); //!< Returns whether to consider energy transport or not -NEW_PROP_TAG(ReplaceCompEqIdx); //!< Returns whether to consider energy transport or not -NEW_PROP_TAG(UseMoles); //!< Defines whether molar (true) or mass (false) density is used -NEW_PROP_TAG(PhaseIdx); //!< Defines the phaseIdx // \} } diff --git a/dumux/freeflow/staggerednc/propertydefaults.hh b/dumux/freeflow/staggerednc/propertydefaults.hh deleted file mode 100644 index 56a901194a666338d0c58312c4173fbcb589470c..0000000000000000000000000000000000000000 --- a/dumux/freeflow/staggerednc/propertydefaults.hh +++ /dev/null @@ -1,143 +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 . * - *****************************************************************************/ -/*! - * \ingroup Properties - * \ingroup ImplicitProperties - * \ingroup OnePModel - * \file - * - * \brief Defines the properties required for the one-phase fully implicit model. - */ -#ifndef DUMUX_NAVIER_STOKES_NC_PROPERTY_DEFAULTS_HH -#define DUMUX_NAVIER_STOKES_NC_PROPERTY_DEFAULTS_HH - -#include "properties.hh" - -#include "model.hh" -#include "volumevariables.hh" -#include "indices.hh" -#include "localresidual.hh" -#include "fluxvariables.hh" -#include "../staggered/problem.hh" -#include "../staggered/propertydefaults.hh" - - -#include -#include -#include -#include -#include - -#include - - -namespace Dumux -{ - -namespace Properties -{ -// forward declaration -NEW_PROP_TAG(FluxVariables); -NEW_PROP_TAG(FluxVariablesCache); -} -// \{ - -/////////////////////////////////////////////////////////////////////////// -// default property values for the isothermal single phase model -/////////////////////////////////////////////////////////////////////////// -namespace Properties { - -SET_PROP(NavierStokesNC, NumEqCellCenter) -{ -private: - static constexpr int numComponents = GET_PROP_VALUE(TypeTag, NumComponents); -public: - static constexpr int value = numComponents; -}; - - -SET_INT_PROP(NavierStokesNC, ReplaceCompEqIdx, 0); - - - /*! - * \brief Set the property for the number of components. - * - * We just forward the number from the fluid system - * - */ -SET_PROP(NavierStokesNC, NumComponents) -{ -private: - typedef typename GET_PROP_TYPE(TypeTag, PTAG(FluidSystem)) FluidSystem; - -public: - static constexpr int value = FluidSystem::numComponents; - -}; - - -//! the VolumeVariables property -SET_TYPE_PROP(NavierStokesNC, VolumeVariables, NavierStokesNCVolumeVariables); -SET_TYPE_PROP(NavierStokesNC, Model, NavierStokesNCModel); -SET_TYPE_PROP(NavierStokesNC, Indices, NavierStokesNCIndices); - - -/*! - * \brief The fluid state which is used by the volume variables to - * store the thermodynamic state. This should be chosen - * appropriately for the model ((non-)isothermal, equilibrium, ...). - * This can be done in the problem. - */ -SET_PROP(NavierStokesNC, FluidState) -{ - private: - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem; - public: - typedef CompositionalFluidState type; -}; - -// -SET_BOOL_PROP(NavierStokesNC, EnableComponentTransport, true); - -SET_BOOL_PROP(NavierStokesNC, UseMoles, false); //!< Defines whether molar (true) or mass (false) density is used - -SET_INT_PROP(NavierStokesNC, PhaseIdx, 0); //!< Defines the phaseIdx - - -////////////////////////////////////////////////////////////////// -// Property values for isothermal model required for the general non-isothermal model -////////////////////////////////////////////////////////////////// - -// set isothermal Model -SET_TYPE_PROP(NavierStokesNCNI, IsothermalModel, NavierStokesNCModel); - -//set isothermal Indices -SET_TYPE_PROP(NavierStokesNCNI, IsothermalIndices, NavierStokesNCIndices); - -//set isothermal NumEq -SET_INT_PROP(NavierStokesNCNI, IsothermalNumEqCellCenter, 2); //!< set the number of equations to 1 -SET_INT_PROP(NavierStokesNCNI, IsothermalNumEqFace, 1); //!< set the number of equations - -// \} -} // end namespace Properties - -} // end namespace Dumux - -#endif diff --git a/dumux/freeflow/staggerednc/vtkoutputfields.hh b/dumux/freeflow/staggerednc/vtkoutputfields.hh new file mode 100644 index 0000000000000000000000000000000000000000..00babf1aa48d6bf631419226171f279e47810780 --- /dev/null +++ b/dumux/freeflow/staggerednc/vtkoutputfields.hh @@ -0,0 +1,66 @@ +// -*- 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 . * + *****************************************************************************/ +/*! + * \file + * \brief Adds vtk output fields specific to the NavierStokesNC model + */ +#ifndef DUMUX_NAVIER_STOKES_NC_VTK_OUTPUT_FIELDS_HH +#define DUMUX_NAVIER_STOKES_NC_VTK_OUTPUT_FIELDS_HH + +#include +#include + +namespace Dumux +{ + +/*! + * \ingroup TwoP, InputOutput + * \brief Adds vtk output fields specific to the NavierStokesNC model + */ +template +class NavierStokesNCVtkOutputFields : NavierStokesVtkOutputFields +{ + using ParentType = NavierStokesVtkOutputFields; + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); + using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + + static constexpr int numComponents = GET_PROP_VALUE(TypeTag, NumComponents); + static constexpr int phaseIdx = GET_PROP_VALUE(TypeTag, PhaseIdx); + +public: + template + static void init(VtkOutputModule& vtk) + { + ParentType::init(vtk); + + vtk.addVolumeVariable([](const VolumeVariables& v){ return v.molarDensity(); }, "rhoMolar"); + vtk.addVolumeVariable([](const VolumeVariables& v){ return v.density(); }, "rho"); + + for (int j = 0; j < numComponents; ++j) + { + vtk.addVolumeVariable([j](const VolumeVariables& v){ return v.massFraction(phaseIdx,j); }, "X^" + FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(phaseIdx)); + vtk.addVolumeVariable([j](const VolumeVariables& v){ return v.moleFraction(phaseIdx,j); }, "x^" + FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(phaseIdx)); + } + } +}; + +} // end namespace Dumux + +#endif diff --git a/dumux/freeflow/staggeredni/fluxvariables.hh b/dumux/freeflow/staggeredni/fluxvariables.hh index 34d8b7f6b49de94ec130adbb7d76310073871297..028f37129637114fd6186e50f69c2c60c4f32350 100644 --- a/dumux/freeflow/staggeredni/fluxvariables.hh +++ b/dumux/freeflow/staggeredni/fluxvariables.hh @@ -23,11 +23,16 @@ #ifndef DUMUX_FREELOW_IMPLICIT_NI_FLUXVARIABLES_HH #define DUMUX_FREELOW_IMPLICIT_NI_FLUXVARIABLES_HH -#include +#include namespace Dumux { +namespace Properties +{ + NEW_PROP_TAG(ElementFaceVariables); +} + /*! * \ingroup ImplicitModel * \brief The flux variables class @@ -52,7 +57,7 @@ class FreeFlowEnergyFluxVariablesImplementation using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); - using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); + using ElementFaceVariables = typename GET_PROP_TYPE(TypeTag, ElementFaceVariables); using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); using FluxVariablesCache = typename GET_PROP_TYPE(TypeTag, FluxVariablesCache); using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); @@ -64,7 +69,7 @@ public: const Element &element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars, + const ElementFaceVariables& elemFaceVars, const SubControlVolumeFace &scvf, const FluxVariablesCache& fluxVarsCache) { } @@ -82,7 +87,7 @@ class FreeFlowEnergyFluxVariablesImplementation using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); using Indices = typename GET_PROP_TYPE(TypeTag, Indices); using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); - using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); + using ElementFaceVariables = typename GET_PROP_TYPE(TypeTag, ElementFaceVariables); using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); using FluxVariablesCache = typename GET_PROP_TYPE(TypeTag, FluxVariablesCache); using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); @@ -98,11 +103,11 @@ public: const Element &element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars, + const ElementFaceVariables& elemFaceVars, const SubControlVolumeFace &scvf, const FluxVariablesCache& fluxVarsCache) { - flux[energyBalanceIdx] += advectiveFluxForCellCenter_(problem, fvGeometry, elemVolVars, globalFaceVars, scvf); + flux[energyBalanceIdx] += advectiveFluxForCellCenter_(problem, fvGeometry, elemVolVars, elemFaceVars, scvf); flux[energyBalanceIdx] += HeatConductionType::diffusiveFluxForCellCenter(problem, element, fvGeometry, elemVolVars, scvf); } @@ -112,13 +117,13 @@ private: * \param problem The problem * \param fvGeometry The finite-volume geometry * \param elemVolVars All volume variables for the element - * \param globalFaceVars The face variables + * \param elemFaceVars The face variables * \param scvf The sub control volume face */ static Scalar advectiveFluxForCellCenter_(const Problem& problem, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars, + const ElementFaceVariables& elemFaceVars, const SubControlVolumeFace &scvf) { Scalar flux(0.0); @@ -138,13 +143,13 @@ private: const auto& outsideVolVars = isOutflow ? insideVolVars : elemVolVars[scvf.outsideScvIdx()]; - const Scalar velocity = globalFaceVars.faceVars(scvf.dofIndex()).velocity(); + const Scalar velocity = elemFaceVars[scvf].velocitySelf(); const bool insideIsUpstream = sign(scvf.outerNormalScalar()) == sign(velocity); const auto& upstreamVolVars = insideIsUpstream ? insideVolVars : outsideVolVars; const auto& downstreamVolVars = insideIsUpstream ? outsideVolVars : insideVolVars; - const Scalar upWindWeight = GET_PROP_VALUE(TypeTag, ImplicitUpwindWeight); + static const Scalar upWindWeight = getParamFromGroup(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Implicit.UpwindWeight"); const Scalar upstreamDensity = upstreamVolVars.density(); const Scalar downstreamDensity = downstreamVolVars.density(); const Scalar upstreamEnthalpy = upstreamVolVars.enthalpy(); diff --git a/dumux/freeflow/staggeredni/properties.hh b/dumux/freeflow/staggeredni/properties.hh index b3bbc8f45fa067d509dcae2154ec2e22bcef22b3..f8635e9972f48d404e4bd2025155c9efde639b4d 100644 --- a/dumux/freeflow/staggeredni/properties.hh +++ b/dumux/freeflow/staggeredni/properties.hh @@ -19,47 +19,55 @@ /*! * \ingroup Properties * \ingroup ImplicitProperties - * \ingroup NavierStokesModel + * \ingroup OnePModel * \file * * \brief Defines the properties required for the one-phase fully implicit model. */ -#ifndef DUMUX_NAVIERSTOKES_NI_PROPERTIES_HH -#define DUMUX_NAVIERSTOKES_NI_PROPERTIES_HH +#ifndef DUMUX_NAVIER_STOKES_NI_PROPERTIES_HH +#define DUMUX_NAVIER_STOKES_NI_PROPERTIES_HH -#include +#include "fluxvariables.hh" +#include "indices.hh" +#include "localresidual.hh" +#include "vtkoutputfields.hh" +#include namespace Dumux { + // \{ -/////////////////////////////////////////////////////////////////////////// -// properties for the isothermal Navier-Stokes model -/////////////////////////////////////////////////////////////////////////// -namespace Properties { -////////////////////////////////////////////////////////////////// -// Type tags -////////////////////////////////////////////////////////////////// +namespace Properties { //! The type tags for the non-isothermal Navier Stokes problems NEW_TYPE_TAG(NavierStokesNonIsothermal); -////////////////////////////////////////////////////////////////// -// Property tags required for the non-isothermal models -////////////////////////////////////////////////////////////////// - -NEW_PROP_TAG(IsothermalModel); -NEW_PROP_TAG(IsothermalFluxVariables); -NEW_PROP_TAG(IsothermalIndices); NEW_PROP_TAG(IsothermalNumEqCellCenter); NEW_PROP_TAG(IsothermalNumEqFace); -NEW_PROP_TAG(HaveVariableFormulation); -NEW_PROP_TAG(ThermalConductivityModel); -NEW_PROP_TAG(NiOutputLevel); -// \} -} +/////////////////////////////////////////////////////////////////////////// +// default property values for the non-isothermal single phase model +/////////////////////////////////////////////////////////////////////////// + +SET_PROP(NavierStokesNonIsothermal, NumEqCellCenter) +{ +private: + static constexpr auto isothermalNumEqCellCenter = GET_PROP_VALUE(TypeTag, IsothermalNumEqCellCenter); +public: + static constexpr auto value = isothermalNumEqCellCenter + 1; +}; + +SET_TYPE_PROP(NavierStokesNonIsothermal, Indices, NavierStokesNonIsothermalIndices); + +SET_TYPE_PROP(NavierStokesNonIsothermal, VtkOutputFields, FreeFlowEnergyVtkOutputFields); + +SET_BOOL_PROP(NavierStokesNonIsothermal, EnableEnergyBalance, true); + +SET_TYPE_PROP(NavierStokesNonIsothermal, HeatConductionType, FouriersLaw); + +} // end namespace Properties -} // end namespace +} // end namespace Dumux #endif diff --git a/dumux/freeflow/staggeredni/propertydefaults.hh b/dumux/freeflow/staggeredni/vtkoutputfields.hh similarity index 56% rename from dumux/freeflow/staggeredni/propertydefaults.hh rename to dumux/freeflow/staggeredni/vtkoutputfields.hh index cd81fd2bbccb27f62b06e1ed69967d020de5c410..d90b6da57608f9e4d12df2fa7f6f6442847fa0df 100644 --- a/dumux/freeflow/staggeredni/propertydefaults.hh +++ b/dumux/freeflow/staggeredni/vtkoutputfields.hh @@ -17,46 +17,35 @@ * along with this program. If not, see . * *****************************************************************************/ /*! - * \ingroup Properties - * \ingroup ImplicitProperties - * \ingroup OnePModel * \file - * - * \brief Defines the properties required for the one-phase fully implicit model. + * \brief Adds vtk output fields specific to non-isothermal models */ -#ifndef DUMUX_NAVIER_STOKES_NI_PROPERTY_DEFAULTS_HH -#define DUMUX_NAVIER_STOKES_NI_PROPERTY_DEFAULTS_HH +#ifndef DUMUX_FF_ENERGY_OUTPUT_FIELDS_HH +#define DUMUX_FF_ENERGY_OUTPUT_FIELDS_HH -#include "indices.hh" +#include namespace Dumux { -// \{ - -/////////////////////////////////////////////////////////////////////////// -// default property values for the non-isothermal single phase model -/////////////////////////////////////////////////////////////////////////// -namespace Properties { - -SET_PROP(NavierStokesNonIsothermal, NumEqCellCenter) +/*! + * \ingroup NonIsothermal, InputOutput + * \brief Adds vtk output fields specific to non-isothermal models + */ +template +class FreeFlowEnergyVtkOutputFields { -private: - static constexpr auto isothermalNumEqCellCenter = GET_PROP_VALUE(TypeTag, IsothermalNumEqCellCenter); + using IsothermalVtkOutputFields = typename GET_PROP_TYPE(TypeTag, IsothermalVtkOutputFields); + using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); public: - static constexpr auto value = isothermalNumEqCellCenter + 1; + template + static void init(VtkOutputModule& vtk) + { + IsothermalVtkOutputFields::init(vtk); + vtk.addVolumeVariable( [](const VolumeVariables& v){ return v.temperature(); }, "temperature"); + } }; -SET_TYPE_PROP(NavierStokesNonIsothermal, Model, NavierStokesNonIsothermalModel); - -SET_TYPE_PROP(NavierStokesNonIsothermal, Indices, NavierStokesNonIsothermalIndices); - -SET_BOOL_PROP(NavierStokesNonIsothermal, EnableEnergyBalance, true); - -SET_TYPE_PROP(NavierStokesNonIsothermal, HeatConductionType, FouriersLaw); - -} // end namespace Properties - } // end namespace Dumux #endif diff --git a/dumux/implicit/staggered/assembler.hh b/dumux/implicit/staggered/assembler.hh deleted file mode 100644 index 30a84437f48a4d034775c40d66aa360913032387..0000000000000000000000000000000000000000 --- a/dumux/implicit/staggered/assembler.hh +++ /dev/null @@ -1,174 +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 . * - *****************************************************************************/ -/*! - * \file - * \brief An assembler for the global Jacobian matrix for fully implicit models. - */ -#ifndef DUMUX_STAGGERED_ASSEMBLER_HH -#define DUMUX_STAGGERED_ASSEMBLER_HH - -#include -#include -#include - -namespace Dumux { - -/*! - * \ingroup ImplicitModel - * \brief An assembler for the global Jacobian matrix for fully implicit models. - */ -template -class StaggeredAssembler : public ImplicitAssembler -{ - typedef ImplicitAssembler ParentType; - friend class ImplicitAssembler; - 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 GET_PROP_TYPE(TypeTag, JacobianMatrix) JacobianMatrix; - - typedef typename GridView::template Codim<0>::Entity Element; - typedef typename GridView::IndexSet::IndexType IndexType; - - typedef typename GET_PROP(TypeTag, JacobianMatrix)::MatrixBlockCCToCC CCToCCMatrixBlock; - typedef typename GET_PROP(TypeTag, JacobianMatrix)::MatrixBlockCCToFace CCToFaceMatrixBlock; - - typedef typename GET_PROP(TypeTag, JacobianMatrix)::MatrixBlockFaceToFace FaceToFaceMatrixBlock; - typedef typename GET_PROP(TypeTag, JacobianMatrix)::MatrixBlockFaceToCC FaceToCCMatrixBlock; - - using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); - typename DofTypeIndices::CellCenterIdx cellCenterIdx; - typename DofTypeIndices::FaceIdx faceIdx; - -public: - - /*! - * \brief Initialize the jacobian assembler. - * - * At this point we can assume that all objects in the problem and - * the model have been allocated. We can not assume that they are - * fully initialized, though. - * - * \param problem The problem object - */ - void init(Problem& problem) - { - std::cout << "init(Problem& problem)" << std::endl; - this->problemPtr_ = &problem; - - // initialize the BCRS matrix - createMatrix_(); - - // initialize the jacobian matrix with zeros - *this->matrix_ = 0; - - // allocate the residual vector - this->residual_[cellCenterIdx].resize(problem.model().numCellCenterDofs()); - this->residual_[faceIdx].resize(problem.model().numFaceDofs()); -// printmatrix(std::cout, matrix(), "", ""); - } - - -private: - - // Construct the multitype matrix for the global jacobian - void createMatrix_() - { - // create the multitype matrix - this->matrix_ = std::make_shared(); - - // get sub matrix sizes - const auto cellCenterSize = this->problem_().model().numCellCenterDofs(); - const auto faceSize = this->problem_().model().numFaceDofs(); - - // allocate the sub matrices (BCRS matrices) - auto A11 = CCToCCMatrixBlock(cellCenterSize, cellCenterSize, CCToCCMatrixBlock::random); - auto A12 = CCToFaceMatrixBlock(cellCenterSize, faceSize, CCToFaceMatrixBlock::random); - - auto A21 = FaceToCCMatrixBlock(faceSize, cellCenterSize, FaceToCCMatrixBlock::random); - auto A22 = FaceToFaceMatrixBlock(faceSize, faceSize, FaceToFaceMatrixBlock::random); - - setupMatrices_(A11, A12, A21, A22); - - (*this->matrix_)[cellCenterIdx][cellCenterIdx] = A11; - (*this->matrix_)[cellCenterIdx][faceIdx] = A12; - (*this->matrix_)[faceIdx][cellCenterIdx] = A21; - (*this->matrix_)[faceIdx][faceIdx] = A22; - -// printmatrix(std::cout, A11, "A11", ""); -// printmatrix(std::cout, A12, "A12", ""); -// printmatrix(std::cout, A21, "A21", ""); -// printmatrix(std::cout, A22, "A22", ""); - } - - void setupMatrices_(CCToCCMatrixBlock &A11, CCToFaceMatrixBlock &A12, - FaceToCCMatrixBlock &A21, FaceToFaceMatrixBlock &A22) - { - // get sub matrix sizes - const auto numDofsCC = this->problem_().model().numCellCenterDofs(); - const auto numDofsFace = this->problem_().model().numFaceDofs(); - - // get occupation pattern of the matrix - Dune::MatrixIndexSet occupationPatternA11; - Dune::MatrixIndexSet occupationPatternA12; - Dune::MatrixIndexSet occupationPatternA21; - Dune::MatrixIndexSet occupationPatternA22; - occupationPatternA11.resize(numDofsCC, numDofsCC); - occupationPatternA12.resize(numDofsCC, numDofsFace); - occupationPatternA21.resize(numDofsFace, numDofsCC); - occupationPatternA22.resize(numDofsFace, numDofsFace); - - const auto& assemblyMap = this->problem_().model().localJacobian().assemblyMap(); - - for (const auto& element : elements(this->gridView_())) - { - // the global index of the element at hand - const auto ccGlobalI = this->elementMapper_().index(element); - - for (auto&& ccGlobalJ : assemblyMap(cellCenterIdx, cellCenterIdx, ccGlobalI)) - occupationPatternA11.add(ccGlobalI, ccGlobalJ); - for (auto&& faceGlobalJ : assemblyMap(cellCenterIdx, faceIdx, ccGlobalI)) - occupationPatternA12.add(ccGlobalI, faceGlobalJ); - - auto fvGeometry = localView(this->problem_().model().fvGridGeometry()); - fvGeometry.bindElement(element); - - // loop over sub control faces - for (auto&& scvf : scvfs(fvGeometry)) - { - const auto faceGlobalI = scvf.dofIndex(); - for (auto&& ccGlobalJ : assemblyMap(faceIdx, cellCenterIdx, scvf.index())) - occupationPatternA21.add(faceGlobalI, ccGlobalJ); - for (auto&& faceGlobalJ : assemblyMap(faceIdx, faceIdx, scvf.index())) - occupationPatternA22.add(faceGlobalI, faceGlobalJ); - } - } - // export patterns to matrices - occupationPatternA11.exportIdx(A11); - occupationPatternA12.exportIdx(A12); - occupationPatternA21.exportIdx(A21); - occupationPatternA22.exportIdx(A22); - } - - -}; - -} // namespace Dumux - -#endif diff --git a/dumux/implicit/staggered/gridvariables.hh b/dumux/implicit/staggered/gridvariables.hh new file mode 100644 index 0000000000000000000000000000000000000000..1140c791f1c29e195288bf4f39fbd8b0a556b8cf --- /dev/null +++ b/dumux/implicit/staggered/gridvariables.hh @@ -0,0 +1,115 @@ +// -*- 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 . * + *****************************************************************************/ +/*! + * \file + * \brief Class storing scv and scvf variables + */ +#ifndef DUMUX_STAGGERED_GRID_VARIABLES_HH +#define DUMUX_STAGGERED_GRID_VARIABLES_HH + +#include + +namespace Dumux +{ + +/*! + * \ingroup ImplicitModel + * \brief Class storing scv and scvf variables + */ +template +class StaggeredGridVariables : public GridVariables +{ + using ParentType = GridVariables; + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using GridVolumeVariables = typename GET_PROP_TYPE(TypeTag, GlobalVolumeVariables); + using GridFaceVariables = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); + using GridFluxVariablesCache = typename GET_PROP_TYPE(TypeTag, GlobalFluxVariablesCache); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + +public: + //! Constructor + StaggeredGridVariables(std::shared_ptr problem, std::shared_ptr fvGridGeometry) + : ParentType(problem, fvGridGeometry) + , fvGridGeometry_(fvGridGeometry) + , curGridFaceVariables_(*problem) + , prevGridFaceVariables_(*problem) + {} + + //! update all variables + void update(const SolutionVector& curSol) + { + ParentType::update(curSol); + curGridFaceVariables_.update(*fvGridGeometry_, curSol); + } + + //! initialize all variables (stationary case) + void init(const SolutionVector& curSol) + { + ParentType::init(curSol); + curGridFaceVariables_.update(*fvGridGeometry_, curSol); + } + + //! initialize all variables (instationary case) + void init(const SolutionVector& curSol, const SolutionVector& initSol) + { + ParentType::init(curSol, initSol); + curGridFaceVariables_.update(*fvGridGeometry_, curSol); + prevGridFaceVariables_.update(*fvGridGeometry_, initSol); + } + + //! Sets the current state as the previous for next time step + //! this has to be called at the end of each time step + void advanceTimeStep() + { + ParentType::advanceTimeStep(); + prevGridFaceVariables_ = curGridFaceVariables_; + } + + //! resets state to the one before time integration + void resetTimeStep(const SolutionVector& solution) + { + ParentType::resetTimeStep(solution); + curGridFaceVariables_ = prevGridFaceVariables_; + } + + const GridFaceVariables& curGridFaceVars() const + { return curGridFaceVariables_; } + + const GridFaceVariables& prevGridFaceVars() const + { return prevGridFaceVariables_; } + + GridFaceVariables& curGridFaceVars() + { return curGridFaceVariables_; } + + GridFaceVariables& prevGridFaceVars() + { return prevGridFaceVariables_; } + +private: + + std::shared_ptr fvGridGeometry_; + + GridFaceVariables curGridFaceVariables_; + GridFaceVariables prevGridFaceVariables_; + +}; + +} // end namespace + +#endif diff --git a/dumux/implicit/staggered/localjacobian.hh b/dumux/implicit/staggered/localjacobian.hh deleted file mode 100644 index 571956299ea6e831480d678783ee65904b5c301c..0000000000000000000000000000000000000000 --- a/dumux/implicit/staggered/localjacobian.hh +++ /dev/null @@ -1,594 +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 . * - *****************************************************************************/ -/*! - * \file - * \brief Caculates the Jacobian of the local residual for fully-implicit models - */ -#ifndef DUMUX_STAGGERED_LOCAL_JACOBIAN_HH -#define DUMUX_STAGGERED_LOCAL_JACOBIAN_HH - -#include -#include - -#include -#include - -#include -#include "primaryvariables.hh" -#include "assemblymap.hh" - -namespace Dumux -{ -/*! - * \ingroup ImplicitLocalJacobian - * \brief Calculates the Jacobian of the local residual for fully-implicit models - * - * The default behavior is to use numeric differentiation, i.e. - * forward or backward differences (2nd order), or central - * differences (3rd order). The method used is determined by the - * "NumericDifferenceMethod" property: - * - * - if the value of this property is smaller than 0, backward - * differences are used, i.e.: - * \f[ - \frac{\partial f(x)}{\partial x} \approx \frac{f(x) - f(x - \epsilon)}{\epsilon} - * \f] - * - * - if the value of this property is 0, central - * differences are used, i.e.: - * \f[ - \frac{\partial f(x)}{\partial x} \approx \frac{f(x + \epsilon) - f(x - \epsilon)}{2 \epsilon} - * \f] - * - * - if the value of this property is larger than 0, forward - * differences are used, i.e.: - * \f[ - \frac{\partial f(x)}{\partial x} \approx \frac{f(x + \epsilon) - f(x)}{\epsilon} - * \f] - * - * Here, \f$ f \f$ is the residual function for all equations, \f$x\f$ - * is the value of a sub-control volume's primary variable at the - * evaluation point and \f$\epsilon\f$ is a small value larger than 0. - */ -template -class StaggeredLocalJacobian -{ - using Implementation = typename GET_PROP_TYPE(TypeTag, LocalJacobian); - using JacobianAssembler = typename GET_PROP_TYPE(TypeTag, JacobianAssembler); - using LocalResidual = typename GET_PROP_TYPE(TypeTag, LocalResidual); - using Problem = typename GET_PROP_TYPE(TypeTag, Problem); - using Model = typename GET_PROP_TYPE(TypeTag, Model); - using GridView = typename GET_PROP_TYPE(TypeTag, GridView); - using JacobianMatrix = typename GET_PROP_TYPE(TypeTag, JacobianMatrix); - - using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); - using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); - using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); - using FluxVariables = typename GET_PROP_TYPE(TypeTag, FluxVariables); - using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); - using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); - using ElementBoundaryTypes = typename GET_PROP_TYPE(TypeTag, ElementBoundaryTypes); - using ElementFluxVariablesCache = typename GET_PROP_TYPE(TypeTag, ElementFluxVariablesCache); - using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); - using Indices = typename GET_PROP_TYPE(TypeTag, Indices); - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); - using Element = typename GridView::template Codim<0>::Entity; - using IndexType = typename GridView::IndexSet::IndexType; - - enum { - numEqCellCenter = GET_PROP_VALUE(TypeTag, NumEqCellCenter), - numEqFace = GET_PROP_VALUE(TypeTag, NumEqFace), - }; - - using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); - typename DofTypeIndices::CellCenterIdx cellCenterIdx; - typename DofTypeIndices::FaceIdx faceIdx; - - using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); - using FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); - using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); - - using FaceSolutionVector = typename GET_PROP_TYPE(TypeTag, FaceSolutionVector); - - using PriVarIndices = typename Dumux::PriVarIndices; - - using ElementSolutionVector = typename GET_PROP_TYPE(TypeTag, ElementSolutionVector); - - using AssemblyMap = Dumux::StaggeredAssemblyMap; - - -public: - - StaggeredLocalJacobian(const StaggeredLocalJacobian &) = delete; - - StaggeredLocalJacobian() - { - numericDifferenceMethod_ = GET_PARAM_FROM_GROUP(TypeTag, int, Implicit, NumericDifferenceMethod); - } - - /*! - * \brief Initialize the local Jacobian object. - * - * At this point we can assume that everything has been allocated, - * although some objects may not yet be completely initialized. - * - * \param problem The problem which we want to simulate. - */ - void init(Problem &problem) - { - problemPtr_ = &problem; - localResidual_.init(problem); - assemblyMap_.init(problem); - } - - /*! - * \brief Assemble an element's local Jacobian matrix of the - * defect. - * - * \param element The DUNE Codim<0> entity which we look at. - */ - void assemble(const Element& element, JacobianMatrix& matrix, SolutionVector& residual) - { - const bool isGhost = (element.partitionType() == Dune::GhostEntity); - if(isGhost) - DUNE_THROW(Dune::NotImplemented, "Support for ghost cells not implemented"); - - // prepare the volvars/fvGeometries in case caching is disabled - auto fvGeometry = localView(this->model_().fvGridGeometry()); - fvGeometry.bind(element); - - auto curElemVolVars = localView(this->model_().curGlobalVolVars()); - curElemVolVars.bind(element, fvGeometry, this->model_().curSol()); - - auto prevElemVolVars = localView(this->model_().prevGlobalVolVars()); - prevElemVolVars.bindElement(element, fvGeometry, this->model_().prevSol()); - - auto elemFluxVarsCache = localView(this->model_().globalFluxVarsCache()); - elemFluxVarsCache.bind(element, fvGeometry, curElemVolVars); - - // set the actual cell center dof index - ccGlobalI_ = this->problem_().elementMapper().index(element); - - ElementBoundaryTypes elemBcTypes; - elemBcTypes.update(this->problem_(), element, fvGeometry); - - auto& curGlobalFaceVars = getCurrNonConstGlobalFaceVars_(); - auto& prevGlobalFaceVars = getPrevGlobalFaceVars_(); - - // calculate the local residual for all dofs of this element - this->localResidual().eval(element, fvGeometry, - prevElemVolVars, curElemVolVars, - prevGlobalFaceVars, curGlobalFaceVars, - elemBcTypes, elemFluxVarsCache); - // store the cell center residual in global container - residual[cellCenterIdx][ccGlobalI_] = this->localResidual().ccResidual(); - - // treat the local residua of the face dofs: - // create a cache to reuse some results for the calculation of the derivatives - FaceSolutionVector faceResidualCache; - faceResidualCache.resize(fvGeometry.numScvf()); - faceResidualCache = 0.0; - for(auto&& scvf : scvfs(fvGeometry)) - { - residual[faceIdx][scvf.dofIndex()] += this->localResidual().faceResidual(scvf.localFaceIdx()); - faceResidualCache[scvf.localFaceIdx()] = this->localResidual().faceResidual(scvf.localFaceIdx()); - } - - this->model_().updatePVWeights(fvGeometry); - - // calculate derivatives of all dofs in stencil with respect to the dofs in the element - evalPartialDerivatives_(element, - fvGeometry, - prevElemVolVars, - curElemVolVars, - prevGlobalFaceVars, - curGlobalFaceVars, - elemFluxVarsCache, - elemBcTypes, - matrix, - residual[cellCenterIdx][ccGlobalI_], - faceResidualCache); - } - - /*! - * \brief Returns a reference to the object which calculates the - * local residual. - */ - const LocalResidual &localResidual() const - { return localResidual_; } - - /*! - * \brief Returns a reference to the object which calculates the - * local residual. - */ - LocalResidual &localResidual() - { return localResidual_; } - - const AssemblyMap& assemblyMap() const - { return assemblyMap_; } - -protected: - void evalPartialDerivatives_(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& prevElemVolVars, - ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevGlobalFaceVars, - GlobalFaceVars& curGlobalFaceVars, - ElementFluxVariablesCache& elemFluxVarsCache, - const ElementBoundaryTypes& elemBcTypes, - JacobianMatrix& matrix, - const CellCenterPrimaryVariables& ccResidual, - const FaceSolutionVector& faceResidualCache) - { - // compute the derivatives of the cell center residuals with respect to cell center dofs - dCCdCC_(element, fvGeometry, prevElemVolVars, curElemVolVars, prevGlobalFaceVars, curGlobalFaceVars, elemFluxVarsCache, elemBcTypes, matrix, ccResidual); - - // compute the derivatives of the cell center residuals with respect to face dofs - dCCdFace_(element, fvGeometry, prevElemVolVars, curElemVolVars, prevGlobalFaceVars, curGlobalFaceVars, elemFluxVarsCache, elemBcTypes, matrix, ccResidual); - - // compute the derivatives of the face residuals with respect to cell center dofs - dFacedCC_(element, fvGeometry, prevElemVolVars, curElemVolVars, prevGlobalFaceVars, curGlobalFaceVars, elemFluxVarsCache, elemBcTypes, matrix, faceResidualCache); - - // compute the derivatives of the face residuals with respect to face dofs - dFacedFace_(element, fvGeometry, prevElemVolVars, curElemVolVars, prevGlobalFaceVars, curGlobalFaceVars, elemFluxVarsCache, elemBcTypes, matrix, faceResidualCache); - } - - /*! - * \brief Computes the derivatives of the cell center residuals with respect to cell center dofs - */ - void dCCdCC_(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& prevElemVolVars, - ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevGlobalFaceVars, - const GlobalFaceVars& curGlobalFaceVars, - ElementFluxVariablesCache& elemFluxVarsCache, - const ElementBoundaryTypes& elemBcTypes, - JacobianMatrix& matrix, - const CellCenterPrimaryVariables& ccResidual) - { - // build derivatives with for cell center dofs w.r.t. cell center dofs - auto&& scvI = fvGeometry.scv(ccGlobalI_); - - for(const auto& globalJ : assemblyMap_(cellCenterIdx, cellCenterIdx, ccGlobalI_)) - { - // get the volVars of the element with respect to which we are going to build the derivative - auto&& scvJ = fvGeometry.scv(globalJ); - const auto elementJ = fvGeometry.fvGridGeometry().element(globalJ); - auto& curVolVars = getCurVolVars(curElemVolVars, scvJ); - VolumeVariables origVolVars(curVolVars); - - for(auto pvIdx : PriVarIndices(cellCenterIdx)) - { - PrimaryVariables priVars(CellCenterPrimaryVariables(this->model_().curSol()[cellCenterIdx][globalJ]), - FacePrimaryVariables(0.0)); - - const Scalar eps = numericEpsilon(priVars[pvIdx], cellCenterIdx, cellCenterIdx); - priVars[pvIdx] += eps; - ElementSolutionVector elemSol{std::move(priVars)}; - curVolVars.update(elemSol, this->problem_(), elementJ, scvJ); - - this->localResidual().evalCellCenter(element, fvGeometry, scvI, - prevElemVolVars, curElemVolVars, - prevGlobalFaceVars, curGlobalFaceVars, - elemBcTypes, elemFluxVarsCache); - - auto partialDeriv = (this->localResidual().ccResidual() - ccResidual); - partialDeriv /= eps; - - // update the global jacobian matrix with the current partial derivatives - this->updateGlobalJacobian_(matrix[cellCenterIdx][cellCenterIdx], ccGlobalI_, globalJ, pvIdx, partialDeriv); - - // restore the original volVars - curVolVars = origVolVars; - } - } - } - - /*! - * \brief Computes the derivatives of the cell center residuals with respect to face dofs - */ - void dCCdFace_(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& prevElemVolVars, - const ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevGlobalFaceVars, - GlobalFaceVars& curGlobalFaceVars, - ElementFluxVariablesCache& elemFluxVarsCache, - const ElementBoundaryTypes& elemBcTypes, - JacobianMatrix& matrix, - const CellCenterPrimaryVariables& ccResidual) - { - // build derivatives with for cell center dofs w.r.t. face dofs - auto&& scvI = fvGeometry.scv(ccGlobalI_); - - for(const auto& globalJ : assemblyMap_(cellCenterIdx, faceIdx, ccGlobalI_)) - { - // get the faceVars of the face with respect to which we are going to build the derivative - auto origFaceVars = curGlobalFaceVars.faceVars(globalJ); - auto& curFaceVars = curGlobalFaceVars.faceVars(globalJ); - - for(auto pvIdx : PriVarIndices(faceIdx)) - { - PrimaryVariables priVars(CellCenterPrimaryVariables(0.0), FacePrimaryVariables(this->model_().curSol()[faceIdx][globalJ])); - - const Scalar eps = numericEpsilon(priVars[pvIdx], cellCenterIdx, faceIdx); - priVars[pvIdx] += eps; - curFaceVars.update(priVars[faceIdx]); - - this->localResidual().evalCellCenter(element, fvGeometry, scvI, - prevElemVolVars, curElemVolVars, - prevGlobalFaceVars, curGlobalFaceVars, - elemBcTypes, elemFluxVarsCache); - - auto partialDeriv = (this->localResidual().ccResidual() - ccResidual); - partialDeriv /= eps; - - // update the global jacobian matrix with the current partial derivatives - this->updateGlobalJacobian_(matrix[cellCenterIdx][faceIdx], ccGlobalI_, globalJ, pvIdx - Indices::faceOffset, partialDeriv); - - // restore the original faceVars - curFaceVars = origFaceVars; - } - } - } - - /*! - * \brief Computes the derivatives of the face residuals with respect to cell center dofs - */ - void dFacedCC_(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& prevElemVolVars, - ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevGlobalFaceVars, - const GlobalFaceVars& curGlobalFaceVars, - ElementFluxVariablesCache& elemFluxVarsCache, - const ElementBoundaryTypes& elemBcTypes, - JacobianMatrix& matrix, - const FaceSolutionVector& cachedResidual) - { - for(auto&& scvf : scvfs(fvGeometry)) - { - // set the actual dof index - const auto faceGlobalI = scvf.dofIndex(); - - // build derivatives with for face dofs w.r.t. cell center dofs - for(const auto& globalJ : assemblyMap_(faceIdx, cellCenterIdx, scvf.index())) - { - // get the volVars of the element with respect to which we are going to build the derivative - auto&& scvJ = fvGeometry.scv(globalJ); - const auto elementJ = fvGeometry.fvGridGeometry().element(globalJ); - auto& curVolVars = getCurVolVars(curElemVolVars, scvJ); - VolumeVariables origVolVars(curVolVars); - - for(auto pvIdx : PriVarIndices(cellCenterIdx)) - { - PrimaryVariables priVars(CellCenterPrimaryVariables(this->model_().curSol()[cellCenterIdx][globalJ]), - FacePrimaryVariables(0.0)); - - const Scalar eps = numericEpsilon(priVars[pvIdx], faceIdx, cellCenterIdx); - priVars[pvIdx] += eps; - ElementSolutionVector elemSol{std::move(priVars)}; - curVolVars.update(elemSol, this->problem_(), elementJ, scvJ); - - this->localResidual().evalFace(element, fvGeometry, scvf, - prevElemVolVars, curElemVolVars, - prevGlobalFaceVars, curGlobalFaceVars, - elemBcTypes, elemFluxVarsCache); - - auto partialDeriv = (this->localResidual().faceResidual(scvf.localFaceIdx()) - cachedResidual[scvf.localFaceIdx()]); - partialDeriv /= eps; - // update the global jacobian matrix with the current partial derivatives - this->updateGlobalJacobian_(matrix[faceIdx][cellCenterIdx], faceGlobalI, globalJ, pvIdx, partialDeriv); - - // restore the original volVars - curVolVars = origVolVars; - } - } - } - } - - /*! - * \brief Computes the derivatives of the face residuals with respect to cell center dofs - */ - void dFacedFace_(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& prevElemVolVars, - const ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevGlobalFaceVars, - GlobalFaceVars& curGlobalFaceVars, - ElementFluxVariablesCache& elemFluxVarsCache, - const ElementBoundaryTypes& elemBcTypes, - JacobianMatrix& matrix, - const FaceSolutionVector& cachedResidual) - { - for(auto&& scvf : scvfs(fvGeometry)) - { - // set the actual dof index - const auto faceGlobalI = scvf.dofIndex(); - - // build derivatives with for face dofs w.r.t. cell center dofs - for(const auto& globalJ : assemblyMap_(faceIdx, faceIdx, scvf.index())) - { - // get the faceVars of the face with respect to which we are going to build the derivative - auto origFaceVars = curGlobalFaceVars.faceVars(globalJ); - auto& curFaceVars = curGlobalFaceVars.faceVars(globalJ); - - for(auto pvIdx : PriVarIndices(faceIdx)) - { - PrimaryVariables priVars(CellCenterPrimaryVariables(0.0), FacePrimaryVariables(this->model_().curSol()[faceIdx][globalJ])); - - const Scalar eps = numericEpsilon(priVars[pvIdx], faceIdx, faceIdx); - priVars[pvIdx] += eps; - curFaceVars.update(priVars[faceIdx]); - - this->localResidual().evalFace(element, fvGeometry, scvf, - prevElemVolVars, curElemVolVars, - prevGlobalFaceVars, curGlobalFaceVars, - elemBcTypes, elemFluxVarsCache); - - auto partialDeriv = (this->localResidual().faceResidual(scvf.localFaceIdx()) - cachedResidual[scvf.localFaceIdx()]); - partialDeriv /= eps; - - // update the global jacobian matrix with the current partial derivatives - this->updateGlobalJacobian_(matrix[faceIdx][faceIdx], faceGlobalI, globalJ, pvIdx - Indices::faceOffset, partialDeriv); - - // restore the original faceVars - curFaceVars = origFaceVars; - } - } - } - } - - /*! - * \brief Returns a reference to the problem. - */ - const Problem &problem_() const - { - Valgrind::CheckDefined(problemPtr_); - return *problemPtr_; - } - - /*! - * \brief Returns a reference to the problem. - */ - Problem &problem_() - { - Valgrind::CheckDefined(problemPtr_); - return *problemPtr_; - } - - /*! - * \brief Returns a reference to the grid view. - */ - const GridView &gridView_() const - { return problem_().gridView(); } - - /*! - * \brief Returns a reference to the model. - */ - const Model &model_() const - { return problem_().model(); } - - /*! - * \brief Returns a reference to the model. - */ - Model &model_() - { return problem_().model(); } - - /*! - * \brief Returns a reference to the jacobian assembler. - */ - const JacobianAssembler &jacAsm_() const - { return model_().jacobianAssembler(); } - - /*! - * \brief Return the epsilon used to calculate the numeric derivative of a localResidual w.r.t a certain priVar - * - * \param priVar The the value of primary varible w.r.t which to derivative of the localResidual is calculated - * \param idx1 Indicates whether the the derivative is build for a cellCenter or face localResidual - * \param idx2 Indicates whether the the derivative is build w.r.t a priVar living on a cellCenter or face - */ - Scalar numericEpsilon(const Scalar priVar, const int idx1, const int idx2) const - { - // define the base epsilon as the geometric mean of 1 and the - // resolution of the scalar type. E.g. for standard 64 bit - // floating point values, the resolution is about 10^-16 and - // the base epsilon is thus approximately 10^-8. - /* - static const Scalar baseEps - = Dumux::geometricMean(std::numeric_limits::epsilon(), 1.0); - */ - - static const Scalar baseEps = baseEps_[idx1][idx2]; - assert(std::numeric_limits::epsilon()*1e4 < baseEps); - // the epsilon value used for the numeric differentiation is - // now scaled by the absolute value of the primary variable... - return baseEps*(std::abs(priVar) + 1.0); - } - - /*! - * \brief Updates the current global Jacobian matrix with the - * partial derivatives of all equations in regard to the - * primary variable 'pvIdx' at dof 'col'. Specialization for cc methods. - */ - template - void updateGlobalJacobian_(SubMatrix& matrix, - const int globalI, - const int globalJ, - const int pvIdx, - const CCOrFacePrimaryVariables &partialDeriv) - { - for (int eqIdx = 0; eqIdx < partialDeriv.size(); eqIdx++) - { - // A[i][col][eqIdx][pvIdx] is the rate of change of - // the residual of equation 'eqIdx' at dof 'i' - // depending on the primary variable 'pvIdx' at dof - // 'col'. - - assert(pvIdx >= 0); - assert(eqIdx < matrix[globalI][globalJ].size()); - assert(pvIdx < matrix[globalI][globalJ][eqIdx].size()); - matrix[globalI][globalJ][eqIdx][pvIdx] += partialDeriv[eqIdx]; - Valgrind::CheckDefined(matrix[globalI][globalJ][eqIdx][pvIdx]); - } - } - - //! If the global vol vars caching is enabled we have to modify the global volvar object - template - typename std::enable_if::type& - getCurVolVars(ElementVolumeVariables& elemVolVars, const SubControlVolume& scv) - { return this->model_().nonConstCurGlobalVolVars().volVars(scv); } - - //! When global volume variables caching is disabled, return the local volvar object - template - typename std::enable_if::type& - getCurVolVars(ElementVolumeVariables& elemVolVars, const SubControlVolume& scv) - { return elemVolVars[scv]; } - - - //! Convenience function to get the current non-const global face vars. This is necessary for classes that inherit from this class. - auto& getCurrNonConstGlobalFaceVars_() - { - return this->model_().nonConstCurFaceVars(); - } - - //! Convenience function to get the previous global face vars - auto& getPrevGlobalFaceVars_() - { - return this->model_().prevGlobalFaceVars(); - } - - IndexType ccGlobalI_; - int numericDifferenceMethod_; - - // The problem we would like to solve - Problem *problemPtr_; - - LocalResidual localResidual_; - - AssemblyMap assemblyMap_; - - using BaseEpsilon = typename GET_PROP(TypeTag, BaseEpsilon); - const std::array, 2> baseEps_ = BaseEpsilon::getEps(); -}; - -} - -#endif diff --git a/dumux/implicit/staggered/localresidual.hh b/dumux/implicit/staggered/localresidual.hh index fe799358cfd1741ef83e9b1f376366afa70b6a1a..7be67fc539dab4369c17d41d506dbd1d209ed58b 100644 --- a/dumux/implicit/staggered/localresidual.hh +++ b/dumux/implicit/staggered/localresidual.hh @@ -23,14 +23,17 @@ #ifndef DUMUX_STAGGERED_LOCAL_RESIDUAL_HH #define DUMUX_STAGGERED_LOCAL_RESIDUAL_HH -#include - #include - -#include "properties.hh" +#include +#include namespace Dumux { + +namespace Properties +{ + NEW_PROP_TAG(ElementFaceVariables); +} /*! * \ingroup CCModel * \ingroup StaggeredLocalResidual @@ -42,8 +45,6 @@ namespace Dumux template class StaggeredLocalResidual { - using ParentType = ImplicitLocalResidual; - friend class ImplicitLocalResidual; using GridView = typename GET_PROP_TYPE(TypeTag, GridView); enum { numEq = GET_PROP_VALUE(TypeTag, NumEq) }; @@ -62,9 +63,14 @@ class StaggeredLocalResidual using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); using CellCenterSolutionVector = typename GET_PROP_TYPE(TypeTag, CellCenterSolutionVector); using FaceSolutionVector = typename GET_PROP_TYPE(TypeTag, FaceSolutionVector); - using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars); using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); using FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + + using CellCenterResidual = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); + using FaceResidual = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); + using FaceResidualVector = typename GET_PROP_TYPE(TypeTag, FaceSolutionVector); + using ElementFaceVariables = typename GET_PROP_TYPE(TypeTag, ElementFaceVariables); using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); @@ -77,25 +83,17 @@ class StaggeredLocalResidual dimWorld = GridView::dimensionworld }; -public: - // copying the local residual class is not a good idea - StaggeredLocalResidual(const StaggeredLocalResidual &) = delete; - - StaggeredLocalResidual() = default; + using TimeLoop = TimeLoopBase; - /*! - * \brief Initialize the local residual. - * - * This assumes that all objects of the simulation have been fully - * allocated but not necessarily initialized completely. - * - * \param problem The representation of the physical problem to be - * solved. - */ - void init(Problem &problem) - { problemPtr_ = &problem; } +public: + //! the constructor for stationary problems + StaggeredLocalResidual() : prevSol_(nullptr) {} + StaggeredLocalResidual(std::shared_ptr timeLoop) + : timeLoop_(timeLoop) + , prevSol_(nullptr) + {} /*! * \name User interface @@ -104,88 +102,6 @@ public: */ // \{ - /*! - * \brief Compute the local residual, i.e. the deviation of the - * equations from zero. - * - * \param element The DUNE Codim<0> entity for which the residual - * ought to be calculated - */ - void eval(const Element &element) - { - // make sure FVElementGeometry and volume variables are bound to the element - auto fvGeometry = localView(this->problem().model().fvGridGeometry()); - fvGeometry.bind(element); - - auto curElemVolVars = localView(problem().model().curGlobalVolVars()); - curElemVolVars.bind(element, fvGeometry, problem().model().curSol()); - - auto prevElemVolVars = localView(problem().model().prevGlobalVolVars()); - prevElemVolVars.bindElement(element, fvGeometry, problem().model().prevSol()); - - auto elemFluxVarsCache = localView(problem().model().globalFluxVarsCache()); - elemFluxVarsCache.bindElement(element, fvGeometry, curElemVolVars); - - ElementBoundaryTypes bcTypes; - bcTypes.update(problem(), element, fvGeometry); - - auto& curGlobalFaceVars = problem().model().curGlobalFaceVars(); - auto& prevGlobalFaceVars = problem().model().prevGlobalFaceVars(); - - - asImp_().eval(element, fvGeometry, - prevElemVolVars, curElemVolVars, - prevGlobalFaceVars, curGlobalFaceVars, - bcTypes, elemFluxVarsCache); - } - - /*! - * \brief Compute the local residual, i.e. the deviation of the - * equations from zero. - * - * \param element The DUNE Codim<0> entity for which the residual - * ought to be calculated - * \param fvGeometry The finite-volume geometry of the element - * \param prevVolVars The volume averaged variables for all - * sub-control volumes of the element at the previous - * time level - * \param curVolVars The volume averaged variables for all - * sub-control volumes of the element at the current - * time level - * \param bcTypes The types of the boundary conditions for all - * vertices of the element - */ - void eval(const Element &element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& prevElemVolVars, - const ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevFaceVars, - const GlobalFaceVars& curFaceVars, - const ElementBoundaryTypes &bcTypes, - const ElementFluxVariablesCache& elemFluxVarsCache) - { - // resize and reset all face terms - const auto numScvf = fvGeometry.numScvf(); - - faceResiduals_.resize(numScvf, false /*copyOldValues*/); - faceStorageTerms_.resize(numScvf, false /*copyOldValues*/); - faceResiduals_ = 0.0; - faceStorageTerms_ = 0.0; - - // evaluate the volume terms (storage + source terms) - for (auto&& scv : scvs(fvGeometry)) - { - // treat the cell center dof - evalCellCenter(element, fvGeometry, scv, prevElemVolVars, curElemVolVars, prevFaceVars, curFaceVars, bcTypes, elemFluxVarsCache); - - // now, treat the dofs on the facets: - for(auto&& scvf : scvfs(fvGeometry)) - { - evalFace(element, fvGeometry, scvf, prevElemVolVars, curElemVolVars, prevFaceVars, curFaceVars, bcTypes, elemFluxVarsCache); - } - } - } - /*! * \brief Compute the local residual, i.e. the deviation of the * equations from zero. @@ -202,23 +118,26 @@ public: * \param bcTypes The types of the boundary conditions for all * vertices of the element */ - void evalCellCenter(const Element &element, + auto evalCellCenter(const Problem& problem, + const Element &element, const FVElementGeometry& fvGeometry, - const SubControlVolume& scv, const ElementVolumeVariables& prevElemVolVars, const ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevFaceVars, - const GlobalFaceVars& curFaceVars, + const ElementFaceVariables& prevElemFaceVars, + const ElementFaceVariables& curElemFaceVars, const ElementBoundaryTypes &bcTypes, - const ElementFluxVariablesCache& elemFluxVarsCache) + const ElementFluxVariablesCache& elemFluxVarsCache) const { // reset all terms - ccResidual_ = 0.0; - ccStorageTerm_ = 0.0; + CellCenterResidual residual; + residual = 0.0; + // ccStorageTerm_ = 0.0; + + asImp_().evalVolumeTermForCellCenter_(residual, problem, element, fvGeometry, prevElemVolVars, curElemVolVars, prevElemFaceVars, curElemFaceVars, bcTypes); + asImp_().evalFluxesForCellCenter_(residual, problem, element, fvGeometry, curElemVolVars, curElemFaceVars, bcTypes, elemFluxVarsCache); + asImp_().evalBoundaryForCellCenter_(residual, problem, element, fvGeometry, curElemVolVars, curElemFaceVars, bcTypes, elemFluxVarsCache); - asImp_().evalVolumeTermForCellCenter_(element, fvGeometry, scv, prevElemVolVars, curElemVolVars, prevFaceVars, curFaceVars, bcTypes); - asImp_().evalFluxesForCellCenter_(element, fvGeometry, curElemVolVars, curFaceVars, bcTypes, elemFluxVarsCache); - asImp_().evalBoundaryForCellCenter_(element, fvGeometry, curElemVolVars, curFaceVars, bcTypes, elemFluxVarsCache); + return residual; } /*! @@ -237,53 +156,48 @@ public: * \param bcTypes The types of the boundary conditions for all * vertices of the element */ - void evalFace(const Element &element, + auto evalFace(const Problem& problem, + const Element &element, const FVElementGeometry& fvGeometry, const SubControlVolumeFace& scvf, const ElementVolumeVariables& prevElemVolVars, const ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevFaceVars, - const GlobalFaceVars& curFaceVars, + const ElementFaceVariables& prevElemFaceVars, + const ElementFaceVariables& curElemFaceVars, const ElementBoundaryTypes &bcTypes, const ElementFluxVariablesCache& elemFluxVarsCache, - const bool resizeResidual = false) + const bool resizeResidual = false) const { - if(resizeResidual) - { - const auto numScvf = fvGeometry.numScvf(); - faceResiduals_.resize(numScvf); - faceStorageTerms_.resize(numScvf); - } + FaceResidual residual; - faceResiduals_[scvf.localFaceIdx()] = 0.0; - faceStorageTerms_[scvf.localFaceIdx()] = 0.0; + asImp_().evalVolumeTermForFace_(residual, problem, element, fvGeometry, scvf, prevElemVolVars, curElemVolVars, prevElemFaceVars, curElemFaceVars, bcTypes); + asImp_().evalFluxesForFace_(residual, problem, element, fvGeometry, scvf, curElemVolVars, curElemFaceVars, bcTypes, elemFluxVarsCache); + asImp_().evalBoundaryForFace_(residual, problem, element, fvGeometry, scvf, curElemVolVars, curElemFaceVars, bcTypes, elemFluxVarsCache); - asImp_().evalVolumeTermForFace_(element, fvGeometry, scvf, prevElemVolVars, curElemVolVars, prevFaceVars, curFaceVars, bcTypes); - asImp_().evalFluxesForFace_(element, fvGeometry, scvf, curElemVolVars, curFaceVars, bcTypes, elemFluxVarsCache); - asImp_().evalBoundaryForFace_(element, fvGeometry, scvf, curElemVolVars, curFaceVars, bcTypes, elemFluxVarsCache); + return residual; } - - /*! - * \brief Return the problem we are solving. Only call this after init()! + /*! + * \brief Sets the solution from which to start the time integration. Has to be + * called prior to assembly for time-dependent problems. */ - const Problem& problem() const - { return *problemPtr_; } + void setPreviousSolution(const SolutionVector& u) + { prevSol_ = &u; } /*! - * \brief Return the problem we are solving. Only call this after init()! + * \brief Return the solution that has been set as the previous one. */ - Problem& problem() - { return *problemPtr_; } - - const auto& ccResidual() const - { return ccResidual_; } - - const auto& faceResiduals() const - { return faceResiduals_; } + const SolutionVector& prevSol() const + { + assert(prevSol_ && "no solution set for storage term evaluation"); + return *prevSol_; + } - const auto& faceResidual(const int fIdx) const - { return faceResiduals_[fIdx]; } + /*! + * \brief If no solution has been set, we treat the problem as stationary. + */ + bool isStationary() const + { return !prevSol_; } protected: @@ -291,42 +205,47 @@ protected: /*! * \brief Evaluate the flux terms for cell center dofs */ - void evalFluxesForCellCenter_(const Element& element, + void evalFluxesForCellCenter_(CellCenterResidual& residual, + const Problem& problem, + const Element& element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& faceVars, + const ElementFaceVariables& elemFaceVars, const ElementBoundaryTypes& bcTypes, - const ElementFluxVariablesCache& elemFluxVarsCache) + const ElementFluxVariablesCache& elemFluxVarsCache) const { for (auto&& scvf : scvfs(fvGeometry)) { if(!scvf.boundary()) - ccResidual_ += asImp_().computeFluxForCellCenter(element, fvGeometry, elemVolVars, faceVars, scvf, elemFluxVarsCache); + residual += asImp_().computeFluxForCellCenter(problem, element, fvGeometry, elemVolVars, elemFaceVars, scvf, elemFluxVarsCache); } } /*! * \brief Evaluate the flux terms for face dofs */ - void evalFluxesForFace_(const Element& element, + void evalFluxesForFace_(FaceResidual& residual, + const Problem& problem, + const Element& element, const FVElementGeometry& fvGeometry, const SubControlVolumeFace& scvf, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& globalFaceVars, + const ElementFaceVariables& elemFaceVars, const ElementBoundaryTypes& bcTypes, - const ElementFluxVariablesCache& elemFluxVarsCache) + const ElementFluxVariablesCache& elemFluxVarsCache) const { if(!scvf.boundary()) - faceResiduals_[scvf.localFaceIdx()] += asImp_().computeFluxForFace(element, scvf, fvGeometry, elemVolVars, globalFaceVars, elemFluxVarsCache); + residual += asImp_().computeFluxForFace(problem, element, scvf, fvGeometry, elemVolVars, elemFaceVars, elemFluxVarsCache); } /*! * \brief Evaluate boundary conditions */ - void evalBoundary_(const Element& element, + void evalBoundary_(const Problem& problem, + const Element& element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, - const GlobalFaceVars& faceVars, + const ElementFaceVariables& elemFaceVars, const ElementBoundaryTypes& bcTypes, const ElementFluxVariablesCache& elemFluxVarsCache) { @@ -340,22 +259,25 @@ protected: */ template typename std::enable_if::value, void>::type - evalVolumeTermForCellCenter_(const Element &element, - const FVElementGeometry& fvGeometry, - const SubControlVolume& scv, - const ElementVolumeVariables& prevElemVolVars, - const ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevFaceVars, - const GlobalFaceVars& curFaceVars, - const ElementBoundaryTypes &bcTypes) + evalVolumeTermForCellCenter_(CellCenterResidual& residual, + const Problem& problem, + const Element &element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars, + const ElementFaceVariables& prevFaceVars, + const ElementFaceVariables& curFaceVars, + const ElementBoundaryTypes &bcTypes) const { - const auto curExtrusionFactor = curElemVolVars[scv].extrusionFactor(); - - // subtract the source term from the local rate - CellCenterPrimaryVariables source = asImp_().computeSourceForCellCenter(element, fvGeometry, curElemVolVars, curFaceVars, scv); - source *= scv.volume()*curExtrusionFactor; + for(auto&& scv : scvs(fvGeometry)) + { + const auto curExtrusionFactor = curElemVolVars[scv].extrusionFactor(); - ccResidual_ -= source; + // subtract the source term from the local rate + CellCenterPrimaryVariables source = asImp_().computeSourceForCellCenter(problem, element, fvGeometry, curElemVolVars, curFaceVars, scv); + source *= scv.volume()*curExtrusionFactor; + residual -= source; + } } /*! @@ -363,21 +285,23 @@ protected: */ template typename std::enable_if::value, void>::type - evalVolumeTermForFace_(const Element &element, - const FVElementGeometry& fvGeometry, - const SubControlVolumeFace& scvf, - const ElementVolumeVariables& prevElemVolVars, - const ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevFaceVars, - const GlobalFaceVars& curFaceVars, - const ElementBoundaryTypes &bcTypes) + evalVolumeTermForFace_(FaceResidual& residual, + const Problem& problem, + const Element &element, + const FVElementGeometry& fvGeometry, + const SubControlVolumeFace& scvf, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars, + const ElementFaceVariables& prevFaceVars, + const ElementFaceVariables& curFaceVars, + const ElementBoundaryTypes &bcTypes) const { // the source term: - auto faceSource = asImp_().computeSourceForFace(scvf, curElemVolVars, curFaceVars); + auto faceSource = asImp_().computeSourceForFace(problem, scvf, curElemVolVars, curFaceVars); const auto& scv = fvGeometry.scv(scvf.insideScvIdx()); const auto curExtrusionFactor = curElemVolVars[scv].extrusionFactor(); faceSource *= 0.5*scv.volume()*curExtrusionFactor; - faceResiduals_[scvf.localFaceIdx()] -= faceSource; + residual -= faceSource; } /*! @@ -385,43 +309,49 @@ protected: */ template typename std::enable_if::value, void>::type - evalVolumeTermForCellCenter_(const Element &element, - const FVElementGeometry& fvGeometry, - const SubControlVolume& scv, - const ElementVolumeVariables& prevElemVolVars, - const ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevFaceVars, - const GlobalFaceVars& curFaceVars, - const ElementBoundaryTypes &bcTypes) + evalVolumeTermForCellCenter_(CellCenterResidual& residual, + const Problem& problem, + const Element &element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars, + const ElementFaceVariables& prevFaceVars, + const ElementFaceVariables& curFaceVars, + const ElementBoundaryTypes &bcTypes) const { - const auto& curVolVars = curElemVolVars[scv]; - const auto& prevVolVars = prevElemVolVars[scv]; + for(auto&& scv : scvs(fvGeometry)) + { + const auto& curVolVars = curElemVolVars[scv]; + const auto& prevVolVars = prevElemVolVars[scv]; + + // mass balance within the element. this is the + // \f$\frac{m}{\partial t}\f$ term if using implicit + // euler as time discretization. + // + // We might need a more explicit way for + // doing the time discretization... + auto prevCCStorage = asImp_().computeStorageForCellCenter(problem, scv, prevVolVars); + auto curCCStorage = asImp_().computeStorageForCellCenter(problem, scv, curVolVars); - // mass balance within the element. this is the - // \f$\frac{m}{\partial t}\f$ term if using implicit - // euler as time discretization. - // - // We might need a more explicit way for - // doing the time discretization... - auto prevCCStorage = asImp_().computeStorageForCellCenter(scv, prevVolVars); - auto curCCStorage = asImp_().computeStorageForCellCenter(scv, curVolVars); + prevCCStorage *= prevVolVars.extrusionFactor(); + curCCStorage *= curVolVars.extrusionFactor(); - prevCCStorage *= prevVolVars.extrusionFactor(); - curCCStorage *= curVolVars.extrusionFactor(); + CellCenterResidual storageTerm(0.0); - ccStorageTerm_ = std::move(curCCStorage); - ccStorageTerm_ -= std::move(prevCCStorage); - ccStorageTerm_ *= scv.volume(); - ccStorageTerm_ /= problem().timeManager().timeStepSize(); + storageTerm = std::move(curCCStorage); + storageTerm -= std::move(prevCCStorage); + storageTerm *= scv.volume(); + storageTerm /= timeLoop_->timeStepSize(); - // add the storage term to the residual - ccResidual_ += ccStorageTerm_; + // add the storage term to the residual + residual += storageTerm; - // subtract the source term from the local rate - CellCenterPrimaryVariables source = asImp_().computeSourceForCellCenter(element, fvGeometry, curElemVolVars, curFaceVars, scv); - source *= scv.volume()*curVolVars.extrusionFactor(); + // subtract the source term from the local rate + CellCenterPrimaryVariables source = asImp_().computeSourceForCellCenter(problem, element, fvGeometry, curElemVolVars, curFaceVars, scv); + source *= scv.volume()*curVolVars.extrusionFactor(); - ccResidual_ -= source; + residual -= source; + } } /*! @@ -429,32 +359,34 @@ protected: */ template typename std::enable_if::value, void>::type - evalVolumeTermForFace_(const Element &element, - const FVElementGeometry& fvGeometry, - const SubControlVolumeFace& scvf, - const ElementVolumeVariables& prevElemVolVars, - const ElementVolumeVariables& curElemVolVars, - const GlobalFaceVars& prevFaceVars, - const GlobalFaceVars& curFaceVars, - const ElementBoundaryTypes &bcTypes) + evalVolumeTermForFace_(FaceResidual& residual, + const Problem& problem, + const Element &element, + const FVElementGeometry& fvGeometry, + const SubControlVolumeFace& scvf, + const ElementVolumeVariables& prevElemVolVars, + const ElementVolumeVariables& curElemVolVars, + const ElementFaceVariables& prevFaceVars, + const ElementFaceVariables& curFaceVars, + const ElementBoundaryTypes &bcTypes) const { const auto& scv = fvGeometry.scv(scvf.insideScvIdx()); const auto& curVolVars = curElemVolVars[scv]; const auto& prevVolVars = prevElemVolVars[scv]; - auto prevFaceStorage = asImp_().computeStorageForFace(scvf, prevVolVars, prevFaceVars); - auto curFaceStorage = asImp_().computeStorageForFace(scvf, curVolVars, curFaceVars); + auto prevFaceStorage = asImp_().computeStorageForFace(problem, scvf, prevVolVars, prevFaceVars); + auto curFaceStorage = asImp_().computeStorageForFace(problem, scvf, curVolVars, curFaceVars); // the storage term - faceStorageTerms_[scvf.localFaceIdx()] = std::move(curFaceStorage); - faceStorageTerms_[scvf.localFaceIdx()] -= std::move(prevFaceStorage); - faceStorageTerms_[scvf.localFaceIdx()] *= (scv.volume()/2.0); - faceStorageTerms_[scvf.localFaceIdx()] /= problem().timeManager().timeStepSize(); - faceResiduals_[scvf.localFaceIdx()] += faceStorageTerms_[scvf.localFaceIdx()]; + residual = std::move(curFaceStorage); + residual -= std::move(prevFaceStorage); + residual *= (scv.volume()/2.0); + residual /= timeLoop_->timeStepSize(); + // residuals[scvf.localFaceIdx()] += faceStorageTerms_[scvf.localFaceIdx()]; // the source term: - auto faceSource = asImp_().computeSourceForFace(scvf, curElemVolVars, curFaceVars); + auto faceSource = asImp_().computeSourceForFace(problem, scvf, curElemVolVars, curFaceVars); faceSource *= 0.5*scv.volume()*curVolVars.extrusionFactor(); - faceResiduals_[scvf.localFaceIdx()] -= faceSource; + residual -= faceSource; } Implementation &asImp_() @@ -463,13 +395,22 @@ protected: const Implementation &asImp_() const { return *static_cast(this); } - CellCenterPrimaryVariables ccResidual_; - CellCenterPrimaryVariables ccStorageTerm_; - FaceSolutionVector faceResiduals_; - FaceSolutionVector faceStorageTerms_; + + TimeLoop& timeLoop() + { return *timeLoop_; } + + const TimeLoop& timeLoop() const + { return *timeLoop_; } + + Implementation &asImp() + { return *static_cast(this); } + + const Implementation &asImp() const + { return *static_cast(this); } private: - Problem* problemPtr_; + std::shared_ptr timeLoop_; + const SolutionVector* prevSol_; }; diff --git a/dumux/implicit/staggered/model.hh b/dumux/implicit/staggered/model.hh deleted file mode 100644 index e59dbaab1590ee9a864f04ce07f730903390c346..0000000000000000000000000000000000000000 --- a/dumux/implicit/staggered/model.hh +++ /dev/null @@ -1,565 +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 . * - *****************************************************************************/ -/*! - * \file - * - * \brief Base class for all models which use the one-phase, - * fully implicit model. - * Adaption of the fully implicit scheme to the one-phase flow model. - */ - -#ifndef DUMUX_STAGGERED_BASEMODEL_HH -#define DUMUX_STAGGERED_BASEMODEL_HH - -// #include -#include -#include -#include "properties.hh" - -namespace Dumux -{ -/*! - * \ingroup NavierStokesModel - * \brief A single-phase, isothermal flow model using the fully implicit scheme. - * - * Single-phase, isothermal flow model, which uses a standard Darcy approach as the - * equation for the conservation of momentum: - * \f[ - v = - \frac{\textbf K}{\mu} - \left(\textbf{grad}\, p - \varrho {\textbf g} \right) - * \f] - * - * and solves the mass continuity equation: - * \f[ - \phi \frac{\partial \varrho}{\partial t} + \text{div} \left\lbrace - - \varrho \frac{\textbf K}{\mu} \left( \textbf{grad}\, p -\varrho {\textbf g} \right) \right\rbrace = q, - * \f] - * All equations are discretized using a vertex-centered finite volume (box) - * or cell-centered finite volume scheme as spatial - * and the implicit Euler method as time discretization. - * The model supports compressible as well as incompressible fluids. - */ -template -class StaggeredBaseModel : public ImplicitModel -{ - friend typename GET_PROP_TYPE(TypeTag, LocalJacobian); - using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); - using Problem = typename GET_PROP_TYPE(TypeTag, Problem); - using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); - using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); - using JacobianAssembler = typename GET_PROP_TYPE(TypeTag, JacobianAssembler); - - using GridView = typename GET_PROP_TYPE(TypeTag, GridView); - - enum { - dim = GridView::dimension, - dimWorld = GridView::dimensionworld - }; - - - enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) }; - enum { dofCodim = isBox ? dim : 0 }; - using Element = typename GridView::template Codim<0>::Entity; - using ElementSolution = typename GET_PROP_TYPE(TypeTag, ElementSolutionVector); - using Implementation = typename GET_PROP_TYPE(TypeTag, Model); - using NewtonMethod = typename GET_PROP_TYPE(TypeTag, NewtonMethod); - using NewtonController = typename GET_PROP_TYPE(TypeTag, NewtonController); - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); - using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); - - using GlobalFaceVariables = Dumux::StaggeredGlobalFaceVariables; - using ParentType = ImplicitModel; - - using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); - typename DofTypeIndices::CellCenterIdx cellCenterIdx; - typename DofTypeIndices::FaceIdx faceIdx; - - static_assert(!isBox, "must not be box!"); - -public: - - /*! - * \brief Apply the initial conditions to the model. - * - * \param problem The object representing the problem which needs to - * be simulated. - */ - void init(Problem &problem) - { - this->problemPtr_ = &problem; - - this->updateBoundaryIndices_(); - - this->fvGridGeometryPtr_ = std::make_shared(problem.gridView()); - this->fvGridGeometryPtr_->update(problem); - - this->uCur_[cellCenterIdx].resize(asImp_().numCellCenterDofs()); - this->uCur_[faceIdx].resize(asImp_().numFaceDofs()); - - // apply initial solution - // for compositional models initial the phase presence herein - asImp_().applyInitialSolution_(); - - // resize and update the volVars with the initial solution - this->curGlobalVolVars_.update(problem, this->curSol()); - - curGlobalFaceVariables_.update(problem, this->curSol()[faceIdx]); - - // update the flux variables caches - this->globalfluxVarsCache_.update(problem); - - // initialize assembler and create matrix - this->localJacobian_.init(problem); - this->jacAsm_ = std::make_shared(); - this->jacAsm_->init(problem); - - // also set the solution of the "previous" time step to the - // initial solution. - this->uPrev_ = this->uCur_; - this->prevGlobalVolVars_ = this->curGlobalVolVars_; - prevGlobalFaceVariables_ = curGlobalFaceVariables_; - } - - /*! - * \brief Try to progress the model to the next timestep. - * - * \param solver The non-linear solver - * \param controller The controller which specifies the behaviour - * of the non-linear solver - */ - bool update(NewtonMethod &solver, - NewtonController &controller) - { -#if HAVE_VALGRIND - for (size_t i = 0; i < this->curSol()[cellCenterIdx].size(); ++i) - Valgrind::CheckDefined(this->curSol()[cellCenterIdx][i]); - for (size_t i = 0; i < this->curSol()[faceIdx].size(); ++i) - Valgrind::CheckDefined(this->curSol()[faceIdx][i]); -#endif // HAVE_VALGRIND - - asImp_().updateBegin(); - - int converged = solver.execute(controller); - - if (this->gridView_().comm().size() > 1) - { - converged = this->gridView_().comm().min(converged); - } - if (converged) { - asImp_().updateSuccessful(); - } - else - asImp_().updateFailed(); - -#if HAVE_VALGRIND - for (size_t i = 0; i < this->curSol()[cellCenterIdx].size(); ++i) - Valgrind::CheckDefined(this->curSol()[cellCenterIdx][i]); - for (size_t i = 0; i < this->curSol()[faceIdx].size(); ++i) - Valgrind::CheckDefined(this->curSol()[faceIdx][i]); -#endif // HAVE_VALGRIND - - return converged; - } - - void newtonEndStep() - { - ParentType::newtonEndStep(); - curGlobalFaceVariables_.update(this->problem_(), this->curSol()[faceIdx]); - - } - - /*! - * \brief Returns the maximum relative shift between two vectors of - * primary variables. - * - * \param priVars1 The first vector of primary variables - * \param priVars2 The second vector of primary variables - */ - template - Scalar relativeShiftAtDof(const CellCenterOrFacePriVars &priVars1, - const CellCenterOrFacePriVars &priVars2) - { - const auto numEq = priVars1.size(); - Scalar result = 0.0; - for (int j = 0; j < numEq; ++j) { - Scalar eqErr = std::abs(priVars1[j] - priVars2[j]); - eqErr /= std::max(1.0, std::abs(priVars1[j] + priVars2[j])/2); - - result = std::max(result, eqErr); - } - return result; - } - - /*! - * \brief Called by the update() method if it was - * unsuccessful. This is primarily a hook which the actual - * model can overload. - */ - void updateFailed() - { - ParentType::updateFailed(); - curGlobalFaceVariables_ = prevGlobalFaceVariables_; - } - - /*! - * \brief Called by the problem if a time integration was - * successful, post processing of the solution is done and - * the result has been written to disk. - * - * This should prepare the model for the next time integration. - */ - void advanceTimeLevel() - { - ParentType::advanceTimeLevel(); - // make the current solution the previous one. - prevGlobalFaceVariables_ = curGlobalFaceVariables_; - } - - /*! - * \brief Applies the initial solution for all vertices of the grid. - * - * \todo the initial condition needs to be unique for - * each vertex. we should think about the API... - */ - void applyInitialSolution_() - { - // first set the whole domain to zero - this->uCur_ = Scalar(0.0); - - // iterate through leaf grid and evaluate initial - // condition at the center of each sub control volume - for (const auto& element : elements(this->gridView_())) - { - // deal with the current element, bind FVGeometry to it - auto fvGeometry = localView(this->fvGridGeometry()); - fvGeometry.bindElement(element); - - // loop over sub control volumes - for (auto&& scv : scvs(fvGeometry)) - { - // let the problem do the dirty work of nailing down - // the initial solution. - auto initPriVars = this->problem_().initialAtPos(scv.center())[cellCenterIdx]; - - auto dofIdxGlobal = scv.dofIndex(); - this->uCur_[cellCenterIdx][dofIdxGlobal] += initPriVars; - } - - // loop over faces - for(auto&& scvf : scvfs(fvGeometry)) - { - auto initPriVars = this->problem_().initialAtPos(scvf.center())[faceIdx][scvf.directionIndex()]; - this->uCur_[faceIdx][scvf.dofIndex()] = initPriVars; - } - } - } - - /*! - * \brief Returns the element solution - * - * \param element The element - * \param sol The solution vector - * \NOTE: Only returns cell-center related values. Might be revised if face data are needed as well. - */ - ElementSolution elementSolution(const Element& element, const SolutionVector& sol) const - { - PrimaryVariables priVars(0.0); - priVars[cellCenterIdx] = sol[cellCenterIdx][this->elementMapper().index(element)]; - return ElementSolution{std::move(priVars)}; - } - - /*! - * \brief Write the current solution for a vertex to a restart - * file. - * - * \param outstream The stream into which the vertex data should - * be serialized to - * \param entity The entity which's data should be - * serialized, i.e. a vertex for the box method - * and an element for the cell-centered method - */ - template - void serializeEntity(std::ostream &outstream, - const Entity &entity) - { - DUNE_THROW(Dune::NotImplemented, "deserializeEntity() not implemented yet"); -// int dofIdxGlobal = dofMapper().index(entity); -// int dofIdxGlobal = dofMapper().index(entity); -// -// // write phase state -// if (!outstream.good()) { -// DUNE_THROW(Dune::IOError, -// "Could not serialize vertex " -// << dofIdxGlobal); -// } -// -// for (int eqIdx = 0; eqIdx < numEq; ++eqIdx) { -// outstream << curSol()[dofIdxGlobal][eqIdx] << " "; -// } - } - - /*! - * \brief Reads the current solution variables for a vertex from a - * restart file. - * - * \param instream The stream from which the vertex data should - * be deserialized from - * \param entity The entity which's data should be - * serialized, i.e. a vertex for the box method - * and an element for the cell-centered method - */ - template - void deserializeEntity(std::istream &instream, - const Entity &entity) - { - DUNE_THROW(Dune::NotImplemented, "deserializeEntity() not implemented yet"); -// int dofIdxGlobal = dofMapper().index(entity); -// -// for (int eqIdx = 0; eqIdx < numEq; ++eqIdx) { -// if (!instream.good()) -// DUNE_THROW(Dune::IOError, -// "Could not deserialize vertex " -// << dofIdxGlobal); -// instream >> curSol()[dofIdxGlobal][eqIdx]; -// } - } - - /*! - * \brief \copybrief Dumux::ImplicitModel::addOutputVtkFields - * - * Specialization for the NavierStokesModel, adding the pressure and - * the process rank to the VTK writer. - */ - template - void addOutputVtkFields(const SolutionVector &sol, - MultiWriter &writer) - { - // TODO: implement vtk output -// // typedef Dune::BlockVector > VectorField; -// -// // create the required scalar fields -// unsigned numDofs = this->numDofs(); -// auto *p = writer.allocateManagedBuffer(numDofs); -// // VectorField *velocity = writer.template allocateManagedBuffer(numDofs); -// // ImplicitVelocityOutput velocityOutput(this->problem_()); -// -// // if (velocityOutput.enableOutput()) -// // { -// // // initialize velocity field -// // for (unsigned int i = 0; i < numDofs; ++i) -// // { -// // (*velocity)[i] = double(0); -// // } -// // } -// -// unsigned numElements = this->gridView_().size(0); -// auto *rank = writer.allocateManagedBuffer(numElements); -// -// for (const auto& element : elements(this->gridView_(), Dune::Partitions::interior)) -// { -// auto eIdx = this->elementMapper().index(element); -// (*rank)[eIdx] = this->gridView_().comm().rank(); -// -// // get the local fv geometry -// auto fvGeometry = localView(this->fvGridGeometry()); -// fvGeometry.bindElement(element); -// -// auto elemVolVars = localView(this->curGlobalVolVars()); -// elemVolVars.bindElement(element, fvGeometry, this->curSol()); -// -// for (auto&& scv : scvs(fvGeometry)) -// { -// const auto& volVars = elemVolVars[scv]; -// auto dofIdxGlobal = scv.dofIndex(); -// -// (*p)[dofIdxGlobal] = volVars.pressure(); -// } -// -// // velocity output -// //velocityOutput.calculateVelocity(*velocity, elemVolVars, fvGeometry, element, /*phaseIdx=*/0); -// } -// -// writer.attachDofData(*p, "p", isBox); -// // if (velocityOutput.enableOutput()) -// // { -// // writer.attachDofData(*velocity, "velocity", isBox, dim); -// // } -// writer.attachCellData(*rank, "process rank"); - } - - /*! - * \brief Add the vector fields for analysing the convergence of - * the newton method to the a VTK multi writer. - * - * \tparam MultiWriter The type of the VTK multi writer - * - * \param writer The VTK multi writer object on which the fields should be added. - * \param u The solution function - * \param deltaU The delta of the solution function before and after the Newton update - */ - template - void addConvergenceVtkFields(MultiWriter &writer, - const SolutionVector &u, - const SolutionVector &deltaU) - { -// typedef Dune::BlockVector > ScalarField; -// -// SolutionVector residual(u); -// asImp_().globalResidual(residual, u); -// -// // create the required scalar fields -// unsigned numDofs = asImp_().numDofs(); -// -// // global defect of the two auxiliary equations -// ScalarField* def[numEq]; -// ScalarField* delta[numEq]; -// ScalarField* x[numEq]; -// for (int eqIdx = 0; eqIdx < numEq; ++eqIdx) { -// x[eqIdx] = writer.allocateManagedBuffer(numDofs); -// delta[eqIdx] = writer.allocateManagedBuffer(numDofs); -// def[eqIdx] = writer.allocateManagedBuffer(numDofs); -// } -// -// for (unsigned int dofIdxGlobal = 0; dofIdxGlobal < u.size(); dofIdxGlobal++) -// { -// for (int eqIdx = 0; eqIdx < numEq; ++eqIdx) -// { -// (*x[eqIdx])[dofIdxGlobal] = u[dofIdxGlobal][eqIdx]; -// (*delta[eqIdx])[dofIdxGlobal] = - deltaU[dofIdxGlobal][eqIdx]; -// (*def[eqIdx])[dofIdxGlobal] = residual[dofIdxGlobal][eqIdx]; -// } -// } -// -// for (int eqIdx = 0; eqIdx < numEq; ++eqIdx) { -// std::ostringstream oss; -// oss.str(""); oss << "x_" << eqIdx; -// if (isBox) -// writer.attachVertexData(*x[eqIdx], oss.str()); -// else -// writer.attachCellData(*x[eqIdx], oss.str()); -// oss.str(""); oss << "delta_" << eqIdx; -// if (isBox) -// writer.attachVertexData(*delta[eqIdx], oss.str()); -// else -// writer.attachCellData(*delta[eqIdx], oss.str()); -// oss.str(""); oss << "defect_" << eqIdx; -// if (isBox) -// writer.attachVertexData(*def[eqIdx], oss.str()); -// else -// writer.attachCellData(*def[eqIdx], oss.str()); -// } -// -// asImp_().addOutputVtkFields(u, writer); - } - - /*! - * \brief Compute the global residual for an arbitrary solution - * vector. - * - * \param residual Stores the result - * \param u The solution for which the residual ought to be calculated - */ - Scalar globalResidual(SolutionVector &residual, - const SolutionVector &u) - { - SolutionVector tmp(this->curSol()); - this->curSol() = u; - Scalar res = globalResidual(residual); - this->curSol() = tmp; - return res; - } - - /*! - * \brief Compute the global residual for the current solution - * vector. - * - * \param residual Stores the result - */ - Scalar globalResidual(SolutionVector &residual) - { - residual = 0; - - for (const auto& element : elements(this->gridView_())) { - this->localResidual().eval(element); - - -// int globalI = this->elementMapper().index(element); -// residual[cellCenterIdx][globalI] = this->localResidual().residual(0); - } - - // calculate the square norm of the residual - Scalar result2 = residual.two_norm2(); - if (this->gridView_().comm().size() > 1) - result2 = this->gridView_().comm().sum(result2); - - return std::sqrt(result2); - } - - /*! - * \brief Returns the number of global degrees of freedoms (DOFs) - */ - size_t numDofs() const - { - return numCellCenterDofs() + numFaceDofs(); - } - - /*! - * \brief Returns the number of cell center degrees of freedoms (DOFs) - */ - size_t numCellCenterDofs() const - { - return this->gridView_().size(0); - } - - /*! - * \brief Returns the number of face degrees of freedoms (DOFs) - */ - size_t numFaceDofs() const - { - return this->fvGridGeometryPtr_->numIntersections(); - } - - const GlobalFaceVariables& curGlobalFaceVars() const - { return curGlobalFaceVariables_; } - - const GlobalFaceVariables& prevGlobalFaceVars() const - { return prevGlobalFaceVariables_; } - -protected: - - GlobalFaceVariables& nonConstCurFaceVars() - { return curGlobalFaceVariables_; } - - GlobalFaceVariables curGlobalFaceVariables_; - GlobalFaceVariables prevGlobalFaceVariables_; - - -private: - - Implementation &asImp_() - { return *static_cast(this); } - const Implementation &asImp_() const - { return *static_cast(this); } - -}; -} - -#include "propertydefaults.hh" - -#endif diff --git a/dumux/implicit/staggered/newtoncontroller.hh b/dumux/implicit/staggered/newtoncontroller.hh index 1e4cf1dd4a867d24d564b3fdcde479b0a21f9ae1..70d4841b5f04322a4dda8b860244d2f1557e6922 100644 --- a/dumux/implicit/staggered/newtoncontroller.hh +++ b/dumux/implicit/staggered/newtoncontroller.hh @@ -18,7 +18,7 @@ *****************************************************************************/ /*! * \file - * \brief A 2p1cni specific controller for the newton solver. + * \brief A StaggeredModel specific controller for the newton solver. * * This controller 'knows' what a 'physically meaningful' solution is * which allows the newton method to abort quicker if the solution is @@ -27,28 +27,19 @@ #ifndef DUMUX_STAGGERED_NEWTON_CONTROLLER_HH #define DUMUX_STAGGERED_NEWTON_CONTROLLER_HH -#include "properties.hh" +#include +#include #include #include #include -#include "newtonconvergencewriter.hh" +// #include "newtonconvergencewriter.hh" namespace Dumux { -namespace Properties -{ - SET_PROP(StaggeredModel, LinearSolverBlockSize) - { - // LinearSolverAcceptsMultiTypeMatrix::value - // TODO: make somehow dependend? or only relevant for direct solvers? - public: - static constexpr auto value = 1; - }; -} /*! - * \ingroup PNMModel - * \brief A PNM specific controller for the newton solver. + * \ingroup StaggeredModel + * \brief A StaggeredModel specific controller for the newton solver. * * This controller 'knows' what a 'physically meaningful' solution is * which allows the newton method to abort quicker if the solution is @@ -58,12 +49,14 @@ namespace Properties template class StaggeredNewtonController : public NewtonController { - typedef NewtonController ParentType; - typedef NewtonConvergenceWriter StaggeredNewtonConvergenceWriter; - typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; - typedef typename GET_PROP_TYPE(TypeTag, SolutionVector) SolutionVector; - typedef typename GET_PROP_TYPE(TypeTag, JacobianMatrix) JacobianMatrix; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + using ParentType = NewtonController; + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using JacobianMatrix = typename GET_PROP_TYPE(TypeTag, JacobianMatrix); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Communicator = typename GridView::CollectiveCommunication; using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); typename DofTypeIndices::CellCenterIdx cellCenterIdx; @@ -75,8 +68,12 @@ class StaggeredNewtonController : public NewtonController }; public: - StaggeredNewtonController(const Problem &problem) - : ParentType(problem) + StaggeredNewtonController(const Communicator& comm) + : ParentType(comm) + {} + + StaggeredNewtonController(const Communicator& comm, std::shared_ptr> timeLoop) + : ParentType(comm, timeLoop) {} /*! @@ -92,11 +89,13 @@ public: * \param x The vector which solves the linear system * \param b The right hand side of the linear system */ - template - typename std::enable_if::value, void>::type - newtonSolveLinear(JacobianMatrix &A, - SolutionVector &x, - SolutionVector &b) + // template + // typename std::enable_if::value, void>::type + template + void solveLinearSystem(LinearSolver& ls, + JacobianMatrix& A, + SolutionVector& x, + SolutionVector& b) { try { @@ -124,10 +123,10 @@ public: BlockVector y; y.resize(numRows); - // printmatrix(std::cout, M, "", ""); + // printmatrix(std::cout, M, "old", ""); // solve - const bool converged = this->linearSolver_.solve(M, y, bTmp); + const bool converged = ls.solve(M, y, bTmp); // copy back the result y into x VectorConverter::retrieveValues(x, y); @@ -153,29 +152,29 @@ public: * \param x The vector which solves the linear system * \param b The right hand side of the linear system */ - template - typename std::enable_if::value, void>::type - newtonSolveLinear(JacobianMatrix &A, - SolutionVector &x, - SolutionVector &b) - { - try - { - if (this->numSteps_ == 0) - this->initialResidual_ = b.two_norm(); - - bool converged = this->linearSolver_.solve(A, x, b); - - if (!converged) - DUNE_THROW(NumericalProblem, "Linear solver did not converge"); - } - catch (const Dune::Exception &e) - { - Dumux::NumericalProblem p; - p.message(e.what()); - throw p; - } - } + // template + // typename std::enable_if::value, void>::type + // newtonSolveLinear(JacobianMatrix &A, + // SolutionVector &x, + // SolutionVector &b) + // { + // try + // { + // if (this->numSteps_ == 0) + // this->initialResidual_ = b.two_norm(); + // + // bool converged = this->linearSolver_.solve(A, x, b); + // + // if (!converged) + // DUNE_THROW(NumericalProblem, "Linear solver did not converge"); + // } + // catch (const Dune::Exception &e) + // { + // Dumux::NumericalProblem p; + // p.message(e.what()); + // throw p; + // } + // } /*! * \brief Update the current solution with a delta vector. @@ -194,18 +193,20 @@ public: * system of equations. This parameter also stores * the updated solution. */ - void newtonUpdate(SolutionVector &uCurrentIter, - const SolutionVector &uLastIter, - const SolutionVector &deltaU) + template + void newtonUpdate(JacobianAssembler& assembler, + SolutionVector &uCurrentIter, + const SolutionVector &uLastIter, + const SolutionVector &deltaU) { if (this->enableShiftCriterion_) this->newtonUpdateShift(uLastIter, deltaU); - this->writeConvergence_(uLastIter, deltaU); + // this->writeConvergence_(uLastIter, deltaU); if (this->useLineSearch_) { - this->lineSearchUpdate_(uCurrentIter, uLastIter, deltaU); + this->lineSearchUpdate_(assembler, uCurrentIter, uLastIter, deltaU); } else { for (unsigned int i = 0; i < uLastIter[cellCenterIdx].size(); ++i) { @@ -219,11 +220,14 @@ public: if (this->enableResidualCriterion_) { - SolutionVector tmp(uLastIter); - this->reduction_ = this->method().model().globalResidual(tmp, uCurrentIter); + this->residualNorm_ = assembler.residualNorm(uCurrentIter); + this->reduction_ = this->residualNorm_; this->reduction_ /= this->initialResidual_; } } + + // update the variables class to the new solution + assembler.gridVariables().update(uCurrentIter); } /*! @@ -242,7 +246,7 @@ public: auto uNewI = uLastIter[cellCenterIdx][i]; uNewI -= deltaU[cellCenterIdx][i]; - Scalar shiftAtDof = this->model_().relativeShiftAtDof(uLastIter[cellCenterIdx][i], + Scalar shiftAtDof = this->relativeShiftAtDof_(uLastIter[cellCenterIdx][i], uNewI); this->shift_ = std::max(this->shift_, shiftAtDof); } @@ -250,13 +254,13 @@ public: auto uNewI = uLastIter[faceIdx][i]; uNewI -= deltaU[faceIdx][i]; - Scalar shiftAtDof = this->model_().relativeShiftAtDof(uLastIter[faceIdx][i], + Scalar shiftAtDof = this->relativeShiftAtDof_(uLastIter[faceIdx][i], uNewI); this->shift_ = std::max(this->shift_, shiftAtDof); } - if (this->gridView_().comm().size() > 1) - this->shift_ = this->gridView_().comm().max(this->shift_); + if (this->communicator().size() > 1) + this->shift_ = this->communicator().max(this->shift_); } }; diff --git a/dumux/implicit/staggered/primaryvariables.hh b/dumux/implicit/staggered/primaryvariables.hh index e798becaa47c8627ac748a2c359277b45f01898c..06c1b66ecbf3aa9e6aa2f44a138098f9ede98934 100644 --- a/dumux/implicit/staggered/primaryvariables.hh +++ b/dumux/implicit/staggered/primaryvariables.hh @@ -23,7 +23,6 @@ #ifndef DUMUX_STAGGERED_PRIMARYVARIABLES_HH #define DUMUX_STAGGERED_PRIMARYVARIABLES_HH -#include "properties.hh" #include #include diff --git a/dumux/implicit/staggered/properties.hh b/dumux/implicit/staggered/properties.hh deleted file mode 100644 index 03dbcd48effa518f8119753b8501dc05a0b9b460..0000000000000000000000000000000000000000 --- a/dumux/implicit/staggered/properties.hh +++ /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 . * - *****************************************************************************/ -#ifndef DUMUX_STAGGERED_PROPERTIES_HH -#define DUMUX_STAGGERED_PROPERTIES_HH - -#include - -/*! - * \ingroup Properties - * \ingroup ImplicitProperties - * \ingroup StaggeredModel - * \file - * \brief Specify the shape functions, operator assemblers, etc - * used for the StaggeredModel. - */ -namespace Dumux -{ - -namespace Properties -{ -// \{ - -////////////////////////////////////////////////////////////////// -// Type tags -////////////////////////////////////////////////////////////////// - -//! The type tag for models based on staggered scheme -NEW_TYPE_TAG(StaggeredModel, INHERITS_FROM(ImplicitBase)); - -NEW_PROP_TAG(StaggeredGeometryHelper); //!< Helper class to ease the creation of stencils, etc. - -NEW_PROP_TAG(CellCenterPrimaryVariables); //!< A vector of primary variables for cell center dofs -NEW_PROP_TAG(FacePrimaryVariables); //!< A vector of primary variables for face dofs -NEW_PROP_TAG(CellCenterSolutionVector); //!< Vector containing all cell centered primary variables -NEW_PROP_TAG(FaceSolutionVector); //!< Vector containing all face primary variables - -NEW_PROP_TAG(EnableInteriorBoundaries); //!< For compatibility - -NEW_PROP_TAG(BaseEpsilon); //!< Set one or different base epsilons for the calculations of the localJacobian's derivatives - -NEW_PROP_TAG(NumEqCellCenter); //!< Number of equations per cell center dof -NEW_PROP_TAG(NumEqFace); //!< Number of equations per face dof -NEW_PROP_TAG(DofTypeIndices); //!< Indices to choose between cell center and face dofs - -NEW_PROP_TAG(FaceVariables); //!< Variables associated to facets (equivalent to volVars) -NEW_PROP_TAG(GlobalFaceVars); //!< Global vector of facet variables - -NEW_PROP_TAG(IntersectionMapper); //!< The intersection mapper - -NEW_PROP_TAG(VtkWriteFaceData); //!< Decide whether to write separate vtp files for face variables - -} -} - -// \} - -#include - -#endif diff --git a/dumux/io/pointcloudvtkwriter.hh b/dumux/io/pointcloudvtkwriter.hh index c008658e0a126745d75ad09c687d61c1fb5f6357..946254fd1b0e1e3594bf357ca996774ca10031f1 100644 --- a/dumux/io/pointcloudvtkwriter.hh +++ b/dumux/io/pointcloudvtkwriter.hh @@ -25,7 +25,7 @@ #include -#include +#include #include #include #include @@ -178,10 +178,10 @@ public: * \param name The name of the data set * \param ncomps The number of components of the data set */ - void addPointData(const std::vector& v, const std::string &name, int ncomps = 1) + void addPointData(const std::vector& v, const std::string &name) { - assert(v.size() == ncomps * coordinates_.size()); - scalarPointData_.push_back(ScalarFunction(v, name, ncomps)); + assert(v.size() == coordinates_.size()); + scalarPointData_.push_back(ScalarFunction(v, name, 1)); } /*! @@ -191,10 +191,10 @@ public: * \param name The name of the data set * \param ncomps The number of components of the data set */ - void addPointData(const std::vector& v, const std::string &name, int ncomps = 1) + void addPointData(const std::vector& v, const std::string &name) { assert(v.size() == coordinates_.size()); - vectorPointData_.push_back(VectorFunction(v, name, ncomps)); + vectorPointData_.push_back(VectorFunction(v, name, 3)); } /*! diff --git a/dumux/io/staggeredvtkoutputmodule.hh b/dumux/io/staggeredvtkoutputmodule.hh index 4d8fcec2d24d7140e97f670c4e247cc0b312bffb..9aa6709bc68c6314bfc0927757b124ef53658576 100644 --- a/dumux/io/staggeredvtkoutputmodule.hh +++ b/dumux/io/staggeredvtkoutputmodule.hh @@ -25,15 +25,10 @@ #include -#include +#include #include #include -namespace Properties -{ -NEW_PROP_TAG(VtkAddVelocity); -NEW_PROP_TAG(VtkAddProcessRank); -} namespace Dumux { @@ -44,14 +39,19 @@ namespace Dumux * Specialization for staggered grids with dofs on faces. */ template -class StaggeredVtkOutputModule : public VtkOutputModuleBase +class StaggeredVtkOutputModule : public VtkOutputModule { - friend class VtkOutputModuleBase; - using ParentType = VtkOutputModuleBase; - using Implementation = typename GET_PROP_TYPE(TypeTag, VtkOutputModule); + friend class VtkOutputModule; + using ParentType = VtkOutputModule; using Problem = typename GET_PROP_TYPE(TypeTag, Problem); using GridView = typename GET_PROP_TYPE(TypeTag, GridView); using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using FaceVariables = typename GET_PROP_TYPE(TypeTag, FaceVariables); + using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); + enum { dim = GridView::dimension }; enum { dimWorld = GridView::dimensionworld }; @@ -62,120 +62,120 @@ class StaggeredVtkOutputModule : public VtkOutputModuleBase typename DofTypeIndices::CellCenterIdx cellCenterIdx; typename DofTypeIndices::FaceIdx faceIdx; - struct PriVarScalarDataInfo { unsigned int pvIdx; std::string name; }; - struct PriVarVectorDataInfo { std::vector pvIdx; std::string name; }; + struct FaceVarScalarDataInfo { std::function get; std::string name; }; + struct FaceVarVectorDataInfo { std::function get; std::string name; }; - using Positions = std::vector; - using Data = std::vector>; + struct FaceFieldScalarDataInfo + { + FaceFieldScalarDataInfo(const std::vector& f, const std::string& n) : data(f), name(n) {} + const std::vector& data; + const std::string name; + }; + + struct FaceFieldVectorDataInfo + { + FaceFieldVectorDataInfo(const std::vector& f, const std::string& n) : data(f), name(n) {} + const std::vector& data; + const std::string name; + }; public: StaggeredVtkOutputModule(const Problem& problem, - Dune::VTK::DataMode dm = Dune::VTK::conforming) : ParentType(problem, dm), - faceWriter_(std::make_shared>(coordinates_)), - sequenceWriter_(faceWriter_, problem.name() + "-face", "","", - problem.gridView().comm().rank(), - problem.gridView().comm().size() ) + const FVGridGeometry& fvGridGeometry, + const GridVariables& gridVariables, + const SolutionVector& sol, + const std::string& name, + bool verbose = true, + Dune::VTK::DataMode dm = Dune::VTK::conforming) + : ParentType(problem, fvGridGeometry, gridVariables, sol, name, verbose, dm) + , problem_(problem) + , gridGeom_(fvGridGeometry) + , gridVariables_(gridVariables) + , sol_(sol) + , faceWriter_(std::make_shared>(coordinates_)) + , sequenceWriter_(faceWriter_, problem.name() + "-face", "","", + fvGridGeometry.gridView().comm().rank(), + fvGridGeometry.gridView().comm().size() ) { - writeFaceVars_ = GET_PARAM_FROM_GROUP(TypeTag, bool, Vtk, WriteFaceData); + writeFaceVars_ = getParamFromGroup(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Vtk.WriteFaceData", false); coordinatesInitialized_ = false; } ////////////////////////////////////////////////////////////////////////////////////////////// - //! Methods to conveniently add primary and secondary variables upon problem initialization + //! Methods to conveniently add face variables //! Do not call these methods after initialization ////////////////////////////////////////////////////////////////////////////////////////////// - - //! Output a scalar field + //! Add a scalar valued field + //! \param v The field to be added //! \param name The name of the vtk field - //! \returns A reference to the resized scalar field to be filled with the actual data - std::vector& createFaceScalarField(const std::string& name) + void addFaceField(const std::vector& v, const std::string& name) { - faceScalarFields_.emplace_back(std::make_pair(std::vector(this->problem().model().numFaceDofs()), name)); - return faceScalarFields_.back().first; + if (v.size() == this->gridGeom_.gridView().size(1)) + faceFieldScalarDataInfo_.emplace_back(v, name); + else + DUNE_THROW(Dune::RangeError, "Size mismatch of added field!"); } - //! Output a vector field + //! Add a vector valued field + //! \param v The field to be added //! \param name The name of the vtk field - //! \returns A reference to the resized vector field to be filled with the actual data - std::vector& createFaceVectorField(const std::string& name) + void addFaceField(const std::vector& v, const std::string& name) { - faceVectorFields_.emplace_back(std::make_pair(std::vector(this->problem().model().numFaceDofs()), name)); - return faceVectorFields_.back().first; + if (v.size() == this->gridGeom_.gridView().size(1)) + faceFieldVectorDataInfo_.emplace_back(v, name); + else + DUNE_THROW(Dune::RangeError, "Size mismatch of added field!"); } - //! Output a scalar primary variable + //! Add a scalar-valued faceVarible + //! \param f A function taking a FaceVariables object and returning the desired scalar //! \param name The name of the vtk field - //! \param pvIdx The index in the primary variables vector - void addFacePrimaryVariable(const std::string& name, unsigned int pvIdx) + void addFaceVariable(std::function&& f, const std::string& name) { - priVarScalarDataInfo_.push_back(PriVarScalarDataInfo{pvIdx, name}); + faceVarScalarDataInfo_.push_back(FaceVarScalarDataInfo{f, name}); } - //! Output a vector primary variable + //! Add a vector-valued faceVarible + //! \param f A function taking a SubControlVolumeFace and FaceVariables object and returning the desired vector //! \param name The name of the vtk field - //! \param pvIndices A vector of indices in the primary variables vector to group for vector visualization - void addFacePrimaryVariable(const std::string& name, std::vector pvIndices) + void addFaceVariable(std::function&& f, const std::string& name) { - assert(pvIndices.size() < 4 && "Vtk doesn't support vector dimensions greater than 3!"); - priVarVectorDataInfo_.push_back(PriVarVectorDataInfo{pvIndices, name}); + faceVarVectorDataInfo_.push_back(FaceVarVectorDataInfo{f, name}); } + //! Write the values to vtp files + //! \param time The current time + //! \param type The output type void write(double time, Dune::VTK::OutputType type = Dune::VTK::ascii) { ParentType::write(time, type); if(writeFaceVars_) - getFaceDataAndWrite_(); - } - -protected: - - /*! - * \brief Returns the number of cell center dofs - */ - unsigned int numDofs_() const - { - return this->problem().model().numCellCenterDofs(); - } - - /*! - * \brief Returns priVar data from dofs not on the face. - * - * \param dofIdxGlobal The global dof index - * \param pvIdx The primary variable index - */ - auto getPriVarData_(const std::size_t dofIdxGlobal, const std::size_t pvIdx) - { - return this->problem().model().curSol()[cellCenterIdx][dofIdxGlobal][pvIdx]; + getFaceDataAndWrite_(time); } - std::vector priVarScalarDataInfo_; - std::vector priVarVectorDataInfo_; - std::vector secondVarScalarDataInfo_; - std::vector secondVarVectorDataInfo_; private: + //! Update the coordinates (the face centers) void updateCoordinates_() { - std::cout << "updating coordinates" << std::endl; - coordinates_.resize(this->problem().model().numFaceDofs()); - for(auto&& facet : facets(this->problem().gridView())) + coordinates_.resize(gridGeom_.numFaceDofs()); + for(auto&& facet : facets(gridGeom_.gridView())) { - const int dofIdxGlobal = this->problem().gridView().indexSet().index(facet); + const int dofIdxGlobal = gridGeom_.gridView().indexSet().index(facet); coordinates_[dofIdxGlobal] = facet.geometry().center(); } coordinatesInitialized_ = true; } - /*! - * \brief Gathers all face-related data and invokes the face vtk-writer using these data. - */ - void getFaceDataAndWrite_() + //! Gathers all face-related data and invokes the face vtk-writer using these data. + //! \param time The current time + void getFaceDataAndWrite_(const Scalar time) { - const int numPoints = this->problem().model().numFaceDofs(); + const auto numPoints = gridGeom_.numFaceDofs(); // make sure not to iterate over the same dofs twice std::vector dofVisited(numPoints, false); @@ -184,79 +184,77 @@ private: if(!coordinatesInitialized_) updateCoordinates_(); - Data priVarScalarData(priVarScalarDataInfo_.size(), std::vector(numPoints)); + // prepare some containers to store the relevant data + std::vector> faceVarScalarData; + std::vector> faceVarVectorData; - Data priVarVectorData(priVarVectorDataInfo_.size()); - for (std::size_t i = 0; i < priVarVectorDataInfo_.size(); ++i) - priVarVectorData[i].resize(numPoints*priVarVectorDataInfo_[i].pvIdx.size()); + if(!faceVarScalarDataInfo_.empty()) + faceVarScalarData.resize(faceVarScalarDataInfo_.size(), std::vector(numPoints)); - for(auto&& element : elements(this->problem().gridView())) + if(!faceVarVectorDataInfo_.empty()) + faceVarVectorData.resize(faceVarVectorDataInfo_.size(), std::vector(numPoints)); + + for (const auto& element : elements(gridGeom_.gridView(), Dune::Partitions::interior)) { - auto fvGeometry = localView(this->problem().model().fvGridGeometry()); - fvGeometry.bindElement(element); - for(auto && scvf : scvfs(fvGeometry)) + auto fvGeometry = localView(gridGeom_); + auto elemFaceVars = localView(gridVariables_.curGridFaceVars()); + + if (!faceVarScalarDataInfo_.empty() || !faceVarVectorDataInfo_.empty()) { - if(dofVisited[scvf.dofIndex()]) - continue; + fvGeometry.bind(element); + elemFaceVars.bindElement(element, fvGeometry, sol_); + + for (auto&& scvf : scvfs(fvGeometry)) + { + const auto dofIdxGlobal = scvf.dofIndex(); + if(dofVisited[dofIdxGlobal]) + continue; - asImp_().getPrivarScalarData_(priVarScalarData, scvf); - asImp_().getPrivarVectorData_(priVarVectorData, scvf); + dofVisited[dofIdxGlobal] = true; - dofVisited[scvf.dofIndex()] = true; + const auto& faceVars = elemFaceVars[scvf]; + + // get the scalar-valued data + for (std::size_t i = 0; i < faceVarScalarDataInfo_.size(); ++i) + faceVarScalarData[i][dofIdxGlobal] = faceVarScalarDataInfo_[i].get(faceVars); + + // get the vector-valued data + for (std::size_t i = 0; i < faceVarVectorDataInfo_.size(); ++i) + faceVarVectorData[i][dofIdxGlobal] = faceVarVectorDataInfo_[i].get(scvf, faceVars); + } } } - // transfer priVar scalar data to writer - for(int i = 0; i < priVarScalarDataInfo_.size(); ++i) - faceWriter_->addPointData(priVarScalarData[i], priVarScalarDataInfo_[i].name); - - // transfer priVar vector data to writer - for(int i = 0; i < priVarVectorDataInfo_.size(); ++i) - faceWriter_->addPointData(priVarVectorData[i], priVarVectorDataInfo_[i].name, priVarVectorDataInfo_[i].pvIdx.size()); + // transfer the data to the point writer + if(!faceVarScalarDataInfo_.empty()) + for (std::size_t i = 0; i < faceVarScalarDataInfo_.size(); ++i) + faceWriter_->addPointData(faceVarScalarData[i], faceVarScalarDataInfo_[i].name); - // transfer custom scalar data to writer - for(auto&& scalarField : faceScalarFields_) - faceWriter_->addPointData(scalarField.first, scalarField.second); + if(!faceVarVectorDataInfo_.empty()) + for (std::size_t i = 0; i < faceVarVectorDataInfo_.size(); ++i) + faceWriter_->addPointData(faceVarVectorData[i], faceVarVectorDataInfo_[i].name); - // transfer custom vector data to writer - for(auto&& vectorField : faceVectorFields_) - faceWriter_->addPointData(vectorField.first, vectorField.second, 3); + // account for the custom fields + for(const auto& field: faceFieldScalarDataInfo_) + faceWriter_->addPointData(field.data, field.name); - sequenceWriter_.write(this->problem().timeManager().time() + 1.0); - faceScalarFields_.clear(); - faceVectorFields_.clear(); - } + for(const auto& field: faceFieldVectorDataInfo_) + faceWriter_->addPointData(field.data, field.name); + // write for the current time step + sequenceWriter_.write(time); - /*! - * \brief Retrives scalar-valued data from the face. - * - * \param priVarScalarData Container to store the data - * \param face The face - */ - template - void getPrivarScalarData_(Data& priVarScalarData, const Face& face) - { - const int dofIdxGlobal = face.dofIndex(); - for(int pvIdx = 0; pvIdx < priVarScalarDataInfo_.size(); ++pvIdx) - priVarScalarData[pvIdx][dofIdxGlobal] = this->problem().model().curSol()[faceIdx][dofIdxGlobal][pvIdx]; + // clear coordinates to save some memory + coordinates_.clear(); + coordinates_.shrink_to_fit(); + coordinatesInitialized_ = false; } - /*! - * \brief Retrives vector-valued data from the face. - * - * \param priVarVectorData Container to store the data - * \param face The face - */ - template - void getPrivarVectorData_(Data& priVarVectorData, const Face& face) - { - const int dofIdxGlobal = face.dofIndex(); - for (int i = 0; i < priVarVectorDataInfo_.size(); ++i) - for (int j = 0; j < priVarVectorDataInfo_[i].pvIdx.size(); ++j) - priVarVectorData[i][dofIdxGlobal*priVarVectorDataInfo_[i].pvIdx.size() + j] - = this->problem().model().curSol()[faceIdx][dofIdxGlobal][priVarVectorDataInfo_[i].pvIdx[j]]; - } + + const Problem& problem_; + const FVGridGeometry& gridGeom_; + const GridVariables& gridVariables_; + const SolutionVector& sol_; std::shared_ptr> faceWriter_; @@ -267,16 +265,12 @@ private: std::vector coordinates_; bool coordinatesInitialized_; - std::list, std::string>> faceScalarFields_; - std::list, std::string>> faceVectorFields_; + std::vector faceVarScalarDataInfo_; + std::vector faceVarVectorDataInfo_; - //! Returns the implementation of the problem (i.e. static polymorphism) - Implementation &asImp_() - { return *static_cast(this); } + std::vector faceFieldScalarDataInfo_; + std::vector faceFieldVectorDataInfo_; - //! \copydoc asImp_() - const Implementation &asImp_() const - { return *static_cast(this); } }; } // end namespace Dumux diff --git a/dumux/linear/matrixconverter.hh b/dumux/linear/matrixconverter.hh index 0615754cd0968cd04a4b77018dec2f8e918e15bb..87adb0a09239b5f199bd50fb9a2e82451a7708bf 100644 --- a/dumux/linear/matrixconverter.hh +++ b/dumux/linear/matrixconverter.hh @@ -28,6 +28,7 @@ #include #include #include +#include #include #include diff --git a/test/freeflow/staggered/CMakeLists.txt b/test/freeflow/staggered/CMakeLists.txt index 09695bf8135793b06f86419ffac58d292a5a707b..e5afa382befaffb0b0451475ab09f3185bb52862 100644 --- a/test/freeflow/staggered/CMakeLists.txt +++ b/test/freeflow/staggered/CMakeLists.txt @@ -1,69 +1,81 @@ add_input_file_links() -add_dumux_test(test_liddrivencavity test_closedsystem test_closedsystem.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/liddrivencavity-reference.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_liddrivencavity-00002.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_closedsystem test_liddrivencavity.input") +add_executable(test_stokes_closedsystem EXCLUDE_FROM_ALL test_closedsystem.cc) -add_dumux_test(test_hydrostaticpressure test_closedsystem test_closedsystem.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/stokeshydrostaticpressure-reference.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_hydrostaticpressure-00002.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_closedsystem test_hydrostaticpressure.input" - --zeroThreshold {"velocity_Constant \(m/s\)":1e-16}) +dune_add_test(NAME test_stokes_liddrivencavity + TARGET test_stokes_closedsystem + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/liddrivencavity-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_liddrivencavity-00002.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_stokes_closedsystem test_liddrivencavity.input") -add_dumux_test(test_channel_stokes test_channel_stokes test_channel.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/channel-stokes.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokes-00002.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokes") +dune_add_test(NAME test_stokes_hydrostaticpressure + TARGET test_stokes_closedsystem + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/stokeshydrostaticpressure-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_hydrostaticpressure-00002.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_stokes_closedsystem test_hydrostaticpressure.input" + --zeroThreshold {"velocity_Constant \(m/s\)":1e-16}) -add_dumux_test(test_channel_stokesni_convection test_channel_stokesni test_channel.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/stokesni-convection-reference.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokesni_convection-00006.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokesni test_channel_stokesni_convection.input") +dune_add_test(NAME test_channel_stokes + SOURCES test_channel.cc + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/channel-stokes.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokes-00002.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokes") + +add_executable(test_channel_stokesni EXCLUDE_FROM_ALL test_channel.cc) target_compile_definitions(test_channel_stokesni PUBLIC "NONISOTHERMAL=1") -add_dumux_test(test_channel_stokesni_conduction test_channel_stokesni test_channel.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/stokesni-conduction-reference.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokesni_conduction-00004.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokesni test_channel_stokesni_conduction.input" - --zeroThreshold {"velocity_H2O \(m/s\)":1e-20}) +dune_add_test(NAME test_channel_stokesni_convection + TARGET test_channel_stokesni + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/stokesni-convection-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokesni_convection-00006.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokesni test_channel_stokesni_convection.input") -add_dumux_test(test_channel_navierstokes test_channel_navierstokes test_channel.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/channel-navierstokes-reference.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_channel_navierstokes-00002.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_channel_navierstokes") -target_compile_definitions(test_channel_navierstokes PUBLIC "ENABLE_NAVIERSTOKES=1") +dune_add_test(NAME test_channel_stokesni_conduction + TARGET test_channel_stokesni + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/stokesni-conduction-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokesni_conduction-00004.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_channel_stokesni test_channel_stokesni_conduction.input" + --zeroThreshold {"velocity_H2O \(m/s\)":1e-20}) -add_dumux_test(test_donea test_donea test_donea.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/stokes-donea-reference.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_donea-00002.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_donea") +dune_add_test(NAME test_channel_navierstokes + SOURCES test_channel.cc + COMPILE_DEFINITIONS ENABLE_NAVIERSTOKES=1 + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/channel-navierstokes-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_channel_navierstokes-00002.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_channel_navierstokes") -add_dumux_test(test_kovasznay test_kovasznay test_kovasznay.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/test_kovasznay-reference.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_kovasznay-00002.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_kovasznay") +dune_add_test(NAME test_stokes_donea + SOURCES test_donea.cc + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/stokes-donea-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_donea-00002.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_stokes_donea") -#install sources -install(FILES -channeltestproblem.hh -test_channel.cc -closedsystemtestproblem.hh -test_closedsystem.cc -DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/test/freeflow/staggered) +dune_add_test(NAME test_navierstokes_kovasznay + SOURCES test_kovasznay.cc + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/test_kovasznay-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_kovasznay-00002.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_navierstokes_kovasznay") diff --git a/test/freeflow/staggered/channeltestproblem.hh b/test/freeflow/staggered/channeltestproblem.hh index bdb9399edc0cfe944dc1f5843d8c69011557a3cf..877eab5933b7516102fa529118945d5bba94e175 100644 --- a/test/freeflow/staggered/channeltestproblem.hh +++ b/test/freeflow/staggered/channeltestproblem.hh @@ -24,13 +24,15 @@ #ifndef DUMUX_CHANNEL_TEST_PROBLEM_HH #define DUMUX_CHANNEL_TEST_PROBLEM_HH -#include -#include -#include +#include +#include #include #include #include +#include +#include + namespace Dumux { template @@ -59,7 +61,7 @@ public: #if NONISOTHERMAL using type = FluidSystems::LiquidPhase > ; #else - using type = FluidSystems::LiquidPhase > ; + using type = FluidSystems::LiquidPhase > ; #endif }; @@ -74,8 +76,6 @@ SET_BOOL_PROP(ChannelTestProblem, EnableFVGridGeometryCache, true); SET_BOOL_PROP(ChannelTestProblem, EnableGlobalFluxVariablesCache, true); SET_BOOL_PROP(ChannelTestProblem, EnableGlobalVolumeVariablesCache, true); -// Enable gravity -SET_BOOL_PROP(ChannelTestProblem, ProblemEnableGravity, true); #if ENABLE_NAVIERSTOKES SET_BOOL_PROP(ChannelTestProblem, EnableInertiaTerms, true); @@ -91,13 +91,14 @@ SET_BOOL_PROP(ChannelTestProblem, EnableInertiaTerms, false); template class ChannelTestProblem : public NavierStokesProblem { - typedef NavierStokesProblem ParentType; + using ParentType = NavierStokesProblem; + + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; // copy some indices for convenience - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); enum { // Grid and world dimension dim = GridView::dimension, @@ -118,11 +119,10 @@ class ChannelTestProblem : public NavierStokesProblem }; 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 Intersection = typename GridView::Intersection; + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); @@ -135,24 +135,13 @@ class ChannelTestProblem : public NavierStokesProblem using InitialValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); using SourceValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); + using TimeLoopPtr = std::shared_ptr>; + public: - ChannelTestProblem(TimeManager &timeManager, const GridView &gridView) - : ParentType(timeManager, gridView), eps_(1e-6) + ChannelTestProblem(std::shared_ptr fvGridGeometry) + : ParentType(fvGridGeometry), eps_(1e-6) { - name_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - std::string, - Problem, - Name); - - inletVelocity_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - Scalar, - Problem, - InletVelocity); - -#if NONISOTHERMAL - if(inletVelocity_ > eps_) - this->timeManager().startNextEpisode(200.0); -#endif + inletVelocity_ = getParam("Problem.InletVelocity"); } /*! @@ -160,26 +149,6 @@ public: */ // \{ - /*! - * \brief The problem name. - * - * This is used as a prefix for files generated by the simulation. - */ - std::string name() const - { - return name_; - } - -#if NONISOTHERMAL - void episodeEnd() - { - if(inletVelocity_ > eps_) - { - this->timeManager().startNextEpisode(50.0); - this->timeManager().setTimeStepSize(10.0); - } - } -#endif bool shouldWriteRestartFile() const { @@ -255,10 +224,8 @@ public: { values[velocityXIdx] = inletVelocity_; #if NONISOTHERMAL - const Scalar time = this->timeManager().time() + this->timeManager().timeStepSize(); - // give the system some time so that the pressure can equilibrate, then start the injection of the hot liquid - if(time > 200.0) + if(time() >= 200.0) values[temperatureIdx] = 293.15; #endif } @@ -293,6 +260,17 @@ public: } // \} + void setTimeLoop(TimeLoopPtr timeLoop) + { + timeLoop_ = timeLoop; + if(inletVelocity_ > eps_) + timeLoop_->setCheckPoint({200.0, 210.0}); + } + + Scalar time() const + { + return timeLoop_->time(); + } private: @@ -303,17 +281,17 @@ private: bool isOutlet(const GlobalPosition& globalPos) const { - return globalPos[0] > this->bBoxMax()[0] - eps_; + return globalPos[0] > this->fvGridGeometry().bBoxMax()[0] - eps_; } bool isWall(const GlobalPosition& globalPos) const { - return globalPos[0] > eps_ || globalPos[0] < this->bBoxMax()[0] - eps_; + return globalPos[0] > eps_ || globalPos[0] < this->fvGridGeometry().bBoxMax()[0] - eps_; } Scalar eps_; Scalar inletVelocity_; - std::string name_; + TimeLoopPtr timeLoop_; }; } //end namespace diff --git a/test/freeflow/staggered/closedsystemtestproblem.hh b/test/freeflow/staggered/closedsystemtestproblem.hh index 4c0adf6bf36bb22ec2dd39cfbd9d9c29408e50c2..1175196ebc0cb5d8ae5b81b4587125446fefe5a7 100644 --- a/test/freeflow/staggered/closedsystemtestproblem.hh +++ b/test/freeflow/staggered/closedsystemtestproblem.hh @@ -24,13 +24,15 @@ #ifndef DUMUX_CLOSEDSYSTEM_TEST_PROBLEM_HH #define DUMUX_CLOSEDSYSTEM_TEST_PROBLEM_HH -#include -#include -#include +#include +#include #include #include #include +#include +#include + namespace Dumux { template @@ -52,7 +54,7 @@ SET_PROP(ClosedSystemTestProblem, Fluid) private: typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; public: - typedef FluidSystems::LiquidPhase > type; + typedef FluidSystems::LiquidPhase > type; }; // Set the grid type @@ -66,9 +68,6 @@ SET_BOOL_PROP(ClosedSystemTestProblem, EnableFVGridGeometryCache, true); SET_BOOL_PROP(ClosedSystemTestProblem, EnableGlobalFluxVariablesCache, true); SET_BOOL_PROP(ClosedSystemTestProblem, EnableGlobalVolumeVariablesCache, true); - -// Enable gravity -SET_BOOL_PROP(ClosedSystemTestProblem, ProblemEnableGravity, true); } /*! @@ -78,13 +77,13 @@ SET_BOOL_PROP(ClosedSystemTestProblem, ProblemEnableGravity, true); template class ClosedSystemTestProblem : public NavierStokesProblem { - typedef NavierStokesProblem ParentType; + using ParentType = NavierStokesProblem; - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); // copy some indices for convenience - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); enum { // Grid and world dimension dim = GridView::dimension, @@ -100,17 +99,16 @@ class ClosedSystemTestProblem : public NavierStokesProblem velocityYIdx = Indices::velocityYIdx }; - typedef typename GET_PROP_TYPE(TypeTag, PrimaryVariables) PrimaryVariables; - typedef typename GET_PROP_TYPE(TypeTag, BoundaryTypes) BoundaryTypes; - typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager; + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); - typedef typename GridView::template Codim<0>::Entity Element; - typedef typename GridView::Intersection Intersection; + using Element = typename GridView::template Codim<0>::Entity; + using Intersection = typename GridView::Intersection; - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - typedef typename GET_PROP_TYPE(TypeTag, SubControlVolume) SubControlVolume; + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); - typedef Dune::FieldVector GlobalPosition; + using GlobalPosition = Dune::FieldVector; using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); using FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); @@ -118,27 +116,21 @@ class ClosedSystemTestProblem : public NavierStokesProblem using BoundaryValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); using InitialValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); using SourceValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; public: - ClosedSystemTestProblem(TimeManager &timeManager, const GridView &gridView) - : ParentType(timeManager, gridView), eps_(1e-6) + ClosedSystemTestProblem(std::shared_ptr fvGridGeometry) + : ParentType(fvGridGeometry), eps_(1e-6) { - name_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - std::string, - Problem, - Name); - - lidVelocity_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - Scalar, - Problem, - LidVelocity); + lidVelocity_ = getParam("Problem.LidVelocity"); using CellArray = std::array; - const CellArray numCells = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - CellArray, - Grid, - Cells); - cellSizeX_ = this->bBoxMax()[0] / numCells[0]; + const CellArray numCells = getParam("Grid.Cells"); + cellSizeX_ = this->fvGridGeometry().bBoxMax()[0] / numCells[0]; } /*! @@ -146,15 +138,6 @@ public: */ // \{ - /*! - * \brief The problem name. - * - * This is used as a prefix for files generated by the simulation. - */ - std::string name() const - { - return name_; - } bool shouldWriteRestartFile() const { @@ -220,7 +203,7 @@ public: values[velocityXIdx] = 0.0; values[velocityYIdx] = 0.0; - if(globalPos[1] > this->bBoxMax()[1] - eps_) + if(globalPos[1] > this->fvGridGeometry().bBoxMax()[1] - eps_) values[velocityXIdx] = lidVelocity_; return values; @@ -253,7 +236,6 @@ private: Scalar eps_; Scalar lidVelocity_; - std::string name_; Scalar cellSizeX_; }; } //end namespace diff --git a/test/freeflow/staggered/doneatestproblem.hh b/test/freeflow/staggered/doneatestproblem.hh index ba22ea2b507d174444be45c8317a629f537f1e55..cef435bc64d08b537c7c60f48f9270b6f7e858ec 100644 --- a/test/freeflow/staggered/doneatestproblem.hh +++ b/test/freeflow/staggered/doneatestproblem.hh @@ -26,13 +26,15 @@ #ifndef DUMUX_DONEA_TEST_PROBLEM_HH #define DUMUX_DONEA_TEST_PROBLEM_HH -#include -#include -#include +#include +#include #include #include #include +#include +#include + namespace Dumux { @@ -55,7 +57,7 @@ SET_PROP(DoneaTestProblem, Fluid) private: typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; public: - typedef FluidSystems::LiquidPhase > type; + typedef FluidSystems::LiquidPhase > type; }; // Set the grid type @@ -69,9 +71,6 @@ SET_BOOL_PROP(DoneaTestProblem, EnableFVGridGeometryCache, true); SET_BOOL_PROP(DoneaTestProblem, EnableGlobalFluxVariablesCache, true); SET_BOOL_PROP(DoneaTestProblem, EnableGlobalVolumeVariablesCache, true); -// Enable gravity -SET_BOOL_PROP(DoneaTestProblem, ProblemEnableGravity, true); - #if ENABLE_NAVIERSTOKES SET_BOOL_PROP(DoneaTestProblem, EnableInertiaTerms, true); #else @@ -87,13 +86,13 @@ SET_BOOL_PROP(DoneaTestProblem, EnableInertiaTerms, false); template class DoneaTestProblem : public NavierStokesProblem { - typedef NavierStokesProblem ParentType; + using ParentType = NavierStokesProblem; - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); // copy some indices for convenience - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); enum { // Grid and world dimension dim = GridView::dimension, @@ -109,16 +108,16 @@ class DoneaTestProblem : public NavierStokesProblem velocityYIdx = Indices::velocityYIdx }; - typedef typename GET_PROP_TYPE(TypeTag, BoundaryTypes) BoundaryTypes; - typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager; + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); - typedef typename GridView::template Codim<0>::Entity Element; - typedef typename GridView::Intersection Intersection; + using Element = typename GridView::template Codim<0>::Entity; + using Intersection = typename GridView::Intersection; - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - typedef typename GET_PROP_TYPE(TypeTag, SubControlVolume) SubControlVolume; + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); - typedef Dune::FieldVector GlobalPosition; + using GlobalPosition = Dune::FieldVector; using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); using FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); @@ -126,24 +125,21 @@ class DoneaTestProblem : public NavierStokesProblem using BoundaryValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); using InitialValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); using SourceValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); typename DofTypeIndices::CellCenterIdx cellCenterIdx; typename DofTypeIndices::FaceIdx faceIdx; public: - DoneaTestProblem(TimeManager &timeManager, const GridView &gridView) - : ParentType(timeManager, gridView), eps_(1e-6) + DoneaTestProblem(std::shared_ptr fvGridGeometry) + : ParentType(fvGridGeometry), eps_(1e-6) { - name_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - std::string, - Problem, - Name); - - printL2Error_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - bool, - Problem, - PrintL2Error); + name_ = getParam("Problem.Name"); + + printL2Error_ = getParam("Problem.PrintL2Error"); + + createAnalyticalSolution_(); } /*! @@ -166,13 +162,13 @@ public: return false; } - void postTimeStep() const + void postTimeStep(const SolutionVector& curSol) const { if(printL2Error_) { - const auto l2error = calculateL2Error(); - const int numCellCenterDofs = this->model().numCellCenterDofs(); - const int numFaceDofs = this->model().numFaceDofs(); + const auto l2error = calculateL2Error(curSol); + const int numCellCenterDofs = this->fvGridGeometry().gridView().size(0); + const int numFaceDofs = this->fvGridGeometry().gridView().size(1); std::cout << std::setprecision(8) << "** L2 error (abs/rel) for " << std::setw(6) << numCellCenterDofs << " cc dofs and " << numFaceDofs << " face dofs (total: " << numCellCenterDofs + numFaceDofs << "): " << std::scientific @@ -285,56 +281,15 @@ public: return values; } - /*! - * \brief Adds additional VTK output data to the VTKWriter. Function is called by the output module on every write. - */ - template - void addVtkOutputFields(VtkOutputModule& outputModule) const - { - auto& pressureExact = outputModule.createScalarField("pressureExact", 0); - auto& velocityExact = outputModule.createVectorField("velocityExact", 0); - - auto& scalarFaceVelocityExact = outputModule.createFaceScalarField("scalarFaceVelocityExact"); - auto& vectorFaceVelocityExact = outputModule.createFaceVectorField("vectorFaceVelocityExact"); - - for (const auto& element : elements(this->gridView())) - { - auto fvGeometry = localView(this->model().fvGridGeometry()); - fvGeometry.bindElement(element); - for (auto&& scv : scvs(fvGeometry)) - { - auto ccDofIdx = scv.dofIndex(); - auto ccDofPosition = scv.dofPosition(); - auto analyticalSolutionAtCc = analyticalSolution(ccDofPosition); - - GlobalPosition velocityVector(0.0); - for (auto&& scvf : scvfs(fvGeometry)) - { - auto faceDofIdx = scvf.dofIndex(); - auto faceDofPosition = scvf.center(); - auto dirIdx = scvf.directionIndex(); - auto analyticalSolutionAtFace = analyticalSolution(faceDofPosition); - scalarFaceVelocityExact[faceDofIdx] = analyticalSolutionAtFace[faceIdx][dirIdx]; - - GlobalPosition tmp(0.0); - tmp[dirIdx] = analyticalSolutionAtFace[faceIdx][dirIdx]; - vectorFaceVelocityExact[faceDofIdx] = std::move(tmp); - } - pressureExact[ccDofIdx] = analyticalSolutionAtCc[pressureIdx]; - velocityExact[ccDofIdx] = analyticalSolutionAtCc[faceIdx]; - } - } - } - /*! * \brief Calculate the L2 error between the analytical solution and the numerical approximation. * */ - auto calculateL2Error() const + auto calculateL2Error(const SolutionVector& curSol) const { BoundaryValues sumError(0.0), sumReference(0.0), l2NormAbs(0.0), l2NormRel(0.0); - const int numFaceDofs = this->model().numFaceDofs(); + const int numFaceDofs = this->fvGridGeometry().gridView().size(1); std::vector staggeredVolume(numFaceDofs); std::vector errorVelocity(numFaceDofs); @@ -343,9 +298,9 @@ public: Scalar totalVolume = 0.0; - for (const auto& element : elements(this->gridView())) + for (const auto& element : elements(this->fvGridGeometry().gridView())) { - auto fvGeometry = localView(this->model().fvGridGeometry()); + auto fvGeometry = localView(this->fvGridGeometry()); fvGeometry.bindElement(element); for (auto&& scv : scvs(fvGeometry)) @@ -354,7 +309,7 @@ public: const auto dofIdxCellCenter = scv.dofIndex(); const auto& posCellCenter = scv.dofPosition(); const auto analyticalSolutionCellCenter = analyticalSolution(posCellCenter)[cellCenterIdx]; - const auto numericalSolutionCellCenter = this->model().curSol()[cellCenterIdx][dofIdxCellCenter]; + const auto numericalSolutionCellCenter = curSol[cellCenterIdx][dofIdxCellCenter]; sumError[cellCenterIdx] += squaredDiff_(analyticalSolutionCellCenter, numericalSolutionCellCenter) * scv.volume(); sumReference[cellCenterIdx] += analyticalSolutionCellCenter * analyticalSolutionCellCenter * scv.volume(); totalVolume += scv.volume(); @@ -365,7 +320,7 @@ public: const int dofIdxFace = scvf.dofIndex(); const int dirIdx = scvf.directionIndex(); const auto analyticalSolutionFace = analyticalSolution(scvf.center())[faceIdx][dirIdx]; - const auto numericalSolutionFace = this->model().curSol()[faceIdx][dofIdxFace][momentumBalanceIdx]; + const auto numericalSolutionFace = curSol[faceIdx][dofIdxFace][momentumBalanceIdx]; directionIndex[dofIdxFace] = dirIdx; errorVelocity[dofIdxFace] = squaredDiff_(analyticalSolutionFace, numericalSolutionFace); velocityReference[dofIdxFace] = squaredDiff_(analyticalSolutionFace, 0.0); @@ -398,8 +353,67 @@ public: return std::make_pair(l2NormAbs, l2NormRel); } + /*! + * \brief Returns the analytical solution for the pressure + */ + auto& getAnalyticalPressureSolution() const + { + return analyticalPressure_; + } + + /*! + * \brief Returns the analytical solution for the velocity + */ + auto& getAnalyticalVelocitySolution() const + { + return analyticalVelocity_; + } + + /*! + * \brief Returns the analytical solution for the velocity at the faces + */ + auto& getAnalyticalVelocitySolutionOnFace() const + { + return analyticalVelocityOnFace_; + } private: + + /*! + * \brief Adds additional VTK output data to the VTKWriter. Function is called by the output module on every write. + */ + void createAnalyticalSolution_() + { + analyticalPressure_.resize(this->fvGridGeometry().numCellCenterDofs()); + analyticalVelocity_.resize(this->fvGridGeometry().numCellCenterDofs()); + analyticalVelocityOnFace_.resize(this->fvGridGeometry().numFaceDofs()); + + + for (const auto& element : elements(this->fvGridGeometry().gridView())) + { + auto fvGeometry = localView(this->fvGridGeometry()); + fvGeometry.bindElement(element); + for (auto&& scv : scvs(fvGeometry)) + { + auto ccDofIdx = scv.dofIndex(); + auto ccDofPosition = scv.dofPosition(); + auto analyticalSolutionAtCc = analyticalSolution(ccDofPosition); + + // velocities on faces + for (auto&& scvf : scvfs(fvGeometry)) + { + const auto faceDofIdx = scvf.dofIndex(); + const auto faceDofPosition = scvf.center(); + const auto dirIdx = scvf.directionIndex(); + const auto analyticalSolutionAtFace = analyticalSolution(faceDofPosition); + analyticalVelocityOnFace_[faceDofIdx][dirIdx] = analyticalSolutionAtFace[faceIdx][dirIdx]; + } + + analyticalPressure_[ccDofIdx] = analyticalSolutionAtCc[pressureIdx]; + analyticalVelocity_[ccDofIdx] = analyticalSolutionAtCc[faceIdx]; + } + } + } template T squaredDiff_(const T& a, const T& b) const { @@ -409,6 +423,9 @@ private: Scalar eps_; std::string name_; bool printL2Error_; + std::vector analyticalPressure_; + std::vector analyticalVelocity_; + std::vector analyticalVelocityOnFace_; }; } //end namespace diff --git a/test/freeflow/staggered/kovasznaytestproblem.hh b/test/freeflow/staggered/kovasznaytestproblem.hh index 03f7b6290dfa492da6f16347da31566086722f2c..aeb9379223d02656826e4f78469e1cd6a6cc03b0 100644 --- a/test/freeflow/staggered/kovasznaytestproblem.hh +++ b/test/freeflow/staggered/kovasznaytestproblem.hh @@ -24,13 +24,15 @@ #ifndef DUMUX_KOVASZNAY_TEST_PROBLEM_HH #define DUMUX_KOVASZNAY_TEST_PROBLEM_HH -#include -#include -#include +#include +#include #include #include #include +#include +#include + // solve Navier-Stokes equations #define ENABLE_NAVIERSTOKES 1 @@ -56,7 +58,7 @@ SET_PROP(KovasznayTestProblem, Fluid) private: typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; public: - typedef FluidSystems::LiquidPhase > type; + typedef FluidSystems::LiquidPhase > type; }; // Set the grid type @@ -70,9 +72,6 @@ SET_BOOL_PROP(KovasznayTestProblem, EnableFVGridGeometryCache, true); SET_BOOL_PROP(KovasznayTestProblem, EnableGlobalFluxVariablesCache, true); SET_BOOL_PROP(KovasznayTestProblem, EnableGlobalVolumeVariablesCache, true); -// Enable gravity -SET_BOOL_PROP(KovasznayTestProblem, ProblemEnableGravity, true); - #if ENABLE_NAVIERSTOKES SET_BOOL_PROP(KovasznayTestProblem, EnableInertiaTerms, true); #else @@ -88,13 +87,13 @@ SET_BOOL_PROP(KovasznayTestProblem, EnableInertiaTerms, false); template class KovasznayTestProblem : public NavierStokesProblem { - typedef NavierStokesProblem ParentType; + using ParentType = NavierStokesProblem; - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); // copy some indices for convenience - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); enum { // Grid and world dimension dim = GridView::dimension, @@ -110,16 +109,16 @@ class KovasznayTestProblem : public NavierStokesProblem velocityYIdx = Indices::velocityYIdx }; - typedef typename GET_PROP_TYPE(TypeTag, BoundaryTypes) BoundaryTypes; - typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager; + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); - typedef typename GridView::template Codim<0>::Entity Element; - typedef typename GridView::Intersection Intersection; + using Element = typename GridView::template Codim<0>::Entity; + using Intersection = typename GridView::Intersection; - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - typedef typename GET_PROP_TYPE(TypeTag, SubControlVolume) SubControlVolume; + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); - typedef Dune::FieldVector GlobalPosition; + using GlobalPosition = Dune::FieldVector; using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); using FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); @@ -127,36 +126,29 @@ class KovasznayTestProblem : public NavierStokesProblem using BoundaryValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); using InitialValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); using SourceValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); typename DofTypeIndices::CellCenterIdx cellCenterIdx; typename DofTypeIndices::FaceIdx faceIdx; public: - KovasznayTestProblem(TimeManager &timeManager, const GridView &gridView) - : ParentType(timeManager, gridView), eps_(1e-6) + KovasznayTestProblem(std::shared_ptr fvGridGeometry) + : ParentType(fvGridGeometry), eps_(1e-6) { - name_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - std::string, - Problem, - Name); + printL2Error_ = getParam("Problem.PrintL2Error"); - printL2Error_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - bool, - Problem, - PrintL2Error); - - kinematicViscosity_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, Scalar, Problem, LiquidKinematicViscosity); + kinematicViscosity_ = getParam("Component.LiquidKinematicViscosity", 1.0); Scalar reynoldsNumber = 1.0 / kinematicViscosity_; lambda_ = 0.5 * reynoldsNumber - std::sqrt(reynoldsNumber * reynoldsNumber * 0.25 + 4.0 * M_PI * M_PI); using CellArray = std::array; - const CellArray numCells = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - CellArray, - Grid, - Cells); - cellSizeX_ = this->bBoxMax()[0] / numCells[0]; + const auto numCells = getParam("Grid.Cells"); + + cellSizeX_ = this->fvGridGeometry().bBoxMax()[0] / numCells[0]; + + createAnalyticalSolution_(); } /*! @@ -164,28 +156,18 @@ public: */ // \{ - /*! - * \brief The problem name. - * - * This is used as a prefix for files generated by the simulation. - */ - std::string name() const - { - return name_; - } - bool shouldWriteRestartFile() const { return false; } - void postTimeStep() const + void postTimeStep(const SolutionVector& curSol) const { if(printL2Error_) { - const auto l2error = calculateL2Error(); - const int numCellCenterDofs = this->model().numCellCenterDofs(); - const int numFaceDofs = this->model().numFaceDofs(); + const auto l2error = calculateL2Error(curSol); + const int numCellCenterDofs = this->fvGridGeometry().gridView().size(0); + const int numFaceDofs = this->fvGridGeometry().gridView().size(1); std::cout << std::setprecision(8) << "** L2 error (abs/rel) for " << std::setw(6) << numCellCenterDofs << " cc dofs and " << numFaceDofs << " face dofs (total: " << numCellCenterDofs + numFaceDofs << "): " << std::scientific @@ -294,56 +276,16 @@ public: return values; } - /*! - * \brief Adds additional VTK output data to the VTKWriter. Function is called by the output module on every write. - */ - template - void addVtkOutputFields(VtkOutputModule& outputModule) const - { - auto& pressureExact = outputModule.createScalarField("pressureExact", 0); - auto& velocityExact = outputModule.createVectorField("velocityExact", 0); - - auto& scalarFaceVelocityExact = outputModule.createFaceScalarField("scalarFaceVelocityExact"); - auto& vectorFaceVelocityExact = outputModule.createFaceVectorField("vectorFaceVelocityExact"); - - for (const auto& element : elements(this->gridView())) - { - auto fvGeometry = localView(this->model().fvGridGeometry()); - fvGeometry.bindElement(element); - for (auto&& scv : scvs(fvGeometry)) - { - auto ccDofIdx = scv.dofIndex(); - auto ccDofPosition = scv.dofPosition(); - auto analyticalSolutionAtCc = dirichletAtPos(ccDofPosition); - - GlobalPosition velocityVector(0.0); - for (auto&& scvf : scvfs(fvGeometry)) - { - auto faceDofIdx = scvf.dofIndex(); - auto faceDofPosition = scvf.center(); - auto dirIdx = scvf.directionIndex(); - auto analyticalSolutionAtFace = dirichletAtPos(faceDofPosition); - scalarFaceVelocityExact[faceDofIdx] = analyticalSolutionAtFace[faceIdx][dirIdx]; - - GlobalPosition tmp(0.0); - tmp[dirIdx] = analyticalSolutionAtFace[faceIdx][dirIdx]; - vectorFaceVelocityExact[faceDofIdx] = std::move(tmp); - } - pressureExact[ccDofIdx] = analyticalSolutionAtCc[pressureIdx]; - velocityExact[ccDofIdx] = analyticalSolutionAtCc[faceIdx]; - } - } - } /*! * \brief Calculate the L2 error between the analytical solution and the numerical approximation. * */ - auto calculateL2Error() const + auto calculateL2Error(const SolutionVector& curSol) const { BoundaryValues sumError(0.0), sumReference(0.0), l2NormAbs(0.0), l2NormRel(0.0); - const int numFaceDofs = this->model().numFaceDofs(); + const int numFaceDofs = this->fvGridGeometry().gridView().size(1); std::vector staggeredVolume(numFaceDofs); std::vector errorVelocity(numFaceDofs); @@ -352,9 +294,9 @@ public: Scalar totalVolume = 0.0; - for (const auto& element : elements(this->gridView())) + for (const auto& element : elements(this->fvGridGeometry().gridView())) { - auto fvGeometry = localView(this->model().fvGridGeometry()); + auto fvGeometry = localView(this->fvGridGeometry()); fvGeometry.bindElement(element); for (auto&& scv : scvs(fvGeometry)) @@ -363,7 +305,7 @@ public: const auto dofIdxCellCenter = scv.dofIndex(); const auto& posCellCenter = scv.dofPosition(); const auto analyticalSolutionCellCenter = dirichletAtPos(posCellCenter)[cellCenterIdx]; - const auto numericalSolutionCellCenter = this->model().curSol()[cellCenterIdx][dofIdxCellCenter]; + const auto numericalSolutionCellCenter = curSol[cellCenterIdx][dofIdxCellCenter]; sumError[cellCenterIdx] += squaredDiff_(analyticalSolutionCellCenter, numericalSolutionCellCenter) * scv.volume(); sumReference[cellCenterIdx] += analyticalSolutionCellCenter * analyticalSolutionCellCenter * scv.volume(); totalVolume += scv.volume(); @@ -374,7 +316,7 @@ public: const int dofIdxFace = scvf.dofIndex(); const int dirIdx = scvf.directionIndex(); const auto analyticalSolutionFace = dirichletAtPos(scvf.center())[faceIdx][dirIdx]; - const auto numericalSolutionFace = this->model().curSol()[faceIdx][dofIdxFace][momentumBalanceIdx]; + const auto numericalSolutionFace = curSol[faceIdx][dofIdxFace][momentumBalanceIdx]; directionIndex[dofIdxFace] = dirIdx; errorVelocity[dofIdxFace] = squaredDiff_(analyticalSolutionFace, numericalSolutionFace); velocityReference[dofIdxFace] = squaredDiff_(analyticalSolutionFace, 0.0); @@ -407,7 +349,67 @@ public: return std::make_pair(l2NormAbs, l2NormRel); } + /*! + * \brief Returns the analytical solution for the pressure + */ + auto& getAnalyticalPressureSolution() const + { + return analyticalPressure_; + } + + /*! + * \brief Returns the analytical solution for the velocity + */ + auto& getAnalyticalVelocitySolution() const + { + return analyticalVelocity_; + } + + /*! + * \brief Returns the analytical solution for the velocity at the faces + */ + auto& getAnalyticalVelocitySolutionOnFace() const + { + return analyticalVelocityOnFace_; + } + private: + + /*! + * \brief Adds additional VTK output data to the VTKWriter. Function is called by the output module on every write. + */ + void createAnalyticalSolution_() + { + analyticalPressure_.resize(this->fvGridGeometry().numCellCenterDofs()); + analyticalVelocity_.resize(this->fvGridGeometry().numCellCenterDofs()); + analyticalVelocityOnFace_.resize(this->fvGridGeometry().numFaceDofs()); + + for (const auto& element : elements(this->fvGridGeometry().gridView())) + { + auto fvGeometry = localView(this->fvGridGeometry()); + fvGeometry.bindElement(element); + for (auto&& scv : scvs(fvGeometry)) + { + auto ccDofIdx = scv.dofIndex(); + auto ccDofPosition = scv.dofPosition(); + auto analyticalSolutionAtCc = analyticalSolution(ccDofPosition); + + // velocities on faces + for (auto&& scvf : scvfs(fvGeometry)) + { + const auto faceDofIdx = scvf.dofIndex(); + const auto faceDofPosition = scvf.center(); + const auto dirIdx = scvf.directionIndex(); + const auto analyticalSolutionAtFace = analyticalSolution(faceDofPosition); + analyticalVelocityOnFace_[faceDofIdx][dirIdx] = analyticalSolutionAtFace[faceIdx][dirIdx]; + } + + analyticalPressure_[ccDofIdx] = analyticalSolutionAtCc[pressureIdx]; + analyticalVelocity_[ccDofIdx] = analyticalSolutionAtCc[faceIdx]; + } + } + } + template T squaredDiff_(const T& a, const T& b) const { @@ -416,16 +418,18 @@ private: bool isLowerLeftCell_(const GlobalPosition& globalPos) const { - return globalPos[0] < (this->bBoxMin()[0] + 0.5*cellSizeX_ + eps_); + return globalPos[0] < (this->fvGridGeometry().bBoxMin()[0] + 0.5*cellSizeX_ + eps_); } Scalar eps_; Scalar cellSizeX_; - std::string name_; Scalar kinematicViscosity_; Scalar lambda_; bool printL2Error_; + std::vector analyticalPressure_; + std::vector analyticalVelocity_; + std::vector analyticalVelocityOnFace_; }; } //end namespace diff --git a/test/freeflow/staggered/test_channel.cc b/test/freeflow/staggered/test_channel.cc index 9e6fef38637fbc07d1e08565410264afab838d7a..7abdc98014aab97181f7765f8bea24e453a63171 100644 --- a/test/freeflow/staggered/test_channel.cc +++ b/test/freeflow/staggered/test_channel.cc @@ -21,9 +21,36 @@ * * \brief Channel flow test for the staggered grid (Navier-)Stokes model */ -#include + #include + + #include + #include + + #include + #include + #include + #include + #include + #include "channeltestproblem.hh" -#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include + +#include /*! * \brief Provides an interface for customizing error messages associated with @@ -57,8 +84,178 @@ void usage(const char *progName, const std::string &errorMsg) } } -int main(int argc, char** argv) +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(ChannelTestProblem); + + // 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, usage); + + // 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(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared(fvGridGeometry); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam("TimeLoop.TEnd"); + const auto maxDivisions = getParam("TimeLoop.MaxTimeStepDivisions"); + const auto maxDt = getParam("TimeLoop.MaxTimeStepSize"); + auto dt = getParam("TimeLoop.DtInitial"); + + // check if we are about to restart a previously interrupted simulation + Scalar restartTime = 0; + if (Parameters::getTree().hasKey("Restart") || Parameters::getTree().hasKey("TimeLoop.Restart")) + restartTime = getParam("TimeLoop.Restart"); + + // instantiate time loop + auto timeLoop = std::make_shared>(restartTime, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + problem->setTimeLoop(timeLoop); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + const auto numDofsCellCenter = leafGridView.size(0); + const auto numDofsFace = leafGridView.size(1); + SolutionVector x; + x[cellCenterIdx].resize(numDofsCellCenter); + x[faceIdx].resize(numDofsFace); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + StaggeredVtkOutputModule vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + vtkWriter.write(0.0); + + // the assembler with time loop for instationary problem + using Assembler = StaggeredFVAssembler; + auto assembler = std::make_shared(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = Dumux::UMFPackBackend; + auto linearSolver = std::make_shared(); + + // the non-linear solver + using NewtonController = StaggeredNewtonController; + using NewtonMethod = Dumux::NewtonMethod; + auto newtonController = std::make_shared(leafGridView.comm(), timeLoop); + NewtonMethod nonLinearSolver(newtonController, assembler, linearSolver); + + // time loop + timeLoop->start(); do + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + // try solving the non-linear system + 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 (...) { - typedef TTAG(ChannelTestProblem) ProblemTypeTag; - return Dumux::start(argc, argv, usage); + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; } diff --git a/test/freeflow/staggered/test_channel_navierstokes.input b/test/freeflow/staggered/test_channel_navierstokes.input index 029488f679174adafb91f730a61db66df2819187..af468071b904a736c15de0204ad2813c55002413 100644 --- a/test/freeflow/staggered/test_channel_navierstokes.input +++ b/test/freeflow/staggered/test_channel_navierstokes.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 1 # [s] TEnd = 2 # [s] @@ -17,4 +17,5 @@ MaxSteps = 10 MaxRelativeShift = 1e-5 [Vtk] +AddVelocity = true WriteFaceData = false diff --git a/test/freeflow/staggered/test_channel_stokes.input b/test/freeflow/staggered/test_channel_stokes.input index 6dad824637992bb6c79ba9354da81bbb4a97a60e..916011989126437567270b98e9597ec0095163ad 100644 --- a/test/freeflow/staggered/test_channel_stokes.input +++ b/test/freeflow/staggered/test_channel_stokes.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 1 # [s] TEnd = 2 # [s] @@ -9,7 +9,6 @@ Cells = 100 50 [Problem] Name = test_channel_stokes # name passed to the output routines InletVelocity = 1 -LiquidDensity = 1 EnableGravity = false [ Newton ] @@ -17,4 +16,5 @@ MaxSteps = 10 MaxRelativeShift = 1e-8 [Vtk] +AddVelocity = true WriteFaceData = false diff --git a/test/freeflow/staggered/test_channel_stokesni_conduction.input b/test/freeflow/staggered/test_channel_stokesni_conduction.input index dc10ce8083ee6777197c8b6e922ffb697b4f135e..ebc6488b7575d34694ddd7cd38548610b2409494 100644 --- a/test/freeflow/staggered/test_channel_stokesni_conduction.input +++ b/test/freeflow/staggered/test_channel_stokesni_conduction.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 1e7 # [s] TEnd = 1e8 # [s] @@ -16,4 +16,5 @@ MaxSteps = 10 MaxRelativeShift = 1e-8 [Vtk] +AddVelocity = true WriteFaceData = false diff --git a/test/freeflow/staggered/test_channel_stokesni_convection.input b/test/freeflow/staggered/test_channel_stokesni_convection.input index b8021327078eecccfd379462aa10bceb85d3d497..dbaf6ddb5d40950afbfb651c7d8714d52e647f92 100644 --- a/test/freeflow/staggered/test_channel_stokesni_convection.input +++ b/test/freeflow/staggered/test_channel_stokesni_convection.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 50 # [s] TEnd = 250 # [s] @@ -16,4 +16,5 @@ MaxSteps = 10 MaxRelativeShift = 1e-8 [Vtk] +AddVelocity = true WriteFaceData = false diff --git a/test/freeflow/staggered/test_closedsystem.cc b/test/freeflow/staggered/test_closedsystem.cc index 49a22573a6b194e34a799be9126cd1bad6fe8c76..b1cfa45e039181737563b8974bfbb080d7309312 100644 --- a/test/freeflow/staggered/test_closedsystem.cc +++ b/test/freeflow/staggered/test_closedsystem.cc @@ -19,11 +19,38 @@ /*! * \file * - * \brief test for the one-phase CC model + * \brief Test for the staggered grid Stokes model in a closed domain */ -#include + #include + + #include + #include + + #include + #include + #include + #include + #include + #include "closedsystemtestproblem.hh" -#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include + +#include /*! * \brief Provides an interface for customizing error messages associated with @@ -57,8 +84,177 @@ void usage(const char *progName, const std::string &errorMsg) } } -int main(int argc, char** argv) +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(ClosedSystemTestProblem); + + // 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, usage); + + // 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(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared(fvGridGeometry); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + const auto numDofsCellCenter = leafGridView.size(0); + const auto numDofsFace = leafGridView.size(1); + SolutionVector x; + x[cellCenterIdx].resize(numDofsCellCenter); + x[faceIdx].resize(numDofsFace); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam("TimeLoop.TEnd"); + const auto maxDivisions = getParam("TimeLoop.MaxTimeStepDivisions"); + const auto maxDt = getParam("TimeLoop.MaxTimeStepSize"); + auto dt = getParam("TimeLoop.DtInitial"); + + // check if we are about to restart a previously interrupted simulation + Scalar restartTime = 0; + if (Parameters::getTree().hasKey("Restart") || Parameters::getTree().hasKey("TimeLoop.Restart")) + restartTime = getParam("TimeLoop.Restart"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + StaggeredVtkOutputModule 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>(restartTime, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = StaggeredFVAssembler; + auto assembler = std::make_shared(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = Dumux::UMFPackBackend; + auto linearSolver = std::make_shared(); + + // the non-linear solver + using NewtonController = StaggeredNewtonController; + using NewtonMethod = Dumux::NewtonMethod; + auto newtonController = std::make_shared(leafGridView.comm(), timeLoop); + NewtonMethod nonLinearSolver(newtonController, assembler, linearSolver); + + // time loop + timeLoop->start(); do + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + // try solving the non-linear system + 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 (...) { - typedef TTAG(ClosedSystemTestProblem) ProblemTypeTag; - return Dumux::start(argc, argv, usage); + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; } diff --git a/test/freeflow/staggered/test_donea.cc b/test/freeflow/staggered/test_donea.cc index c471bfe00ffcf174ea5225f00593f1f7a0ee19db..a5dfb91d0ccbff8658f5bb48a21409ffe598b06f 100644 --- a/test/freeflow/staggered/test_donea.cc +++ b/test/freeflow/staggered/test_donea.cc @@ -21,9 +21,38 @@ * * \brief Test for the staggered grid Navier-Stokes model (Kovasznay 1947) */ -#include + + #include + + #include + #include + + #include + #include + #include + #include + #include + + #include "doneatestproblem.hh" -#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include + +#include /*! * \brief Provides an interface for customizing error messages associated with @@ -57,8 +86,183 @@ void usage(const char *progName, const std::string &errorMsg) } } -int main(int argc, char** argv) +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(DoneaTestProblem); + + // 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, usage); + + // 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(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared(fvGridGeometry); + + // the solution vector + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + const auto numDofsCellCenter = leafGridView.size(0); + const auto numDofsFace = leafGridView.size(1); + SolutionVector x; + x[cellCenterIdx].resize(numDofsCellCenter); + x[faceIdx].resize(numDofsFace); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam("TimeLoop.TEnd"); + const auto maxDivisions = getParam("TimeLoop.MaxTimeStepDivisions"); + const auto maxDt = getParam("TimeLoop.MaxTimeStepSize"); + auto dt = getParam("TimeLoop.DtInitial"); + + // check if we are about to restart a previously interrupted simulation + Scalar restartTime = 0; + if (Parameters::getTree().hasKey("Restart") || Parameters::getTree().hasKey("TimeLoop.Restart")) + restartTime = getParam("TimeLoop.Restart"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + StaggeredVtkOutputModule vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + vtkWriter.addField(problem->getAnalyticalPressureSolution(), "pressureExact", 1); + vtkWriter.addField(problem->getAnalyticalVelocitySolution(), "velocityExact", GridView::dimensionworld); + vtkWriter.addFaceField(problem->getAnalyticalVelocitySolutionOnFace(), "faceVelocityExact"); + vtkWriter.write(0.0); + + // instantiate time loop + auto timeLoop = std::make_shared>(restartTime, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = StaggeredFVAssembler; + auto assembler = std::make_shared(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = Dumux::UMFPackBackend; + auto linearSolver = std::make_shared(); + + // the non-linear solver + using NewtonController = StaggeredNewtonController; + using NewtonMethod = Dumux::NewtonMethod; + auto newtonController = std::make_shared(leafGridView.comm(), timeLoop); + NewtonMethod nonLinearSolver(newtonController, assembler, linearSolver); + + // time loop + timeLoop->start(); do + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + // try solving the non-linear system + 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(); + + problem->postTimeStep(x); + + // 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 (...) { - typedef TTAG(DoneaTestProblem) ProblemTypeTag; - return Dumux::start(argc, argv, usage); + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; } diff --git a/test/freeflow/staggered/test_hydrostaticpressure.input b/test/freeflow/staggered/test_hydrostaticpressure.input index 16c989a251993a6134c8652e84328ad5cf262290..a48eb5fb26b694193d612146c8322f686880890b 100644 --- a/test/freeflow/staggered/test_hydrostaticpressure.input +++ b/test/freeflow/staggered/test_hydrostaticpressure.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 1 # [s] TEnd = 2 # [s] @@ -9,12 +9,15 @@ Cells = 64 64 [Problem] Name = test_hydrostaticpressure # name passed to the output routines LidVelocity = 0 -LiquidDensity = 1000 EnableGravity = true +[Component] +LiquidDensity = 1000 + [ Newton ] MaxSteps = 10 MaxRelativeShift = 1e-5 [Vtk] +AddVelocity = true WriteFaceData = false diff --git a/test/freeflow/staggered/test_kovasznay.cc b/test/freeflow/staggered/test_kovasznay.cc index 67d5014aecc205d41e4d4b85be9ba526d8ae57e8..216877cb32a8406dd9663640344c80ac80453aa1 100644 --- a/test/freeflow/staggered/test_kovasznay.cc +++ b/test/freeflow/staggered/test_kovasznay.cc @@ -21,9 +21,37 @@ * * \brief Test for the staggered grid Stokes model (Donea et al., 2003) */ -#include + #include + + #include + #include + + #include + #include + #include + #include + #include + + #include "kovasznaytestproblem.hh" -#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include + +#include /*! * \brief Provides an interface for customizing error messages associated with @@ -57,8 +85,183 @@ void usage(const char *progName, const std::string &errorMsg) } } -int main(int argc, char** argv) +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(KovasznayTestProblem); + + // 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, usage); + + // 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(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared(fvGridGeometry); + + // the solution vector + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + const auto numDofsCellCenter = leafGridView.size(0); + const auto numDofsFace = leafGridView.size(1); + SolutionVector x; + x[cellCenterIdx].resize(numDofsCellCenter); + x[faceIdx].resize(numDofsFace); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam("TimeLoop.TEnd"); + const auto maxDivisions = getParam("TimeLoop.MaxTimeStepDivisions"); + const auto maxDt = getParam("TimeLoop.MaxTimeStepSize"); + auto dt = getParam("TimeLoop.DtInitial"); + + // check if we are about to restart a previously interrupted simulation + Scalar restartTime = 0; + if (Parameters::getTree().hasKey("Restart") || Parameters::getTree().hasKey("TimeLoop.Restart")) + restartTime = getParam("TimeLoop.Restart"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + StaggeredVtkOutputModule vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + vtkWriter.addField(problem->getAnalyticalPressureSolution(), "pressureExact", 1); + vtkWriter.addField(problem->getAnalyticalVelocitySolution(), "velocityExact", GridView::dimensionworld); + vtkWriter.addFaceField(problem->getAnalyticalVelocitySolutionOnFace(), "faceVelocityExact"); + vtkWriter.write(0.0); + + // instantiate time loop + auto timeLoop = std::make_shared>(restartTime, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = StaggeredFVAssembler; + auto assembler = std::make_shared(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = Dumux::UMFPackBackend; + auto linearSolver = std::make_shared(); + + // the non-linear solver + using NewtonController = StaggeredNewtonController; + using NewtonMethod = Dumux::NewtonMethod; + auto newtonController = std::make_shared(leafGridView.comm(), timeLoop); + NewtonMethod nonLinearSolver(newtonController, assembler, linearSolver); + + // time loop + timeLoop->start(); do + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + // try solving the non-linear system + 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(); + + problem->postTimeStep(x); + + // 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 (...) { - typedef TTAG(KovasznayTestProblem) ProblemTypeTag; - return Dumux::start(argc, argv, usage); + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; } diff --git a/test/freeflow/staggered/test_liddrivencavity.input b/test/freeflow/staggered/test_liddrivencavity.input index 4242e85fd9092d2473266668ea3cfe12b1090885..3f9baeb9cd3c14e16dc91100d5e78c0a6d8f8a57 100644 --- a/test/freeflow/staggered/test_liddrivencavity.input +++ b/test/freeflow/staggered/test_liddrivencavity.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 1 # [s] TEnd = 2 # [s] @@ -17,4 +17,5 @@ MaxSteps = 10 MaxRelativeShift = 1e-5 [Vtk] +AddVelocity = true WriteFaceData = false diff --git a/test/freeflow/staggered/test_kovasznay.input b/test/freeflow/staggered/test_navierstokes_kovasznay.input similarity index 81% rename from test/freeflow/staggered/test_kovasznay.input rename to test/freeflow/staggered/test_navierstokes_kovasznay.input index 02e71ddbcfddbc52a61fc94e1257309e66f6d2d6..1bcc53d179651fdccc276bb87a722200ea1a70ea 100644 --- a/test/freeflow/staggered/test_kovasznay.input +++ b/test/freeflow/staggered/test_navierstokes_kovasznay.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 1 # [s] TEnd = 2 # [s] @@ -9,11 +9,17 @@ Cells = 50 50 [Problem] Name = test_kovasznay # name passed to the output routines -LiquidDensity = 1 EnableGravity = false -LiquidKinematicViscosity = 0.025 PrintL2Error = false +[Component] +LiquidDensity = 1 +LiquidKinematicViscosity = 0.025 + [ Newton ] MaxSteps = 10 MaxRelativeShift = 1e-5 + +[Vtk] +WriteFaceData = false +AddVelocity = true diff --git a/test/freeflow/staggered/test_donea.input b/test/freeflow/staggered/test_stokes_donea.input similarity index 74% rename from test/freeflow/staggered/test_donea.input rename to test/freeflow/staggered/test_stokes_donea.input index 59941d981064392712132f82fdbf37cf8aee7950..d58cec3d52810dafda5446a0cef97ff6e0f337d8 100644 --- a/test/freeflow/staggered/test_donea.input +++ b/test/freeflow/staggered/test_stokes_donea.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 1 # [s] TEnd = 2 # [s] @@ -8,10 +8,15 @@ Cells = 40 40 [Problem] Name = test_donea # name passed to the output routines -LiquidDensity = 1 EnableGravity = false PrintL2Error = false +LiquidKinematicViscosity = 1 +LiquidDensity = 1 [ Newton ] MaxSteps = 10 MaxRelativeShift = 1e-5 + +[Vtk] +WriteFaceData = false +AddVelocity = true diff --git a/test/freeflow/staggerednc/CMakeLists.txt b/test/freeflow/staggerednc/CMakeLists.txt index 4c9e540c1ccc78c45f84f2a364d1fa36fbfc4d2a..abc636af5d293de24144a3243635520e7c5d2a5b 100644 --- a/test/freeflow/staggerednc/CMakeLists.txt +++ b/test/freeflow/staggerednc/CMakeLists.txt @@ -1,47 +1,52 @@ add_input_file_links() -add_dumux_test(test_densitydrivenflow test_densitydrivenflow test_densitydrivenflow.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/stokes2c-densitydriven-reference.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_densitydrivenflow-00025.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_densitydrivenflow") +dune_add_test(NAME test_stokes2c_densitydrivenflow + SOURCES test_densitydrivenflow.cc + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/stokes2c-densitydriven-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_densitydrivenflow-00029.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_stokes2c_densitydrivenflow") -add_dumux_test(test_purediffusion test_channel test_channel.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/stokes2c-purediffusion.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_purediffusion-00013.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_channel test_purediffusion.input" - --zeroThreshold {"velocity_liquid \(m/s\)":1e-22}) +add_executable(test_stokes2c EXCLUDE_FROM_ALL test_channel.cc) -add_dumux_test(test_advection test_channel test_channel.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/stokes2c-advection.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_advection-00009.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_channel test_advection.input") +dune_add_test(NAME test_stokes2c_purediffusion + TARGET test_stokes2c + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/stokes2c-purediffusion.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_purediffusion-00013.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_stokes2c test_stokes2c_purediffusion.input" + --zeroThreshold {"velocity_liquid \(m/s\)":1e-22}) -add_dumux_test(test_stokes2cni_advection test_stokes2cni test_channel.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/stokes2cni-advection.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_stokes2cni_advection-00009.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_stokes2cni test_stokes2cni_advection.input") -target_compile_definitions(test_stokes2cni PUBLIC "NONISOTHERMAL=1") +dune_add_test(NAME test_stokes2c_advection + TARGET test_stokes2c + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/stokes2c-advection.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_advection-00009.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_stokes2c test_stokes2c_advection.input") -add_dumux_test(test_stokes2cni_diffusion test_stokes2cni test_channel.cc - python ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - --script fuzzy - --files ${CMAKE_SOURCE_DIR}/test/references/stokes2cni-diffusion.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_stokes2cni_diffusion-00014.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_stokes2cni test_stokes2cni_diffusion.input") +add_executable(test_stokes2cni EXCLUDE_FROM_ALL test_channel.cc) +target_compile_definitions(test_stokes2cni PUBLIC "NONISOTHERMAL=1") +dune_add_test(NAME test_stokes2cni_advection + TARGET test_stokes2cni + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/stokes2cni-advection.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_stokes2cni_advection-00009.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}//test_stokes2cni test_stokes2cni_advection.input") -#install sources -install(FILES -test_densitydrivenflow.cc -densityflowproblem.hh -test_channel.cc -channeltestproblem.hh -DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/test/freeflow/staggerednc) +dune_add_test(NAME test_stokes2cni_diffusion + TARGET test_stokes2cni + CMAKE_GUARD HAVE_UMFPACK + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/stokes2cni-diffusion.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_stokes2cni_diffusion-00014.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}//test_stokes2cni test_stokes2cni_diffusion.input") diff --git a/test/freeflow/staggerednc/channeltestproblem.hh b/test/freeflow/staggerednc/channeltestproblem.hh index f0dfab82aba0a41e447a483f8d26b251f960679d..b4bc517ad41e7fefb83bf7a4a07b82ff39ea7352 100644 --- a/test/freeflow/staggerednc/channeltestproblem.hh +++ b/test/freeflow/staggerednc/channeltestproblem.hh @@ -24,13 +24,13 @@ #ifndef DUMUX_CHANNEL_NC_TEST_PROBLEM_HH #define DUMUX_CHANNEL_NC_TEST_PROBLEM_HH -#include -#include -#include +#include +#include #include - #include +#include + namespace Dumux { template @@ -80,7 +80,6 @@ SET_BOOL_PROP(ChannelNCTestProblem, EnableGlobalFluxVariablesCache, true); SET_BOOL_PROP(ChannelNCTestProblem, EnableGlobalVolumeVariablesCache, true); // Enable gravity -SET_BOOL_PROP(ChannelNCTestProblem, ProblemEnableGravity, true); SET_BOOL_PROP(ChannelNCTestProblem, UseMoles, true); // #if ENABLE_NAVIERSTOKES @@ -97,14 +96,13 @@ SET_BOOL_PROP(ChannelNCTestProblem, EnableInertiaTerms, true); template class ChannelNCTestProblem : public NavierStokesProblem { - typedef NavierStokesProblem ParentType; - - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + using ParentType = NavierStokesProblem; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); // copy some indices for convenience - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); enum { // Grid and world dimension dim = GridView::dimension, @@ -126,17 +124,15 @@ class ChannelNCTestProblem : public NavierStokesProblem transportCompIdx = 1/*FluidSystem::wCompIdx*/ }; - typedef typename GET_PROP_TYPE(TypeTag, BoundaryTypes) BoundaryTypes; - typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager; + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); - typedef typename GridView::template Codim<0>::Entity Element; - typedef typename GridView::Intersection Intersection; + using Element = typename GridView::template Codim<0>::Entity; - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - typedef typename GET_PROP_TYPE(TypeTag, SubControlVolume) SubControlVolume; - - typedef Dune::FieldVector GlobalPosition; + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); + using GlobalPosition = Dune::FieldVector; using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); using FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); @@ -145,20 +141,17 @@ class ChannelNCTestProblem : public NavierStokesProblem using InitialValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); using SourceValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); + using TimeLoopPtr = std::shared_ptr>; + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + public: - ChannelNCTestProblem(TimeManager &timeManager, const GridView &gridView) - : ParentType(timeManager, gridView) + ChannelNCTestProblem(std::shared_ptr fvGridGeometry) + : ParentType(fvGridGeometry), eps_(1e-6) { - name_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - std::string, - Problem, - Name); - - inletVelocity_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - Scalar, - Problem, - InletVelocity); + inletVelocity_ = getParam("Problem.InletVelocity"); FluidSystem::init(); + deltaP_.resize(this->fvGridGeometry().numCellCenterDofs()); } /*! @@ -166,15 +159,6 @@ public: */ // \{ - /*! - * \brief The problem name. - * - * This is used as a prefix for files generated by the simulation. - */ - std::string name() const - { - return name_; - } bool shouldWriteRestartFile() const { @@ -257,15 +241,16 @@ public: { BoundaryValues values = initialAtPos(globalPos); - const Scalar time = this->timeManager().time() + this->timeManager().timeStepSize(); - // give the system some time so that the pressure can equilibrate, then start the injection of the tracer - if(isInlet(globalPos) && time > 20.0) + if(isInlet(globalPos)) { - values[transportCompIdx] = 1e-3; + if(time() >= 10.0 || inletVelocity_ < eps_) + { + values[transportCompIdx] = 1e-3; #if NONISOTHERMAL values[temperatureIdx] = 293.15; #endif + } } return values; @@ -293,8 +278,8 @@ public: #endif // parabolic velocity profile - values[velocityXIdx] = inletVelocity_*(globalPos[1] - this->bBoxMin()[1])*(this->bBoxMax()[1] - globalPos[1]) - / (0.25*(this->bBoxMax()[1] - this->bBoxMin()[1])*(this->bBoxMax()[1] - this->bBoxMin()[1])); + values[velocityXIdx] = inletVelocity_*(globalPos[1] - this->fvGridGeometry().bBoxMin()[1])*(this->fvGridGeometry().bBoxMax()[1] - globalPos[1]) + / (0.25*(this->fvGridGeometry().bBoxMax()[1] - this->fvGridGeometry().bBoxMin()[1])*(this->fvGridGeometry().bBoxMax()[1] - this->fvGridGeometry().bBoxMin()[1])); values[velocityYIdx] = 0.0; @@ -304,29 +289,39 @@ public: /*! * \brief Adds additional VTK output data to the VTKWriter. Function is called by the output module on every write. */ - template - void addVtkOutputFields(VtkOutputModule& outputModule) const + void calculateDeltaP(const GridVariables& gridVariables, const SolutionVector& sol) { - auto& deltaP = outputModule.createScalarField("deltaP", 0); - - for (const auto& element : elements(this->gridView())) + for (const auto& element : elements(this->fvGridGeometry().gridView())) { - auto fvGeometry = localView(this->model().fvGridGeometry()); + auto fvGeometry = localView(this->fvGridGeometry()); fvGeometry.bindElement(element); for (auto&& scv : scvs(fvGeometry)) { auto ccDofIdx = scv.dofIndex(); - auto elemVolVars = localView(this->model().curGlobalVolVars()); - elemVolVars.bind(element, fvGeometry, this->model().curSol()); + auto elemVolVars = localView(gridVariables.curGridVolVars()); + elemVolVars.bind(element, fvGeometry, sol); - deltaP[ccDofIdx] = elemVolVars[scv].pressure() - 1.1e5; + deltaP_[ccDofIdx] = elemVolVars[scv].pressure() - 1.1e5; } } } + auto& getDeltaP() const + { return deltaP_; } + // \} + void setTimeLoop(TimeLoopPtr timeLoop) + { + timeLoop_ = timeLoop; + } + + Scalar time() const + { + return timeLoop_->time(); + } + private: bool isInlet(const GlobalPosition& globalPos) const @@ -336,17 +331,18 @@ private: bool isOutlet(const GlobalPosition& globalPos) const { - return globalPos[0] > this->bBoxMax()[0] - eps_; + return globalPos[0] > this->fvGridGeometry().bBoxMax()[0] - eps_; } bool isWall(const GlobalPosition& globalPos) const { - return globalPos[0] > eps_ || globalPos[0] < this->bBoxMax()[0] - eps_; + return globalPos[0] > eps_ || globalPos[0] < this->fvGridGeometry().bBoxMax()[0] - eps_; } - const Scalar eps_{1e-6}; + const Scalar eps_; Scalar inletVelocity_; - std::string name_; + TimeLoopPtr timeLoop_; + std::vector deltaP_; }; } //end namespace diff --git a/test/freeflow/staggerednc/densityflowproblem.hh b/test/freeflow/staggerednc/densityflowproblem.hh index fb43203f87681284fecab3eb66f7054f603b1c84..2125ce387fcdb30133129910627f5e094ed1316e 100644 --- a/test/freeflow/staggerednc/densityflowproblem.hh +++ b/test/freeflow/staggerednc/densityflowproblem.hh @@ -24,13 +24,13 @@ #ifndef DUMUX_DENSITY_FLOW_NC_TEST_PROBLEM_HH #define DUMUX_DENSITY_FLOW_NC_TEST_PROBLEM_HH -#include -#include -#include +#include +#include #include - #include +#include + namespace Dumux { template @@ -74,8 +74,6 @@ SET_BOOL_PROP(DensityDrivenFlowProblem, EnableFVGridGeometryCache, true); SET_BOOL_PROP(DensityDrivenFlowProblem, EnableGlobalFluxVariablesCache, true); SET_BOOL_PROP(DensityDrivenFlowProblem, EnableGlobalVolumeVariablesCache, true); -// Enable gravity -SET_BOOL_PROP(DensityDrivenFlowProblem, ProblemEnableGravity, true); SET_BOOL_PROP(DensityDrivenFlowProblem, UseMoles, true); #if ENABLE_NAVIERSTOKES @@ -92,14 +90,13 @@ SET_BOOL_PROP(DensityDrivenFlowProblem, EnableInertiaTerms, false); template class DensityDrivenFlowProblem : public NavierStokesProblem { - typedef NavierStokesProblem ParentType; - - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + using ParentType = NavierStokesProblem; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); // copy some indices for convenience - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); enum { // Grid and world dimension dim = GridView::dimension, @@ -117,17 +114,13 @@ class DensityDrivenFlowProblem : public NavierStokesProblem transportCompIdx = 1/*FluidSystem::wCompIdx*/ }; - typedef typename GET_PROP_TYPE(TypeTag, BoundaryTypes) BoundaryTypes; - typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager; - - typedef typename GridView::template Codim<0>::Entity Element; - typedef typename GridView::Intersection Intersection; - - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - typedef typename GET_PROP_TYPE(TypeTag, SubControlVolume) SubControlVolume; - - typedef Dune::FieldVector GlobalPosition; + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using Element = typename GridView::template Codim<0>::Entity; + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); + using GlobalPosition = Dune::FieldVector; using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables); using FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables); @@ -136,21 +129,21 @@ class DensityDrivenFlowProblem : public NavierStokesProblem using InitialValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); using SourceValues = typename GET_PROP_TYPE(TypeTag, BoundaryValues); + using TimeLoopPtr = std::shared_ptr>; + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + public: - DensityDrivenFlowProblem(TimeManager &timeManager, const GridView &gridView) - : ParentType(timeManager, gridView) + DensityDrivenFlowProblem(std::shared_ptr fvGridGeometry) + : ParentType(fvGridGeometry), eps_(1e-6) { - name_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - std::string, - Problem, - Name); - - useWholeLength_ = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, - bool, - Problem, - UseWholeLength); - + useWholeLength_ = getParam("Problem.UseWholeLength"); FluidSystem::init(); + deltaRho_.resize(this->fvGridGeometry().numCellCenterDofs()); + + using CellArray = std::array; + const CellArray numCells = getParam("Grid.Cells"); + cellSizeX_ = this->fvGridGeometry().bBoxMax()[0] / numCells[0]; } /*! @@ -158,16 +151,6 @@ public: */ // \{ - /*! - * \brief The problem name. - * - * This is used as a prefix for files generated by the simulation. - */ - std::string name() const - { - return name_; - } - bool shouldWriteRestartFile() const { return false; @@ -211,10 +194,10 @@ public: values.setOutflow(transportEqIdx); values.setOutflow(massBalanceIdx); - if(globalPos[1] < eps_) + if(isLowerLeftCell_(globalPos)) values.setDirichletCell(massBalanceIdx); - if(globalPos[1] > this->bBoxMax()[1] - eps_) + if(globalPos[1] > this->fvGridGeometry().bBoxMax()[1] - eps_) { if(useWholeLength_) values.setDirichlet(transportEqIdx); @@ -270,33 +253,40 @@ public: /*! * \brief Adds additional VTK output data to the VTKWriter. Function is called by the output module on every write. */ - template - void addVtkOutputFields(VtkOutputModule& outputModule) const + void calculateDeltaRho(const GridVariables& gridVariables, const SolutionVector& sol) { - auto& delRho = outputModule.createScalarField("delRho", 0); - - for (const auto& element : elements(this->gridView())) + for (const auto& element : elements(this->fvGridGeometry().gridView())) { - auto fvGeometry = localView(this->model().fvGridGeometry()); + auto fvGeometry = localView(this->fvGridGeometry()); fvGeometry.bindElement(element); for (auto&& scv : scvs(fvGeometry)) { auto ccDofIdx = scv.dofIndex(); - auto elemVolVars = localView(this->model().curGlobalVolVars()); - elemVolVars.bind(element, fvGeometry, this->model().curSol()); + auto elemVolVars = localView(gridVariables.curGridVolVars()); + elemVolVars.bind(element, fvGeometry, sol); - delRho[ccDofIdx] = elemVolVars[scv].density() - 999.694; + deltaRho_[ccDofIdx] = elemVolVars[scv].density() - 999.694; } } } + auto& getDeltaRho() const + { return deltaRho_; } + + + bool isLowerLeftCell_(const GlobalPosition& globalPos) const + { + return globalPos[0] < (0.5*cellSizeX_ + eps_) && globalPos[1] < eps_; + } + // \} private: - const Scalar eps_{1e-6}; - std::string name_; + const Scalar eps_; bool useWholeLength_; + std::vector deltaRho_; + Scalar cellSizeX_; }; } //end namespace diff --git a/test/freeflow/staggerednc/test_channel.cc b/test/freeflow/staggerednc/test_channel.cc index ab0ed70cf89a1a5a71d0c6cf3fa2aa9ee2819fc7..d52e2bf02554637321655d6893f57f7ebce41e38 100644 --- a/test/freeflow/staggerednc/test_channel.cc +++ b/test/freeflow/staggerednc/test_channel.cc @@ -21,9 +21,36 @@ * * \brief Test for the staggered grid multi-component (Navier-)Stokes model */ -#include + #include + + #include + #include + + #include + #include + #include + #include + #include + #include "channeltestproblem.hh" -#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include + +#include /*! * \brief Provides an interface for customizing error messages associated with @@ -57,8 +84,181 @@ void usage(const char *progName, const std::string &errorMsg) } } -int main(int argc, char** argv) +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(ChannelNCTestProblem); + + // 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, usage); + + // 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(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared(fvGridGeometry); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam("TimeLoop.TEnd"); + const auto maxDivisions = getParam("TimeLoop.MaxTimeStepDivisions"); + const auto maxDt = getParam("TimeLoop.MaxTimeStepSize"); + auto dt = getParam("TimeLoop.DtInitial"); + + // check if we are about to restart a previously interrupted simulation + Scalar restartTime = 0; + if (Parameters::getTree().hasKey("Restart") || Parameters::getTree().hasKey("TimeLoop.Restart")) + restartTime = getParam("TimeLoop.Restart"); + + // instantiate time loop + auto timeLoop = std::make_shared>(restartTime, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + problem->setTimeLoop(timeLoop); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + const auto numDofsCellCenter = leafGridView.size(0); + const auto numDofsFace = leafGridView.size(1); + SolutionVector x; + x[cellCenterIdx].resize(numDofsCellCenter); + x[faceIdx].resize(numDofsFace); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + StaggeredVtkOutputModule vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + vtkWriter.addField(problem->getDeltaP(), "deltaP"); + vtkWriter.write(0.0); + + // the assembler with time loop for instationary problem + using Assembler = StaggeredFVAssembler; + auto assembler = std::make_shared(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = Dumux::UMFPackBackend; + auto linearSolver = std::make_shared(); + + // the non-linear solver + using NewtonController = StaggeredNewtonController; + using NewtonMethod = Dumux::NewtonMethod; + auto newtonController = std::make_shared(leafGridView.comm(), timeLoop); + NewtonMethod nonLinearSolver(newtonController, assembler, linearSolver); + + // time loop + timeLoop->start(); do + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + // try solving the non-linear system + 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(); + + problem->calculateDeltaP(*gridVariables, x); + + // 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 (...) { - typedef TTAG(ChannelNCTestProblem) ProblemTypeTag; - return Dumux::start(argc, argv, usage); + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; } diff --git a/test/freeflow/staggerednc/test_densitydrivenflow.cc b/test/freeflow/staggerednc/test_densitydrivenflow.cc index cdc785170e9267f585e35b0bd1d49b1cf979a1c1..e01de523114b60d564b2e13fe8922285a09c7d35 100644 --- a/test/freeflow/staggerednc/test_densitydrivenflow.cc +++ b/test/freeflow/staggerednc/test_densitydrivenflow.cc @@ -21,9 +21,36 @@ * * \brief Test for the staggered grid multi-component (Navier-)Stokes model */ -#include + #include + + #include + #include + + #include + #include + #include + #include + #include + #include "densityflowproblem.hh" -#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include + +#include /*! * \brief Provides an interface for customizing error messages associated with @@ -57,8 +84,180 @@ void usage(const char *progName, const std::string &errorMsg) } } -int main(int argc, char** argv) +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(DensityDrivenFlowProblem); + + // 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, usage); + + // 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(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared(fvGridGeometry); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam("TimeLoop.TEnd"); + const auto maxDivisions = getParam("TimeLoop.MaxTimeStepDivisions"); + const auto maxDt = getParam("TimeLoop.MaxTimeStepSize"); + auto dt = getParam("TimeLoop.DtInitial"); + + // check if we are about to restart a previously interrupted simulation + Scalar restartTime = 0; + if (Parameters::getTree().hasKey("Restart") || Parameters::getTree().hasKey("TimeLoop.Restart")) + restartTime = getParam("TimeLoop.Restart"); + + // instantiate time loop + auto timeLoop = std::make_shared>(restartTime, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices); + typename DofTypeIndices::CellCenterIdx cellCenterIdx; + typename DofTypeIndices::FaceIdx faceIdx; + const auto numDofsCellCenter = leafGridView.size(0); + const auto numDofsFace = leafGridView.size(1); + SolutionVector x; + x[cellCenterIdx].resize(numDofsCellCenter); + x[faceIdx].resize(numDofsFace); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + StaggeredVtkOutputModule vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + vtkWriter.addField(problem->getDeltaRho(), "deltaRho"); + vtkWriter.write(0.0); + + // the assembler with time loop for instationary problem + using Assembler = StaggeredFVAssembler; + auto assembler = std::make_shared(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = Dumux::UMFPackBackend; + auto linearSolver = std::make_shared(); + + // the non-linear solver + using NewtonController = StaggeredNewtonController; + using NewtonMethod = Dumux::NewtonMethod; + auto newtonController = std::make_shared(leafGridView.comm(), timeLoop); + NewtonMethod nonLinearSolver(newtonController, assembler, linearSolver); + + // time loop + timeLoop->start(); do + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + // try solving the non-linear system + 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(); + + problem->calculateDeltaRho(*gridVariables, x); + + // 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 (...) { - typedef TTAG(DensityDrivenFlowProblem) ProblemTypeTag; - return Dumux::start(argc, argv, usage); + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; } diff --git a/test/freeflow/staggerednc/test_advection.input b/test/freeflow/staggerednc/test_stokes2c_advection.input similarity index 89% rename from test/freeflow/staggerednc/test_advection.input rename to test/freeflow/staggerednc/test_stokes2c_advection.input index 082aba44684b6ea6e3a872cc5d8e340e40d5a963..36687b2ce05ab869daa635cf5239d7d8a25af99a 100644 --- a/test/freeflow/staggerednc/test_advection.input +++ b/test/freeflow/staggerednc/test_stokes2c_advection.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 5 # [s] TEnd = 400 # [s] @@ -16,4 +16,5 @@ MaxSteps = 10 MaxRelativeShift = 1e-8 [Vtk] +AddVelocity = true WriteFaceData = false diff --git a/test/freeflow/staggerednc/test_densitydrivenflow.input b/test/freeflow/staggerednc/test_stokes2c_densitydrivenflow.input similarity index 85% rename from test/freeflow/staggerednc/test_densitydrivenflow.input rename to test/freeflow/staggerednc/test_stokes2c_densitydrivenflow.input index 63bb48f348f55877042f58655a78bb8e54d7c447..c0a7283460e94e13c09a2a5c694e7a353fb36cbb 100644 --- a/test/freeflow/staggerednc/test_densitydrivenflow.input +++ b/test/freeflow/staggerednc/test_stokes2c_densitydrivenflow.input @@ -1,7 +1,7 @@ -[TimeManager] +[TimeLoop] DtInitial = 1e-2 # [s] # MaxTimeStepSize = 1e1 -TEnd = 1.5e3 # [s] +TEnd = 5e3 # [s] [Grid] UpperRight = 1 1 @@ -17,4 +17,5 @@ MaxSteps = 10 MaxRelativeShift = 1e-8 [Vtk] +AddVelocity = true WriteFaceData = false diff --git a/test/freeflow/staggerednc/test_purediffusion.input b/test/freeflow/staggerednc/test_stokes2c_purediffusion.input similarity index 90% rename from test/freeflow/staggerednc/test_purediffusion.input rename to test/freeflow/staggerednc/test_stokes2c_purediffusion.input index d93f57399475b65ae5d52fe98bb88d892b248dc0..bb365a1671bd4d476d1cd8a6371e85e9c11fb8d0 100644 --- a/test/freeflow/staggerednc/test_purediffusion.input +++ b/test/freeflow/staggerednc/test_stokes2c_purediffusion.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 1e6 # [s] TEnd = 1e9 # [s] @@ -16,4 +16,5 @@ MaxSteps = 10 MaxRelativeShift = 1e-8 [Vtk] +AddVelocity = true WriteFaceData = false diff --git a/test/freeflow/staggerednc/test_stokes2cni_advection.input b/test/freeflow/staggerednc/test_stokes2cni_advection.input index 2d84bb39d80a0ebf8f4113387979e9ecbfabe0e7..30ce7393b849304801745e0b5a2af7d52089920c 100644 --- a/test/freeflow/staggerednc/test_stokes2cni_advection.input +++ b/test/freeflow/staggerednc/test_stokes2cni_advection.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 5 # [s] TEnd = 400 # [s] @@ -16,4 +16,5 @@ MaxSteps = 10 MaxRelativeShift = 1e-8 [Vtk] +AddVelocity = true WriteFaceData = false diff --git a/test/freeflow/staggerednc/test_stokes2cni_diffusion.input b/test/freeflow/staggerednc/test_stokes2cni_diffusion.input index 086b1be76d0bfbe0f335673d6c194d8269a1cba7..ec46ddaf8e7b06ac342df09bcfd8991732af21cb 100644 --- a/test/freeflow/staggerednc/test_stokes2cni_diffusion.input +++ b/test/freeflow/staggerednc/test_stokes2cni_diffusion.input @@ -1,4 +1,4 @@ -[TimeManager] +[TimeLoop] DtInitial = 1e6 # [s] TEnd = 1e9 # [s] @@ -16,4 +16,5 @@ MaxSteps = 10 MaxRelativeShift = 1e-8 [Vtk] +AddVelocity = true WriteFaceData = false diff --git a/test/references/stokes2c-densitydriven-reference.vtu b/test/references/stokes2c-densitydriven-reference.vtu index eec8a3218b211b7e992ebb61fd909c4175d9c55e..5477d08c89d8dad9099c01db8dbe7f941becfb4e 100644 --- a/test/references/stokes2c-densitydriven-reference.vtu +++ b/test/references/stokes2c-densitydriven-reference.vtu @@ -2,8 +2,8 @@ - - + + 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 110000 @@ -286,6 +286,12 @@ 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 + 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 + 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 + 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 999.694 + 999.694 999.694 999.694 999.694 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 + 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.694 + 999.694 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 @@ -310,14 +316,12 @@ 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 - 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 - 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 - 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 - 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 - 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 - 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 - 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 + 999.692 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.692 999.692 999.692 999.692 999.692 999.692 999.693 999.693 999.693 999.693 999.692 999.692 + 999.692 999.692 999.692 999.692 999.693 999.693 999.693 999.693 999.693 999.693 999.693 999.693 + 999.693 999.693 999.693 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 + 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.693 + 999.693 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 @@ -338,20 +342,15 @@ 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 + 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.691 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 - 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 - 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 - 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.691 999.691 999.691 999.691 - 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.692 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 + 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.692 999.692 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 - 999.691 999.691 999.691 999.691 999.691 999.691 999.692 999.692 999.692 999.692 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 - 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.692 - 999.692 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 @@ -369,15 +368,15 @@ 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 - 999.691 999.691 999.691 999.691 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 - 999.69 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 - 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.69 - 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 + 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 + 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 + 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 + 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 + 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.691 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.691 999.691 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 - 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.691 999.691 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 @@ -399,10 +398,11 @@ 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 - 999.69 999.69 999.69 999.69 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 - 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.69 999.69 - 999.69 999.69 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 - 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 + 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 + 999.69 999.69 999.69 999.69 999.689 999.689 999.69 999.69 999.69 999.69 999.69 999.69 + 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 + 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 999.69 + 999.69 999.69 999.69 999.69 999.69 999.69 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.69 999.69 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 999.689 @@ -413,57 +413,57 @@ 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 0.999999 0.999999 0.999999 0.999999 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 0.999999 0.999999 0.999999 0.999999 0.999999 0.999999 0.999999 + 0.999999 0.999999 0.999999 0.999999 0.999999 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 0.999999 0.999999 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 0.999999 + 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 0.999999 + 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 0.999999 + 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 0.999999 + 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.999999 @@ -476,18 +476,18 @@ 1 1 1 1 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 0.999999 0.999999 - 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 0.999999 + 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 0.999999 0.999999 0.999999 0.999999 1 1 1 1 1 1 + 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 0.999999 0.999999 0.999999 0.999999 1 1 + 1 1 1 1 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 0.999999 0.999999 - 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 0.999999 + 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 @@ -543,7 +543,7 @@ 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 0.999999 0.999999 0.999998 0.999998 0.999999 0.999999 1 + 1 1 1 1 0.999999 0.999999 0.999999 0.999998 0.999998 0.999999 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 @@ -672,8 +672,8 @@ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 0.999999 + 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.999999 0.999999 1 1 1 1 1 1 1 @@ -684,678 +684,678 @@ 1 1 1 1 - 0 0 0 0 0 0 0 0 0 0 0 2.85555e-15 - 3.42666e-14 2.43436e-13 1.17006e-12 4.2148e-12 1.19455e-11 2.73908e-11 5.14531e-11 7.89078e-11 7.89086e-11 5.14538e-11 2.73912e-11 1.19458e-11 - 4.21515e-12 1.17006e-12 2.43436e-13 3.42666e-14 2.85555e-15 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 7.13888e-16 4.99722e-15 3.96208e-14 2.73062e-13 1.32105e-12 4.89228e-12 1.4538e-11 3.57169e-11 7.38903e-11 1.29737e-10 1.92301e-10 - 1.92303e-10 1.29738e-10 7.38903e-11 3.57169e-11 1.45383e-11 4.89228e-12 1.32069e-12 2.73062e-13 3.96208e-14 4.99722e-15 7.13888e-16 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1.42778e-15 8.56666e-15 5.42555e-14 3.16966e-13 1.6448e-12 6.57063e-12 2.11332e-11 5.64714e-11 - 1.28135e-10 2.50302e-10 4.23164e-10 6.15146e-10 6.1515e-10 4.23166e-10 2.50304e-10 1.28137e-10 5.64721e-11 2.11336e-11 6.57027e-12 1.6448e-12 - 3.16609e-13 5.38986e-14 8.56666e-15 1.42778e-15 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1.78472e-15 1.32069e-14 7.6386e-14 3.91568e-13 1.82934e-12 - 7.92095e-12 2.75443e-11 7.95011e-11 1.95187e-10 4.14904e-10 7.72279e-10 1.26377e-09 1.8057e-09 1.80571e-09 1.26378e-09 7.72284e-10 4.14907e-10 - 1.95189e-10 7.95022e-11 2.75443e-11 7.92095e-12 1.8297e-12 3.91925e-13 7.6386e-14 1.32069e-14 1.78472e-15 0 0 0 - 0 0 0 0 0 0 0 0 0 3.56944e-16 3.2125e-15 1.96319e-14 - 1.06369e-13 5.16855e-13 2.24304e-12 8.84258e-12 3.21503e-11 9.98473e-11 2.63079e-10 6.00303e-10 1.20447e-09 2.14612e-09 3.40742e-09 4.7886e-09 - 4.78863e-09 3.40744e-09 2.14613e-09 1.20448e-09 6.00308e-10 2.63081e-10 9.98483e-11 3.21507e-11 8.84222e-12 2.24304e-12 5.16855e-13 1.06369e-13 - 1.96319e-14 3.2125e-15 3.56944e-16 0 0 0 0 0 0 0 0 0 - 3.56944e-16 3.92638e-15 2.39153e-14 1.33854e-13 6.4357e-13 2.72455e-12 1.03243e-11 3.54817e-11 1.12068e-10 3.15669e-10 7.67383e-10 1.63925e-09 - 3.11904e-09 5.33398e-09 8.22561e-09 1.13693e-08 1.13694e-08 8.22566e-09 5.33401e-09 3.11906e-09 1.63926e-09 7.67389e-10 3.15671e-10 1.1207e-10 - 3.5482e-11 1.03243e-11 2.72455e-12 6.4357e-13 1.33854e-13 2.42722e-14 3.92638e-15 3.56944e-16 0 0 0 0 - 0 0 0 3.56944e-16 3.2125e-15 2.49861e-14 1.44919e-13 7.18885e-13 3.08221e-12 1.16499e-11 3.93838e-11 1.20614e-10 - 3.38682e-10 8.74483e-10 1.97634e-09 3.97294e-09 7.19283e-09 1.18282e-08 1.77286e-08 2.40956e-08 2.40957e-08 1.77287e-08 1.18283e-08 7.19287e-09 - 3.97296e-09 1.97636e-09 8.7449e-10 3.38685e-10 1.20615e-10 3.93841e-11 1.16499e-11 3.08221e-12 7.18528e-13 1.44562e-13 2.49861e-14 3.2125e-15 - 3.56944e-16 0 0 0 0 0 3.56944e-16 2.49861e-15 1.99889e-14 1.29928e-13 6.89259e-13 3.0972e-12 - 1.20504e-11 4.13348e-11 1.268e-10 3.52134e-10 8.95319e-10 2.13318e-09 4.50939e-09 8.5682e-09 1.48046e-08 2.34541e-08 3.41988e-08 4.57135e-08 - 4.57137e-08 3.4199e-08 2.34542e-08 1.48047e-08 8.56824e-09 4.50941e-09 2.13319e-09 8.95326e-10 3.52136e-10 1.26801e-10 4.13348e-11 1.20504e-11 - 3.0972e-12 6.89259e-13 1.29928e-13 1.99889e-14 2.49861e-15 3.56944e-16 0 0 0 3.56944e-16 1.07083e-15 1.17792e-14 - 9.28055e-14 5.51122e-13 2.69279e-12 1.11274e-11 3.98482e-11 1.25878e-10 3.55725e-10 9.10046e-10 2.13041e-09 4.61181e-09 9.16909e-09 1.65371e-08 - 2.73575e-08 4.18517e-08 5.94588e-08 7.82363e-08 7.82367e-08 5.94591e-08 4.18519e-08 2.73577e-08 1.65372e-08 9.16914e-09 4.61184e-09 2.13042e-09 - 9.10052e-10 3.55728e-10 1.25878e-10 3.98485e-11 1.11277e-11 2.69243e-12 5.51479e-13 9.24485e-14 1.21361e-14 1.07083e-15 3.56944e-16 0 - 0 3.56944e-16 5.35416e-15 4.89013e-14 3.45879e-13 1.91215e-12 8.65696e-12 3.31901e-11 1.10349e-10 3.23851e-10 8.50894e-10 2.02561e-09 - 4.41651e-09 8.91099e-09 1.67529e-08 2.88084e-08 4.57963e-08 6.78506e-08 9.41361e-08 1.22136e-07 1.22136e-07 9.41364e-08 6.78509e-08 4.57965e-08 - 2.88085e-08 1.6753e-08 8.91104e-09 4.41653e-09 2.02563e-09 8.509e-10 3.23853e-10 1.10349e-10 3.31904e-11 8.65696e-12 1.91215e-12 3.45879e-13 - 4.89013e-14 4.99722e-15 3.56944e-16 0 0 1.07083e-15 1.78472e-14 1.6241e-13 1.07583e-12 5.55869e-12 2.35301e-11 8.44101e-11 - 2.62805e-10 7.22936e-10 1.7824e-09 3.98684e-09 8.17886e-09 1.55453e-08 2.77881e-08 4.57766e-08 7.0212e-08 1.0109e-07 1.37353e-07 1.76135e-07 - 1.76135e-07 1.37354e-07 1.0109e-07 7.02123e-08 4.57768e-08 2.77882e-08 1.55454e-08 8.1789e-09 3.98686e-09 1.78241e-09 7.22941e-10 2.62807e-10 - 8.44108e-11 2.35301e-11 5.55905e-12 1.07619e-12 1.6241e-13 1.74903e-14 1.07083e-15 0 0 3.56944e-15 5.24708e-14 4.55818e-13 - 2.84235e-12 1.38202e-11 5.50993e-11 1.8631e-10 5.47263e-10 1.42205e-09 3.31705e-09 7.03269e-09 1.37033e-08 2.47869e-08 4.2323e-08 6.71201e-08 - 9.97517e-08 1.40076e-07 1.86972e-07 2.37635e-07 2.37636e-07 1.86973e-07 1.40076e-07 9.9752e-08 6.71204e-08 4.23232e-08 2.4787e-08 1.37033e-08 - 7.03272e-09 3.31707e-09 1.42206e-09 5.47266e-10 1.86311e-10 5.50997e-11 1.38202e-11 2.84235e-12 4.55818e-13 5.24708e-14 3.56944e-15 0 - 3.56944e-16 9.99443e-15 1.33497e-13 1.1001e-12 6.50174e-12 2.99669e-11 1.13323e-10 3.63766e-10 1.01556e-09 2.51201e-09 5.58854e-09 1.13263e-08 - 2.1147e-08 3.67338e-08 5.98833e-08 9.18686e-08 1.32842e-07 1.82586e-07 2.40169e-07 3.03442e-07 3.03443e-07 2.4017e-07 1.82586e-07 1.32843e-07 - 9.18689e-08 5.98835e-08 3.67339e-08 2.11471e-08 1.13264e-08 5.58857e-09 2.51203e-09 1.01557e-09 3.63769e-10 1.13324e-10 2.99672e-11 6.50209e-12 - 1.1001e-12 1.33497e-13 9.99443e-15 3.56944e-16 7.13888e-16 2.35583e-14 2.95907e-13 2.32228e-12 1.30888e-11 5.75455e-11 2.07679e-10 6.36689e-10 - 1.69945e-09 4.02476e-09 8.58819e-09 1.67287e-08 3.00853e-08 5.04538e-08 7.95898e-08 1.1865e-07 1.6757e-07 2.26162e-07 2.94017e-07 3.70407e-07 - 3.70408e-07 2.94017e-07 2.26162e-07 1.6757e-07 1.1865e-07 7.959e-08 5.04539e-08 3.00854e-08 1.67288e-08 8.58823e-09 4.02478e-09 1.69946e-09 - 6.36693e-10 2.07681e-10 5.75462e-11 1.30891e-11 2.32228e-12 2.95907e-13 2.35583e-14 7.13888e-16 1.78472e-15 4.74736e-14 5.77892e-13 4.35329e-12 - 2.35512e-11 9.93918e-11 3.44477e-10 1.01498e-09 2.60667e-09 5.9484e-09 1.22518e-08 2.30795e-08 4.02167e-08 6.54604e-08 1.00364e-07 1.4598e-07 - 2.02032e-07 2.68496e-07 3.45881e-07 4.35819e-07 4.3582e-07 3.45882e-07 2.68497e-07 2.02032e-07 1.4598e-07 1.00364e-07 6.54606e-08 4.02168e-08 - 2.30796e-08 1.22519e-08 5.94843e-09 2.60669e-09 1.01499e-09 3.44479e-10 9.93925e-11 2.35512e-11 4.35329e-12 5.77536e-13 4.74736e-14 1.78472e-15 - 3.56944e-15 8.56666e-14 1.00765e-12 7.33948e-12 3.83497e-11 1.56319e-10 5.23471e-10 1.49133e-09 3.70704e-09 8.19853e-09 1.63906e-08 3.00188e-08 - 5.09411e-08 8.08768e-08 1.21122e-07 1.72485e-07 2.34562e-07 3.07639e-07 3.93595e-07 4.97543e-07 4.97544e-07 3.93595e-07 3.0764e-07 2.34562e-07 - 1.72485e-07 1.21122e-07 8.0877e-08 5.09412e-08 3.00189e-08 1.63906e-08 8.19857e-09 3.70705e-09 1.49133e-09 5.23474e-10 1.56319e-10 3.83501e-11 - 7.33948e-12 1.00765e-12 8.53096e-14 3.56944e-15 4.99722e-15 1.3778e-13 1.58697e-12 1.1242e-11 5.70907e-11 2.26145e-10 7.3618e-10 2.0401e-09 - 4.93728e-09 1.0643e-08 2.07653e-08 3.7164e-08 6.17064e-08 9.59644e-08 1.40908e-07 1.97019e-07 2.6382e-07 3.42051e-07 4.35476e-07 5.54014e-07 - 5.54015e-07 4.35477e-07 3.42052e-07 2.63821e-07 1.9702e-07 1.40909e-07 9.59646e-08 6.17066e-08 3.71641e-08 2.07653e-08 1.0643e-08 4.9373e-09 - 2.04011e-09 7.36184e-10 2.26147e-10 5.70907e-11 1.12416e-11 1.58733e-12 1.3778e-13 5.35416e-15 7.49583e-15 2.0096e-13 2.27409e-12 1.57716e-11 - 7.8336e-11 3.03435e-10 9.66165e-10 2.62023e-09 6.21021e-09 1.31214e-08 2.51151e-08 4.41332e-08 7.19999e-08 1.10078e-07 1.58949e-07 2.187e-07 - 2.88793e-07 3.70571e-07 4.70269e-07 6.04148e-07 6.04149e-07 4.70269e-07 3.70572e-07 2.88793e-07 2.187e-07 1.58949e-07 1.10078e-07 7.2e-08 - 4.41333e-08 2.51152e-08 1.31214e-08 6.21023e-09 2.62024e-09 9.6617e-10 3.03436e-10 7.83367e-11 1.57712e-11 2.27445e-12 2.0096e-13 7.49583e-15 - 1.03514e-14 2.6628e-13 2.9837e-12 2.03915e-11 9.96941e-11 3.80013e-10 1.19094e-09 3.18018e-09 7.42505e-09 1.54618e-08 2.91795e-08 5.057e-08 - 8.13737e-08 1.22693e-07 1.74658e-07 2.36879e-07 3.08747e-07 3.92354e-07 4.97062e-07 6.47261e-07 6.47262e-07 4.97062e-07 3.92355e-07 3.08747e-07 - 2.3688e-07 1.74659e-07 1.22693e-07 8.13739e-08 5.05702e-08 2.91796e-08 1.54618e-08 7.42508e-09 3.1802e-09 1.19095e-09 3.80014e-10 9.96945e-11 - 2.03911e-11 2.98334e-12 2.66637e-13 9.99443e-15 1.17792e-14 3.21964e-13 3.59764e-12 2.43996e-11 1.18185e-10 4.4617e-10 1.38502e-09 3.66424e-09 - 8.47768e-09 1.74947e-08 3.27143e-08 5.61583e-08 8.94555e-08 1.33404e-07 1.87616e-07 2.51116e-07 3.2319e-07 4.06825e-07 5.15237e-07 6.83005e-07 - 6.83006e-07 5.15238e-07 4.06825e-07 3.2319e-07 2.51116e-07 1.87616e-07 1.33404e-07 8.94557e-08 5.61585e-08 3.27144e-08 1.74947e-08 8.4777e-09 - 3.66425e-09 1.38503e-09 4.46172e-10 1.18185e-10 2.43996e-11 3.59764e-12 3.22321e-13 1.17792e-14 1.2493e-14 3.55516e-13 3.99706e-12 2.70835e-11 - 1.3082e-10 4.92321e-10 1.52362e-09 4.019e-09 9.27004e-09 1.90641e-08 3.55015e-08 6.06281e-08 9.59463e-08 1.41911e-07 1.97546e-07 2.61153e-07 - 3.31859e-07 4.13669e-07 5.2445e-07 7.11327e-07 7.11328e-07 5.2445e-07 4.13669e-07 3.31859e-07 2.61153e-07 1.97546e-07 1.41911e-07 9.59465e-08 - 6.06283e-08 3.55016e-08 1.90641e-08 9.27007e-09 4.01902e-09 1.52363e-09 4.92323e-10 1.3082e-10 2.70838e-11 3.99706e-12 3.55873e-13 1.2493e-14 - 1.21361e-14 3.58372e-13 4.09201e-12 2.78991e-11 1.35271e-10 5.1082e-10 1.58649e-09 4.19981e-09 9.71854e-09 2.00354e-08 3.73538e-08 6.3754e-08 - 1.00613e-07 1.48012e-07 2.04317e-07 2.6692e-07 3.34733e-07 4.12847e-07 5.24627e-07 7.32455e-07 7.32456e-07 5.24628e-07 4.12847e-07 3.34733e-07 - 2.66921e-07 2.04318e-07 1.48012e-07 1.00613e-07 6.37541e-08 3.73539e-08 2.00355e-08 9.71857e-09 4.19982e-09 1.5865e-09 5.10823e-10 1.35272e-10 - 2.78995e-11 4.09201e-12 3.58372e-13 1.17792e-14 9.99443e-15 3.29102e-13 3.85428e-12 2.6633e-11 1.30473e-10 4.97648e-10 1.56154e-09 4.17685e-09 - 9.76201e-09 2.0304e-08 3.8123e-08 6.53697e-08 1.0333e-07 1.51698e-07 2.08047e-07 2.68547e-07 3.32052e-07 4.04615e-07 5.15975e-07 7.46858e-07 - 7.46859e-07 5.15976e-07 4.04615e-07 3.32052e-07 2.68548e-07 2.08047e-07 1.51699e-07 1.0333e-07 6.53698e-08 3.81231e-08 2.0304e-08 9.76204e-09 - 4.17686e-09 1.56155e-09 4.9765e-10 1.30474e-10 2.66334e-11 3.85428e-12 3.29102e-13 9.99443e-15 7.49583e-15 2.73776e-13 3.32922e-12 2.34841e-11 - 1.16984e-10 4.536e-10 1.44779e-09 3.94066e-09 9.36889e-09 1.97981e-08 3.7684e-08 6.5296e-08 1.03871e-07 1.52708e-07 2.08569e-07 2.6635e-07 - 3.24306e-07 3.89512e-07 4.98953e-07 7.55202e-07 7.55203e-07 4.98954e-07 3.89513e-07 3.24306e-07 2.6635e-07 2.0857e-07 1.52708e-07 1.03871e-07 - 6.52961e-08 3.76841e-08 1.97981e-08 9.36892e-09 3.94067e-09 1.4478e-09 4.53602e-10 1.16984e-10 2.34837e-11 3.32886e-12 2.73419e-13 7.85277e-15 - 4.64027e-15 2.04529e-13 2.62175e-12 1.9029e-11 9.69838e-11 3.84646e-10 1.25713e-09 3.50693e-09 8.54624e-09 1.84915e-08 3.59501e-08 6.33816e-08 - 1.02071e-07 1.51006e-07 2.06161e-07 2.60797e-07 3.12188e-07 3.68325e-07 4.74229e-07 7.58279e-07 7.5828e-07 4.7423e-07 3.68326e-07 3.12188e-07 - 2.60798e-07 2.06161e-07 1.51006e-07 1.02072e-07 6.33817e-08 3.59501e-08 1.84915e-08 8.54626e-09 3.50694e-09 1.25714e-09 3.84648e-10 9.69846e-11 - 1.90294e-11 2.62175e-12 2.04529e-13 4.64027e-15 2.85555e-15 1.44562e-13 1.92821e-12 1.4277e-11 7.39595e-11 3.0072e-10 1.01394e-09 2.91939e-09 - 7.34986e-09 1.64219e-08 3.28947e-08 5.95093e-08 9.77604e-08 1.46459e-07 2.00768e-07 2.52444e-07 2.96507e-07 3.42021e-07 4.42621e-07 7.56942e-07 - 7.56943e-07 4.42621e-07 3.42021e-07 2.96507e-07 2.52445e-07 2.00768e-07 1.46459e-07 9.77606e-08 5.95094e-08 3.28948e-08 1.64219e-08 7.34988e-09 - 2.9194e-09 1.01394e-09 3.00721e-10 7.39599e-11 1.4277e-11 1.92857e-12 1.44562e-13 2.85555e-15 1.78472e-15 9.95874e-14 1.38887e-12 1.04802e-11 - 5.509e-11 2.27484e-10 7.81091e-10 2.29792e-09 5.92501e-09 1.35945e-08 2.85885e-08 5.36202e-08 9.07577e-08 1.38926e-07 1.92567e-07 2.41822e-07 - 2.78077e-07 3.11692e-07 4.0505e-07 7.5205e-07 7.52051e-07 4.05051e-07 3.11692e-07 2.78077e-07 2.41822e-07 1.92567e-07 1.38927e-07 9.07579e-08 - 5.36203e-08 2.85885e-08 1.35945e-08 5.92503e-09 2.29792e-09 7.81094e-10 2.27485e-10 5.50907e-11 1.04802e-11 1.38923e-12 9.95874e-14 1.78472e-15 - 7.13888e-16 6.67485e-14 9.77313e-13 7.49047e-12 3.98075e-11 1.6642e-10 5.80539e-10 1.74216e-09 4.6124e-09 1.08839e-08 2.34689e-08 4.52231e-08 - 8.03469e-08 1.28142e-07 1.81726e-07 2.29233e-07 2.57582e-07 2.78519e-07 3.62534e-07 7.44428e-07 7.44429e-07 3.62534e-07 2.78519e-07 2.57582e-07 - 2.29233e-07 1.81726e-07 1.28143e-07 8.0347e-08 4.52232e-08 2.34689e-08 1.08839e-08 4.61241e-09 1.74217e-09 5.80541e-10 1.66421e-10 3.98082e-11 - 7.49047e-12 9.7767e-13 6.71055e-14 7.13888e-16 3.56944e-16 4.42611e-14 6.71055e-13 5.20103e-12 2.78413e-11 1.17476e-10 4.15387e-10 1.26967e-09 - 3.44591e-09 8.35569e-09 1.84711e-08 3.6807e-08 6.71514e-08 1.09885e-07 1.67263e-07 2.14142e-07 2.35402e-07 2.4375e-07 3.16211e-07 7.34836e-07 - 7.34837e-07 3.16212e-07 2.4375e-07 2.35402e-07 2.14143e-07 1.67263e-07 1.09885e-07 6.71515e-08 3.68071e-08 1.84711e-08 8.35571e-09 3.44592e-09 - 1.26968e-09 4.15388e-10 1.17477e-10 2.78416e-11 5.20103e-12 6.71412e-13 4.42611e-14 3.56944e-16 3.56944e-16 2.85555e-14 4.47608e-13 3.49591e-12 - 1.87778e-11 7.97217e-11 2.85079e-10 8.86262e-10 2.46249e-09 6.13458e-09 1.39164e-08 2.8623e-08 5.35596e-08 9.08626e-08 1.39992e-07 1.93971e-07 - 2.11354e-07 2.08678e-07 2.67433e-07 7.23948e-07 7.23949e-07 2.67433e-07 2.08678e-07 2.11354e-07 1.93971e-07 1.39992e-07 9.08628e-08 5.35597e-08 - 2.86231e-08 1.39164e-08 6.1346e-09 2.4625e-09 8.86265e-10 2.85081e-10 7.9722e-11 1.87778e-11 3.49591e-12 4.47608e-13 2.81986e-14 3.56944e-16 - 3.56944e-16 1.74903e-14 2.88768e-13 2.26267e-12 1.21497e-11 5.17412e-11 1.86687e-10 5.89421e-10 1.67452e-09 4.28595e-09 9.99322e-09 2.12165e-08 - 4.08096e-08 7.12393e-08 1.117e-07 1.62878e-07 1.84229e-07 1.74571e-07 2.1792e-07 7.1233e-07 7.12332e-07 2.1792e-07 1.74571e-07 1.84229e-07 - 1.62878e-07 1.117e-07 7.12394e-08 4.08096e-08 2.12165e-08 9.99324e-09 4.28596e-09 1.67452e-09 5.89423e-10 1.86688e-10 5.17415e-11 1.215e-11 - 2.26303e-12 2.88768e-13 1.78472e-14 3.56944e-16 0 1.07083e-14 1.78829e-13 1.40065e-12 7.48869e-12 3.18905e-11 1.15837e-10 3.70887e-10 - 1.07616e-09 2.8301e-09 6.79283e-09 1.48995e-08 2.95741e-08 5.31708e-08 8.51149e-08 1.19305e-07 1.52113e-07 1.42528e-07 1.70062e-07 7.0043e-07 - 7.00431e-07 1.70063e-07 1.42528e-07 1.52113e-07 1.19305e-07 8.5115e-08 5.31708e-08 2.95741e-08 1.48995e-08 6.79284e-09 2.83011e-09 1.07616e-09 - 3.70889e-10 1.15838e-10 3.18908e-11 7.48869e-12 1.40101e-12 1.79186e-13 1.03514e-14 0 -1.78472e-16 5.71111e-15 1.05299e-13 8.20971e-13 - 4.35472e-12 1.84872e-11 6.74531e-11 2.18716e-10 6.47582e-10 1.75021e-09 4.33219e-09 9.83368e-09 2.02152e-08 3.75363e-08 6.19172e-08 8.8024e-08 - 1.1764e-07 1.12974e-07 1.2741e-07 6.88567e-07 6.88569e-07 1.2741e-07 1.12974e-07 1.1764e-07 8.8024e-08 6.19172e-08 3.75364e-08 2.02152e-08 - 9.8337e-09 4.3322e-09 1.75021e-09 6.47584e-10 2.18717e-10 6.74535e-11 1.84872e-11 4.35472e-12 8.20971e-13 1.05299e-13 6.06805e-15 -1.78472e-16 - 0 3.2125e-15 5.81819e-14 4.4975e-13 2.3569e-12 9.94625e-12 3.63747e-11 1.19291e-10 3.60192e-10 1.00099e-09 2.56077e-09 6.03165e-09 - 1.28967e-08 2.48511e-08 4.24379e-08 6.22936e-08 8.60269e-08 8.54848e-08 9.55446e-08 6.76937e-07 6.76938e-07 9.55447e-08 8.54848e-08 8.60269e-08 - 6.22937e-08 4.24379e-08 2.48511e-08 1.28967e-08 6.03166e-09 2.56078e-09 1.00099e-09 3.60193e-10 1.19292e-10 3.63747e-11 9.9466e-12 2.3569e-12 - 4.4975e-13 5.81819e-14 3.56944e-15 0 0 1.42778e-15 2.96264e-14 2.25589e-13 1.16471e-12 4.87229e-12 1.78229e-11 5.90514e-11 - 1.81783e-10 5.19978e-10 1.37873e-09 3.38292e-09 7.56388e-09 1.52249e-08 2.70987e-08 4.13017e-08 5.58759e-08 6.00175e-08 7.95163e-08 6.67676e-07 - 6.67677e-07 7.95164e-08 6.00175e-08 5.5876e-08 4.13017e-08 2.70988e-08 1.52249e-08 7.56389e-09 3.38293e-09 1.37873e-09 5.19979e-10 1.81783e-10 - 5.90514e-11 1.78229e-11 4.87229e-12 1.16471e-12 2.25589e-13 2.96264e-14 1.42778e-15 0 0 7.13888e-16 1.35639e-14 1.00658e-13 - 5.10787e-13 2.11204e-12 7.71392e-12 2.57981e-11 8.09892e-11 2.38866e-10 6.58999e-10 1.69386e-09 3.98911e-09 8.46183e-09 1.58407e-08 2.52863e-08 - 3.26872e-08 3.8475e-08 7.00523e-08 6.73055e-07 6.73056e-07 7.00524e-08 3.84749e-08 3.26872e-08 2.52863e-08 1.58407e-08 8.46184e-09 3.98912e-09 - 1.69386e-09 6.59001e-10 2.38866e-10 8.09895e-11 2.57985e-11 7.71392e-12 2.1124e-12 5.10787e-13 1.00658e-13 1.35639e-14 7.13888e-16 0 - 0 3.56944e-16 5.35416e-15 3.8193e-14 1.90251e-13 7.75283e-13 2.82236e-12 9.52577e-12 3.05301e-11 9.31242e-11 2.68856e-10 7.30017e-10 - 1.83029e-09 4.14391e-09 8.26623e-09 1.39931e-08 1.90602e-08 2.30618e-08 6.9281e-08 7.04726e-07 7.04727e-07 6.92811e-08 2.30618e-08 1.90602e-08 - 1.39931e-08 8.26623e-09 4.14392e-09 1.83029e-09 7.30019e-10 2.68856e-10 9.31246e-11 3.05301e-11 9.52577e-12 2.82236e-12 7.75283e-13 1.90251e-13 - 3.855e-14 5.35416e-15 3.56944e-16 0 0 0 1.42778e-15 1.14222e-14 5.56833e-14 2.23447e-13 8.11691e-13 2.7681e-12 - 9.08387e-12 2.8814e-11 8.78604e-11 2.5546e-10 6.93969e-10 1.71233e-09 3.719e-09 6.80731e-09 9.92074e-09 1.21085e-08 9.00795e-08 7.90743e-07 - 7.90744e-07 9.00797e-08 1.21085e-08 9.92075e-09 6.80731e-09 3.71901e-09 1.71233e-09 6.9397e-10 2.5546e-10 8.78611e-11 2.88143e-11 9.08387e-12 - 2.76774e-12 8.11691e-13 2.23447e-13 5.56833e-14 1.14222e-14 1.42778e-15 0 0 0 0 3.56944e-16 2.14166e-15 - 1.10653e-14 4.39041e-14 1.60268e-13 5.55405e-13 1.8811e-12 6.27758e-12 2.05639e-11 6.5626e-11 1.99703e-10 5.59377e-10 1.38181e-09 2.84097e-09 - 4.57629e-09 5.82246e-09 2.05189e-07 1.02251e-06 1.02252e-06 2.05189e-07 5.82246e-09 4.57629e-09 2.84097e-09 1.38181e-09 5.59378e-10 1.99703e-10 - 6.56263e-11 2.05639e-11 6.27758e-12 1.8811e-12 5.55048e-13 1.60268e-13 4.39041e-14 1.10653e-14 2.14166e-15 3.56944e-16 0 0 - 0 0 0 0 1.07083e-15 3.92638e-15 1.57055e-14 5.63972e-14 2.03815e-13 7.40659e-13 2.72884e-12 1.0179e-11 - 3.78743e-11 1.35015e-10 4.32188e-10 1.19785e-09 4.7088e-07 8.77765e-07 1.31628e-06 1.87639e-06 1.87639e-06 1.31628e-06 8.77765e-07 4.7088e-07 - 1.19785e-09 4.32189e-10 1.35015e-10 3.78746e-11 1.01786e-11 2.72848e-12 7.40302e-13 2.03458e-13 5.63972e-14 1.57055e-14 3.92638e-15 1.07083e-15 - 0 0 0 0 + 1.24015e-07 1.69299e-07 1.96682e-07 2.19778e-07 2.42414e-07 2.65807e-07 2.87701e-07 3.10383e-07 3.3479e-07 3.60582e-07 3.86219e-07 4.10964e-07 + 4.34087e-07 4.55018e-07 4.73493e-07 4.8961e-07 5.03823e-07 5.16297e-07 5.27926e-07 5.41081e-07 5.41504e-07 5.28249e-07 5.1658e-07 5.04085e-07 + 4.89853e-07 4.73719e-07 4.55229e-07 4.34283e-07 4.11145e-07 3.86384e-07 3.60733e-07 3.34927e-07 3.10506e-07 2.87813e-07 2.65909e-07 2.42508e-07 + 2.19862e-07 1.96757e-07 1.69365e-07 1.24068e-07 1.97397e-07 2.9419e-07 3.59162e-07 3.97928e-07 4.19696e-07 4.33269e-07 4.45004e-07 4.55631e-07 + 4.6536e-07 4.74468e-07 4.83419e-07 4.92035e-07 5.0007e-07 5.07271e-07 5.13441e-07 5.18485e-07 5.22447e-07 5.27837e-07 5.38727e-07 5.59399e-07 + 5.59843e-07 5.39017e-07 5.28067e-07 5.22651e-07 5.18682e-07 5.1363e-07 5.07453e-07 5.00244e-07 4.92201e-07 4.83576e-07 4.74616e-07 4.65499e-07 + 4.55762e-07 4.45127e-07 4.33384e-07 4.19804e-07 3.98031e-07 3.59257e-07 2.94271e-07 1.97455e-07 2.2036e-07 3.2788e-07 3.89193e-07 4.19899e-07 + 4.36703e-07 4.48042e-07 4.56919e-07 4.64425e-07 4.71023e-07 4.76882e-07 4.82029e-07 4.86399e-07 4.89909e-07 4.92529e-07 4.94392e-07 4.95913e-07 + 4.97956e-07 5.05536e-07 5.2451e-07 5.62849e-07 5.63315e-07 5.2477e-07 5.05713e-07 4.98098e-07 4.96047e-07 4.94523e-07 4.92658e-07 4.90035e-07 + 4.86522e-07 4.82147e-07 4.76995e-07 4.7113e-07 4.64527e-07 4.57015e-07 4.48132e-07 4.36789e-07 4.19981e-07 3.89274e-07 3.27953e-07 2.20414e-07 + 2.25266e-07 3.35927e-07 3.91248e-07 4.14896e-07 4.26831e-07 4.3506e-07 4.41822e-07 4.47649e-07 4.52607e-07 4.56622e-07 4.59579e-07 4.61366e-07 + 4.6195e-07 4.61474e-07 4.60419e-07 4.59816e-07 4.61549e-07 4.72919e-07 5.0283e-07 5.64544e-07 5.65025e-07 5.03059e-07 4.73046e-07 4.61634e-07 + 4.5989e-07 4.60491e-07 4.61548e-07 4.62026e-07 4.61443e-07 4.59655e-07 4.56697e-07 4.52679e-07 4.47719e-07 4.41888e-07 4.35123e-07 4.26893e-07 + 4.14959e-07 3.91313e-07 3.35991e-07 2.25314e-07 2.22046e-07 3.34466e-07 3.85402e-07 4.03901e-07 4.1163e-07 4.16598e-07 4.20841e-07 4.24617e-07 + 4.27705e-07 4.29781e-07 4.30539e-07 4.29754e-07 4.27379e-07 4.23697e-07 4.19562e-07 4.16759e-07 4.18514e-07 4.34134e-07 4.76364e-07 5.65686e-07 + 5.66176e-07 4.76564e-07 4.34221e-07 4.18553e-07 4.16783e-07 4.19585e-07 4.23724e-07 4.27412e-07 4.29792e-07 4.30581e-07 4.29825e-07 4.27749e-07 + 4.24661e-07 4.20884e-07 4.16641e-07 4.11674e-07 4.0395e-07 3.85456e-07 3.34522e-07 2.22087e-07 2.14709e-07 3.2883e-07 3.77112e-07 3.92093e-07 + 3.96442e-07 3.98376e-07 3.99979e-07 4.01423e-07 4.02315e-07 4.02133e-07 4.00386e-07 3.96714e-07 3.9103e-07 3.83733e-07 3.76071e-07 3.70683e-07 + 3.72363e-07 3.92049e-07 4.46754e-07 5.66566e-07 5.67065e-07 4.4693e-07 3.92111e-07 3.72372e-07 3.70672e-07 3.76059e-07 3.83725e-07 3.9103e-07 + 3.96723e-07 4.00401e-07 4.02153e-07 4.02338e-07 4.01448e-07 4.00007e-07 3.98406e-07 3.96475e-07 3.92132e-07 3.77158e-07 3.28879e-07 2.14744e-07 + 2.05173e-07 3.21122e-07 3.68073e-07 3.80829e-07 3.82661e-07 3.82054e-07 3.81224e-07 3.80343e-07 3.78924e-07 3.76304e-07 3.71843e-07 3.65061e-07 + 3.55825e-07 3.44643e-07 3.33144e-07 3.2483e-07 3.26132e-07 3.49251e-07 4.15446e-07 5.67298e-07 5.67803e-07 4.15608e-07 3.49303e-07 3.26131e-07 + 3.24805e-07 3.33113e-07 3.44615e-07 3.55805e-07 3.65049e-07 3.7184e-07 3.76308e-07 3.78933e-07 3.80357e-07 3.81242e-07 3.82075e-07 3.82687e-07 + 3.80862e-07 3.68114e-07 3.21166e-07 2.05203e-07 1.94465e-07 3.12302e-07 3.58822e-07 3.70316e-07 3.704e-07 3.67821e-07 3.64942e-07 3.61957e-07 + 3.58325e-07 3.53288e-07 3.461e-07 3.36196e-07 3.23423e-07 3.08394e-07 2.93088e-07 2.81787e-07 2.82415e-07 3.08047e-07 3.83765e-07 5.67937e-07 + 5.68448e-07 3.83926e-07 3.08111e-07 2.82426e-07 2.81766e-07 2.93054e-07 3.08358e-07 3.23392e-07 3.36174e-07 3.46086e-07 3.53283e-07 3.58327e-07 + 3.61964e-07 3.64954e-07 3.67837e-07 3.70421e-07 3.70344e-07 3.58858e-07 3.12342e-07 1.94492e-07 1.83696e-07 3.02517e-07 3.49522e-07 3.60426e-07 + 3.5938e-07 3.55354e-07 3.50844e-07 3.46063e-07 3.40433e-07 3.33135e-07 3.23365e-07 3.10526e-07 2.94483e-07 2.75979e-07 2.57307e-07 2.43373e-07 + 2.43242e-07 2.70324e-07 3.52879e-07 5.68514e-07 5.6903e-07 3.53059e-07 2.70417e-07 2.43282e-07 2.43372e-07 2.57283e-07 2.75945e-07 2.9445e-07 + 3.10499e-07 3.23346e-07 3.33124e-07 3.40429e-07 3.46066e-07 3.50852e-07 3.55366e-07 3.59397e-07 3.6045e-07 3.49555e-07 3.02553e-07 1.8372e-07 + 1.73198e-07 2.92526e-07 3.3986e-07 3.50981e-07 3.49258e-07 3.44214e-07 3.38444e-07 3.32168e-07 3.24777e-07 3.15427e-07 3.03307e-07 2.87844e-07 + 2.68986e-07 2.47644e-07 2.26405e-07 2.10614e-07 2.09942e-07 2.37384e-07 3.23737e-07 5.69048e-07 5.69568e-07 3.23956e-07 2.37516e-07 2.10018e-07 + 2.10641e-07 2.26399e-07 2.47619e-07 2.68956e-07 2.87816e-07 3.03285e-07 3.15413e-07 3.24771e-07 3.32168e-07 3.3845e-07 3.44224e-07 3.49273e-07 + 3.51002e-07 3.39889e-07 2.92558e-07 1.73219e-07 1.62976e-07 2.82552e-07 3.30225e-07 3.41739e-07 3.39752e-07 3.34011e-07 3.27272e-07 3.19744e-07 + 3.10799e-07 2.99602e-07 2.85389e-07 2.6768e-07 2.46568e-07 2.23185e-07 2.00403e-07 1.83814e-07 1.83067e-07 2.09862e-07 2.9702e-07 5.69552e-07 + 5.70076e-07 2.97292e-07 2.10034e-07 1.83177e-07 1.83868e-07 2.00416e-07 2.23173e-07 2.46544e-07 2.67654e-07 2.85367e-07 2.99587e-07 3.10791e-07 + 3.19742e-07 3.27276e-07 3.34019e-07 3.39764e-07 3.41758e-07 3.30252e-07 2.82582e-07 1.62995e-07 1.53055e-07 2.72731e-07 3.20774e-07 3.32715e-07 + 3.30665e-07 3.2445e-07 3.16948e-07 3.08341e-07 2.97999e-07 2.85136e-07 2.69092e-07 2.49537e-07 2.26778e-07 2.0221e-07 1.78974e-07 1.62718e-07 + 1.6244e-07 1.8776e-07 2.73112e-07 5.70034e-07 5.70563e-07 2.73449e-07 1.87965e-07 1.62572e-07 1.62793e-07 1.79005e-07 2.02211e-07 2.26762e-07 + 2.49516e-07 2.69072e-07 2.85121e-07 2.97989e-07 3.08338e-07 3.1695e-07 3.24456e-07 3.30676e-07 3.32732e-07 3.20799e-07 2.72759e-07 1.53072e-07 + 1.43467e-07 2.63167e-07 3.11615e-07 3.2394e-07 3.21883e-07 3.15335e-07 3.07199e-07 2.97621e-07 2.85994e-07 2.71627e-07 2.54012e-07 2.33026e-07 + 2.0923e-07 1.84312e-07 1.61639e-07 1.46712e-07 1.47331e-07 1.70602e-07 2.5213e-07 5.70501e-07 5.71033e-07 2.52532e-07 1.70827e-07 1.4747e-07 + 1.46797e-07 1.61682e-07 1.84325e-07 2.09224e-07 2.33011e-07 2.53995e-07 2.71613e-07 2.85984e-07 2.97616e-07 3.072e-07 3.1534e-07 3.21892e-07 + 3.23956e-07 3.11639e-07 2.63193e-07 1.43483e-07 1.34249e-07 2.53936e-07 3.02822e-07 3.15449e-07 3.13351e-07 3.06548e-07 2.97846e-07 2.87357e-07 + 2.74533e-07 2.58819e-07 2.399e-07 2.17899e-07 1.93658e-07 1.69147e-07 1.47885e-07 1.3501e-07 1.36718e-07 1.57641e-07 2.33967e-07 5.70957e-07 + 5.71493e-07 2.34427e-07 1.57871e-07 1.36852e-07 1.35097e-07 1.47936e-07 1.6917e-07 1.93661e-07 2.17891e-07 2.39888e-07 2.58807e-07 2.74525e-07 + 2.87353e-07 2.97846e-07 3.06551e-07 3.13358e-07 3.15463e-07 3.02844e-07 2.53961e-07 1.34262e-07 1.25428e-07 2.45095e-07 2.94497e-07 3.07194e-07 + 3.05054e-07 2.98028e-07 2.88786e-07 2.77424e-07 2.63486e-07 2.46591e-07 2.26648e-07 2.04044e-07 1.79906e-07 1.56448e-07 1.37224e-07 1.26799e-07 + 1.29544e-07 1.48056e-07 2.18367e-07 5.71405e-07 5.71944e-07 2.18873e-07 1.48277e-07 1.29663e-07 1.26878e-07 1.37277e-07 1.56478e-07 1.79918e-07 + 2.04044e-07 2.26642e-07 2.46582e-07 2.63479e-07 2.7742e-07 2.88786e-07 2.98031e-07 3.05061e-07 3.07207e-07 2.94519e-07 2.45119e-07 1.25441e-07 + 1.17031e-07 2.36786e-07 2.86553e-07 2.99179e-07 2.96999e-07 2.89755e-07 2.79979e-07 2.67778e-07 2.52822e-07 2.3493e-07 2.14254e-07 1.91444e-07 + 1.6789e-07 1.45979e-07 1.29147e-07 1.21159e-07 1.24876e-07 1.41087e-07 2.05002e-07 5.71847e-07 5.7239e-07 2.05538e-07 1.4129e-07 1.24977e-07 + 1.21217e-07 1.29193e-07 1.46011e-07 1.67908e-07 1.91451e-07 2.14253e-07 2.34926e-07 2.52817e-07 2.67774e-07 2.79979e-07 2.89758e-07 2.97005e-07 + 2.99191e-07 2.86573e-07 2.3681e-07 1.17042e-07 1.09151e-07 2.29025e-07 2.78898e-07 2.91427e-07 2.89199e-07 2.81731e-07 2.71427e-07 2.58436e-07 + 2.42583e-07 2.239e-07 2.02782e-07 1.80134e-07 1.57566e-07 1.37563e-07 1.23338e-07 1.17807e-07 1.21981e-07 1.36101e-07 1.93528e-07 5.72285e-07 + 5.72831e-07 1.94077e-07 1.3628e-07 1.22063e-07 1.17865e-07 1.23381e-07 1.37596e-07 1.57589e-07 1.80146e-07 2.02787e-07 2.239e-07 2.42581e-07 + 2.58434e-07 2.71427e-07 2.81733e-07 2.89204e-07 2.91437e-07 2.78916e-07 2.29048e-07 1.09161e-07 1.01917e-07 2.21668e-07 2.71536e-07 2.83951e-07 + 2.81672e-07 2.73977e-07 2.63167e-07 2.49462e-07 2.32859e-07 2.13605e-07 1.92328e-07 1.70162e-07 1.48894e-07 1.31024e-07 1.19437e-07 1.16129e-07 + 1.20318e-07 1.32603e-07 1.83629e-07 5.7272e-07 5.73269e-07 1.84172e-07 1.32755e-07 1.20382e-07 1.16172e-07 1.19474e-07 1.31056e-07 1.48919e-07 + 1.70179e-07 1.92338e-07 2.13609e-07 2.3286e-07 2.49462e-07 2.63168e-07 2.73979e-07 2.81677e-07 2.83961e-07 2.71554e-07 2.2169e-07 1.01928e-07 + 9.52763e-08 2.14682e-07 2.64459e-07 2.76759e-07 2.74433e-07 2.66525e-07 2.55259e-07 2.40948e-07 2.23765e-07 2.04163e-07 1.82985e-07 1.61563e-07 + 1.41804e-07 1.26138e-07 1.16993e-07 1.15382e-07 1.195e-07 1.30226e-07 1.75033e-07 5.73152e-07 5.73705e-07 1.75556e-07 1.30351e-07 1.19549e-07 + 1.15414e-07 1.17023e-07 1.26166e-07 1.41829e-07 1.61582e-07 1.82998e-07 2.0417e-07 2.23769e-07 2.4095e-07 2.55261e-07 2.66528e-07 2.74438e-07 + 2.76768e-07 2.64475e-07 2.14703e-07 9.52865e-08 8.9166e-08 2.08023e-07 2.57643e-07 2.69846e-07 2.67496e-07 2.59414e-07 2.47776e-07 2.32997e-07 + 2.15418e-07 1.95682e-07 1.74824e-07 1.54336e-07 1.3619e-07 1.22659e-07 1.1563e-07 1.15224e-07 1.19261e-07 1.28699e-07 1.67527e-07 5.73584e-07 + 5.7414e-07 1.68016e-07 1.28798e-07 1.19298e-07 1.15248e-07 1.15653e-07 1.22683e-07 1.36214e-07 1.54356e-07 1.74839e-07 1.95693e-07 2.15424e-07 + 2.33e-07 2.47778e-07 2.59417e-07 2.67501e-07 2.69854e-07 2.57659e-07 2.08043e-07 8.91757e-08 8.35169e-08 2.01637e-07 2.51059e-07 2.632e-07 + 2.60872e-07 2.52685e-07 2.4079e-07 2.25705e-07 2.07924e-07 1.88251e-07 1.67884e-07 1.48443e-07 1.31913e-07 1.20342e-07 1.15042e-07 1.15413e-07 + 1.19416e-07 1.27827e-07 1.60956e-07 5.74014e-07 5.74574e-07 1.614e-07 1.27903e-07 1.19444e-07 1.15431e-07 1.15059e-07 1.20363e-07 1.31935e-07 + 1.48464e-07 1.67901e-07 1.88263e-07 2.07932e-07 2.2571e-07 2.40793e-07 2.52688e-07 2.60876e-07 2.63208e-07 2.51073e-07 2.01656e-07 8.35262e-08 + 7.82498e-08 1.95458e-07 2.44666e-07 2.56804e-07 2.54566e-07 2.46376e-07 2.3437e-07 2.19162e-07 2.01366e-07 1.81925e-07 1.6217e-07 1.43814e-07 + 1.28816e-07 1.18959e-07 1.14981e-07 1.15786e-07 1.19838e-07 1.27465e-07 1.55221e-07 5.74444e-07 5.75006e-07 1.55612e-07 1.27522e-07 1.1986e-07 + 1.158e-07 1.14995e-07 1.18976e-07 1.28836e-07 1.43835e-07 1.62188e-07 1.81939e-07 2.01376e-07 2.19167e-07 2.34374e-07 2.46379e-07 2.54571e-07 + 2.56811e-07 2.4468e-07 1.95477e-07 7.82586e-08 7.3271e-08 1.89415e-07 2.38419e-07 2.50633e-07 2.48579e-07 2.40513e-07 2.28569e-07 2.13431e-07 + 1.95805e-07 1.76736e-07 1.57659e-07 1.40356e-07 1.26738e-07 1.18309e-07 1.15267e-07 1.16243e-07 1.20443e-07 1.27508e-07 1.50278e-07 5.74873e-07 + 5.75439e-07 1.50611e-07 1.27548e-07 1.20461e-07 1.16255e-07 1.15278e-07 1.18323e-07 1.26756e-07 1.40375e-07 1.57678e-07 1.76751e-07 1.95816e-07 + 2.13438e-07 2.28574e-07 2.40517e-07 2.48583e-07 2.5064e-07 2.38432e-07 1.89432e-07 7.32793e-08 6.8508e-08 1.83405e-07 2.32261e-07 2.44653e-07 + 2.429e-07 2.35114e-07 2.23424e-07 2.08559e-07 1.91277e-07 1.72689e-07 1.54306e-07 1.3796e-07 1.25525e-07 1.18236e-07 1.15778e-07 1.16739e-07 + 1.21179e-07 1.27871e-07 1.46144e-07 5.75302e-07 5.75872e-07 1.46415e-07 1.27899e-07 1.21194e-07 1.16749e-07 1.15787e-07 1.18248e-07 1.25541e-07 + 1.37978e-07 1.54324e-07 1.72704e-07 1.91288e-07 2.08566e-07 2.23429e-07 2.35118e-07 2.42904e-07 2.4466e-07 2.32274e-07 1.83422e-07 6.85158e-08 + 6.38853e-08 1.77341e-07 2.26111e-07 2.38814e-07 2.37504e-07 2.30174e-07 2.18949e-07 2.04566e-07 1.87796e-07 1.69776e-07 1.52059e-07 1.36517e-07 + 1.25019e-07 1.1862e-07 1.16454e-07 1.17289e-07 1.22021e-07 1.28488e-07 1.42899e-07 5.75732e-07 5.76305e-07 1.43105e-07 1.28507e-07 1.22035e-07 + 1.17299e-07 1.16462e-07 1.1863e-07 1.25034e-07 1.36534e-07 1.52076e-07 1.69791e-07 1.87808e-07 2.04574e-07 2.18954e-07 2.30178e-07 2.37508e-07 + 2.3882e-07 2.26123e-07 1.77357e-07 6.38925e-08 5.93123e-08 1.71124e-07 2.19877e-07 2.33038e-07 2.3233e-07 2.25648e-07 2.15112e-07 2.01436e-07 + 1.8536e-07 1.67996e-07 1.509e-07 1.35967e-07 1.25098e-07 1.19289e-07 1.17264e-07 1.17992e-07 1.2297e-07 1.29301e-07 1.40695e-07 5.76163e-07 + 5.76739e-07 1.40837e-07 1.29315e-07 1.22983e-07 1.18001e-07 1.1727e-07 1.19298e-07 1.25111e-07 1.35983e-07 1.50917e-07 1.6801e-07 1.85371e-07 + 2.01444e-07 2.15117e-07 2.25652e-07 2.32335e-07 2.33044e-07 2.19888e-07 1.71139e-07 5.9319e-08 5.46751e-08 1.6463e-07 2.13445e-07 2.2723e-07 + 2.27278e-07 2.21368e-07 2.11677e-07 1.98898e-07 1.83721e-07 1.67205e-07 1.50856e-07 1.36517e-07 1.26062e-07 1.2046e-07 1.18438e-07 1.19053e-07 + 1.24055e-07 1.30266e-07 1.39762e-07 5.76595e-07 5.77175e-07 1.39843e-07 1.30277e-07 1.24068e-07 1.19062e-07 1.18444e-07 1.20469e-07 1.26075e-07 + 1.36533e-07 1.50872e-07 1.67219e-07 1.83731e-07 1.98905e-07 2.11682e-07 2.21371e-07 2.27282e-07 2.27236e-07 2.13455e-07 1.64645e-07 5.46813e-08 + 5.03257e-08 1.57718e-07 2.06541e-07 2.21105e-07 2.22067e-07 2.17133e-07 2.08506e-07 1.96867e-07 1.82837e-07 1.67384e-07 1.51917e-07 1.38186e-07 + 1.27988e-07 1.22267e-07 1.19979e-07 1.20568e-07 1.25369e-07 1.31368e-07 1.40417e-07 5.77031e-07 5.77613e-07 1.40439e-07 1.31379e-07 1.25382e-07 + 1.20577e-07 1.19985e-07 1.22276e-07 1.28001e-07 1.38201e-07 1.51932e-07 1.67397e-07 1.82847e-07 1.96874e-07 2.08511e-07 2.17136e-07 2.22071e-07 + 2.21111e-07 2.06552e-07 1.57732e-07 5.03313e-08 4.62672e-08 1.5036e-07 1.9889e-07 2.14415e-07 2.16535e-07 2.128e-07 2.05468e-07 1.9522e-07 + 1.82595e-07 1.68435e-07 1.54013e-07 1.40942e-07 1.30906e-07 1.24849e-07 1.22126e-07 1.22478e-07 1.26992e-07 1.32614e-07 1.41336e-07 5.78659e-07 + 5.79211e-07 1.41358e-07 1.32624e-07 1.27004e-07 1.22487e-07 1.22134e-07 1.24858e-07 1.30919e-07 1.40957e-07 1.54027e-07 1.68447e-07 1.82604e-07 + 1.95226e-07 2.05472e-07 2.12803e-07 2.16539e-07 2.1442e-07 1.989e-07 1.50373e-07 4.62722e-08 4.24455e-08 1.424e-07 1.90265e-07 2.06904e-07 + 2.10437e-07 2.08143e-07 2.02345e-07 1.93745e-07 1.82793e-07 1.70182e-07 1.5701e-07 1.44719e-07 1.34851e-07 1.28388e-07 1.25156e-07 1.25025e-07 + 1.29042e-07 1.34045e-07 1.42368e-07 5.81914e-07 5.8244e-07 1.42389e-07 1.34055e-07 1.29054e-07 1.25035e-07 1.25165e-07 1.28398e-07 1.34864e-07 + 1.44732e-07 1.57023e-07 1.70193e-07 1.828e-07 1.9375e-07 2.02349e-07 2.08147e-07 2.10441e-07 2.0691e-07 1.90274e-07 1.42412e-07 4.245e-08 + 3.88076e-08 1.33676e-07 1.80404e-07 1.98233e-07 2.03414e-07 2.02811e-07 1.98791e-07 1.92094e-07 1.83092e-07 1.72316e-07 1.60655e-07 1.4935e-07 + 1.39788e-07 1.32996e-07 1.29228e-07 1.28402e-07 1.31645e-07 1.35699e-07 1.43541e-07 5.87275e-07 5.87779e-07 1.43562e-07 1.35708e-07 1.31657e-07 + 1.28413e-07 1.29239e-07 1.33007e-07 1.39801e-07 1.49363e-07 1.60667e-07 1.72325e-07 1.83099e-07 1.92099e-07 1.98795e-07 2.02814e-07 2.03418e-07 + 1.98239e-07 1.80413e-07 1.33687e-07 3.88117e-08 3.52994e-08 1.24017e-07 1.69022e-07 1.87963e-07 1.9495e-07 1.96265e-07 1.94261e-07 1.89718e-07 + 1.82946e-07 1.74315e-07 1.64492e-07 1.54486e-07 1.45507e-07 1.38603e-07 1.34365e-07 1.32736e-07 1.34901e-07 1.37584e-07 1.44893e-07 5.95437e-07 + 5.95922e-07 1.44914e-07 1.37592e-07 1.34912e-07 1.32747e-07 1.34376e-07 1.38614e-07 1.45518e-07 1.54497e-07 1.64502e-07 1.74322e-07 1.82952e-07 + 1.89722e-07 1.94265e-07 1.96269e-07 1.94955e-07 1.87969e-07 1.69031e-07 1.24027e-07 3.53031e-08 3.18618e-08 1.13265e-07 1.55822e-07 1.75569e-07 + 1.84358e-07 1.8773e-07 1.87933e-07 1.85766e-07 1.81494e-07 1.75338e-07 1.6774e-07 1.59452e-07 1.51477e-07 1.44826e-07 1.40293e-07 1.3839e-07 + 1.38837e-07 1.39634e-07 1.46474e-07 6.07433e-07 6.07901e-07 1.46496e-07 1.3964e-07 1.38847e-07 1.38399e-07 1.40303e-07 1.44836e-07 1.51487e-07 + 1.59461e-07 1.67748e-07 1.75344e-07 1.81498e-07 1.85769e-07 1.87936e-07 1.87733e-07 1.84363e-07 1.75576e-07 1.55831e-07 1.13274e-07 3.18651e-08 + 2.84269e-08 1.01288e-07 1.40541e-07 1.60498e-07 1.7081e-07 1.76178e-07 1.7865e-07 1.78998e-07 1.77446e-07 1.74084e-07 1.69131e-07 1.63073e-07 + 1.56662e-07 1.50787e-07 1.46298e-07 1.43918e-07 1.42851e-07 1.41599e-07 1.48374e-07 6.24874e-07 6.25325e-07 1.48397e-07 1.41605e-07 1.42859e-07 + 1.43927e-07 1.46307e-07 1.50796e-07 1.5667e-07 1.63081e-07 1.69137e-07 1.74088e-07 1.7745e-07 1.79002e-07 1.78654e-07 1.76182e-07 1.70815e-07 + 1.60504e-07 1.40549e-07 1.01296e-07 2.84298e-08 2.49112e-08 8.80116e-08 1.22995e-07 1.42266e-07 1.53464e-07 1.60443e-07 1.6498e-07 1.67779e-07 + 1.69016e-07 1.68668e-07 1.66752e-07 1.63474e-07 1.59297e-07 1.54888e-07 1.51004e-07 1.4833e-07 1.4625e-07 1.43016e-07 1.50801e-07 6.50476e-07 + 6.50914e-07 1.50826e-07 1.4302e-07 1.46256e-07 1.48337e-07 1.51012e-07 1.54895e-07 1.59303e-07 1.6348e-07 1.66756e-07 1.68672e-07 1.69019e-07 + 1.67783e-07 1.64984e-07 1.60448e-07 1.53469e-07 1.42272e-07 1.23002e-07 8.80185e-08 2.49137e-08 2.12063e-08 7.34382e-08 1.03154e-07 1.20616e-07 + 1.31712e-07 1.39508e-07 1.45501e-07 1.50312e-07 1.54078e-07 1.56695e-07 1.58009e-07 1.57964e-07 1.56701e-07 1.54577e-07 1.52105e-07 1.49793e-07 + 1.47636e-07 1.42905e-07 1.54386e-07 6.89335e-07 6.89759e-07 1.54416e-07 1.42908e-07 1.47641e-07 1.49798e-07 1.52111e-07 1.54582e-07 1.56706e-07 + 1.57968e-07 1.58012e-07 1.56698e-07 1.54081e-07 1.50316e-07 1.45505e-07 1.39513e-07 1.31717e-07 1.20622e-07 1.03159e-07 7.34437e-08 2.12084e-08 + 1.71668e-08 5.76818e-08 8.12178e-08 9.56936e-08 1.05485e-07 1.12967e-07 1.19375e-07 1.25265e-07 1.30773e-07 1.3578e-07 1.40038e-07 1.43294e-07 + 1.45389e-07 1.46321e-07 1.46236e-07 1.45316e-07 1.43376e-07 1.3905e-07 1.6142e-07 7.52378e-07 7.5279e-07 1.6146e-07 1.39052e-07 1.43379e-07 + 1.45319e-07 1.4624e-07 1.46325e-07 1.45393e-07 1.43297e-07 1.40041e-07 1.35783e-07 1.30777e-07 1.25268e-07 1.19379e-07 1.12971e-07 1.05489e-07 + 9.56981e-08 8.12224e-08 5.7686e-08 1.71685e-08 1.2607e-08 4.10228e-08 5.77322e-08 6.82272e-08 7.55739e-08 8.1527e-08 8.70711e-08 9.27078e-08 + 9.86145e-08 1.04739e-07 1.10871e-07 1.16709e-07 1.21929e-07 1.26235e-07 1.29375e-07 1.31067e-07 1.30711e-07 1.28682e-07 1.82646e-07 8.67764e-07 + 8.68158e-07 1.82706e-07 1.28684e-07 1.30713e-07 1.3107e-07 1.29378e-07 1.26238e-07 1.21932e-07 1.16712e-07 1.10873e-07 1.04742e-07 9.86171e-08 + 9.27105e-08 8.70738e-08 8.15299e-08 7.55769e-08 6.82303e-08 5.77353e-08 4.10256e-08 1.26083e-08 7.3987e-09 2.40888e-08 3.38271e-08 3.98166e-08 + 4.39829e-08 4.74987e-08 5.10728e-08 5.51156e-08 5.98351e-08 6.5291e-08 7.14268e-08 7.8092e-08 8.50594e-08 9.20195e-08 9.8514e-08 1.03748e-07 + 1.06264e-07 1.04688e-07 2.88031e-07 1.1299e-06 1.13026e-06 2.88141e-07 1.04689e-07 1.06267e-07 1.0375e-07 9.85164e-08 9.20217e-08 8.50613e-08 + 7.80937e-08 7.14284e-08 6.52926e-08 5.98366e-08 5.51171e-08 5.10742e-08 4.75002e-08 4.39844e-08 3.98181e-08 3.38287e-08 2.40903e-08 7.39948e-09 + 2.19681e-09 8.65984e-09 1.21452e-08 1.39368e-08 1.49958e-08 1.59445e-08 1.71715e-08 1.89192e-08 2.13473e-08 2.4574e-08 2.87042e-08 3.38547e-08 + 4.01828e-08 4.78745e-08 5.69001e-08 6.61912e-08 5.74837e-07 1.00631e-06 1.47162e-06 2.04968e-06 2.04982e-06 1.47166e-06 1.00633e-06 5.74841e-07 + 6.61934e-08 5.69019e-08 4.78759e-08 4.01838e-08 3.38554e-08 2.87047e-08 2.45744e-08 2.13475e-08 1.89194e-08 1.71717e-08 1.59447e-08 1.4996e-08 + 1.39371e-08 1.21456e-08 8.66031e-09 2.19707e-09 - 0 0 0 0 0 0 0 0 0 0 0 1.77636e-15 - 2.13163e-14 1.51434e-13 7.27862e-13 2.6219e-12 7.43094e-12 1.7039e-11 3.20075e-11 4.90863e-11 4.90867e-11 3.2008e-11 1.70393e-11 7.43117e-12 - 2.62212e-12 7.27862e-13 1.51434e-13 2.13163e-14 1.77636e-15 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 4.44089e-16 3.10862e-15 2.4647e-14 1.69864e-13 8.21787e-13 3.04334e-12 9.04365e-12 2.22184e-11 4.5965e-11 8.07054e-11 1.19625e-10 - 1.19626e-10 8.07061e-11 4.5965e-11 2.22184e-11 9.04388e-12 3.04334e-12 8.21565e-13 1.69864e-13 2.4647e-14 3.10862e-15 4.44089e-16 0 - 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 8.88178e-16 5.32907e-15 3.37508e-14 1.97176e-13 1.02318e-12 4.0874e-12 1.31464e-11 3.51292e-11 - 7.97091e-11 1.55706e-10 2.63238e-10 3.82665e-10 3.82667e-10 2.6324e-10 1.55707e-10 7.971e-11 3.51297e-11 1.31466e-11 4.08718e-12 1.02318e-12 - 1.96954e-13 3.35287e-14 5.32907e-15 8.88178e-16 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1.11022e-15 8.21565e-15 4.75175e-14 2.43583e-13 1.13798e-12 - 4.92739e-12 1.71345e-11 4.94553e-11 1.2142e-10 2.581e-10 4.80412e-10 7.86153e-10 1.12327e-09 1.12328e-09 7.86158e-10 4.80415e-10 2.58102e-10 - 1.21421e-10 4.9456e-11 1.71345e-11 4.92739e-12 1.1382e-12 2.43805e-13 4.75175e-14 8.21565e-15 1.11022e-15 0 0 0 - 0 0 0 0 0 0 0 0 0 2.22045e-16 1.9984e-15 1.22125e-14 - 6.61693e-14 3.21521e-13 1.39533e-12 5.50071e-12 1.99998e-11 6.21121e-11 1.63654e-10 3.73431e-10 7.49269e-10 1.33504e-09 2.11966e-09 2.97885e-09 - 2.97887e-09 2.11967e-09 1.33505e-09 7.49274e-10 3.73434e-10 1.63655e-10 6.21128e-11 2e-11 5.50049e-12 1.39533e-12 3.21521e-13 6.61693e-14 - 1.22125e-14 1.9984e-15 2.22045e-16 0 0 0 0 0 0 0 0 0 - 2.22045e-16 2.44249e-15 1.4877e-14 8.32667e-14 4.00346e-13 1.69487e-12 6.42242e-12 2.20721e-11 6.97145e-11 1.96368e-10 4.77367e-10 1.01973e-09 - 1.94026e-09 3.31811e-09 5.11691e-09 7.07253e-09 7.07257e-09 5.11694e-09 3.31813e-09 1.94027e-09 1.01974e-09 4.77371e-10 1.9637e-10 6.97153e-11 - 2.20723e-11 6.42242e-12 1.69487e-12 4.00346e-13 8.32667e-14 1.5099e-14 2.44249e-15 2.22045e-16 0 0 0 0 - 0 0 0 2.22045e-16 1.9984e-15 1.55431e-14 9.01501e-14 4.47198e-13 1.91736e-12 7.24709e-12 2.44995e-11 7.50302e-11 - 2.10684e-10 5.43991e-10 1.22942e-09 2.47145e-09 4.47445e-09 7.358e-09 1.10285e-08 1.49892e-08 1.49893e-08 1.10285e-08 7.35805e-09 4.47448e-09 - 2.47146e-09 1.22943e-09 5.43995e-10 2.10686e-10 7.50309e-11 2.44997e-11 7.24709e-12 1.91736e-12 4.46976e-13 8.99281e-14 1.55431e-14 1.9984e-15 - 2.22045e-16 0 0 0 0 0 2.22045e-16 1.55431e-15 1.24345e-14 8.08242e-14 4.28768e-13 1.92668e-12 - 7.49623e-12 2.57132e-11 7.88785e-11 2.19052e-10 5.56952e-10 1.32699e-09 2.80516e-09 5.33003e-09 9.20951e-09 1.45901e-08 2.12741e-08 2.84371e-08 - 2.84372e-08 2.12742e-08 1.45902e-08 9.20956e-09 5.33006e-09 2.80518e-09 1.327e-09 5.56956e-10 2.19054e-10 7.88791e-11 2.57132e-11 7.49623e-12 - 1.92668e-12 4.28768e-13 8.08242e-14 1.24345e-14 1.55431e-15 2.22045e-16 0 0 0 2.22045e-16 6.66134e-16 7.32747e-15 - 5.77316e-14 3.42837e-13 1.6751e-12 6.92202e-12 2.47884e-11 7.83049e-11 2.21286e-10 5.66113e-10 1.32527e-09 2.86887e-09 5.70383e-09 1.02873e-08 - 1.70183e-08 2.60347e-08 3.69876e-08 4.86686e-08 4.86688e-08 3.69878e-08 2.60349e-08 1.70184e-08 1.02873e-08 5.70386e-09 2.86889e-09 1.32528e-09 - 5.66117e-10 2.21288e-10 7.83054e-11 2.47886e-11 6.92224e-12 1.67488e-12 3.43059e-13 5.75096e-14 7.54952e-15 6.66134e-16 2.22045e-16 0 - 0 2.22045e-16 3.33067e-15 3.04201e-14 2.15161e-13 1.18949e-12 5.38525e-12 2.06466e-11 6.86449e-11 2.01458e-10 5.29317e-10 1.26008e-09 - 2.74738e-09 5.54327e-09 1.04215e-08 1.79208e-08 2.84885e-08 4.22079e-08 5.85593e-08 7.59772e-08 7.59775e-08 5.85596e-08 4.22081e-08 2.84887e-08 - 1.79209e-08 1.04216e-08 5.5433e-09 2.7474e-09 1.26008e-09 5.2932e-10 2.0146e-10 6.86451e-11 2.06468e-11 5.38525e-12 1.18949e-12 2.15161e-13 - 3.04201e-14 3.10862e-15 2.22045e-16 0 0 6.66134e-16 1.11022e-14 1.0103e-13 6.69242e-13 3.4579e-12 1.46374e-11 5.25091e-11 - 1.63484e-10 4.49717e-10 1.10878e-09 2.4801e-09 5.08783e-09 9.67029e-09 1.72862e-08 2.84763e-08 4.36769e-08 6.2885e-08 8.54435e-08 1.09568e-07 - 1.09569e-07 8.54438e-08 6.28852e-08 4.36771e-08 2.84764e-08 1.72862e-08 9.67033e-09 5.08786e-09 2.48011e-09 1.10879e-09 4.4972e-10 1.63485e-10 - 5.25096e-11 1.46374e-11 3.45812e-12 6.69464e-13 1.0103e-13 1.08802e-14 6.66134e-16 0 0 2.22045e-15 3.26406e-14 2.83551e-13 - 1.76814e-12 8.59712e-12 3.42757e-11 1.15898e-10 3.40437e-10 8.84617e-10 2.06344e-09 4.37483e-09 8.52441e-09 1.54192e-08 2.63279e-08 4.17535e-08 - 6.20526e-08 8.7137e-08 1.1631e-07 1.47826e-07 1.47826e-07 1.1631e-07 8.71373e-08 6.20528e-08 4.17536e-08 2.6328e-08 1.54193e-08 8.52445e-09 - 4.37485e-09 2.06345e-09 8.84622e-10 3.40439e-10 1.15899e-10 3.42759e-11 8.59712e-12 1.76814e-12 2.83551e-13 3.26406e-14 2.22045e-15 0 - 2.22045e-16 6.21725e-15 8.30447e-14 6.84341e-13 4.04454e-12 1.86415e-11 7.04949e-11 2.26289e-10 6.31752e-10 1.56265e-09 3.47647e-09 7.04578e-09 - 1.3155e-08 2.2851e-08 3.72517e-08 5.71488e-08 8.26373e-08 1.13581e-07 1.49402e-07 1.88763e-07 1.88763e-07 1.49403e-07 1.13582e-07 8.26375e-08 - 5.7149e-08 3.72518e-08 2.28511e-08 1.3155e-08 7.04581e-09 3.47649e-09 1.56266e-09 6.31756e-10 2.2629e-10 7.04956e-11 1.86418e-11 4.04476e-12 - 6.84341e-13 8.30447e-14 6.21725e-15 2.22045e-16 4.44089e-16 1.46549e-14 1.84075e-13 1.44462e-12 8.14215e-12 3.57974e-11 1.29191e-10 3.96066e-10 - 1.05718e-09 2.50368e-09 5.34247e-09 1.04065e-08 1.87152e-08 3.13858e-08 4.95105e-08 7.38088e-08 1.0424e-07 1.40689e-07 1.82899e-07 2.3042e-07 - 2.3042e-07 1.829e-07 1.40689e-07 1.04241e-07 7.3809e-08 4.95107e-08 3.13859e-08 1.87153e-08 1.04065e-08 5.34249e-09 2.5037e-09 1.05718e-09 - 3.96068e-10 1.29192e-10 3.57978e-11 8.14238e-12 1.44462e-12 1.84075e-13 1.46549e-14 4.44089e-16 1.11022e-15 2.95319e-14 3.5949e-13 2.70806e-12 - 1.46505e-11 6.18288e-11 2.14289e-10 6.3139e-10 1.62154e-09 3.70033e-09 7.6215e-09 1.43571e-08 2.50176e-08 4.0721e-08 6.24333e-08 9.08099e-08 - 1.25678e-07 1.67024e-07 2.15163e-07 2.7111e-07 2.71111e-07 2.15163e-07 1.67024e-07 1.25678e-07 9.08101e-08 6.24335e-08 4.07211e-08 2.50177e-08 - 1.43571e-08 7.62153e-09 3.70035e-09 1.62154e-09 6.31394e-10 2.1429e-10 6.18292e-11 1.46505e-11 2.70806e-12 3.59268e-13 2.95319e-14 1.11022e-15 - 2.22045e-15 5.32907e-14 6.26832e-13 4.56568e-12 2.38563e-11 9.72413e-11 3.25636e-10 9.2771e-10 2.30604e-09 5.10007e-09 1.01961e-08 1.86738e-08 - 3.1689e-08 5.03111e-08 7.53466e-08 1.07298e-07 1.45914e-07 1.91373e-07 2.44844e-07 3.09507e-07 3.09508e-07 2.44844e-07 1.91374e-07 1.45914e-07 - 1.07298e-07 7.53468e-08 5.03112e-08 3.16891e-08 1.86739e-08 1.01961e-08 5.10009e-09 2.30605e-09 9.27715e-10 3.25638e-10 9.72418e-11 2.38565e-11 - 4.56568e-12 6.26832e-13 5.30687e-14 2.22045e-15 3.10862e-15 8.57092e-14 9.8721e-13 6.99329e-12 3.55145e-11 1.40679e-10 4.57957e-10 1.26909e-09 - 3.07134e-09 6.6207e-09 1.29175e-08 2.31186e-08 3.83858e-08 5.96967e-08 8.7655e-08 1.2256e-07 1.64115e-07 2.1278e-07 2.70897e-07 3.44636e-07 - 3.44637e-07 2.70898e-07 2.1278e-07 1.64115e-07 1.2256e-07 8.76552e-08 5.96968e-08 3.83859e-08 2.31187e-08 1.29175e-08 6.62072e-09 3.07135e-09 - 1.2691e-09 4.57959e-10 1.40679e-10 3.55145e-11 6.99307e-12 9.87432e-13 8.57092e-14 3.33067e-15 4.66294e-15 1.25011e-13 1.41465e-12 9.81104e-12 - 4.87306e-11 1.88758e-10 6.01023e-10 1.62997e-09 3.86319e-09 8.16244e-09 1.56234e-08 2.7454e-08 4.4789e-08 6.84764e-08 9.88775e-08 1.36047e-07 - 1.7965e-07 2.30522e-07 2.92541e-07 3.75823e-07 3.75824e-07 2.92541e-07 2.30522e-07 1.7965e-07 1.36047e-07 9.88777e-08 6.84765e-08 4.47891e-08 - 2.74541e-08 1.56234e-08 8.16247e-09 3.86321e-09 1.62998e-09 6.01026e-10 1.88759e-10 4.8731e-11 9.81082e-12 1.41487e-12 1.25011e-13 4.66294e-15 - 6.43929e-15 1.65645e-13 1.85607e-12 1.2685e-11 6.20168e-11 2.36395e-10 7.40849e-10 1.9783e-09 4.61891e-09 9.61833e-09 1.81517e-08 3.14581e-08 - 5.06202e-08 7.63239e-08 1.0865e-07 1.47356e-07 1.92062e-07 2.44072e-07 3.09208e-07 4.02643e-07 4.02643e-07 3.09208e-07 2.44072e-07 1.92063e-07 - 1.47356e-07 1.0865e-07 7.63241e-08 5.06203e-08 3.14582e-08 1.81518e-08 9.61836e-09 4.61893e-09 1.97831e-09 7.40852e-10 2.36396e-10 6.20171e-11 - 1.26847e-11 1.85585e-12 1.65867e-13 6.21725e-15 7.32747e-15 2.00284e-13 2.23799e-12 1.51783e-11 7.35192e-11 2.7755e-10 8.61583e-10 2.27942e-09 - 5.27372e-09 1.08829e-08 2.03506e-08 3.49345e-08 5.56477e-08 8.29868e-08 1.1671e-07 1.56212e-07 2.01047e-07 2.53074e-07 3.20514e-07 4.24878e-07 - 4.24878e-07 3.20515e-07 2.53074e-07 2.01047e-07 1.56212e-07 1.16711e-07 8.29869e-08 5.56478e-08 3.49346e-08 2.03507e-08 1.0883e-08 5.27373e-09 - 2.27943e-09 8.61586e-10 2.77551e-10 7.35196e-11 1.51783e-11 2.23799e-12 2.00506e-13 7.32747e-15 7.77156e-15 2.21156e-13 2.48646e-12 1.68479e-11 - 8.13791e-11 3.06259e-10 9.47803e-10 2.50011e-09 5.76663e-09 1.18592e-08 2.20844e-08 3.7715e-08 5.96854e-08 8.82785e-08 1.22888e-07 1.62456e-07 - 2.0644e-07 2.57331e-07 3.26245e-07 4.42496e-07 4.42497e-07 3.26245e-07 2.57332e-07 2.0644e-07 1.62456e-07 1.22888e-07 8.82787e-08 5.96855e-08 - 3.77151e-08 2.20845e-08 1.18592e-08 5.76665e-09 2.50012e-09 9.47806e-10 3.0626e-10 8.13796e-11 1.68481e-11 2.48646e-12 2.21378e-13 7.77156e-15 - 7.54952e-15 2.22933e-13 2.54552e-12 1.73552e-11 8.41485e-11 3.17766e-10 9.86911e-10 2.61258e-09 6.04562e-09 1.24635e-08 2.32367e-08 3.96595e-08 - 6.25883e-08 9.20739e-08 1.271e-07 1.66043e-07 2.08228e-07 2.5682e-07 3.26356e-07 4.55639e-07 4.5564e-07 3.26356e-07 2.56821e-07 2.08228e-07 - 1.66044e-07 1.271e-07 9.2074e-08 6.25884e-08 3.96596e-08 2.32368e-08 1.24635e-08 6.04564e-09 2.61259e-09 9.86915e-10 3.17768e-10 8.41489e-11 - 1.73555e-11 2.54552e-12 2.22933e-13 7.32747e-15 6.21725e-15 2.04725e-13 2.39764e-12 1.65676e-11 8.11635e-11 3.09572e-10 9.71389e-10 2.5983e-09 - 6.07266e-09 1.26305e-08 2.37152e-08 4.06646e-08 6.42786e-08 9.43672e-08 1.2942e-07 1.67056e-07 2.0656e-07 2.51699e-07 3.20973e-07 4.64599e-07 - 4.646e-07 3.20974e-07 2.51699e-07 2.0656e-07 1.67056e-07 1.2942e-07 9.43673e-08 6.42787e-08 4.06647e-08 2.37153e-08 1.26305e-08 6.07268e-09 - 2.59831e-09 9.71393e-10 3.09573e-10 8.1164e-11 1.65679e-11 2.39764e-12 2.04725e-13 6.21725e-15 4.66294e-15 1.70308e-13 2.07101e-12 1.46088e-11 - 7.27725e-11 2.82171e-10 9.00631e-10 2.45137e-09 5.82812e-09 1.23158e-08 2.34421e-08 4.06188e-08 6.4615e-08 9.4995e-08 1.29745e-07 1.65689e-07 - 2.01741e-07 2.42304e-07 3.10385e-07 4.6979e-07 4.6979e-07 3.10385e-07 2.42305e-07 2.01741e-07 1.65689e-07 1.29745e-07 9.49951e-08 6.46152e-08 - 4.06188e-08 2.34422e-08 1.23159e-08 5.82813e-09 2.45138e-09 9.00634e-10 2.82173e-10 7.27727e-11 1.46085e-11 2.07079e-12 1.70086e-13 4.88498e-15 - 2.88658e-15 1.27232e-13 1.63092e-12 1.18374e-11 6.03309e-11 2.39277e-10 7.82024e-10 2.18156e-09 5.31637e-09 1.1503e-08 2.23635e-08 3.94278e-08 - 6.34957e-08 9.39364e-08 1.28247e-07 1.62235e-07 1.94203e-07 2.29125e-07 2.95004e-07 4.71704e-07 4.71704e-07 2.95005e-07 2.29125e-07 1.94203e-07 - 1.62235e-07 1.28247e-07 9.39365e-08 6.34958e-08 3.94279e-08 2.23635e-08 1.1503e-08 5.31638e-09 2.18157e-09 7.82028e-10 2.39278e-10 6.03313e-11 - 1.18376e-11 1.63092e-12 1.27232e-13 2.88658e-15 1.77636e-15 8.99281e-14 1.19948e-12 8.88134e-12 4.60081e-11 1.87069e-10 6.30743e-10 1.81607e-09 - 4.57213e-09 1.02156e-08 2.04629e-08 3.7019e-08 6.08139e-08 9.11078e-08 1.24892e-07 1.57038e-07 1.84449e-07 2.12761e-07 2.75341e-07 4.70872e-07 - 4.70873e-07 2.75342e-07 2.12762e-07 1.84449e-07 1.57039e-07 1.24892e-07 9.11079e-08 6.08141e-08 3.70191e-08 2.04629e-08 1.02156e-08 4.57215e-09 - 1.81607e-09 6.30745e-10 1.8707e-10 4.60083e-11 8.88134e-12 1.19971e-12 8.99281e-14 1.77636e-15 1.11022e-15 6.19504e-14 8.63976e-13 6.51945e-12 - 3.42699e-11 1.41511e-10 4.85894e-10 1.42947e-09 3.68578e-09 8.45673e-09 1.77841e-08 3.33556e-08 5.64578e-08 8.64221e-08 1.1979e-07 1.5043e-07 - 1.72984e-07 1.93894e-07 2.5197e-07 4.67829e-07 4.6783e-07 2.5197e-07 1.93895e-07 1.72984e-07 1.5043e-07 1.1979e-07 8.64222e-08 5.64578e-08 - 3.33556e-08 1.77841e-08 8.45675e-09 3.68579e-09 1.42947e-09 4.85896e-10 1.41512e-10 3.42704e-11 6.51945e-12 8.64198e-13 6.19504e-14 1.11022e-15 - 4.44089e-16 4.15223e-14 6.07958e-13 4.65961e-12 2.47631e-11 1.03525e-10 3.61136e-10 1.08375e-09 2.86924e-09 6.77057e-09 1.45993e-08 2.8132e-08 - 4.99815e-08 7.97137e-08 1.13047e-07 1.42599e-07 1.60234e-07 1.73258e-07 2.25522e-07 4.63087e-07 4.63088e-07 2.25522e-07 1.73259e-07 1.60234e-07 - 1.42599e-07 1.13047e-07 7.97138e-08 4.99816e-08 2.8132e-08 1.45993e-08 6.77059e-09 2.86925e-09 1.08375e-09 3.61138e-10 1.03526e-10 2.47635e-11 - 4.65961e-12 6.0818e-13 4.17444e-14 4.44089e-16 2.22045e-16 2.75335e-14 4.17444e-13 3.23541e-12 1.73193e-11 7.30782e-11 2.584e-10 7.89828e-10 - 2.1436e-09 5.19783e-09 1.14903e-08 2.28966e-08 4.1773e-08 6.83563e-08 1.04049e-07 1.33212e-07 1.46437e-07 1.5163e-07 1.96706e-07 4.5712e-07 - 4.57121e-07 1.96706e-07 1.5163e-07 1.46437e-07 1.33212e-07 1.0405e-07 6.83564e-08 4.1773e-08 2.28966e-08 1.14904e-08 5.19784e-09 2.14361e-09 - 7.8983e-10 2.58401e-10 7.30789e-11 1.73195e-11 3.23541e-12 4.17666e-13 2.75335e-14 2.22045e-16 2.22045e-16 1.77636e-14 2.78444e-13 2.1747e-12 - 1.16811e-11 4.95926e-11 1.7734e-10 5.51318e-10 1.53184e-09 3.81615e-09 8.65697e-09 1.78056e-08 3.33179e-08 5.6523e-08 8.7085e-08 1.20664e-07 - 1.31477e-07 1.29812e-07 1.66362e-07 4.50347e-07 4.50348e-07 1.66363e-07 1.29812e-07 1.31478e-07 1.20664e-07 8.7085e-08 5.65231e-08 3.3318e-08 - 1.78056e-08 8.65698e-09 3.81616e-09 1.53185e-09 5.5132e-10 1.7734e-10 4.95928e-11 1.16811e-11 2.1747e-12 2.78444e-13 1.75415e-14 2.22045e-16 - 2.22045e-16 1.08802e-14 1.79634e-13 1.40754e-12 7.55795e-12 3.21867e-11 1.16133e-10 3.66662e-10 1.04167e-09 2.66617e-09 6.21649e-09 1.31982e-08 - 2.53865e-08 4.43159e-08 6.94851e-08 1.01322e-07 1.14603e-07 1.08596e-07 1.35562e-07 4.4312e-07 4.43121e-07 1.35562e-07 1.08596e-07 1.14603e-07 - 1.01322e-07 6.94852e-08 4.4316e-08 2.53865e-08 1.31982e-08 6.21651e-09 2.66617e-09 1.04167e-09 3.66663e-10 1.16133e-10 3.21869e-11 7.55818e-12 - 1.40776e-12 1.79634e-13 1.11022e-14 2.22045e-16 0 6.66134e-15 1.11244e-13 8.71303e-13 4.6585e-12 1.98381e-11 7.20588e-11 2.30718e-10 - 6.69446e-10 1.76052e-09 4.22562e-09 9.26855e-09 1.83972e-08 3.3076e-08 5.29475e-08 7.4216e-08 9.46253e-08 8.86623e-08 1.05791e-07 4.35717e-07 - 4.35718e-07 1.05791e-07 8.86623e-08 9.46253e-08 7.4216e-08 5.29476e-08 3.3076e-08 1.83972e-08 9.26857e-09 4.22563e-09 1.76053e-09 6.69448e-10 - 2.30719e-10 7.20592e-11 1.98384e-11 4.6585e-12 8.71525e-13 1.11466e-13 6.43929e-15 0 -1.11022e-16 3.55271e-15 6.55032e-14 5.10703e-13 - 2.70894e-12 1.15004e-11 4.19607e-11 1.36057e-10 4.02842e-10 1.08875e-09 2.69493e-09 6.11725e-09 1.25753e-08 2.33503e-08 3.85169e-08 5.47572e-08 - 7.31806e-08 7.02781e-08 7.92578e-08 4.28338e-07 4.28339e-07 7.9258e-08 7.02781e-08 7.31806e-08 5.47572e-08 3.85169e-08 2.33503e-08 1.25753e-08 - 6.11726e-09 2.69494e-09 1.08876e-09 4.02843e-10 1.36058e-10 4.19609e-11 1.15004e-11 2.70894e-12 5.10703e-13 6.55032e-14 3.77476e-15 -1.11022e-16 - 0 1.9984e-15 3.61933e-14 2.79776e-13 1.46616e-12 6.18727e-12 2.26277e-11 7.42078e-11 2.24065e-10 6.22688e-10 1.59298e-09 3.75212e-09 - 8.02267e-09 1.54591e-08 2.63994e-08 3.87511e-08 5.35149e-08 5.31776e-08 5.94356e-08 4.21103e-07 4.21104e-07 5.94356e-08 5.31776e-08 5.35149e-08 - 3.87511e-08 2.63994e-08 1.54591e-08 8.02268e-09 3.75212e-09 1.59299e-09 6.2269e-10 2.24066e-10 7.4208e-11 2.26277e-11 6.18749e-12 1.46616e-12 - 2.79776e-13 3.61933e-14 2.22045e-15 0 0 8.88178e-16 1.84297e-14 1.40332e-13 7.24532e-13 3.03091e-12 1.10871e-11 3.67342e-11 - 1.13082e-10 3.23463e-10 8.57667e-10 2.10442e-09 4.70527e-09 9.47099e-09 1.68573e-08 2.56926e-08 3.47588e-08 3.73352e-08 4.94648e-08 4.15342e-07 - 4.15343e-07 4.94649e-08 3.73352e-08 3.47588e-08 2.56926e-08 1.68574e-08 9.471e-09 4.70528e-09 2.10442e-09 8.57669e-10 3.23464e-10 1.13082e-10 - 3.67342e-11 1.10871e-11 3.03091e-12 7.24532e-13 1.40332e-13 1.84297e-14 8.88178e-16 0 0 4.44089e-16 8.43769e-15 6.26166e-14 - 3.17746e-13 1.31384e-12 4.79861e-12 1.60483e-11 5.0381e-11 1.48592e-10 4.09945e-10 1.0537e-09 2.48151e-09 5.26386e-09 9.85406e-09 1.57299e-08 - 2.03338e-08 2.39342e-08 4.35775e-08 4.18688e-07 4.18689e-07 4.35776e-08 2.39342e-08 2.03338e-08 1.57299e-08 9.85407e-09 5.26386e-09 2.48151e-09 - 1.0537e-09 4.09945e-10 1.48592e-10 5.03813e-11 1.60485e-11 4.79861e-12 1.31406e-12 3.17746e-13 6.26166e-14 8.43769e-15 4.44089e-16 0 - 0 2.22045e-16 3.33067e-15 2.37588e-14 1.1835e-13 4.82281e-13 1.75571e-12 5.9257e-12 1.89919e-11 5.79299e-11 1.67248e-10 4.54123e-10 - 1.13857e-09 2.57781e-09 5.14218e-09 8.70467e-09 1.18568e-08 1.43461e-08 4.30977e-08 4.3839e-07 4.3839e-07 4.30978e-08 1.43461e-08 1.18568e-08 - 8.70468e-09 5.14219e-09 2.57781e-09 1.13857e-09 4.54124e-10 1.67248e-10 5.79301e-11 1.89919e-11 5.9257e-12 1.75571e-12 4.82281e-13 1.1835e-13 - 2.39808e-14 3.33067e-15 2.22045e-16 0 0 0 8.88178e-16 7.10543e-15 3.4639e-14 1.39e-13 5.04929e-13 1.72196e-12 - 5.65081e-12 1.79243e-11 5.46554e-11 1.58914e-10 4.31698e-10 1.06519e-09 2.31348e-09 4.23463e-09 6.17141e-09 7.53235e-09 5.60359e-08 4.91898e-07 - 4.91899e-07 5.6036e-08 7.53235e-09 6.17141e-09 4.23463e-09 2.31349e-09 1.06519e-09 4.31699e-10 1.58914e-10 5.46558e-11 1.79246e-11 5.65081e-12 - 1.72173e-12 5.04929e-13 1.39e-13 3.4639e-14 7.10543e-15 8.88178e-16 0 0 0 0 2.22045e-16 1.33227e-15 - 6.88338e-15 2.73115e-14 9.9698e-14 3.45501e-13 1.17018e-12 3.9051e-12 1.27922e-11 4.0824e-11 1.2423e-10 3.47973e-10 8.59585e-10 1.76729e-09 - 2.84678e-09 3.62199e-09 1.27642e-07 6.36077e-07 6.36077e-07 1.27642e-07 3.62199e-09 2.84678e-09 1.76729e-09 8.59586e-10 3.47973e-10 1.2423e-10 - 4.08242e-11 1.27922e-11 3.9051e-12 1.17018e-12 3.45279e-13 9.9698e-14 2.73115e-14 6.88338e-15 1.33227e-15 2.22045e-16 0 0 - 0 0 0 0 6.66134e-16 2.44249e-15 9.76996e-15 3.5083e-14 1.26787e-13 4.60743e-13 1.69753e-12 6.33205e-12 - 2.35605e-11 8.3989e-11 2.68852e-10 7.45146e-10 2.92921e-07 5.46032e-07 8.18818e-07 1.16725e-06 1.16725e-06 8.18818e-07 5.46032e-07 2.92921e-07 - 7.45146e-10 2.68852e-10 8.3989e-11 2.35607e-11 6.33182e-12 1.69731e-12 4.60521e-13 1.26565e-13 3.5083e-14 9.76996e-15 2.44249e-15 6.66134e-16 - 0 0 0 0 + 7.71462e-08 1.05316e-07 1.2235e-07 1.36718e-07 1.50799e-07 1.65351e-07 1.78971e-07 1.9308e-07 2.08263e-07 2.24308e-07 2.40256e-07 2.55649e-07 + 2.70033e-07 2.83054e-07 2.94546e-07 3.04572e-07 3.13414e-07 3.21174e-07 3.28407e-07 3.36591e-07 3.36854e-07 3.28609e-07 3.2135e-07 3.13577e-07 + 3.04724e-07 2.94687e-07 2.83185e-07 2.70155e-07 2.55761e-07 2.40358e-07 2.24401e-07 2.08348e-07 1.93157e-07 1.7904e-07 1.65414e-07 1.50857e-07 + 1.3677e-07 1.22397e-07 1.05357e-07 7.71791e-08 1.22795e-07 1.83007e-07 2.23425e-07 2.4754e-07 2.61081e-07 2.69524e-07 2.76824e-07 2.83435e-07 + 2.89487e-07 2.95153e-07 3.00721e-07 3.06081e-07 3.11079e-07 3.15559e-07 3.19397e-07 3.22535e-07 3.24999e-07 3.28352e-07 3.35127e-07 3.47986e-07 + 3.48262e-07 3.35307e-07 3.28495e-07 3.25126e-07 3.22657e-07 3.19515e-07 3.15672e-07 3.11188e-07 3.06184e-07 3.00819e-07 2.95245e-07 2.89574e-07 + 2.83516e-07 2.76901e-07 2.69596e-07 2.61148e-07 2.47604e-07 2.23483e-07 1.83057e-07 1.22831e-07 1.3708e-07 2.03965e-07 2.42106e-07 2.61207e-07 + 2.71661e-07 2.78714e-07 2.84236e-07 2.88906e-07 2.9301e-07 2.96654e-07 2.99856e-07 3.02575e-07 3.04758e-07 3.06388e-07 3.07547e-07 3.08493e-07 + 3.09764e-07 3.14479e-07 3.26283e-07 3.50132e-07 3.50422e-07 3.26444e-07 3.14589e-07 3.09853e-07 3.08577e-07 3.07628e-07 3.06468e-07 3.04836e-07 + 3.02651e-07 2.9993e-07 2.96725e-07 2.93076e-07 2.88969e-07 2.84296e-07 2.7877e-07 2.71714e-07 2.61258e-07 2.42156e-07 2.0401e-07 1.37113e-07 + 1.40132e-07 2.08971e-07 2.43384e-07 2.58095e-07 2.65519e-07 2.70638e-07 2.74845e-07 2.7847e-07 2.81554e-07 2.84051e-07 2.85891e-07 2.87003e-07 + 2.87366e-07 2.8707e-07 2.86414e-07 2.86038e-07 2.87117e-07 2.94189e-07 3.12796e-07 3.51187e-07 3.51486e-07 3.12938e-07 2.94269e-07 2.87169e-07 + 2.86084e-07 2.86458e-07 2.87116e-07 2.87413e-07 2.87051e-07 2.85938e-07 2.84098e-07 2.81599e-07 2.78513e-07 2.74886e-07 2.70678e-07 2.65558e-07 + 2.58134e-07 2.43425e-07 2.0901e-07 1.40161e-07 1.38128e-07 2.08062e-07 2.39747e-07 2.51255e-07 2.56063e-07 2.59154e-07 2.61793e-07 2.64142e-07 + 2.66063e-07 2.67355e-07 2.67826e-07 2.67338e-07 2.6586e-07 2.6357e-07 2.60998e-07 2.59254e-07 2.60346e-07 2.70062e-07 2.96332e-07 3.51897e-07 + 3.52202e-07 2.96457e-07 2.70117e-07 2.6037e-07 2.59269e-07 2.61012e-07 2.63587e-07 2.65881e-07 2.67361e-07 2.67852e-07 2.67382e-07 2.6609e-07 + 2.64169e-07 2.6182e-07 2.59181e-07 2.56091e-07 2.51286e-07 2.39781e-07 2.08096e-07 1.38154e-07 1.33564e-07 2.04556e-07 2.3459e-07 2.4391e-07 + 2.46615e-07 2.47818e-07 2.48816e-07 2.49714e-07 2.50269e-07 2.50156e-07 2.49069e-07 2.46785e-07 2.43248e-07 2.38709e-07 2.33943e-07 2.30591e-07 + 2.31637e-07 2.43883e-07 2.77913e-07 3.52445e-07 3.52755e-07 2.78023e-07 2.43921e-07 2.31642e-07 2.30585e-07 2.33935e-07 2.38705e-07 2.43249e-07 + 2.4679e-07 2.49078e-07 2.50168e-07 2.50283e-07 2.4973e-07 2.48833e-07 2.47837e-07 2.46636e-07 2.43934e-07 2.34619e-07 2.04586e-07 1.33586e-07 + 1.27632e-07 1.99761e-07 2.28968e-07 2.36903e-07 2.38042e-07 2.37665e-07 2.37149e-07 2.366e-07 2.35718e-07 2.34088e-07 2.31313e-07 2.27094e-07 + 2.21348e-07 2.14392e-07 2.07239e-07 2.02067e-07 2.02877e-07 2.17259e-07 2.58437e-07 3.529e-07 3.53214e-07 2.58538e-07 2.17292e-07 2.02877e-07 + 2.02052e-07 2.0722e-07 2.14375e-07 2.21336e-07 2.27087e-07 2.31311e-07 2.3409e-07 2.35724e-07 2.36609e-07 2.3716e-07 2.37678e-07 2.38058e-07 + 2.36923e-07 2.28993e-07 1.99788e-07 1.27651e-07 1.20971e-07 1.94274e-07 2.23213e-07 2.30363e-07 2.30415e-07 2.28811e-07 2.2702e-07 2.25163e-07 + 2.22904e-07 2.1977e-07 2.15299e-07 2.09138e-07 2.01192e-07 1.91843e-07 1.82322e-07 1.75291e-07 1.75682e-07 1.91627e-07 2.38729e-07 3.53298e-07 + 3.53615e-07 2.3883e-07 1.91667e-07 1.75689e-07 1.75278e-07 1.82301e-07 1.91821e-07 2.01173e-07 2.09124e-07 2.1529e-07 2.19767e-07 2.22905e-07 + 2.25168e-07 2.27027e-07 2.28821e-07 2.30428e-07 2.3038e-07 2.23235e-07 1.94299e-07 1.20988e-07 1.14272e-07 1.88187e-07 2.17428e-07 2.24211e-07 + 2.2356e-07 2.21055e-07 2.1825e-07 2.15276e-07 2.11774e-07 2.07234e-07 2.01156e-07 1.93169e-07 1.8319e-07 1.71678e-07 1.60063e-07 1.51395e-07 + 1.51314e-07 1.68161e-07 2.19516e-07 3.53656e-07 3.53977e-07 2.19628e-07 1.68218e-07 1.51339e-07 1.51395e-07 1.60048e-07 1.71658e-07 1.83169e-07 + 1.93152e-07 2.01144e-07 2.07227e-07 2.11771e-07 2.15278e-07 2.18255e-07 2.21063e-07 2.23571e-07 2.24226e-07 2.17448e-07 1.88209e-07 1.14287e-07 + 1.07741e-07 1.81972e-07 2.11417e-07 2.18335e-07 2.17263e-07 2.14126e-07 2.10536e-07 2.06632e-07 2.02035e-07 1.96218e-07 1.88678e-07 1.7906e-07 + 1.67329e-07 1.54052e-07 1.4084e-07 1.31017e-07 1.30599e-07 1.4767e-07 2.01388e-07 3.53989e-07 3.54312e-07 2.01524e-07 1.47752e-07 1.30646e-07 + 1.31034e-07 1.40836e-07 1.54037e-07 1.6731e-07 1.79042e-07 1.88665e-07 1.96209e-07 2.02031e-07 2.06632e-07 2.1054e-07 2.14132e-07 2.17273e-07 + 2.18348e-07 2.11435e-07 1.81992e-07 1.07755e-07 1.01382e-07 1.75767e-07 2.05424e-07 2.12586e-07 2.1135e-07 2.07779e-07 2.03587e-07 1.98904e-07 + 1.93339e-07 1.86374e-07 1.77532e-07 1.66516e-07 1.53383e-07 1.38837e-07 1.24665e-07 1.14345e-07 1.13881e-07 1.30549e-07 1.84767e-07 3.54302e-07 + 3.54628e-07 1.84937e-07 1.30656e-07 1.13949e-07 1.14379e-07 1.24673e-07 1.38829e-07 1.53368e-07 1.665e-07 1.77519e-07 1.86364e-07 1.93334e-07 + 1.98902e-07 2.03589e-07 2.07784e-07 2.11358e-07 2.12598e-07 2.0544e-07 1.75786e-07 1.01395e-07 9.52108e-08 1.69658e-07 1.99544e-07 2.06972e-07 + 2.05697e-07 2.01831e-07 1.97165e-07 1.9181e-07 1.85376e-07 1.77375e-07 1.67394e-07 1.5523e-07 1.41072e-07 1.25789e-07 1.11335e-07 1.01222e-07 + 1.01049e-07 1.168e-07 1.69895e-07 3.54602e-07 3.54931e-07 1.70105e-07 1.16928e-07 1.01131e-07 1.01269e-07 1.11354e-07 1.2579e-07 1.41062e-07 + 1.55217e-07 1.67382e-07 1.77366e-07 1.85371e-07 1.91808e-07 1.97166e-07 2.01835e-07 2.05704e-07 2.06983e-07 1.9956e-07 1.69675e-07 9.52216e-08 + 8.92469e-08 1.63708e-07 1.93847e-07 2.01514e-07 2.00234e-07 1.96161e-07 1.911e-07 1.85141e-07 1.77908e-07 1.68972e-07 1.58014e-07 1.44959e-07 + 1.30156e-07 1.14655e-07 1.00551e-07 9.12653e-08 9.16502e-08 1.06127e-07 1.56843e-07 3.54892e-07 3.55223e-07 1.57093e-07 1.06266e-07 9.17369e-08 + 9.13184e-08 1.00578e-07 1.14663e-07 1.30152e-07 1.44949e-07 1.58003e-07 1.68963e-07 1.77903e-07 1.85139e-07 1.911e-07 1.96164e-07 2.0024e-07 + 2.01523e-07 1.93861e-07 1.63725e-07 8.92565e-08 8.35122e-08 1.57966e-07 1.88377e-07 1.96231e-07 1.94927e-07 1.90694e-07 1.85281e-07 1.78757e-07 + 1.70779e-07 1.61004e-07 1.49235e-07 1.35548e-07 1.20469e-07 1.05222e-07 9.19949e-08 8.3986e-08 8.50485e-08 9.80642e-08 1.45544e-07 3.55176e-07 + 3.55509e-07 1.4583e-07 9.82068e-08 8.51319e-08 8.40397e-08 9.20266e-08 1.05236e-07 1.20471e-07 1.35544e-07 1.49228e-07 1.60997e-07 1.70774e-07 + 1.78754e-07 1.85281e-07 1.90697e-07 1.94931e-07 1.9624e-07 1.88391e-07 1.57982e-07 8.35207e-08 7.80254e-08 1.52467e-07 1.83198e-07 1.91097e-07 + 1.89765e-07 1.85395e-07 1.79646e-07 1.72578e-07 1.63907e-07 1.53397e-07 1.40991e-07 1.2693e-07 1.11914e-07 9.73218e-08 8.53632e-08 7.88781e-08 + 8.05854e-08 9.21017e-08 1.3584e-07 3.55454e-07 3.5579e-07 1.36155e-07 9.22391e-08 8.06599e-08 7.89274e-08 8.5396e-08 9.73404e-08 1.11922e-07 + 1.2693e-07 1.40987e-07 1.53392e-07 1.63903e-07 1.72575e-07 1.79645e-07 1.85397e-07 1.8977e-07 1.91104e-07 1.83212e-07 1.52481e-07 7.80331e-08 + 7.28017e-08 1.47298e-07 1.78256e-07 1.86111e-07 1.84754e-07 1.80248e-07 1.74167e-07 1.66577e-07 1.57273e-07 1.46143e-07 1.33281e-07 1.19092e-07 + 1.0444e-07 9.08091e-08 8.03383e-08 7.53693e-08 7.76818e-08 8.77664e-08 1.27526e-07 3.55729e-07 3.56067e-07 1.27859e-07 8.78925e-08 7.77448e-08 + 7.54059e-08 8.03673e-08 9.08292e-08 1.04451e-07 1.19096e-07 1.33281e-07 1.4614e-07 1.5727e-07 1.66575e-07 1.74167e-07 1.8025e-07 1.84758e-07 + 1.86118e-07 1.78269e-07 1.47313e-07 7.28086e-08 6.78994e-08 1.4247e-07 1.73494e-07 1.81288e-07 1.79902e-07 1.75257e-07 1.68847e-07 1.60765e-07 + 1.50904e-07 1.39282e-07 1.26145e-07 1.12056e-07 9.80174e-08 8.55742e-08 7.6725e-08 7.32845e-08 7.58811e-08 8.46644e-08 1.20388e-07 3.56002e-07 + 3.56342e-07 1.2073e-07 8.47756e-08 7.5932e-08 7.33205e-08 7.6752e-08 8.55948e-08 9.80313e-08 1.12064e-07 1.26148e-07 1.39282e-07 1.50902e-07 + 1.60764e-07 1.68847e-07 1.75258e-07 1.79906e-07 1.81295e-07 1.73506e-07 1.42484e-07 6.79061e-08 6.33999e-08 1.37893e-07 1.68915e-07 1.76638e-07 + 1.7522e-07 1.70433e-07 1.63709e-07 1.55183e-07 1.44855e-07 1.32878e-07 1.19642e-07 1.05853e-07 9.26227e-08 8.15065e-08 7.42982e-08 7.22404e-08 + 7.48462e-08 8.24888e-08 1.1423e-07 3.56272e-07 3.56614e-07 1.14568e-07 8.25833e-08 7.48861e-08 7.22675e-08 7.43213e-08 8.15261e-08 9.2638e-08 + 1.05863e-07 1.19648e-07 1.3288e-07 1.44855e-07 1.55183e-07 1.63709e-07 1.70435e-07 1.75223e-07 1.76644e-07 1.68926e-07 1.37907e-07 6.34064e-08 + 5.92687e-08 1.33548e-07 1.64512e-07 1.72164e-07 1.70717e-07 1.65798e-07 1.5879e-07 1.49887e-07 1.39198e-07 1.27004e-07 1.1383e-07 1.00504e-07 + 8.82122e-08 7.84665e-08 7.27779e-08 7.1776e-08 7.43377e-08 8.101e-08 1.08883e-07 3.56542e-07 3.56886e-07 1.09208e-07 8.10876e-08 7.43683e-08 + 7.1796e-08 7.27964e-08 7.84842e-08 8.82277e-08 1.00516e-07 1.13838e-07 1.27008e-07 1.392e-07 1.49888e-07 1.5879e-07 1.65799e-07 1.7072e-07 + 1.72169e-07 1.64522e-07 1.33561e-07 5.9275e-08 5.54676e-08 1.29405e-07 1.60273e-07 1.67863e-07 1.66402e-07 1.61374e-07 1.54134e-07 1.4494e-07 + 1.34005e-07 1.21728e-07 1.08753e-07 9.60077e-08 8.47196e-08 7.63023e-08 7.19304e-08 7.16776e-08 7.4189e-08 8.00601e-08 1.04214e-07 3.5681e-07 + 3.57156e-07 1.04518e-07 8.01218e-08 7.42122e-08 7.16922e-08 7.19446e-08 7.63176e-08 8.47346e-08 9.60206e-08 1.08763e-07 1.21735e-07 1.34009e-07 + 1.44942e-07 1.54135e-07 1.61376e-07 1.66404e-07 1.67868e-07 1.60282e-07 1.29418e-07 5.54736e-08 5.19535e-08 1.25432e-07 1.56177e-07 1.63729e-07 + 1.62281e-07 1.57188e-07 1.49788e-07 1.40405e-07 1.29343e-07 1.17105e-07 1.04436e-07 9.23421e-08 8.20591e-08 7.48613e-08 7.15641e-08 7.17952e-08 + 7.42852e-08 7.95173e-08 1.00126e-07 3.57078e-07 3.57426e-07 1.00402e-07 7.95647e-08 7.43028e-08 7.18061e-08 7.15749e-08 7.48742e-08 8.2073e-08 + 9.23551e-08 1.04446e-07 1.17113e-07 1.29348e-07 1.40408e-07 1.4979e-07 1.5719e-07 1.62284e-07 1.63734e-07 1.56186e-07 1.25444e-07 5.19592e-08 + 4.86769e-08 1.21589e-07 1.522e-07 1.5975e-07 1.58358e-07 1.53263e-07 1.45795e-07 1.36334e-07 1.25264e-07 1.13171e-07 1.00881e-07 8.94627e-08 + 8.01328e-08 7.40007e-08 7.15266e-08 7.20274e-08 7.45478e-08 7.92924e-08 9.65582e-08 3.57345e-07 3.57695e-07 9.68017e-08 7.93275e-08 7.45615e-08 + 7.2036e-08 7.1535e-08 7.40113e-08 8.01454e-08 8.94755e-08 1.00893e-07 1.13179e-07 1.2527e-07 1.36338e-07 1.45797e-07 1.53265e-07 1.58361e-07 + 1.59755e-07 1.52208e-07 1.216e-07 4.86824e-08 4.55798e-08 1.17829e-07 1.48314e-07 1.55911e-07 1.54634e-07 1.49616e-07 1.42186e-07 1.32769e-07 + 1.21805e-07 1.09942e-07 9.80754e-08 8.73114e-08 7.88403e-08 7.35964e-08 7.17043e-08 7.23115e-08 7.49242e-08 7.93188e-08 9.34836e-08 3.57612e-07 + 3.57964e-07 9.36906e-08 7.93438e-08 7.49353e-08 7.23187e-08 7.1711e-08 7.36052e-08 7.88515e-08 8.73235e-08 9.80867e-08 1.09952e-07 1.21811e-07 + 1.32774e-07 1.42189e-07 1.49619e-07 1.54636e-07 1.55916e-07 1.48322e-07 1.1784e-07 4.5585e-08 4.26168e-08 1.14091e-07 1.44483e-07 1.52192e-07 + 1.51101e-07 1.46258e-07 1.38986e-07 1.29738e-07 1.18988e-07 1.07425e-07 9.59892e-08 8.58208e-08 7.80854e-08 7.3551e-08 7.20221e-08 7.26197e-08 + 7.5382e-08 7.95448e-08 9.09121e-08 3.57879e-07 3.58233e-07 9.10803e-08 7.95622e-08 7.53915e-08 7.26262e-08 7.20277e-08 7.35584e-08 7.80955e-08 + 8.58323e-08 9.60003e-08 1.07434e-07 1.18995e-07 1.29743e-07 1.38989e-07 1.4626e-07 1.51104e-07 1.52196e-07 1.44491e-07 1.14101e-07 4.26217e-08 + 3.97412e-08 1.10319e-07 1.40657e-07 1.48559e-07 1.47744e-07 1.43184e-07 1.36202e-07 1.27255e-07 1.16823e-07 1.05613e-07 9.45912e-08 8.49231e-08 + 7.77706e-08 7.37899e-08 7.24427e-08 7.29623e-08 7.59057e-08 7.99285e-08 8.88934e-08 3.58146e-07 3.58503e-07 8.90217e-08 7.99406e-08 7.59144e-08 + 7.29684e-08 7.24475e-08 7.37964e-08 7.77798e-08 8.49339e-08 9.46021e-08 1.05622e-07 1.1683e-07 1.27259e-07 1.36205e-07 1.43187e-07 1.47747e-07 + 1.48563e-07 1.40664e-07 1.10329e-07 3.97457e-08 3.68965e-08 1.06451e-07 1.36779e-07 1.44966e-07 1.44526e-07 1.40369e-07 1.33815e-07 1.25308e-07 + 1.15307e-07 1.04505e-07 9.38708e-08 8.4581e-08 7.78195e-08 7.42061e-08 7.29463e-08 7.33993e-08 7.64961e-08 8.04347e-08 8.75221e-08 3.58414e-07 + 3.58773e-07 8.76107e-08 8.04434e-08 7.65044e-08 7.34051e-08 7.29502e-08 7.4212e-08 7.78281e-08 8.45913e-08 9.38812e-08 1.04514e-07 1.15314e-07 + 1.25312e-07 1.33818e-07 1.40372e-07 1.44529e-07 1.4497e-07 1.36786e-07 1.06461e-07 3.69006e-08 3.40118e-08 1.02412e-07 1.32778e-07 1.41353e-07 + 1.41383e-07 1.37706e-07 1.31678e-07 1.23729e-07 1.14287e-07 1.04014e-07 9.38432e-08 8.49232e-08 7.84196e-08 7.49344e-08 7.3677e-08 7.40595e-08 + 7.71713e-08 8.10345e-08 8.6942e-08 3.58683e-07 3.59044e-07 8.69922e-08 8.10415e-08 7.71791e-08 7.40648e-08 7.36807e-08 7.494e-08 7.84278e-08 + 8.49331e-08 9.38533e-08 1.04022e-07 1.14294e-07 1.23733e-07 1.31681e-07 1.37709e-07 1.41386e-07 1.41357e-07 1.32784e-07 1.02421e-07 3.40157e-08 + 3.13062e-08 9.81121e-08 1.28483e-07 1.37543e-07 1.38142e-07 1.35072e-07 1.29706e-07 1.22465e-07 1.13738e-07 1.04125e-07 9.4503e-08 8.59612e-08 + 7.96176e-08 7.60585e-08 7.46353e-08 7.50018e-08 7.79887e-08 8.17205e-08 8.73491e-08 3.58954e-07 3.59317e-07 8.73632e-08 8.17272e-08 7.79965e-08 + 7.50074e-08 7.46395e-08 7.60642e-08 7.96256e-08 8.59707e-08 9.45125e-08 1.04133e-07 1.13744e-07 1.2247e-07 1.29709e-07 1.35074e-07 1.38144e-07 + 1.37547e-07 1.2849e-07 9.81206e-08 3.13097e-08 2.87815e-08 9.35345e-08 1.23724e-07 1.33381e-07 1.347e-07 1.32377e-07 1.27816e-07 1.21441e-07 + 1.13587e-07 1.04779e-07 9.5807e-08 8.76761e-08 8.14327e-08 7.76647e-08 7.59713e-08 7.61897e-08 7.89981e-08 8.24955e-08 8.79211e-08 3.59967e-07 + 3.6031e-07 8.79348e-08 8.25019e-08 7.90057e-08 7.61958e-08 7.59763e-08 7.76708e-08 8.14406e-08 8.76852e-08 9.58159e-08 1.04786e-07 1.13593e-07 + 1.21445e-07 1.27818e-07 1.32379e-07 1.34702e-07 1.33385e-07 1.2373e-07 9.35425e-08 2.87846e-08 2.64041e-08 8.85832e-08 1.18358e-07 1.28709e-07 + 1.30907e-07 1.2948e-07 1.25873e-07 1.20523e-07 1.1371e-07 1.05866e-07 9.76716e-08 9.00253e-08 8.38869e-08 7.98662e-08 7.78561e-08 7.77742e-08 + 8.02736e-08 8.33858e-08 8.85629e-08 3.61992e-07 3.62319e-07 8.85764e-08 8.33918e-08 8.02811e-08 7.77807e-08 7.78618e-08 7.98727e-08 8.38947e-08 + 9.00338e-08 9.76796e-08 1.05872e-07 1.13715e-07 1.20526e-07 1.25876e-07 1.29482e-07 1.30909e-07 1.28713e-07 1.18364e-07 8.85907e-08 2.64069e-08 + 2.41411e-08 8.31559e-08 1.12224e-07 1.23315e-07 1.26538e-07 1.26163e-07 1.23662e-07 1.19496e-07 1.13896e-07 1.07193e-07 9.9939e-08 9.29066e-08 + 8.69583e-08 8.27327e-08 8.03893e-08 7.98751e-08 8.18926e-08 8.44145e-08 8.92927e-08 3.65327e-07 3.6564e-07 8.9306e-08 8.442e-08 8.18998e-08 + 7.98819e-08 8.03956e-08 8.27395e-08 8.69659e-08 9.29144e-08 9.99461e-08 1.07198e-07 1.13901e-07 1.19499e-07 1.23665e-07 1.26165e-07 1.2654e-07 + 1.23319e-07 1.1223e-07 8.31628e-08 2.41437e-08 2.19587e-08 7.71475e-08 1.05143e-07 1.16926e-07 1.21273e-07 1.22091e-07 1.20844e-07 1.18018e-07 + 1.13805e-07 1.08436e-07 1.02326e-07 9.61015e-08 9.05157e-08 8.62209e-08 8.35848e-08 8.25711e-08 8.39181e-08 8.55869e-08 9.01336e-08 3.70404e-07 + 3.70706e-07 9.01469e-08 8.55918e-08 8.39248e-08 8.2578e-08 8.35914e-08 8.62277e-08 9.05228e-08 9.61083e-08 1.02332e-07 1.08441e-07 1.13809e-07 + 1.18021e-07 1.20846e-07 1.22093e-07 1.21276e-07 1.1693e-07 1.05149e-07 7.71538e-08 2.1961e-08 1.98203e-08 7.04587e-08 9.69325e-08 1.09217e-07 + 1.14684e-07 1.16781e-07 1.16908e-07 1.15559e-07 1.12902e-07 1.09073e-07 1.04346e-07 9.91906e-08 9.42294e-08 9.00918e-08 8.7272e-08 8.60881e-08 + 8.63668e-08 8.68621e-08 9.11175e-08 3.77867e-07 3.78157e-07 9.11311e-08 8.68663e-08 8.63726e-08 8.60939e-08 8.72784e-08 9.00982e-08 9.42357e-08 + 9.91963e-08 1.04351e-07 1.09077e-07 1.12905e-07 1.15562e-07 1.1691e-07 1.16784e-07 1.14687e-07 1.09221e-07 9.69378e-08 7.04644e-08 1.98224e-08 + 1.76836e-08 6.30085e-08 8.74264e-08 9.98412e-08 1.06256e-07 1.09595e-07 1.11133e-07 1.1135e-07 1.10384e-07 1.08292e-07 1.05212e-07 1.01443e-07 + 9.74551e-08 9.38001e-08 9.1008e-08 8.95272e-08 8.88632e-08 8.80847e-08 9.22989e-08 3.88716e-07 3.88997e-07 9.23132e-08 8.80882e-08 8.88685e-08 + 8.9533e-08 9.10136e-08 9.38056e-08 9.74602e-08 1.01448e-07 1.05215e-07 1.08295e-07 1.10386e-07 1.11352e-07 1.11135e-07 1.09598e-07 1.06259e-07 + 9.98452e-08 8.74312e-08 6.30135e-08 1.76854e-08 1.54965e-08 5.47495e-08 7.65116e-08 8.84994e-08 9.54657e-08 9.98071e-08 1.02629e-07 1.04371e-07 + 1.0514e-07 1.04923e-07 1.03731e-07 1.01693e-07 9.9094e-08 9.63514e-08 9.39353e-08 9.22717e-08 9.09777e-08 8.89663e-08 9.3809e-08 4.04643e-07 + 4.04915e-07 9.38247e-08 8.89688e-08 9.09819e-08 9.22764e-08 9.394e-08 9.63557e-08 9.90979e-08 1.01696e-07 1.03734e-07 1.04926e-07 1.05142e-07 + 1.04373e-07 1.02632e-07 9.98098e-08 9.54689e-08 8.85032e-08 7.6516e-08 5.47538e-08 1.54981e-08 1.31918e-08 4.56838e-08 6.41688e-08 7.50318e-08 + 8.19341e-08 8.67841e-08 9.05121e-08 9.3505e-08 9.58475e-08 9.74754e-08 9.82928e-08 9.82651e-08 9.74794e-08 9.61581e-08 9.46202e-08 9.31817e-08 + 9.18401e-08 8.88971e-08 9.60392e-08 4.28815e-07 4.2908e-07 9.60578e-08 8.88987e-08 9.18433e-08 9.31852e-08 9.46237e-08 9.61612e-08 9.74822e-08 + 9.82675e-08 9.8295e-08 9.74774e-08 9.58495e-08 9.35071e-08 9.05145e-08 8.67868e-08 8.19371e-08 7.50352e-08 6.41725e-08 4.56872e-08 1.31931e-08 + 1.0679e-08 3.58822e-08 5.05233e-08 5.95282e-08 6.56192e-08 7.02737e-08 7.42597e-08 7.79237e-08 8.13504e-08 8.44647e-08 8.71134e-08 8.91388e-08 + 9.04424e-08 9.10221e-08 9.09693e-08 9.03966e-08 8.919e-08 8.64992e-08 1.00415e-07 4.68033e-07 4.68289e-07 1.00439e-07 8.65001e-08 8.91921e-08 + 9.03991e-08 9.09717e-08 9.10244e-08 9.04445e-08 8.91407e-08 8.71152e-08 8.44666e-08 8.13523e-08 7.79258e-08 7.42619e-08 7.02761e-08 6.56218e-08 + 5.9531e-08 5.05261e-08 3.58848e-08 1.06801e-08 7.84247e-09 2.55191e-08 3.59135e-08 4.24422e-08 4.70124e-08 5.07156e-08 5.41644e-08 5.76709e-08 + 6.13452e-08 6.51551e-08 6.89696e-08 7.26015e-08 7.58487e-08 7.85273e-08 8.04803e-08 8.1533e-08 8.13113e-08 8.00493e-08 1.13619e-07 5.39811e-07 + 5.40056e-07 1.13656e-07 8.00507e-08 8.13128e-08 8.15349e-08 8.04822e-08 7.8529e-08 7.58503e-08 7.26031e-08 6.89712e-08 6.51567e-08 6.13469e-08 + 5.76725e-08 5.41661e-08 5.07174e-08 4.70142e-08 4.24441e-08 3.59155e-08 2.55209e-08 7.84327e-09 4.60252e-09 1.4985e-08 2.10429e-08 2.47687e-08 + 2.73605e-08 2.95476e-08 3.17709e-08 3.42858e-08 3.72217e-08 4.06157e-08 4.44325e-08 4.85788e-08 5.2913e-08 5.72427e-08 6.12827e-08 6.45386e-08 + 6.61041e-08 6.51234e-08 1.79176e-07 7.0288e-07 7.03101e-07 1.79244e-07 6.51238e-08 6.61054e-08 6.45402e-08 6.12842e-08 5.7244e-08 5.29142e-08 + 4.85799e-08 4.44336e-08 4.06166e-08 3.72226e-08 3.42867e-08 3.17718e-08 2.95485e-08 2.73614e-08 2.47697e-08 2.10439e-08 1.49859e-08 4.603e-09 + 1.36657e-09 5.38704e-09 7.55517e-09 8.66966e-09 9.32845e-09 9.91863e-09 1.06819e-08 1.17691e-08 1.32795e-08 1.52868e-08 1.7856e-08 2.106e-08 + 2.49966e-08 2.97813e-08 3.53959e-08 4.11756e-08 3.57589e-07 6.25994e-07 9.15456e-07 1.27505e-06 1.27513e-06 9.15479e-07 6.2601e-07 3.57592e-07 + 4.1177e-08 3.5397e-08 2.97822e-08 2.49972e-08 2.10605e-08 1.78564e-08 1.5287e-08 1.32797e-08 1.17692e-08 1.0682e-08 9.91873e-09 9.32858e-09 + 8.66985e-09 7.55542e-09 5.38733e-09 1.36674e-09 - 7.54613e-07 1.06361e-05 0 9.55545e-07 1.59257e-05 0 -1.6009e-07 1.70935e-05 0 -1.1832e-06 1.68584e-05 0 - -2.03357e-06 1.59205e-05 0 -2.76507e-06 1.44888e-05 0 -3.41427e-06 1.26403e-05 0 -3.99529e-06 1.04149e-05 0 - -4.50784e-06 7.84438e-06 0 -4.94261e-06 4.96305e-06 0 -5.28408e-06 1.81336e-06 0 -5.51198e-06 -1.55024e-06 0 - -5.60235e-06 -5.05793e-06 0 -5.52887e-06 -8.62146e-06 0 -5.26476e-06 -1.21317e-05 0 -4.78606e-06 -1.54572e-05 0 - -4.07661e-06 -1.84453e-05 0 -3.13515e-06 -2.09266e-05 0 -1.98445e-06 -2.27258e-05 0 -6.80721e-07 -2.36825e-05 0 - 6.80711e-07 -2.36826e-05 0 1.98444e-06 -2.27259e-05 0 3.13515e-06 -2.09266e-05 0 4.07661e-06 -1.84453e-05 0 - 4.78606e-06 -1.54572e-05 0 5.26476e-06 -1.21317e-05 0 5.52887e-06 -8.62149e-06 0 5.60235e-06 -5.05796e-06 0 - 5.51198e-06 -1.55027e-06 0 5.28408e-06 1.81334e-06 0 4.94261e-06 4.96303e-06 0 4.50784e-06 7.84436e-06 0 - 3.99529e-06 1.04149e-05 0 3.41427e-06 1.26403e-05 0 2.76507e-06 1.44888e-05 0 2.03357e-06 1.59205e-05 0 - 1.1832e-06 1.68584e-05 0 1.60091e-07 1.70935e-05 0 -9.55544e-07 1.59257e-05 0 -7.54613e-07 1.06361e-05 0 - 4.38748e-07 2.08334e-05 0 1.55683e-07 3.25732e-05 0 -1.6724e-06 3.52932e-05 0 -3.90392e-06 3.48421e-05 0 - -6.08186e-06 3.28938e-05 0 -8.1051e-06 2.99481e-05 0 -9.96628e-06 2.61712e-05 0 -1.16639e-05 2.16368e-05 0 - -1.31818e-05 1.63997e-05 0 -1.4487e-05 1.05204e-05 0 -1.55314e-05 4.07679e-06 0 -1.62532e-05 -2.8288e-06 0 - -1.65786e-05 -1.00621e-05 0 -1.64252e-05 -1.74502e-05 0 -1.57063e-05 -2.4775e-05 0 -1.43412e-05 -3.1768e-05 0 - -1.22698e-05 -3.81085e-05 0 -9.47624e-06 -4.34288e-05 0 -6.01969e-06 -4.73325e-05 0 -2.06944e-06 -4.94345e-05 0 - 2.06941e-06 -4.94345e-05 0 6.01966e-06 -4.73325e-05 0 9.47622e-06 -4.34289e-05 0 1.22698e-05 -3.81085e-05 0 - 1.43412e-05 -3.1768e-05 0 1.57063e-05 -2.4775e-05 0 1.64252e-05 -1.74502e-05 0 1.65786e-05 -1.00621e-05 0 - 1.62532e-05 -2.82884e-06 0 1.55314e-05 4.07674e-06 0 1.4487e-05 1.05204e-05 0 1.31818e-05 1.63996e-05 0 - 1.16639e-05 2.16367e-05 0 9.96628e-06 2.61711e-05 0 8.10511e-06 2.99481e-05 0 6.08186e-06 3.28937e-05 0 - 3.90392e-06 3.48421e-05 0 1.6724e-06 3.52932e-05 0 -1.55681e-07 3.25732e-05 0 -4.38747e-07 2.08334e-05 0 - -1.99977e-07 2.05947e-05 0 -1.35648e-06 3.42516e-05 0 -3.67737e-06 3.77639e-05 0 -6.52716e-06 3.74527e-05 0 - -9.48666e-06 3.54206e-05 0 -1.23731e-05 3.2331e-05 0 -1.51134e-05 2.83898e-05 0 -1.76656e-05 2.3668e-05 0 - -1.99851e-05 1.82058e-05 0 -2.20127e-05 1.20471e-05 0 -2.36709e-05 5.25267e-06 0 -2.48623e-05 -2.09152e-06 0 - -2.54699e-05 -9.86624e-06 0 -2.53592e-05 -1.79102e-05 0 -2.43842e-05 -2.60089e-05 0 -2.24e-05 -3.38833e-05 0 - -1.92876e-05 -4.1177e-05 0 -1.49918e-05 -4.74497e-05 0 -9.57815e-06 -5.21818e-05 0 -3.30487e-06 -5.48088e-05 0 - 3.30482e-06 -5.48088e-05 0 9.57811e-06 -5.21818e-05 0 1.49917e-05 -4.74498e-05 0 1.92876e-05 -4.11771e-05 0 - 2.24e-05 -3.38833e-05 0 2.43841e-05 -2.6009e-05 0 2.53592e-05 -1.79102e-05 0 2.54699e-05 -9.86629e-06 0 - 2.48623e-05 -2.09157e-06 0 2.36709e-05 5.25262e-06 0 2.20127e-05 1.20471e-05 0 1.99851e-05 1.82058e-05 0 - 1.76656e-05 2.36679e-05 0 1.51134e-05 2.83898e-05 0 1.23731e-05 3.2331e-05 0 9.48666e-06 3.54205e-05 0 - 6.52716e-06 3.74527e-05 0 3.67738e-06 3.77638e-05 0 1.35648e-06 3.42515e-05 0 1.99978e-07 2.05946e-05 0 - -6.28719e-07 2.14234e-05 0 -2.57276e-06 3.65234e-05 0 -5.56216e-06 4.08023e-05 0 -9.05434e-06 4.07563e-05 0 - -1.27149e-05 3.87371e-05 0 -1.63618e-05 3.55479e-05 0 -1.98951e-05 3.14466e-05 0 -2.32447e-05 2.6513e-05 0 - -2.63414e-05 2.07769e-05 0 -2.91015e-05 1.42638e-05 0 -3.14195e-05 7.01225e-06 0 -3.31634e-05 -9.15781e-07 0 - -3.41714e-05 -9.42635e-06 0 -3.42506e-05 -1.83815e-05 0 -3.31817e-05 -2.75816e-05 0 -3.07334e-05 -3.67429e-05 0 - -2.66949e-05 -4.54683e-05 0 -2.09325e-05 -5.32167e-05 0 -1.34811e-05 -5.92799e-05 0 -4.67576e-06 -6.27894e-05 0 - 4.67569e-06 -6.27894e-05 0 1.34811e-05 -5.92799e-05 0 2.09325e-05 -5.32168e-05 0 2.66949e-05 -4.54684e-05 0 - 3.07334e-05 -3.6743e-05 0 3.31817e-05 -2.75817e-05 0 3.42506e-05 -1.83816e-05 0 3.41714e-05 -9.4264e-06 0 - 3.31634e-05 -9.15832e-07 0 3.14195e-05 7.0122e-06 0 2.91015e-05 1.42637e-05 0 2.63414e-05 2.07769e-05 0 - 2.32447e-05 2.6513e-05 0 1.98951e-05 3.14466e-05 0 1.63618e-05 3.55478e-05 0 1.27149e-05 3.87371e-05 0 - 9.05435e-06 4.07562e-05 0 5.56217e-06 4.08023e-05 0 2.57276e-06 3.65234e-05 0 6.28719e-07 2.14233e-05 0 - -9.21555e-07 2.29736e-05 0 -3.53617e-06 3.95318e-05 0 -7.26821e-06 4.45154e-05 0 -1.14912e-05 4.47584e-05 0 - -1.58992e-05 4.28035e-05 0 -2.03264e-05 3.95556e-05 0 -2.467e-05 3.53157e-05 0 -2.88478e-05 3.01714e-05 0 - -3.27745e-05 2.41419e-05 0 -3.63471e-05 1.72314e-05 0 -3.94348e-05 9.45031e-06 0 -4.18709e-05 8.26208e-07 0 - -4.34446e-05 -8.58665e-06 0 -4.38934e-05 -1.86932e-05 0 -4.29031e-05 -2.93292e-05 0 -4.01234e-05 -4.02233e-05 0 - -3.52077e-05 -5.09421e-05 0 -2.78921e-05 -6.08208e-05 0 -1.81328e-05 -6.88865e-05 0 -6.32792e-06 -7.3793e-05 0 - 6.32782e-06 -7.3793e-05 0 1.81327e-05 -6.88866e-05 0 2.78921e-05 -6.08209e-05 0 3.52077e-05 -5.09422e-05 0 - 4.01234e-05 -4.02234e-05 0 4.29031e-05 -2.93293e-05 0 4.38934e-05 -1.86933e-05 0 4.34446e-05 -8.58671e-06 0 - 4.18709e-05 8.26155e-07 0 3.94348e-05 9.45026e-06 0 3.63471e-05 1.72314e-05 0 3.27745e-05 2.41419e-05 0 - 2.88478e-05 3.01713e-05 0 2.467e-05 3.53157e-05 0 2.03264e-05 3.95556e-05 0 1.58992e-05 4.28034e-05 0 - 1.14912e-05 4.47584e-05 0 7.26822e-06 4.45154e-05 0 3.53617e-06 3.95318e-05 0 9.21556e-07 2.29736e-05 0 - -1.15274e-06 2.50479e-05 0 -4.3649e-06 4.32843e-05 0 -8.85401e-06 4.89841e-05 0 -1.38651e-05 4.95238e-05 0 - -1.90791e-05 4.766e-05 0 -2.43396e-05 4.43868e-05 0 -2.95486e-05 4.00371e-05 0 -3.46223e-05 3.47015e-05 0 - -3.9468e-05 2.83842e-05 0 -4.39691e-05 2.10628e-05 0 -4.79728e-05 1.27104e-05 0 -5.12774e-05 3.3069e-06 0 - -5.36172e-05 -7.15387e-06 0 -5.46448e-05 -1.86495e-05 0 -5.39244e-05 -3.10836e-05 0 -5.09471e-05 -4.4226e-05 0 - -4.51802e-05 -5.7622e-05 0 -3.6172e-05 -7.04648e-05 0 -2.37443e-05 -8.14296e-05 0 -8.33915e-06 -8.84599e-05 0 - 8.33902e-06 -8.846e-05 0 2.37442e-05 -8.14297e-05 0 3.61719e-05 -7.04649e-05 0 4.51802e-05 -5.76221e-05 0 - 5.09471e-05 -4.42261e-05 0 5.39244e-05 -3.10836e-05 0 5.46448e-05 -1.86496e-05 0 5.36172e-05 -7.15394e-06 0 - 5.12774e-05 3.30685e-06 0 4.79728e-05 1.27103e-05 0 4.39691e-05 2.10627e-05 0 3.9468e-05 2.83842e-05 0 - 3.46223e-05 3.47014e-05 0 2.95486e-05 4.00371e-05 0 2.43396e-05 4.43868e-05 0 1.90791e-05 4.766e-05 0 - 1.38651e-05 4.95238e-05 0 8.85402e-06 4.8984e-05 0 4.3649e-06 4.32843e-05 0 1.15274e-06 2.50479e-05 0 - -1.35675e-06 2.75574e-05 0 -5.12583e-06 4.7756e-05 0 -1.03673e-05 5.42429e-05 0 -1.61953e-05 5.5104e-05 0 - -2.226e-05 5.33585e-05 0 -2.84067e-05 5.00954e-05 0 -3.45449e-05 4.56757e-05 0 -4.05953e-05 4.0187e-05 0 - -4.64644e-05 3.36135e-05 0 -5.20276e-05 2.58977e-05 0 -5.71125e-05 1.69641e-05 0 -6.14807e-05 6.72594e-06 0 - -6.48024e-05 -4.91137e-06 0 -6.66277e-05 -1.80391e-05 0 -6.63681e-05 -3.2674e-05 0 -6.33153e-05 -4.86658e-05 0 - -5.67031e-05 -6.55613e-05 0 -4.58385e-05 -8.23983e-05 0 -3.03574e-05 -9.74049e-05 0 -1.07242e-05 -0.000107523 0 - 1.0724e-05 -0.000107523 0 3.03573e-05 -9.7405e-05 0 4.58384e-05 -8.23985e-05 0 5.67031e-05 -6.55615e-05 0 - 6.33153e-05 -4.86659e-05 0 6.63681e-05 -3.26741e-05 0 6.66277e-05 -1.80392e-05 0 6.48025e-05 -4.91144e-06 0 - 6.14807e-05 6.72588e-06 0 5.71126e-05 1.69641e-05 0 5.20276e-05 2.58977e-05 0 4.64644e-05 3.36134e-05 0 - 4.05953e-05 4.0187e-05 0 3.45449e-05 4.56757e-05 0 2.84067e-05 5.00954e-05 0 2.226e-05 5.33585e-05 0 - 1.61953e-05 5.5104e-05 0 1.03673e-05 5.42429e-05 0 5.12583e-06 4.7756e-05 0 1.35675e-06 2.75574e-05 0 - -1.54621e-06 3.04604e-05 0 -5.84568e-06 5.29216e-05 0 -1.18274e-05 6.03006e-05 0 -1.8482e-05 6.15289e-05 0 - -2.54246e-05 5.99409e-05 0 -3.24995e-05 5.67347e-05 0 -3.96252e-05 5.23003e-05 0 -4.67316e-05 4.67192e-05 0 - -5.37297e-05 3.99486e-05 0 -6.04904e-05 3.18865e-05 0 -6.68221e-05 2.23921e-05 0 -7.24434e-05 1.12873e-05 0 - -7.69476e-05 -1.64682e-06 0 -7.97623e-05 -1.66636e-05 0 -8.01179e-05 -3.39534e-05 0 -7.70711e-05 -5.34859e-05 0 - -6.95889e-05 -7.48357e-05 0 -5.67023e-05 -9.68752e-05 0 -3.78251e-05 -0.000117286 0 -1.34265e-05 -0.000131674 0 - 1.34263e-05 -0.000131674 0 3.7825e-05 -0.000117286 0 5.67022e-05 -9.68754e-05 0 6.95888e-05 -7.48359e-05 0 - 7.70711e-05 -5.3486e-05 0 8.01179e-05 -3.39535e-05 0 7.97623e-05 -1.66637e-05 0 7.69476e-05 -1.64689e-06 0 - 7.24434e-05 1.12873e-05 0 6.68222e-05 2.2392e-05 0 6.04904e-05 3.18864e-05 0 5.37298e-05 3.99485e-05 0 - 4.67317e-05 4.67192e-05 0 3.96252e-05 5.23003e-05 0 3.24995e-05 5.67347e-05 0 2.54246e-05 5.99409e-05 0 - 1.8482e-05 6.15289e-05 0 1.18274e-05 6.03006e-05 0 5.84569e-06 5.29216e-05 0 1.54621e-06 3.04604e-05 0 - -1.72409e-06 3.37307e-05 0 -6.52913e-06 5.87558e-05 0 -1.32309e-05 6.71499e-05 0 -2.07059e-05 6.88093e-05 0 - -2.85358e-05 6.7433e-05 0 -3.65646e-05 6.43463e-05 0 -4.47222e-05 5.99721e-05 0 -5.29513e-05 5.4383e-05 0 - -6.11708e-05 4.75024e-05 0 -6.92479e-05 3.91705e-05 0 -7.69678e-05 2.91597e-05 0 -8.39956e-05 1.71688e-05 0 - -8.98309e-05 2.81117e-06 0 -9.3759e-05 -1.43788e-05 0 -9.48078e-05 -3.48339e-05 0 -9.17825e-05 -5.86775e-05 0 - -8.33733e-05 -8.55355e-05 0 -6.8328e-05 -0.000114107 0 -4.58248e-05 -0.000141434 0 -1.63245e-05 -0.000161424 0 - 1.63242e-05 -0.000161425 0 4.58246e-05 -0.000141435 0 6.83278e-05 -0.000114108 0 8.33733e-05 -8.55357e-05 0 - 9.17825e-05 -5.86777e-05 0 9.48078e-05 -3.4834e-05 0 9.3759e-05 -1.43789e-05 0 8.98309e-05 2.81109e-06 0 - 8.39957e-05 1.71687e-05 0 7.69678e-05 2.91597e-05 0 6.92479e-05 3.91704e-05 0 6.11708e-05 4.75023e-05 0 - 5.29514e-05 5.4383e-05 0 4.47222e-05 5.99721e-05 0 3.65646e-05 6.43463e-05 0 2.85358e-05 6.7433e-05 0 - 2.07059e-05 6.88093e-05 0 1.32309e-05 6.71499e-05 0 6.52914e-06 5.87558e-05 0 1.72409e-06 3.37307e-05 0 - -1.88898e-06 3.73438e-05 0 -7.16911e-06 6.5228e-05 0 -1.45589e-05 7.47693e-05 0 -2.28312e-05 7.69371e-05 0 - -3.15378e-05 7.58417e-05 0 -4.05251e-05 7.29538e-05 0 -4.97372e-05 6.87343e-05 0 -5.9132e-05 6.32447e-05 0 - -6.8637e-05 5.63651e-05 0 -7.81129e-05 4.78607e-05 0 -8.73127e-05 3.73892e-05 0 -9.58332e-05 2.44877e-05 0 - -0.000103062 8.55655e-06 0 -0.000108128 -1.11309e-05 0 -0.00010985 -3.53104e-05 0 -0.000106792 -6.42841e-05 0 - -9.73856e-05 -9.77447e-05 0 -8.01137e-05 -0.000134215 0 -5.39255e-05 -0.000170018 0 -1.92591e-05 -0.000197008 0 - 1.92588e-05 -0.000197008 0 5.39253e-05 -0.000170018 0 8.01136e-05 -0.000134216 0 9.73855e-05 -9.7745e-05 0 - 0.000106792 -6.42843e-05 0 0.00010985 -3.53106e-05 0 0.000108128 -1.1131e-05 0 0.000103062 8.55647e-06 0 - 9.58333e-05 2.44876e-05 0 8.73127e-05 3.73892e-05 0 7.81129e-05 4.78606e-05 0 6.86371e-05 5.63651e-05 0 - 5.9132e-05 6.32447e-05 0 4.97373e-05 6.87343e-05 0 4.05252e-05 7.29538e-05 0 3.15378e-05 7.58417e-05 0 - 2.28312e-05 7.69371e-05 0 1.45589e-05 7.47693e-05 0 7.16912e-06 6.5228e-05 0 1.88898e-06 3.73438e-05 0 - -2.03736e-06 4.12701e-05 0 -7.75185e-06 7.22963e-05 0 -1.57819e-05 8.3121e-05 0 -2.48081e-05 8.58839e-05 0 - -3.43576e-05 8.5151e-05 0 -4.42821e-05 8.25564e-05 0 -5.45417e-05 7.86034e-05 0 -6.51102e-05 7.3339e-05 0 - -7.59217e-05 6.65874e-05 0 -8.68232e-05 5.80158e-05 0 -9.75231e-05 4.71338e-05 0 -0.000107534 3.32745e-05 0 - -0.000116116 1.5581e-05 0 -0.000122233 -6.97274e-06 0 -0.00012452 -3.54595e-05 0 -0.000121331 -7.03821e-05 0 - -0.000110877 -0.000111507 0 -9.14171e-05 -0.000157185 0 -6.16847e-05 -0.000202969 0 -2.20708e-05 -0.000238337 0 - 2.20705e-05 -0.000238338 0 6.16844e-05 -0.000202969 0 9.1417e-05 -0.000157186 0 0.000110877 -0.000111507 0 - 0.000121331 -7.03824e-05 0 0.00012452 -3.54597e-05 0 0.000122233 -6.97287e-06 0 0.000116116 1.55809e-05 0 - 0.000107534 3.32745e-05 0 9.75231e-05 4.71337e-05 0 8.68233e-05 5.80157e-05 0 7.59218e-05 6.65874e-05 0 - 6.51103e-05 7.33389e-05 0 5.45417e-05 7.86034e-05 0 4.42821e-05 8.25563e-05 0 3.43577e-05 8.5151e-05 0 - 2.48081e-05 8.58839e-05 0 1.57819e-05 8.31209e-05 0 7.75186e-06 7.22963e-05 0 2.03737e-06 4.12701e-05 0 - -2.16455e-06 4.5472e-05 0 -8.25948e-06 7.99038e-05 0 -1.68628e-05 9.21468e-05 0 -2.65763e-05 9.55978e-05 0 - -3.69079e-05 9.53183e-05 0 -4.77167e-05 9.31224e-05 0 -5.89798e-05 8.95601e-05 0 -7.06856e-05 8.46567e-05 0 - -8.2769e-05 7.81646e-05 0 -9.50539e-05 6.96249e-05 0 -0.000107191 5.83617e-05 0 -0.000118596 4.34623e-05 0 - -0.000128395 2.37743e-05 0 -0.000135393 -2.05083e-06 0 -0.000138078 -3.54095e-05 0 -0.000134655 -7.70447e-05 0 - -0.000123162 -0.00012679 0 -0.000101678 -0.000182847 0 -6.87334e-05 -0.000239984 0 -2.46309e-05 -0.000285039 0 - 2.46306e-05 -0.000285039 0 6.87332e-05 -0.000239984 0 0.000101678 -0.000182848 0 0.000123162 -0.00012679 0 - 0.000134655 -7.7045e-05 0 0.000138078 -3.54097e-05 0 0.000135393 -2.05098e-06 0 0.000128395 2.37742e-05 0 - 0.000118596 4.34622e-05 0 0.000107191 5.83617e-05 0 9.50539e-05 6.96249e-05 0 8.27691e-05 7.81646e-05 0 - 7.06857e-05 8.46567e-05 0 5.89799e-05 8.95601e-05 0 4.77167e-05 9.31224e-05 0 3.69079e-05 9.53183e-05 0 - 2.65763e-05 9.55978e-05 0 1.68628e-05 9.21468e-05 0 8.25949e-06 7.99038e-05 0 2.16456e-06 4.5472e-05 0 - -2.26523e-06 4.99018e-05 0 -8.67168e-06 8.79754e-05 0 -1.77595e-05 0.000101766 0 -2.80677e-05 0.000106 0 - -3.909e-05 0.00010627 0 -5.06948e-05 0.000104585 0 -6.28753e-05 0.000101542 0 -7.56304e-05 9.71361e-05 0 - -8.88891e-05 9.10274e-05 0 -0.000102442 8.25998e-05 0 -0.000115872 7.09542e-05 0 -0.000128493 5.48957e-05 0 - -0.000139304 3.29512e-05 0 -0.000146979 3.44501e-06 0 -0.000149897 -3.53022e-05 0 -0.000146166 -8.43061e-05 0 - -0.00013372 -0.000143467 0 -0.000110496 -0.00021088 0 -7.4825e-05 -0.000280566 0 -2.68572e-05 -0.000336526 0 - 2.68569e-05 -0.000336527 0 7.48248e-05 -0.000280567 0 0.000110496 -0.00021088 0 0.00013372 -0.000143467 0 - 0.000146166 -8.43064e-05 0 0.000149897 -3.53024e-05 0 0.000146979 3.44485e-06 0 0.000139304 3.2951e-05 0 - 0.000128493 5.48956e-05 0 0.000115872 7.09541e-05 0 0.000102442 8.25998e-05 0 8.88892e-05 9.10274e-05 0 - 7.56305e-05 9.71361e-05 0 6.28754e-05 0.000101542 0 5.06949e-05 0.000104585 0 3.909e-05 0.00010627 0 - 2.80677e-05 0.000106 0 1.77595e-05 0.000101766 0 8.67168e-06 8.79754e-05 0 2.26523e-06 4.99018e-05 0 - -2.33382e-06 5.45009e-05 0 -8.96703e-06 9.6416e-05 0 -1.84274e-05 0.000111874 0 -2.92097e-05 0.000116983 0 - -4.07991e-05 0.000117899 0 -5.30738e-05 0.000116835 0 -6.60408e-05 0.000114438 0 -7.97051e-05 0.000110659 0 - -9.3983e-05 0.000105041 0 -0.000108625 9.67805e-05 0 -0.000123142 8.47209e-05 0 -0.000136751 6.73588e-05 0 - -0.000148343 4.28914e-05 0 -0.000156495 9.3314e-06 0 -0.000159514 -3.52511e-05 0 -0.000155467 -9.21348e-05 0 - -0.000142239 -0.000161312 0 -0.000117659 -0.00024084 0 -7.98452e-05 -0.00032409 0 -2.87163e-05 -0.0003921 0 - 2.8716e-05 -0.0003921 0 7.9845e-05 -0.000324091 0 0.000117658 -0.000240841 0 0.000142239 -0.000161312 0 - 0.000155467 -9.21352e-05 0 0.000159514 -3.52514e-05 0 0.000156495 9.33122e-06 0 0.000148343 4.28913e-05 0 - 0.000136751 6.73588e-05 0 0.000123142 8.47209e-05 0 0.000108625 9.67805e-05 0 9.3983e-05 0.000105041 0 - 7.97052e-05 0.000110659 0 6.60408e-05 0.000114438 0 5.30738e-05 0.000116835 0 4.07991e-05 0.000117899 0 - 2.92098e-05 0.000116983 0 1.84274e-05 0.000111874 0 8.96704e-06 9.6416e-05 0 2.33382e-06 5.45009e-05 0 - -2.36491e-06 5.91996e-05 0 -9.12434e-06 0.00010511 0 -1.8822e-05 0.000122338 0 -2.99298e-05 0.000128409 0 - -4.19299e-05 0.000130062 0 -5.47105e-05 0.000129727 0 -6.829e-05 0.000128093 0 -8.26755e-05 0.000125054 0 - -9.77665e-05 0.000120015 0 -0.000113272 0.000111953 0 -0.000128636 9.94295e-05 0 -0.000142992 8.0615e-05 0 - -0.000155146 5.33814e-05 0 -0.00016361 1.54574e-05 0 -0.000166663 -3.53049e-05 0 -0.000162371 -0.00010042 0 - -0.000148612 -0.000180014 0 -0.000123126 -0.000272205 0 -8.37976e-05 -0.000369867 0 -3.02168e-05 -0.000451032 0 - 3.02166e-05 -0.000451033 0 8.37975e-05 -0.000369868 0 0.000123126 -0.000272206 0 0.000148611 -0.000180014 0 - 0.000162371 -0.00010042 0 0.000166663 -3.53052e-05 0 0.00016361 1.54572e-05 0 0.000155146 5.33812e-05 0 - 0.000142992 8.06149e-05 0 0.000128636 9.94294e-05 0 0.000113272 0.000111953 0 9.77666e-05 0.000120015 0 - 8.26755e-05 0.000125054 0 6.829e-05 0.000128093 0 5.47105e-05 0.000129727 0 4.19299e-05 0.000130062 0 - 2.99298e-05 0.000128409 0 1.8822e-05 0.000122338 0 9.12434e-06 0.00010511 0 2.36491e-06 5.91996e-05 0 - -2.35351e-06 6.3918e-05 0 -9.12381e-06 0.000113921 0 -1.89013e-05 0.000133002 0 -3.01587e-05 0.00014011 0 - -4.2382e-05 0.000142584 0 -5.54696e-05 0.000143073 0 -6.94493e-05 0.000142306 0 -8.43286e-05 0.000140106 0 - -9.9991e-05 0.000135717 0 -0.000116109 0.000127875 0 -0.000132072 0.000114836 0 -0.00014695 9.44417e-05 0 - -0.00015949 6.4249e-05 0 -0.00016817 2.17333e-05 0 -0.000171264 -3.54341e-05 0 -0.000166873 -0.000108974 0 - -0.000152895 -0.000199196 0 -0.000126994 -0.00030441 0 -8.6776e-05 -0.000417209 0 -3.13993e-05 -0.000512648 0 - 3.13991e-05 -0.000512649 0 8.67759e-05 -0.00041721 0 0.000126994 -0.00030441 0 0.000152895 -0.000199197 0 - 0.000166873 -0.000108975 0 0.000171264 -3.54344e-05 0 0.00016817 2.17331e-05 0 0.00015949 6.42489e-05 0 - 0.00014695 9.44416e-05 0 0.000132073 0.000114836 0 0.000116109 0.000127875 0 9.99911e-05 0.000135717 0 - 8.43286e-05 0.000140106 0 6.94493e-05 0.000142306 0 5.54696e-05 0.000143073 0 4.2382e-05 0.000142584 0 - 3.01587e-05 0.00014011 0 1.89013e-05 0.000133002 0 9.12381e-06 0.000113921 0 2.35351e-06 6.3918e-05 0 - -2.29542e-06 6.8567e-05 0 -8.94825e-06 0.000122695 0 -1.86278e-05 0.000143685 0 -2.98347e-05 0.000151892 0 - -4.2066e-05 0.000155257 0 -5.52313e-05 0.000156653 0 -6.93676e-05 0.000156842 0 -8.4485e-05 0.000155566 0 - -0.000100457 0.000151891 0 -0.000116932 0.000144293 0 -0.000133262 0.000130712 0 -0.000148476 0.000108656 0 - -0.000161285 7.53837e-05 0 -0.000170152 2.81454e-05 0 -0.000173371 -3.55326e-05 0 -0.000169094 -0.000117544 0 - -0.000155258 -0.00021844 0 -0.000129443 -0.000336881 0 -8.89292e-05 -0.000465469 0 -3.23236e-05 -0.000576371 0 - 3.23234e-05 -0.000576372 0 8.89291e-05 -0.000465469 0 0.000129443 -0.000336882 0 0.000155258 -0.000218441 0 - 0.000169094 -0.000117544 0 0.000173371 -3.55329e-05 0 0.000170152 2.81451e-05 0 0.000161285 7.53836e-05 0 - 0.000148476 0.000108656 0 0.000133263 0.000130712 0 0.000116932 0.000144293 0 0.000100457 0.000151891 0 - 8.4485e-05 0.000155566 0 6.93677e-05 0.000156842 0 5.52313e-05 0.000156653 0 4.20661e-05 0.000155257 0 - 2.98347e-05 0.000151892 0 1.86278e-05 0.000143685 0 8.94825e-06 0.000122695 0 2.29542e-06 6.8567e-05 0 - -2.18745e-06 7.30498e-05 0 -8.58404e-06 0.000131262 0 -1.79711e-05 0.000154185 0 -2.89066e-05 0.000163534 0 - -4.09075e-05 0.000167847 0 -5.38967e-05 0.000170218 0 -6.79228e-05 0.00017144 0 -8.30039e-05 0.000171167 0 - -9.90156e-05 0.000168274 0 -0.000115599 0.000160968 0 -0.000132093 0.000146862 0 -0.000147504 0.00012313 0 - -0.000160527 8.67422e-05 0 -0.000169624 3.47513e-05 0 -0.000173117 -3.54263e-05 0 -0.000169218 -0.000125826 0 - -0.000155908 -0.000237305 0 -0.000130679 -0.000369061 0 -9.04186e-05 -0.000514063 0 -3.30531e-05 -0.000641748 0 - 3.30529e-05 -0.000641748 0 9.04185e-05 -0.000514064 0 0.000130679 -0.000369061 0 0.000155908 -0.000237305 0 - 0.000169218 -0.000125827 0 0.000173117 -3.54267e-05 0 0.000169624 3.47511e-05 0 0.000160527 8.67421e-05 0 - 0.000147504 0.00012313 0 0.000132093 0.000146862 0 0.000115599 0.000160968 0 9.90156e-05 0.000168274 0 - 8.30039e-05 0.000171167 0 6.79228e-05 0.00017144 0 5.38967e-05 0.000170218 0 4.09076e-05 0.000167847 0 - 2.89067e-05 0.000163534 0 1.79711e-05 0.000154185 0 8.58405e-06 0.000131262 0 2.18745e-06 7.30499e-05 0 - -2.02766e-06 7.7265e-05 0 -8.02191e-06 0.000139438 0 -1.69092e-05 0.000164283 0 -2.73363e-05 0.000174798 0 - -3.88503e-05 0.000180098 0 -5.1391e-05 0.000183497 0 -6.50232e-05 0.00018582 0 -7.97826e-05 0.000186628 0 - -9.55629e-05 0.000184605 0 -0.000112021 0.000177679 0 -0.000128506 0.00016313 0 -0.000144022 0.00013779 0 - -0.000157262 9.83455e-05 0 -0.000166688 4.16708e-05 0 -0.000170648 -3.48929e-05 0 -0.000167417 -0.00013349 0 - -0.000155027 -0.000255342 0 -0.00013087 -0.00040041 0 -9.13714e-05 -0.000562473 0 -3.36375e-05 -0.000708438 0 - 3.36373e-05 -0.000708439 0 9.13713e-05 -0.000562473 0 0.00013087 -0.000400411 0 0.000155027 -0.000255342 0 - 0.000167417 -0.00013349 0 0.000170648 -3.48933e-05 0 0.000166688 4.16705e-05 0 0.000157262 9.83453e-05 0 - 0.000144022 0.00013779 0 0.000128506 0.00016313 0 0.000112022 0.000177679 0 9.5563e-05 0.000184605 0 - 7.97826e-05 0.000186628 0 6.50232e-05 0.00018582 0 5.1391e-05 0.000183497 0 3.88503e-05 0.000180098 0 - 2.73363e-05 0.000174798 0 1.69092e-05 0.000164283 0 8.02191e-06 0.000139438 0 2.02766e-06 7.7265e-05 0 - -1.81544e-06 8.11081e-05 0 -7.2574e-06 0.000147031 0 -1.54293e-05 0.00017375 0 -2.51e-05 0.00018543 0 - -3.5858e-05 0.000191738 0 -4.76649e-05 0.000196204 0 -6.06079e-05 0.000199688 0 -7.47523e-05 0.000201664 0 - -9.00301e-05 0.000200628 0 -0.00010614 0.000194226 0 -0.000122467 0.000179394 0 -0.000138034 0.00015261 0 - -0.000151535 0.000110266 0 -0.000161425 4.90665e-05 0 -0.000166069 -3.36848e-05 0 -0.000163802 -0.000140195 0 - -0.000152714 -0.000272115 0 -0.000130091 -0.000430417 0 -9.18407e-05 -0.000610215 0 -3.40977e-05 -0.000776173 0 - 3.40975e-05 -0.000776174 0 9.18406e-05 -0.000610216 0 0.000130091 -0.000430418 0 0.000152713 -0.000272115 0 - 0.000163802 -0.000140195 0 0.000166069 -3.36852e-05 0 0.000161425 4.90662e-05 0 0.000151535 0.000110265 0 - 0.000138034 0.00015261 0 0.000122467 0.000179394 0 0.00010614 0.000194226 0 9.00301e-05 0.000200628 0 - 7.47523e-05 0.000201664 0 6.0608e-05 0.000199688 0 4.7665e-05 0.000196204 0 3.5858e-05 0.000191738 0 - 2.51e-05 0.00018543 0 1.54293e-05 0.00017375 0 7.2574e-06 0.000147031 0 1.81544e-06 8.11081e-05 0 - -1.5516e-06 8.44751e-05 0 -6.29123e-06 0.000153845 0 -1.35289e-05 0.000182345 0 -2.21895e-05 0.000195166 0 - -3.19153e-05 0.000202486 0 -4.26951e-05 0.000208043 0 -5.46449e-05 0.000212741 0 -6.7873e-05 0.000215982 0 - -8.23721e-05 0.000216086 0 -9.79123e-05 0.000210418 0 -0.000113942 0.000195557 0 -0.000129525 0.000167597 0 - -0.000143355 0.000122608 0 -0.000153865 5.7124e-05 0 -0.000159411 -3.15521e-05 0 -0.000158388 -0.000145618 0 - -0.000148955 -0.000287212 0 -0.00012831 -0.000458587 0 -9.17934e-05 -0.000656812 0 -3.44209e-05 -0.000844692 0 - 3.44208e-05 -0.000844692 0 9.17933e-05 -0.000656813 0 0.00012831 -0.000458588 0 0.000148955 -0.000287213 0 - 0.000158388 -0.000145619 0 0.000159411 -3.15525e-05 0 0.000153865 5.71237e-05 0 0.000143355 0.000122608 0 - 0.000129525 0.000167597 0 0.000113942 0.000195557 0 9.79124e-05 0.000210418 0 8.23722e-05 0.000216086 0 - 6.78731e-05 0.000215982 0 5.46449e-05 0.000212741 0 4.26951e-05 0.000208043 0 3.19153e-05 0.000202486 0 - 2.21895e-05 0.000195166 0 1.35289e-05 0.000182345 0 6.29123e-06 0.000153845 0 1.5516e-06 8.44751e-05 0 - -1.23835e-06 8.72651e-05 0 -5.1293e-06 0.000159686 0 -1.12158e-05 0.000189828 0 -1.86127e-05 0.00020374 0 - -2.70285e-05 0.000212054 0 -3.64839e-05 0.000218711 0 -4.71296e-05 0.000224669 0 -5.91296e-05 0.000229282 0 - -7.25594e-05 0.000230714 0 -8.72921e-05 0.000226062 0 -0.000102875 0.000211526 0 -0.000118435 0.000182772 0 - -0.000132669 0.000135497 0 -0.000143962 6.60386e-05 0 -0.000150628 -2.82535e-05 0 -0.00015111 -0.000149458 0 - -0.00014366 -0.000300255 0 -0.000125414 -0.000484437 0 -9.11352e-05 -0.000701757 0 -3.45707e-05 -0.000913683 0 - 3.45706e-05 -0.000913684 0 9.11351e-05 -0.000701759 0 0.000125414 -0.000484438 0 0.00014366 -0.000300255 0 - 0.00015111 -0.000149459 0 0.000150628 -2.82539e-05 0 0.000143962 6.60383e-05 0 0.000132669 0.000135497 0 - 0.000118435 0.000182772 0 0.000102875 0.000211526 0 8.72921e-05 0.000226062 0 7.25594e-05 0.000230715 0 - 5.91296e-05 0.000229283 0 4.71296e-05 0.000224669 0 3.64839e-05 0.000218711 0 2.70285e-05 0.000212054 0 - 1.86127e-05 0.00020374 0 1.12159e-05 0.000189828 0 5.12931e-06 0.000159686 0 1.23835e-06 8.72651e-05 0 - -8.79248e-07 8.93827e-05 0 -3.78263e-06 0.000164363 0 -8.50824e-06 0.000195964 0 -1.43935e-05 0.000210887 0 - -2.12256e-05 0.000220155 0 -2.90605e-05 0.0002279 0 -3.80864e-05 0.000235152 0 -4.85315e-05 0.000241245 0 - -6.0575e-05 0.000244225 0 -7.42263e-05 0.000240936 0 -8.91733e-05 0.000227182 0 -0.000104641 0.000198143 0 - -0.000119339 0.000149058 0 -0.000131591 7.60219e-05 0 -0.000139625 -2.35366e-05 0 -0.000141878 -0.00015144 0 - -0.000136712 -0.00031089 0 -0.000121274 -0.000507486 0 -8.97621e-05 -0.000744499 0 -3.45073e-05 -0.000982761 0 - 3.45072e-05 -0.000982762 0 8.97621e-05 -0.0007445 0 0.000121274 -0.000507487 0 0.000136712 -0.000310891 0 - 0.000141878 -0.000151441 0 0.000139625 -2.3537e-05 0 0.000131591 7.60216e-05 0 0.000119339 0.000149058 0 - 0.000104641 0.000198143 0 8.91734e-05 0.000227182 0 7.42264e-05 0.000240936 0 6.0575e-05 0.000244225 0 - 4.85316e-05 0.000241245 0 3.80864e-05 0.000235152 0 2.90605e-05 0.0002279 0 2.12256e-05 0.000220155 0 - 1.43935e-05 0.000210887 0 8.50824e-06 0.000195964 0 3.78263e-06 0.000164363 0 8.79248e-07 8.93827e-05 0 - -4.79068e-07 9.0741e-05 0 -2.26699e-06 0.000167696 0 -5.43417e-06 0.000200524 0 -9.57193e-06 0.00021635 0 - -1.4557e-05 0.000226509 0 -2.04822e-05 0.000235306 0 -2.75714e-05 0.000243861 0 -3.61197e-05 0.00025153 0 - -4.64237e-05 0.000256288 0 -5.86631e-05 0.000254764 0 -7.27174e-05 0.000242356 0 -8.79651e-05 0.000213684 0 - -0.000103169 0.00016342 0 -0.000116576 8.73185e-05 0 -0.000126266 -1.71093e-05 0 -0.000130591 -0.000151289 0 - -0.00012802 -0.000318778 0 -0.000115805 -0.00052725 0 -8.76086e-05 -0.000784443 0 -3.42063e-05 -0.00105147 0 - 3.42063e-05 -0.00105148 0 8.76086e-05 -0.000784444 0 0.000115805 -0.000527251 0 0.00012802 -0.000318779 0 - 0.000130591 -0.00015129 0 0.000126266 -1.71097e-05 0 0.000116576 8.73182e-05 0 0.000103169 0.00016342 0 - 8.79652e-05 0.000213684 0 7.27175e-05 0.000242356 0 5.86632e-05 0.000254764 0 4.64237e-05 0.000256288 0 - 3.61197e-05 0.00025153 0 2.75714e-05 0.000243861 0 2.04822e-05 0.000235306 0 1.4557e-05 0.000226509 0 - 9.57192e-06 0.00021635 0 5.43417e-06 0.000200524 0 2.26699e-06 0.000167696 0 4.79069e-07 9.07411e-05 0 - -4.36163e-08 9.12637e-05 0 -6.02365e-07 0.00016952 0 -2.03088e-06 0.000203295 0 -4.20291e-06 0.000219888 0 - -7.09527e-06 0.000230848 0 -1.08364e-05 0.000240633 0 -1.56791e-05 0.000250466 0 -2.19778e-05 0.000259772 0 - -3.01506e-05 0.000266523 0 -4.05764e-05 0.000267194 0 -5.33874e-05 0.000256791 0 -6.82021e-05 0.000229312 0 - -8.39071e-05 0.000178702 0 -9.86779e-05 0.000100214 0 -0.000110371 -8.62114e-06 0 -0.000117136 -0.000148689 0 - -0.000117533 -0.000323551 0 -0.000108987 -0.000543238 0 -8.46647e-05 -0.000820974 0 -3.36647e-05 -0.00111935 0 - 3.36647e-05 -0.00111935 0 8.46648e-05 -0.000820976 0 0.000108987 -0.000543239 0 0.000117533 -0.000323552 0 - 0.000117136 -0.000148689 0 0.000110371 -8.62158e-06 0 9.86779e-05 0.000100214 0 8.39072e-05 0.000178701 0 - 6.82021e-05 0.000229312 0 5.33874e-05 0.000256791 0 4.05764e-05 0.000267194 0 3.01506e-05 0.000266523 0 - 2.19778e-05 0.000259772 0 1.56791e-05 0.000250466 0 1.08364e-05 0.000240633 0 7.09527e-06 0.000230848 0 - 4.2029e-06 0.000219888 0 2.03089e-06 0.000203295 0 6.02365e-07 0.00016952 0 4.36161e-08 9.12637e-05 0 - 4.20521e-07 9.08868e-05 0 1.1878e-06 0.000169688 0 1.65657e-06 0.000204087 0 1.6451e-06 0.00022128 0 - 1.06674e-06 0.000232927 0 -2.40249e-07 0.000243603 0 -2.54579e-06 0.000254645 0 -6.24607e-06 0.000265592 0 - -1.18665e-05 0.000274496 0 -1.99998e-05 0.00027778 0 -3.10909e-05 0.000270107 0 -4.51175e-05 0.000244837 0 - -6.12214e-05 0.000194985 0 -7.75586e-05 0.000115038 0 -9.16804e-05 2.36981e-06 0 -0.000101375 -0.000143221 0 - -0.000105221 -0.000324777 0 -0.000100837 -0.000554942 0 -8.09499e-05 -0.00085348 0 -3.28898e-05 -0.0011859 0 - 3.28898e-05 -0.0011859 0 8.09499e-05 -0.000853481 0 0.000100838 -0.000554943 0 0.000105221 -0.000324777 0 - 0.000101375 -0.000143221 0 9.16805e-05 2.36937e-06 0 7.75586e-05 0.000115038 0 6.12214e-05 0.000194985 0 - 4.51175e-05 0.000244837 0 3.10909e-05 0.000270107 0 1.99998e-05 0.000277781 0 1.18665e-05 0.000274496 0 - 6.24605e-06 0.000265592 0 2.54578e-06 0.000254645 0 2.4024e-07 0.000243603 0 -1.06674e-06 0.000232927 0 - -1.64511e-06 0.00022128 0 -1.65657e-06 0.000204087 0 -1.18781e-06 0.000169688 0 -4.20522e-07 9.08868e-05 0 - 9.06242e-07 8.95601e-05 0 3.07755e-06 0.000168076 0 5.5771e-06 0.00020273 0 7.89338e-06 0.000220332 0 - 9.82068e-06 0.000232526 0 1.11658e-05 0.000243965 0 1.16542e-05 0.000256099 0 1.08719e-05 0.00026862 0 - 8.22088e-06 0.000279739 0 2.92478e-06 0.000285966 0 -5.81679e-06 0.000281754 0 -1.8488e-05 0.000259888 0 - -3.4688e-05 0.000212239 0 -5.27189e-05 0.000132153 0 -6.97747e-05 1.64326e-05 0 -8.30647e-05 -0.000134299 0 - -9.10037e-05 -0.000321914 0 -9.13444e-05 -0.000561847 0 -7.64515e-05 -0.000881356 0 -3.18731e-05 -0.00125066 0 - 3.18732e-05 -0.00125066 0 7.64516e-05 -0.000881357 0 9.13446e-05 -0.000561848 0 9.10038e-05 -0.000321915 0 - 8.30648e-05 -0.000134299 0 6.97748e-05 1.64322e-05 0 5.27189e-05 0.000132153 0 3.4688e-05 0.000212238 0 - 1.8488e-05 0.000259888 0 5.81678e-06 0.000281754 0 -2.9248e-06 0.000285966 0 -8.22091e-06 0.00027974 0 - -1.08719e-05 0.00026862 0 -1.16542e-05 0.000256099 0 -1.11659e-05 0.000243965 0 -9.82069e-06 0.000232526 0 - -7.89338e-06 0.000220332 0 -5.5771e-06 0.00020273 0 -3.07755e-06 0.000168076 0 -9.06241e-07 8.95601e-05 0 - 1.40611e-06 8.72477e-05 0 5.03896e-06 0.000164585 0 9.67472e-06 0.000199087 0 1.44551e-05 0.000216879 0 - 1.9047e-05 0.00022946 0 2.32271e-05 0.000241506 0 2.67261e-05 0.000254571 0 2.91366e-05 0.00026852 0 - 2.98297e-05 0.000281797 0 2.79019e-05 0.000291132 0 2.22237e-05 0.000291008 0 1.17581e-05 0.000273771 0 - -3.81514e-06 0.000230129 0 -2.34011e-05 0.000151879 0 -4.39488e-05 3.43097e-05 0 -6.17572e-05 -0.000121078 0 - -7.46675e-05 -0.000314286 0 -8.03732e-05 -0.000563429 0 -7.10485e-05 -0.000903992 0 -3.05589e-05 -0.0013131 0 - 3.05591e-05 -0.0013131 0 7.10487e-05 -0.000903993 0 8.03734e-05 -0.00056343 0 7.46676e-05 -0.000314287 0 - 6.17573e-05 -0.000121078 0 4.39489e-05 3.43093e-05 0 2.34011e-05 0.000151879 0 3.81514e-06 0.000230129 0 - -1.17581e-05 0.000273771 0 -2.22237e-05 0.000291008 0 -2.7902e-05 0.000291132 0 -2.98297e-05 0.000281797 0 - -2.91366e-05 0.00026852 0 -2.67262e-05 0.000254571 0 -2.32271e-05 0.000241506 0 -1.90471e-05 0.00022946 0 - -1.44551e-05 0.000216879 0 -9.67472e-06 0.000199087 0 -5.03897e-06 0.000164585 0 -1.40612e-06 8.72477e-05 0 - 1.91247e-06 8.39292e-05 0 7.0424e-06 0.00015914 0 1.38887e-05 0.000193049 0 2.12351e-05 0.00021079 0 - 2.86157e-05 0.000223576 0 3.57773e-05 0.000236048 0 4.2465e-05 0.000249843 0 4.82963e-05 0.000265007 0 - 5.26473e-05 0.000280267 0 5.45441e-05 0.000292694 0 5.26214e-05 0.000297047 0 4.53404e-05 0.000285478 0 - 3.1505e-05 0.00024783 0 1.12378e-05 0.000174031 0 -1.30208e-05 5.69644e-05 0 -3.65913e-05 -0.000102353 0 - -5.56682e-05 -0.000301023 0 -6.75283e-05 -0.000559126 0 -6.44239e-05 -0.000920724 0 -2.88113e-05 -0.00137247 0 - 2.88114e-05 -0.00137247 0 6.44241e-05 -0.000920725 0 6.75284e-05 -0.000559127 0 5.56683e-05 -0.000301024 0 - 3.65914e-05 -0.000102354 0 1.30208e-05 5.6964e-05 0 -1.12378e-05 0.000174031 0 -3.1505e-05 0.00024783 0 - -4.53405e-05 0.000285478 0 -5.26215e-05 0.000297047 0 -5.45442e-05 0.000292694 0 -5.26473e-05 0.000280267 0 - -4.82964e-05 0.000265007 0 -4.2465e-05 0.000249843 0 -3.57773e-05 0.000236048 0 -2.86157e-05 0.000223576 0 - -2.12351e-05 0.00021079 0 -1.38887e-05 0.000193049 0 -7.04241e-06 0.00015914 0 -1.91247e-06 8.39292e-05 0 - 2.41738e-06 7.95993e-05 0 9.05623e-06 0.000151702 0 1.81528e-05 0.000184545 0 2.81288e-05 0.000201972 0 - 3.83831e-05 0.00021476 0 4.86357e-05 0.00022745 0 5.86521e-05 0.000241736 0 6.80893e-05 0.000257845 0 - 7.63558e-05 0.000274812 0 8.24626e-05 0.000290145 0 8.49016e-05 0.000299079 0 8.17122e-05 0.000293916 0 - 7.08868e-05 0.000264053 0 5.13888e-05 0.000197574 0 2.42364e-05 8.48327e-05 0 -5.93577e-06 -7.64789e-05 0 - -3.28188e-05 -0.000280938 0 -5.19502e-05 -0.00054822 0 -5.59546e-05 -0.00093073 0 -2.6375e-05 -0.00142765 0 - 2.63752e-05 -0.00142765 0 5.59549e-05 -0.000930731 0 5.19503e-05 -0.000548221 0 3.28189e-05 -0.000280938 0 - 5.93585e-06 -7.64794e-05 0 -2.42364e-05 8.48324e-05 0 -5.13888e-05 0.000197574 0 -7.08868e-05 0.000264053 0 - -8.17122e-05 0.000293916 0 -8.49017e-05 0.000299079 0 -8.24626e-05 0.000290146 0 -7.63558e-05 0.000274812 0 - -6.80893e-05 0.000257845 0 -5.86521e-05 0.000241736 0 -4.86357e-05 0.00022745 0 -3.83831e-05 0.00021476 0 - -2.81288e-05 0.000201972 0 -1.81528e-05 0.000184545 0 -9.05623e-06 0.000151702 0 -2.41738e-06 7.95993e-05 0 - 2.91251e-06 7.42694e-05 0 1.10461e-05 0.000142259 0 2.23932e-05 0.000173544 0 3.5018e-05 0.000190372 0 - 4.81868e-05 0.000202937 0 6.15981e-05 0.00021561 0 7.50466e-05 0.000230112 0 8.82408e-05 0.000246838 0 - 0.000100644 0.000265148 0 0.000111295 0.000283051 0 0.000118614 0.000296416 0 0.000120332 0.000298052 0 - 0.000113753 0.000277321 0 9.66072e-05 0.00022095 0 6.84053e-05 0.000116811 0 3.20901e-05 -4.19695e-05 0 - -4.03191e-06 -0.000252442 0 -3.20396e-05 -0.000529577 0 -4.45561e-05 -0.000932852 0 -2.2819e-05 -0.00147685 0 - 2.28193e-05 -0.00147685 0 4.45564e-05 -0.000932854 0 3.20398e-05 -0.000529577 0 4.03202e-06 -0.000252443 0 - -3.209e-05 -4.197e-05 0 -6.84053e-05 0.00011681 0 -9.66072e-05 0.00022095 0 -0.000113753 0.000277321 0 - -0.000120332 0.000298052 0 -0.000118614 0.000296416 0 -0.000111295 0.000283051 0 -0.000100644 0.000265148 0 - -8.82408e-05 0.000246838 0 -7.50466e-05 0.000230112 0 -6.15981e-05 0.00021561 0 -4.81869e-05 0.000202937 0 - -3.5018e-05 0.000190372 0 -2.23932e-05 0.000173544 0 -1.10461e-05 0.000142259 0 -2.91251e-06 7.42694e-05 0 - 3.38889e-06 6.7968e-05 0 1.29738e-05 0.000130842 0 2.65256e-05 0.000160062 0 4.17652e-05 0.000175989 0 - 5.78353e-05 0.000188081 0 7.44229e-05 0.000200467 0 9.13644e-05 0.000214865 0 0.000108436 0.00023182 0 - 0.000125178 0.00025102 0 0.000140695 0.000271012 0 0.000153402 0.000288429 0 0.00016082 0.000296903 0 - 0.000159654 0.000286214 0 0.000146461 0.000242396 0 0.000119173 0.000150855 0 7.89311e-05 5.42727e-07 0 - 3.38109e-05 -0.000213712 0 -5.23067e-06 -0.000501257 0 -2.85304e-05 -0.000925356 0 -1.74724e-05 -0.00151714 0 - 1.74728e-05 -0.00151714 0 2.85306e-05 -0.000925357 0 5.23086e-06 -0.000501258 0 -3.38108e-05 -0.000213713 0 - -7.8931e-05 5.42354e-07 0 -0.000119173 0.000150855 0 -0.000146461 0.000242396 0 -0.000159654 0.000286214 0 - -0.00016082 0.000296903 0 -0.000153402 0.000288429 0 -0.000140695 0.000271012 0 -0.000125178 0.00025102 0 - -0.000108436 0.00023182 0 -9.13644e-05 0.000214865 0 -7.44229e-05 0.000200467 0 -5.78353e-05 0.000188081 0 - -4.17652e-05 0.000175989 0 -2.65257e-05 0.000160062 0 -1.29738e-05 0.000130842 0 -3.38889e-06 6.79681e-05 0 - 3.83648e-06 6.07427e-05 0 1.4795e-05 0.000117524 0 3.04496e-05 0.000144174 0 4.82029e-05 0.000158885 0 - 6.7091e-05 0.000170227 0 8.68049e-05 0.000182019 0 0.000107241 0.000195935 0 0.000128265 0.000212654 0 - 0.00014953 0.000232178 0 0.000170253 0.000253614 0 0.000188917 0.000274456 0 0.000202951 0.000289425 0 - 0.000208591 0.000289219 0 0.000201301 0.000259875 0 0.000177285 0.000184681 0 0.00013604 4.82045e-05 0 - 8.3358e-05 -0.000163572 0 3.15209e-05 -0.000460518 0 -5.55221e-06 -0.000905722 0 -9.38575e-06 -0.001544 0 - 9.38613e-06 -0.001544 0 5.55251e-06 -0.000905723 0 -3.15208e-05 -0.000460519 0 -8.33579e-05 -0.000163573 0 - -0.000136039 4.82041e-05 0 -0.000177285 0.00018468 0 -0.000201301 0.000259875 0 -0.000208591 0.000289218 0 - -0.000202951 0.000289425 0 -0.000188917 0.000274456 0 -0.000170253 0.000253614 0 -0.00014953 0.000232178 0 - -0.000128265 0.000212654 0 -0.000107241 0.000195935 0 -8.6805e-05 0.000182019 0 -6.7091e-05 0.000170227 0 - -4.8203e-05 0.000158885 0 -3.04496e-05 0.000144174 0 -1.4795e-05 0.000117524 0 -3.83648e-06 6.07427e-05 0 - 4.24295e-06 5.26633e-05 0 1.64536e-05 0.000102434 0 3.40359e-05 0.000126027 0 5.41133e-05 0.000139201 0 - 7.56392e-05 0.000149497 0 9.83291e-05 0.000160346 0 0.000122163 0.000173339 0 0.00014713 0.000189258 0 - 0.000173043 0.000208396 0 0.000199303 0.000230414 0 0.000224571 0.000253724 0 0.000246341 0.000274352 0 - 0.000260586 0.000284406 0 0.000261871 0.000270694 0 0.00024459 0.000215159 0 0.000205672 9.789e-05 0 - 0.000147568 -0.000102472 0 8.22683e-05 -0.000404482 0 2.77947e-05 -0.000870211 0 2.75192e-06 -0.00155063 0 - -2.75152e-06 -0.00155063 0 -2.77943e-05 -0.000870212 0 -8.22681e-05 -0.000404483 0 -0.000147568 -0.000102473 0 - -0.000205672 9.78897e-05 0 -0.00024459 0.000215159 0 -0.000261871 0.000270694 0 -0.000260586 0.000284406 0 - -0.000246341 0.000274352 0 -0.000224571 0.000253724 0 -0.000199303 0.000230414 0 -0.000173043 0.000208396 0 - -0.00014713 0.000189258 0 -0.000122163 0.000173339 0 -9.83291e-05 0.000160346 0 -7.56392e-05 0.000149497 0 - -5.41133e-05 0.000139201 0 -3.4036e-05 0.000126027 0 -1.64536e-05 0.000102434 0 -4.24295e-06 5.26633e-05 0 - 4.59031e-06 4.383e-05 0 1.78684e-05 8.57785e-05 0 3.70981e-05 0.00010587 0 5.91817e-05 0.000117197 0 - 8.30217e-05 0.000126135 0 0.000108378 0.000135661 0 0.000135338 0.000147231 0 0.000164054 0.000161682 0 - 0.000194563 0.00017955 0 0.000226555 0.000201007 0 0.000259028 0.00022539 0 0.000289769 0.000250176 0 - 0.000314775 0.000269331 0 0.000327965 0.000271294 0 0.000321922 0.000237883 0 0.000290361 0.000145645 0 - 0.000231496 -3.3258e-05 0 0.000153993 -0.000330895 0 7.7172e-05 -0.000812504 0 2.08777e-05 -0.001527 0 - -2.08773e-05 -0.001527 0 -7.71717e-05 -0.000812504 0 -0.000153993 -0.000330895 0 -0.000231495 -3.32583e-05 0 - -0.000290361 0.000145645 0 -0.000321922 0.000237883 0 -0.000327965 0.000271294 0 -0.000314775 0.000269331 0 - -0.000289769 0.000250176 0 -0.000259028 0.00022539 0 -0.000226555 0.000201007 0 -0.000194563 0.00017955 0 - -0.000164054 0.000161682 0 -0.000135338 0.000147231 0 -0.000108378 0.000135661 0 -8.30217e-05 0.000126135 0 - -5.91817e-05 0.000117197 0 -3.70981e-05 0.00010587 0 -1.78684e-05 8.57785e-05 0 -4.59031e-06 4.383e-05 0 - 4.84493e-06 3.43948e-05 0 1.8896e-05 6.78845e-05 0 3.93217e-05 8.41091e-05 0 6.2891e-05 9.33052e-05 0 - 8.84906e-05 0.000100587 0 0.000115937 0.000108406 0 0.000145435 0.000118027 0 0.000177333 0.000130272 0 - 0.000211956 0.000145829 0 0.000249413 0.000165279 0 0.000289257 0.000188801 0 0.000329917 0.000215364 0 - 0.000367884 0.000241169 0 0.000396921 0.000257229 0 0.000408055 0.000246856 0 0.000391493 0.000184795 0 - 0.00034036 3.75904e-05 0 0.000255565 -0.000239446 0 0.000151341 -0.000722908 0 4.85812e-05 -0.00145755 0 - -4.85807e-05 -0.00145755 0 -0.000151341 -0.000722908 0 -0.000255564 -0.000239447 0 -0.000340359 3.75902e-05 0 - -0.000391493 0.000184795 0 -0.000408055 0.000246856 0 -0.000396921 0.000257229 0 -0.000367884 0.000241169 0 - -0.000329917 0.000215364 0 -0.000289257 0.000188801 0 -0.000249413 0.000165279 0 -0.000211956 0.000145829 0 - -0.000177333 0.000130272 0 -0.000145436 0.000118027 0 -0.000115937 0.000108406 0 -8.84907e-05 0.000100587 0 - -6.2891e-05 9.33052e-05 0 -3.93217e-05 8.41091e-05 0 -1.8896e-05 6.78845e-05 0 -4.84493e-06 3.43948e-05 0 - 4.93128e-06 2.46186e-05 0 1.92423e-05 4.92986e-05 0 4.01018e-05 6.14098e-05 0 6.42816e-05 6.82553e-05 0 - 9.06826e-05 7.36362e-05 0 0.000119166 7.94273e-05 0 0.00015004 8.66339e-05 0 0.000183839 9.59699e-05 0 - 0.000221205 0.000108142 0 0.000262764 0.000123951 0 0.000308858 0.00014419 0 0.000359015 0.000169158 0 - 0.00041098 0.000197444 0 0.000459357 0.000223541 0 0.000494526 0.000234241 0 0.000503497 0.000205001 0 - 0.000473666 9.83492e-05 0 0.000393391 -0.000135135 0 0.000261447 -0.000591052 0 9.18854e-05 -0.00131708 0 - -9.18849e-05 -0.00131708 0 -0.000261447 -0.000591053 0 -0.00039339 -0.000135135 0 -0.000473666 9.8349e-05 0 - -0.000503497 0.000205001 0 -0.000494526 0.000234241 0 -0.000459357 0.000223541 0 -0.00041098 0.000197444 0 - -0.000359015 0.000169158 0 -0.000308858 0.00014419 0 -0.000262764 0.000123951 0 -0.000221205 0.000108142 0 - -0.000183839 9.59699e-05 0 -0.00015004 8.66339e-05 0 -0.000119166 7.94273e-05 0 -9.06827e-05 7.36363e-05 0 - -6.42816e-05 6.82553e-05 0 -4.01018e-05 6.14099e-05 0 -1.92423e-05 4.92986e-05 0 -4.93128e-06 2.46186e-05 0 - 4.67267e-06 1.50146e-05 0 1.82746e-05 3.09896e-05 0 3.82108e-05 3.89232e-05 0 6.14537e-05 4.33193e-05 0 - 8.69325e-05 4.66924e-05 0 0.000114512 5.0308e-05 0 0.00014454 5.48515e-05 0 0.00017766 6.08331e-05 0 - 0.000214756 6.8817e-05 0 0.000256915 7.95584e-05 0 0.000305343 9.40602e-05 0 0.000361029 0.000113444 0 - 0.000423893 0.000138331 0 0.000491037 0.000167133 0 0.000554223 0.000192294 0 0.000598714 0.000193486 0 - 0.00060872 0.00012969 0 0.000557593 -3.50732e-05 0 0.000412951 -0.000414527 0 0.000157051 -0.00106814 0 - -0.000157051 -0.00106814 0 -0.00041295 -0.000414527 0 -0.000557593 -3.50734e-05 0 -0.00060872 0.00012969 0 - -0.000598714 0.000193486 0 -0.000554223 0.000192293 0 -0.000491037 0.000167133 0 -0.000423893 0.000138331 0 - -0.000361029 0.000113444 0 -0.000305343 9.40602e-05 0 -0.000256915 7.95584e-05 0 -0.000214756 6.88171e-05 0 - -0.00017766 6.08331e-05 0 -0.00014454 5.48515e-05 0 -0.000114512 5.0308e-05 0 -8.69325e-05 4.66924e-05 0 - -6.14537e-05 4.33193e-05 0 -3.82108e-05 3.89232e-05 0 -1.82746e-05 3.09896e-05 0 -4.67267e-06 1.50147e-05 0 - 3.69732e-06 6.64466e-06 0 1.47286e-05 1.47264e-05 0 3.12459e-05 1.87329e-05 0 5.06745e-05 2.08381e-05 0 - 7.1992e-05 2.23772e-05 0 9.50231e-05 2.40126e-05 0 0.000120054 2.60883e-05 0 0.00014767 2.886e-05 0 - 0.000178731 3.26332e-05 0 0.000214445 3.78695e-05 0 0.000256469 4.52974e-05 0 0.000306972 5.60171e-05 0 - 0.000368368 7.14976e-05 0 0.000442071 9.3119e-05 0 0.000525047 0.000120146 0 0.000604195 0.000141995 0 - 0.00066719 0.00010818 0 0.000680936 2.38173e-05 0 0.000568609 -0.000216448 0 0.00023469 -0.000676404 0 - -0.000234689 -0.000676404 0 -0.000568609 -0.000216448 0 -0.000680936 2.38173e-05 0 -0.000667189 0.00010818 0 - -0.000604194 0.000141995 0 -0.000525047 0.000120146 0 -0.000442071 9.3119e-05 0 -0.000368368 7.14976e-05 0 - -0.000306972 5.60171e-05 0 -0.000256469 4.52974e-05 0 -0.000214445 3.78695e-05 0 -0.000178731 3.26332e-05 0 - -0.00014767 2.886e-05 0 -0.000120054 2.60883e-05 0 -9.50232e-05 2.40126e-05 0 -7.1992e-05 2.23772e-05 0 - -5.06745e-05 2.08381e-05 0 -3.12459e-05 1.87329e-05 0 -1.47286e-05 1.47264e-05 0 -3.69732e-06 6.64466e-06 0 - 1.47367e-06 1.47367e-06 0 6.6436e-06 3.69626e-06 0 1.51146e-05 4.77472e-06 0 2.51858e-05 5.29649e-06 0 - 3.61347e-05 5.65242e-06 0 4.78141e-05 6.02695e-06 0 6.03491e-05 6.50804e-06 0 7.40155e-05 7.15844e-06 0 - 8.92314e-05 8.05742e-06 0 0.000106626 9.33726e-06 0 0.000127198 1.12342e-05 0 0.000152603 1.41715e-05 0 - 0.000185662 1.88876e-05 0 0.000231119 2.65692e-05 0 0.000296264 3.85752e-05 0 0.00038776 5.29211e-05 0 - 0.00048135 4.06687e-05 0 0.000540475 1.84569e-05 0 0.000500323 -5.8609e-05 0 0.000220857 -0.000220857 0 - -0.000220857 -0.000220857 0 -0.000500323 -5.86091e-05 0 -0.000540475 1.84569e-05 0 -0.00048135 4.06687e-05 0 - -0.00038776 5.29211e-05 0 -0.000296264 3.85752e-05 0 -0.000231119 2.65692e-05 0 -0.000185662 1.88876e-05 0 - -0.000152603 1.41715e-05 0 -0.000127198 1.12342e-05 0 -0.000106626 9.33726e-06 0 -8.92314e-05 8.05742e-06 0 - -7.40155e-05 7.15843e-06 0 -6.03491e-05 6.50804e-06 0 -4.78141e-05 6.02695e-06 0 -3.61347e-05 5.65242e-06 0 - -2.51858e-05 5.29649e-06 0 -1.51146e-05 4.77472e-06 0 -6.6436e-06 3.69626e-06 0 -1.47367e-06 1.47367e-06 0 + -1.8836e-05 1.8836e-05 0 -5.5294e-05 1.76221e-05 0 -8.19639e-05 9.04774e-06 0 -9.38385e-05 2.82689e-06 0 + -9.65808e-05 -8.45861e-08 0 -9.55122e-05 -9.84046e-07 0 -9.36063e-05 -9.21772e-07 0 -9.22408e-05 -4.43793e-07 0 + -9.20414e-05 2.44384e-07 0 -9.33695e-05 1.08374e-06 0 -9.65143e-05 2.06104e-06 0 -0.000101692 3.1167e-06 0 + -0.000108907 4.09866e-06 0 -0.000117706 4.69968e-06 0 -0.000126805 4.39927e-06 0 -0.000133639 2.43469e-06 0 + -0.00013391 -2.16294e-06 0 -0.00012135 -1.03979e-05 0 -8.8922e-05 -2.20297e-05 0 -3.35537e-05 -3.33386e-05 0 + 3.32049e-05 -3.342e-05 0 8.87231e-05 -2.20982e-05 0 0.000121258 -1.04364e-05 0 0.000133875 -2.18115e-06 0 + 0.00013363 2.42693e-06 0 0.000126806 4.39647e-06 0 0.000117711 4.69901e-06 0 0.000108913 4.09879e-06 0 + 0.000101697 3.11706e-06 0 9.65185e-05 2.06144e-06 0 9.33729e-05 1.08412e-06 0 9.20441e-05 2.44747e-07 0 + 9.22428e-05 -4.43467e-07 0 9.36078e-05 -9.21577e-07 0 9.55136e-05 -9.84156e-07 0 9.65829e-05 -8.5216e-08 0 + 9.38424e-05 2.82574e-06 0 8.19699e-05 9.04673e-06 0 5.53005e-05 1.76227e-05 0 1.88389e-05 1.88389e-05 0 + -2.56043e-05 6.32763e-05 0 -8.0607e-05 6.46425e-05 0 -0.000130403 3.84932e-05 0 -0.000162516 1.73695e-05 0 + -0.000180359 5.95771e-06 0 -0.0001897 1.2461e-06 0 -0.000194943 1.85129e-07 0 -0.000198971 1.11172e-06 0 + -0.000203742 3.26015e-06 0 -0.000210625 6.27917e-06 0 -0.000220532 9.91736e-06 0 -0.000233881 1.37873e-05 0 + -0.000250369 1.71311e-05 0 -0.000268497 1.85944e-05 0 -0.00028494 1.60458e-05 0 -0.000293867 6.54959e-06 0 + -0.000286546 -1.33273e-05 0 -0.00025171 -4.66304e-05 0 -0.000178735 -9.11997e-05 0 -6.5926e-05 -0.000132346 0 + 6.54711e-05 -0.000132568 0 0.000178416 -9.14126e-05 0 0.000251522 -4.67632e-05 0 0.000286447 -1.33966e-05 0 + 0.000293818 6.51683e-06 0 0.000284916 1.60322e-05 0 0.000268485 1.85899e-05 0 0.00025036 1.71305e-05 0 + 0.000233873 1.37882e-05 0 0.000220523 9.91861e-06 0 0.000210615 6.28044e-06 0 0.000203731 3.2613e-06 0 + 0.00019896 1.1126e-06 0 0.000194932 1.85423e-07 0 0.00018969 1.24528e-06 0 0.000180351 5.95516e-06 0 + 0.000162511 1.73651e-05 0 0.000130402 3.84891e-05 0 8.06089e-05 6.4643e-05 0 2.56057e-05 6.32834e-05 0 + -2.00628e-05 0.000108943 0 -6.8313e-05 0.000122228 0 -0.000120844 8.32345e-05 0 -0.000163291 4.71887e-05 0 + -0.000194038 2.47279e-05 0 -0.000215506 1.32851e-05 0 -0.000231017 8.90031e-06 0 -0.000243622 9.02911e-06 0 + -0.00025575 1.22415e-05 0 -0.000269252 1.76834e-05 0 -0.000285424 2.45924e-05 0 -0.000304863 3.19002e-05 0 + -0.000327119 3.77615e-05 0 -0.000350149 3.9123e-05 0 -0.00036961 3.14206e-05 0 -0.00037816 8.65253e-06 0 + -0.000365165 -3.57472e-05 0 -0.000317527 -0.000106684 0 -0.000223555 -0.000198092 0 -8.20094e-05 -0.000279808 0 + 8.16134e-05 -0.000280126 0 0.000223249 -0.000198435 0 0.000317322 -0.00010692 0 0.000365039 -3.58817e-05 0 + 0.000378086 8.58332e-06 0 0.000369565 3.13889e-05 0 0.000350118 3.91108e-05 0 0.000327094 3.77586e-05 0 + 0.00030484 3.19011e-05 0 0.000285401 2.45945e-05 0 0.000269228 1.76857e-05 0 0.000255724 1.22435e-05 0 + 0.000243596 9.03037e-06 0 0.000230991 8.90022e-06 0 0.000215481 1.32827e-05 0 0.000194016 2.47223e-05 0 + 0.000163273 4.71798e-05 0 0.000120832 8.32249e-05 0 6.83074e-05 0.000122225 0 2.00615e-05 0.000108951 0 + -1.30837e-05 0.00014209 0 -4.82848e-05 0.000172533 0 -9.30086e-05 0.000130184 0 -0.000135335 8.50123e-05 0 + -0.000171062 5.33787e-05 0 -0.000199842 3.48821e-05 0 -0.000223171 2.61438e-05 0 -0.000243173 2.43919e-05 0 + -0.000261952 2.77855e-05 0 -0.000281325 3.50154e-05 0 -0.000302651 4.47585e-05 0 -0.000326578 5.5099e-05 0 + -0.000352637 6.28777e-05 0 -0.000378663 6.30633e-05 0 -0.000400059 4.83376e-05 0 -0.000409084 9.31074e-06 0 + -0.000394568 -6.39178e-05 0 -0.000342862 -0.000177857 0 -0.000241586 -0.000322167 0 -8.87161e-05 -0.00045015 0 + 8.84018e-05 -0.000450525 0 0.000241328 -0.000322598 0 0.000342672 -0.000178174 0 0.00039444 -6.41117e-05 0 + 0.000409001 9.2043e-06 0 0.000400005 4.82854e-05 0 0.000378624 6.30416e-05 0 0.000352604 6.28716e-05 0 + 0.000326547 5.51e-05 0 0.000302619 4.4762e-05 0 0.000281292 3.50193e-05 0 0.000261917 2.77886e-05 0 + 0.000243137 2.43936e-05 0 0.000223135 2.61431e-05 0 0.000199808 3.48777e-05 0 0.000171031 5.33693e-05 0 + 0.000135309 8.49975e-05 0 9.29899e-05 0.000130167 0 4.82749e-05 0.000172522 0 1.30809e-05 0.000142093 0 + -7.65797e-06 0.000162832 0 -3.06782e-05 0.000210013 0 -6.41322e-05 0.000170882 0 -0.000100087 0.000122595 0 + -0.000134158 8.55949e-05 0 -0.000164615 6.19033e-05 0 -0.00019151 4.93467e-05 0 -0.000215859 4.55396e-05 0 + -0.000239066 4.86234e-05 0 -0.000262555 5.70402e-05 0 -0.000287486 6.89902e-05 0 -0.000314431 8.17388e-05 0 + -0.000342943 9.08096e-05 0 -0.000370961 8.91756e-05 0 -0.000394068 6.67288e-05 0 -0.000404743 1.06194e-05 0 + -0.000391989 -9.24975e-05 0 -0.000342196 -0.000250776 0 -0.000242467 -0.000450252 0 -8.94191e-05 -0.000627982 0 + 8.91625e-05 -0.000628393 0 0.000242247 -0.000450741 0 0.000342025 -0.000251154 0 0.000391867 -9.27421e-05 0 + 0.000404663 1.04777e-05 0 0.000394016 6.66557e-05 0 0.000370924 8.91437e-05 0 0.000342913 9.08003e-05 0 + 0.000314402 8.17403e-05 0 0.000287455 6.89959e-05 0 0.000262521 5.70466e-05 0 0.000239029 4.86284e-05 0 + 0.000215821 4.55421e-05 0 0.000191471 4.93454e-05 0 0.000164578 6.18966e-05 0 0.000134124 8.55811e-05 0 + 0.000100058 0.000122573 0 6.4112e-05 0.000170857 0 3.06673e-05 0.000209993 0 7.65496e-06 0.000162829 0 + -4.00897e-06 0.000174499 0 -1.7645e-05 0.000235002 0 -4.02703e-05 0.000201972 0 -6.76405e-05 0.000154829 0 + -9.64024e-05 0.000116193 0 -0.000124555 8.99157e-05 0 -0.000151365 7.50384e-05 0 -0.000177002 6.98338e-05 0 + -0.000202173 7.27073e-05 0 -0.000227795 8.20678e-05 0 -0.000254694 9.57919e-05 0 -0.000283267 0.000110455 0 + -0.000313052 0.000120391 0 -0.000342154 0.000116715 0 -0.000366523 8.66648e-05 0 -0.000379171 1.40067e-05 0 + -0.000369709 -0.000118101 0 -0.000325036 -0.000319639 0 -0.000232115 -0.00057404 0 -8.61068e-05 -0.000803251 0 + 8.58741e-05 -0.000803686 0 0.000231911 -0.000574569 0 0.000324873 -0.000320066 0 0.000369594 -0.000118393 0 + 0.000379098 1.38294e-05 0 0.00036648 8.65696e-05 0 0.000342129 0.000116672 0 0.000313033 0.000120378 0 + 0.000283248 0.000110458 0 0.000254672 9.58013e-05 0 0.000227769 8.2078e-05 0 0.000202143 7.27154e-05 0 + 0.000176968 6.98379e-05 0 0.00015133 7.5037e-05 0 0.000124522 8.99068e-05 0 9.63719e-05 0.000116175 0 + 6.76153e-05 0.000154801 0 4.02524e-05 0.000201938 0 1.76355e-05 0.000234973 0 4.00636e-06 0.00017449 0 + -1.71511e-06 0.000180223 0 -8.7894e-06 0.000249988 0 -2.26547e-05 0.000223477 0 -4.17729e-05 0.000179814 0 + -6.41122e-05 0.00014231 0 -8.80102e-05 0.00011585 0 -0.000112487 0.000100391 0 -0.000137229 9.48606e-05 0 + -0.000162421 9.80429e-05 0 -0.000188515 0.00010845 0 -0.000215975 0.000123768 0 -0.000244954 0.000140031 0 + -0.00027491 0.000150555 0 -0.000304075 0.000144818 0 -0.000328792 0.000107647 0 -0.000342768 1.96485e-05 0 + -0.00033655 -0.000139423 0 -0.000298039 -0.000381502 0 -0.000214617 -0.000688518 0 -8.0142e-05 -0.000969256 0 + 7.99061e-05 -0.00096971 0 0.000214409 -0.000689084 0 0.000297875 -0.00038198 0 0.000336439 -0.000139765 0 + 0.000342704 1.94321e-05 0 0.000328763 0.000107527 0 0.000304065 0.000144764 0 0.000274908 0.00015054 0 + 0.000244952 0.000140036 0 0.000215968 0.000123783 0 0.000188503 0.000108465 0 0.000162402 9.80553e-05 0 + 0.000137207 9.48674e-05 0 0.000112463 0.00010039 0 8.79853e-05 0.00011584 0 6.40891e-05 0.000142289 0 + 4.17537e-05 0.00017978 0 2.2641e-05 0.000223435 0 8.78219e-06 0.000249952 0 1.71314e-06 0.00018021 0 + -3.27097e-07 0.000182265 0 -3.12998e-06 0.000257823 0 -1.06688e-05 0.000237046 0 -2.30722e-05 0.000197766 0 + -3.94598e-05 0.000163085 0 -5.87237e-05 0.000138237 0 -7.9966e-05 0.000123723 0 -0.000102676 0.000118981 0 + -0.000126717 0.000123154 0 -0.000152184 0.0001349 0 -0.000179199 0.000151792 0 -0.000207639 0.000169427 0 + -0.000236805 0.00018028 0 -0.000264975 0.000172428 0 -0.00028884 0.000128619 0 -0.000302865 2.66776e-05 0 + -0.000298809 -0.000156726 0 -0.000266062 -0.000435457 0 -0.000193034 -0.000791013 0 -7.25634e-05 -0.00112171 0 + 7.231e-05 -0.00112218 0 0.000192813 -0.00079162 0 0.000265894 -0.000435992 0 0.000298701 -0.000157124 0 + 0.000302811 2.64174e-05 0 0.000288823 0.000128471 0 0.00026498 0.00017236 0 0.000236819 0.000180262 0 + 0.000207654 0.000169436 0 0.000179208 0.000151812 0 0.000152187 0.000134922 0 0.000126713 0.000123172 0 + 0.000102667 0.000118991 0 7.99533e-05 0.000123724 0 5.87094e-05 0.000138227 0 3.94457e-05 0.000163061 0 + 2.306e-05 0.000197729 0 1.066e-05 0.000236999 0 3.12529e-06 0.000257781 0 3.25786e-07 0.000182249 0 + 4.71492e-07 0.000182121 0 2.54483e-07 0.000260988 0 -3.1464e-06 0.000244821 0 -1.07176e-05 0.000209965 0 + -2.23794e-05 0.000178935 0 -3.75759e-05 0.000156847 0 -5.56334e-05 0.000144412 0 -7.60272e-05 0.000141395 0 + -9.84535e-05 0.000147207 0 -0.000122752 0.000160614 0 -0.000148743 0.000179084 0 -0.000176011 0.000197844 0 + -0.000203639 0.000208657 0 -0.000229866 0.000198447 0 -0.000251661 0.00014826 0 -0.000264263 3.36643e-05 0 + -0.000260836 -0.000171195 0 -0.000232676 -0.000481895 0 -0.000169748 -0.00088053 0 -6.42045e-05 -0.0012582 0 + 6.39338e-05 -0.0012587 0 0.000169516 -0.00088119 0 0.000232507 -0.000482495 0 0.000260734 -0.000171655 0 + 0.000264216 3.33569e-05 0 0.000251654 0.000148082 0 0.000229882 0.000198364 0 0.000203666 0.000208635 0 + 0.000176039 0.000197856 0 0.000148766 0.00017911 0 0.000122769 0.000160643 0 9.84632e-05 0.000147231 0 + 7.60309e-05 0.000141411 0 5.56325e-05 0.000144417 0 3.7572e-05 0.000156839 0 2.23742e-05 0.000178911 0 + 1.07124e-05 0.000209926 0 3.14229e-06 0.000244772 0 -2.56841e-07 0.000260943 0 -4.72194e-07 0.000182102 0 + 8.68938e-07 0.00018078 0 2.04631e-06 0.000261368 0 1.07214e-06 0.000248816 0 -3.41092e-06 0.000218025 0 + -1.17799e-05 0.000190906 0 -2.39053e-05 0.000172198 0 -3.93641e-05 0.000162578 0 -5.77051e-05 0.000161964 0 + -7.85547e-05 0.000169914 0 -0.000101568 0.000185219 0 -0.0001263 0.000205201 0 -0.000152039 0.000224734 0 + -0.000177611 0.000234969 0 -0.000201154 0.000221905 0 -0.000219857 0.000165299 0 -0.000229721 3.90913e-05 0 + -0.000225426 -0.000184344 0 -0.000200423 -0.00052191 0 -0.000146591 -0.000957276 0 -5.57342e-05 -0.00137786 0 + 5.5458e-05 -0.00137837 0 0.00014636 -0.000957998 0 0.000200262 -0.000522581 0 0.000225332 -0.000184866 0 + 0.00022968 3.87371e-05 0 0.000219854 0.000165091 0 0.000201174 0.000221806 0 0.000177643 0.000234941 0 + 0.000152073 0.000224747 0 0.000126332 0.000205233 0 0.000101595 0.000185255 0 7.8575e-05 0.000169945 0 + 5.77193e-05 0.000161985 0 3.93732e-05 0.000162587 0 2.39105e-05 0.000172192 0 1.17822e-05 0.000190884 0 + 3.41154e-06 0.000217986 0 -1.07233e-06 0.000248766 0 -2.04667e-06 0.000261322 0 -8.69095e-07 0.000180761 0 + 9.95543e-07 0.000178916 0 2.73815e-06 0.000260312 0 2.94523e-06 0.000250639 0 1.51705e-07 0.000223479 0 + -6.24835e-06 0.000200221 0 -1.63839e-05 0.000185144 0 -3.00389e-05 0.000178746 0 -4.68593e-05 0.000180958 0 + -6.64469e-05 0.000191357 0 -8.83126e-05 0.000208655 0 -0.00011177 0.000229955 0 -0.000135815 0.000249764 0 + -0.000159008 0.000258704 0 -0.00017936 0.000242066 0 -0.000194253 0.000178734 0 -0.000200434 4.1702e-05 0 + -0.000194117 -0.000197567 0 -0.000170965 -0.000556842 0 -0.000124892 -0.00102225 0 -4.76617e-05 -0.00148097 0 + 4.73985e-05 -0.00148151 0 0.000124678 -0.00102304 0 0.000170822 -0.000557583 0 0.000194035 -0.000198146 0 + 0.000200397 4.13063e-05 0 0.000194247 0.000178498 0 0.000179376 0.00024195 0 0.000159036 0.000258669 0 + 0.000135849 0.000249776 0 0.000111804 0.00022999 0 8.83437e-05 0.000208696 0 6.64734e-05 0.000191394 0 + 4.68807e-05 0.000180985 0 3.00552e-05 0.000178759 0 1.63958e-05 0.000185142 0 6.25649e-06 0.000200202 0 + -1.46594e-07 0.000223442 0 -2.94241e-06 0.00025059 0 -2.73695e-06 0.000260267 0 -9.95272e-07 0.000178897 0 + 9.47786e-07 0.000176972 0 2.70483e-06 0.000258756 0 3.2239e-06 0.000251469 0 1.08069e-06 0.000227585 0 + -4.42036e-06 0.000208016 0 -1.3532e-05 0.000196597 0 -2.61704e-05 0.000193587 0 -4.20633e-05 0.000198831 0 + -6.07969e-05 0.000211806 0 -8.17532e-05 0.000231028 0 -0.000104019 0.000253305 0 -0.000126312 0.000272752 0 + -0.00014694 0.000279536 0 -0.000163807 0.000258452 0 -0.000174498 0.000187931 0 -0.000176499 4.06883e-05 0 + -0.000167493 -0.000211877 0 -0.000145209 -0.000587969 0 -0.000105498 -0.0010769 0 -4.03351e-05 -0.00156871 0 + 4.01046e-05 -0.00156927 0 0.000105317 -0.00107777 0 0.000145094 -0.000588774 0 0.000167425 -0.000212499 0 + 0.000176462 4.02607e-05 0 0.000174484 0.000187672 0 0.000163812 0.00025832 0 0.000146958 0.000279492 0 + 0.000126338 0.00027276 0 0.000104049 0.000253339 0 8.17836e-05 0.000231072 0 6.08252e-05 0.000211846 0 + 4.20881e-05 0.000198862 0 2.61909e-05 0.000193604 0 1.35482e-05 0.000196599 0 4.43238e-06 0.000208 0 + -1.0725e-06 0.000227552 0 -3.21899e-06 0.000251422 0 -2.70255e-06 0.000258712 0 -9.47218e-07 0.000176954 0 + 7.95576e-07 0.000175229 0 2.22219e-06 0.000257316 0 2.47851e-06 0.000252134 0 2.59475e-07 0.000231283 0 + -5.13356e-06 0.000215213 0 -1.39799e-05 0.000207358 0 -2.62582e-05 0.000207742 0 -4.1746e-05 0.000216056 0 + -6.00012e-05 0.000231569 0 -8.02765e-05 0.000252497 0 -0.000101443 0.000275269 0 -0.000121965 0.000293603 0 + -0.000139936 0.000297285 0 -0.000153201 0.000270835 0 -0.000159596 0.000192634 0 -0.000157343 3.57343e-05 0 + -0.000145466 -0.000227806 0 -0.000123449 -0.000616342 0 -8.88184e-05 -0.00112287 0 -3.39469e-05 -0.00164278 0 + 3.37658e-05 -0.00164336 0 8.86818e-05 -0.00112381 0 0.000123367 -0.000617195 0 0.000145414 -0.000228457 0 + 0.000157307 3.52874e-05 0 0.000159573 0.000192358 0 0.000153191 0.000270689 0 0.000139939 0.000297229 0 + 0.000121978 0.000293603 0 0.000101464 0.0002753 0 8.03017e-05 0.00025254 0 6.00274e-05 0.000231612 0 + 4.17708e-05 0.000216091 0 2.62801e-05 0.000207764 0 1.39981e-05 0.000207364 0 5.1477e-06 0.000215201 0 + -2.49496e-07 0.000231253 0 -2.47237e-06 0.000252091 0 -2.21927e-06 0.000257275 0 -7.94832e-07 0.000175212 0 + 5.87855e-07 0.000173846 0 1.48841e-06 0.000256372 0 1.12976e-06 0.00025318 0 -1.64006e-06 0.000235226 0 + -7.46039e-06 0.000222483 0 -1.65687e-05 0.000218042 0 -2.89586e-05 0.000221726 0 -4.44227e-05 0.000233024 0 + -6.24698e-05 0.000250904 0 -8.22178e-05 0.000273185 0 -0.000102336 0.000295865 0 -0.00012107 0.000312262 0 + -0.000136357 0.000311885 0 -0.000146057 0.000279201 0 -0.000148316 0.000192922 0 -0.000142083 2.69603e-05 0 + -0.000127539 -0.000245454 0 -0.00010553 -0.000642719 0 -7.49041e-05 -0.00116175 0 -2.85549e-05 -0.00170512 0 + 2.84338e-05 -0.00170572 0 7.48186e-05 -0.00116275 0 0.000105483 -0.000643604 0 0.000127503 -0.000246115 0 + 0.000142048 2.65074e-05 0 0.000148283 0.000192637 0 0.000146032 0.000279043 0 0.000136344 0.000311816 0 + 0.000121068 0.000312251 0 0.000102345 0.000295888 0 8.22346e-05 0.000273224 0 6.24908e-05 0.000250945 0 + 4.44448e-05 0.00023306 0 2.89796e-05 0.000221751 0 1.6587e-05 0.000218052 0 7.47516e-06 0.000222476 0 + 1.65074e-06 0.0002352 0 -1.12312e-06 0.00025314 0 -1.48524e-06 0.000256334 0 -5.87037e-07 0.00017383 0 + 3.58623e-07 0.000172899 0 6.44913e-07 0.000256132 0 -5.22276e-07 0.000254946 0 -4.12461e-06 0.000239832 0 + -1.06851e-05 0.000230258 0 -2.03631e-05 0.000229054 0 -3.31401e-05 0.000235882 0 -4.87946e-05 0.000249987 0 + -6.67668e-05 0.00026996 0 -8.60391e-05 0.00029315 0 -0.000105101 0.000315081 0 -0.000122027 0.000328705 0 + -0.000134666 0.000323369 0 -0.00014097 0.000283721 0 -0.000139456 0.000189146 0 -0.000129767 1.48148e-05 0 + -0.00011302 -0.000264599 0 -9.10104e-05 -0.000667592 0 -6.35509e-05 -0.00119497 0 -2.41144e-05 -0.00175769 0 + 2.40573e-05 -0.00175831 0 6.35175e-05 -0.00119601 0 9.09954e-05 -0.000668489 0 0.000113 -0.000265255 0 + 0.000129735 1.43681e-05 0 0.000139416 0.00018886 0 0.000140932 0.000283555 0 0.000134637 0.000323288 0 + 0.00012201 0.000328682 0 0.000105098 0.000315094 0 8.6046e-05 0.000293181 0 6.67807e-05 0.000269998 0 + 4.88121e-05 0.000250022 0 3.31584e-05 0.000235907 0 2.03801e-05 0.000229066 0 1.06993e-05 0.000230254 0 + 4.13517e-06 0.00023981 0 5.28866e-07 0.000254911 0 -6.41784e-07 0.000256097 0 -3.57813e-07 0.000172886 0 + 1.33807e-07 0.000172407 0 -2.11985e-07 0.000256684 0 -2.27407e-06 0.000257624 0 -6.83623e-06 0.000245319 0 + -1.42613e-05 0.000238757 0 -2.4625e-05 0.000240597 0 -3.78804e-05 0.000250371 0 -5.37722e-05 0.000267044 0 + -7.16628e-05 0.000288766 0 -9.0409e-05 0.000312362 0 -0.000108355 0.000332877 0 -0.000123459 0.000342938 0 + -0.000133555 0.000331871 0 -0.000136761 0.000284728 0 -0.000131993 0.000181857 0 -0.000119521 -5.64936e-08 0 + -0.000101167 -0.000284829 0 -7.93112e-05 -0.000691228 0 -5.44067e-05 -0.00122369 0 -2.05161e-05 -0.00180229 0 + 2.05212e-05 -0.00180292 0 5.44218e-05 -0.00122476 0 7.93248e-05 -0.000692118 0 0.00010116 -0.000285466 0 + 0.000119492 -4.87617e-07 0 0.00013195 0.000181576 0 0.000136714 0.000284557 0 0.000133515 0.00033178 0 + 0.00012343 0.000342902 0 0.00010834 0.000332877 0 9.04058e-05 0.000312384 0 7.16688e-05 0.000288797 0 + 5.37841e-05 0.000267076 0 3.78949e-05 0.000250396 0 2.46396e-05 0.000240611 0 1.42742e-05 0.000238756 0 + 6.84608e-06 0.000245301 0 2.28027e-06 0.000257592 0 2.14866e-07 0.000256651 0 -1.33089e-07 0.000172395 0 + -6.89268e-08 0.000172342 0 -1.02632e-06 0.000258052 0 -3.99028e-06 0.000261282 0 -9.50837e-06 0.000251741 0 + -1.77712e-05 0.000248022 0 -2.87751e-05 0.000252699 0 -4.2438e-05 0.000265187 0 -5.84625e-05 0.000284144 0 + -7.61378e-05 0.000307232 0 -9.42211e-05 0.000330726 0 -0.000110957 0.000349195 0 -0.000124248 0.000355015 0 + -0.000131983 0.000337626 0 -0.000132496 0.000282691 0 -0.00012511 0.00017174 0 -0.000110611 -1.69106e-05 0 + -9.13014e-05 -0.000305638 0 -6.98384e-05 -0.000713739 0 -4.7066e-05 -0.00124886 0 -1.76212e-05 -0.00184046 0 + 1.76825e-05 -0.00184109 0 4.71235e-05 -0.00124993 0 6.98757e-05 -0.000714604 0 9.13056e-05 -0.000306245 0 + 0.000110586 -1.73198e-05 0 0.000125066 0.00017147 0 0.000132445 0.00028252 0 0.000131935 0.000337526 0 + 0.00012421 0.000354966 0 0.000110932 0.000349181 0 9.42089e-05 0.000330736 0 7.61363e-05 0.000307254 0 + 5.84685e-05 0.000284171 0 4.24482e-05 0.000265211 0 2.87868e-05 0.000252713 0 1.77822e-05 0.000248023 0 + 9.5171e-06 0.000251726 0 3.99589e-06 0.000261253 0 1.02889e-06 0.000258022 0 6.95329e-08 0.000172331 0 + -2.4779e-07 0.000172659 0 -1.77182e-06 0.000260216 0 -5.57257e-06 0.000265882 0 -1.19373e-05 0.000259024 0 + -2.08912e-05 0.000257956 0 -3.23577e-05 0.000265235 0 -4.62196e-05 0.000280176 0 -6.21426e-05 0.000301103 0 + -7.93637e-05 0.000325169 0 -9.65816e-05 0.00034809 0 -0.000111997 0.000363982 0 -0.000123523 0.000365044 0 + -0.000129152 0.000340962 0 -0.000127466 0.000278183 0 -0.00011817 0.000159565 0 -0.000102456 -3.49487e-05 0 + -8.28535e-05 -0.000326511 0 -6.205e-05 -0.000735132 0 -4.11324e-05 -0.00127116 0 -1.52861e-05 -0.00187346 0 + 1.53955e-05 -0.00187408 0 4.12249e-05 -0.00127221 0 6.21061e-05 -0.000735958 0 8.28677e-05 -0.000327083 0 + 0.000102436 -3.53317e-05 0 0.000118128 0.00015931 0 0.000127415 0.000278015 0 0.000129101 0.000340855 0 + 0.000123479 0.000364984 0 0.000111966 0.000363956 0 9.65623e-05 0.000348088 0 7.93556e-05 0.000325182 0 + 6.2143e-05 0.000301124 0 4.62255e-05 0.000280196 0 3.23662e-05 0.000265249 0 2.09e-05 0.000257959 0 + 1.19447e-05 0.000259012 0 5.57745e-06 0.000265857 0 1.77406e-06 0.00026019 0 2.48311e-07 0.000172649 0 + -4.07431e-07 0.000173314 0 -2.43178e-06 0.00026311 0 -6.94173e-06 0.000271299 0 -1.39633e-05 0.000266993 0 + -2.33668e-05 0.000268345 0 -3.5011e-05 0.000277957 0 -4.87513e-05 0.000295056 0 -6.42331e-05 0.000317628 0 + -8.06785e-05 0.000342311 0 -9.67833e-05 0.000364271 0 -0.000110771 0.000377204 0 -0.00012062 0.000373197 0 + -0.000124471 0.00034229 0 -0.000121157 0.000271855 0 -0.000110709 0.000146149 0 -9.45915e-05 -5.33645e-05 0 + -7.53289e-05 -0.00034696 0 -5.54646e-05 -0.000755351 0 -3.62441e-05 -0.00129108 0 -1.3376e-05 -0.00190225 0 + 1.35241e-05 -0.00190287 0 3.6364e-05 -0.0012921 0 5.55349e-05 -0.000756128 0 7.53512e-05 -0.000347491 0 + 9.45781e-05 -5.3719e-05 0 0.000110673 0.000145911 0 0.000121109 0.000271692 0 0.000124421 0.000342181 0 + 0.000120574 0.000373126 0 0.000110735 0.000377166 0 9.67593e-05 0.000364257 0 8.06654e-05 0.000342314 0 + 6.42289e-05 0.000317641 0 4.87533e-05 0.000295072 0 3.50165e-05 0.000277969 0 2.33734e-05 0.000268347 0 + 1.39693e-05 0.000266982 0 6.94584e-06 0.000271277 0 2.43371e-06 0.000263085 0 4.07877e-07 0.000173305 0 + -5.4693e-07 0.000174268 0 -2.98588e-06 0.000266619 0 -8.0306e-06 0.000277345 0 -1.54564e-05 0.000275394 0 + -2.49932e-05 0.000278884 0 -3.64468e-05 0.000290517 0 -4.96573e-05 0.000309447 0 -6.42778e-05 0.000333339 0 + -7.95644e-05 0.000358332 0 -9.42773e-05 0.000379068 0 -0.000106734 0.000388852 0 -0.00011504 0.000379704 0 + -0.000117507 0.000342101 0 -0.000113192 0.000264415 0 -0.000102372 0.000132321 0 -8.66233e-05 -7.14026e-05 0 + -6.8287e-05 -0.000366521 0 -4.96577e-05 -0.000774284 0 -3.20805e-05 -0.00130894 0 -1.17692e-05 -0.00192757 0 + 1.19467e-05 -0.00192817 0 3.22205e-05 -0.00130991 0 4.9738e-05 -0.000775004 0 6.83157e-05 -0.000367009 0 + 8.66161e-05 -7.17282e-05 0 0.000102342 0.000132099 0 0.00011315 0.00026426 0 0.00011746 0.00034199 0 + 0.000114996 0.000379627 0 0.000106698 0.000388803 0 9.4251e-05 0.000379042 0 7.95481e-05 0.000358325 0 + 6.42702e-05 0.000333344 0 4.9656e-05 0.000309458 0 3.64495e-05 0.000290526 0 2.49978e-05 0.000278886 0 + 1.5461e-05 0.000275385 0 8.03395e-06 0.000277324 0 2.98748e-06 0.000266596 0 5.47302e-07 0.00017426 0 + -6.61622e-07 0.000175477 0 -3.40935e-06 0.000270597 0 -8.77651e-06 0.000283779 0 -1.63045e-05 0.000283914 0 + -2.56021e-05 0.000289198 0 -3.64353e-05 0.000302489 0 -4.86464e-05 0.000322897 0 -6.19293e-05 0.000347793 0 + -7.563e-05 0.000372865 0 -8.86479e-05 0.000392265 0 -9.94727e-05 0.000398935 0 -0.000106395 0.000384849 0 + -0.00010791 0.00034094 0 -0.000103255 0.000256608 0 -9.28359e-05 0.000118889 0 -7.81836e-05 -8.83722e-05 0 + -6.13261e-05 -0.000384745 0 -4.42506e-05 -0.000791764 0 -2.83578e-05 -0.00132493 0 -1.03571e-05 -0.00194989 0 + 1.05553e-05 -0.00195047 0 2.85113e-05 -0.00132583 0 4.43374e-05 -0.000792423 0 6.136e-05 -0.00038519 0 + 7.81824e-05 -8.86698e-05 0 9.28128e-05 0.000118684 0 0.000103219 0.000256461 0 0.00010787 0.00034083 0 + 0.000106355 0.000384767 0 9.94384e-05 0.000398878 0 8.86217e-05 0.00039223 0 7.56124e-05 0.000372849 0 + 6.19196e-05 0.000347791 0 4.86429e-05 0.000322902 0 3.64359e-05 0.000302495 0 2.56049e-05 0.000289199 0 + 1.63079e-05 0.000283906 0 8.77914e-06 0.00028376 0 3.41066e-06 0.000270576 0 6.61929e-07 0.00017547 0 + -7.43293e-07 0.000176882 0 -3.67036e-06 0.000274867 0 -9.11341e-06 0.000290319 0 -1.6403e-05 0.000292192 0 + -2.50493e-05 0.000298865 0 -3.47946e-05 0.000313401 0 -4.5502e-05 0.000334903 0 -5.69399e-05 0.000360507 0 + -6.86001e-05 0.000385512 0 -7.95966e-05 0.000403633 0 -8.86727e-05 0.000407468 0 -9.43662e-05 0.000388931 0 + -9.53678e-05 0.000339374 0 -9.10265e-05 0.000249177 0 -8.17536e-05 0.000106627 0 -6.88866e-05 -0.00010363 0 + -5.40471e-05 -0.000401184 0 -3.88839e-05 -0.000807564 0 -2.48134e-05 -0.0013391 0 -9.03933e-06 -0.0019695 0 + 9.25066e-06 -0.00197007 0 2.4975e-05 -0.00133992 0 3.89747e-05 -0.00080816 0 5.40853e-05 -0.000401587 0 + 6.88915e-05 -0.000103902 0 8.17379e-05 0.000106439 0 9.09988e-05 0.000249038 0 9.53344e-05 0.000339266 0 + 9.43324e-05 0.000388846 0 8.86424e-05 0.000407405 0 7.95723e-05 0.00040359 0 6.85828e-05 0.000385488 0 + 5.69293e-05 0.000360499 0 4.5497e-05 0.000334904 0 3.47936e-05 0.000313404 0 2.50507e-05 0.000298864 0 + 1.64054e-05 0.000292183 0 9.11543e-06 0.000290301 0 3.67141e-06 0.000274847 0 7.43542e-07 0.000176875 0 + -7.78689e-07 0.000178404 0 -3.72501e-06 0.000279218 0 -8.96316e-06 0.000296649 0 -1.56432e-05 0.000299832 0 + -2.32023e-05 0.00030743 0 -3.1377e-05 0.000322755 0 -4.00694e-05 0.000344949 0 -4.91513e-05 0.000370982 0 + -5.83075e-05 0.000395854 0 -6.69329e-05 0.000412913 0 -7.41039e-05 0.000414436 0 -7.86754e-05 0.000392229 0 + -7.95531e-05 0.000337956 0 -7.61367e-05 0.000242838 0 -6.87098e-05 9.62668e-05 0 -5.82829e-05 -0.000116563 0 + -4.601e-05 -0.000415363 0 -3.31843e-05 -0.000821374 0 -2.11855e-05 -0.00135136 0 -7.71732e-06 -0.00198648 0 + 7.93511e-06 -0.00198703 0 2.13507e-05 -0.0013521 0 3.3277e-05 -0.000821906 0 4.60519e-05 -0.000415726 0 + 5.82937e-05 -0.00011681 0 6.87018e-05 9.60936e-05 0 7.61175e-05 0.000242708 0 7.95281e-05 0.000337851 0 + 7.86489e-05 0.000392143 0 7.40791e-05 0.000414368 0 6.69121e-05 0.000412865 0 5.8292e-05 0.000395824 0 + 4.91411e-05 0.000370968 0 4.00638e-05 0.000344945 0 3.13751e-05 0.000322755 0 2.32028e-05 0.000307428 0 + 1.56448e-05 0.000299822 0 8.9647e-06 0.000296632 0 3.72585e-06 0.000279199 0 7.7889e-07 0.000178398 0 + -7.51363e-07 0.000179934 0 -3.51623e-06 0.000283399 0 -8.22755e-06 0.000302417 0 -1.39e-05 0.000306416 0 + -1.99245e-05 0.00031443 0 -2.60506e-05 0.000330057 0 -3.22358e-05 0.000352525 0 -3.8476e-05 0.000378728 0 + -4.46789e-05 0.000403467 0 -5.05679e-05 0.000419814 0 -5.56187e-05 0.000419756 0 -5.90761e-05 0.000394937 0 + -6.01077e-05 0.000337157 0 -5.81299e-05 0.000238243 0 -5.31768e-05 8.84823e-05 0 -4.58125e-05 -0.00012657 0 + -3.66896e-05 -0.000426752 0 -2.67285e-05 -0.000832772 0 -1.71911e-05 -0.00136149 0 -6.2869e-06 -0.00200072 0 + 6.50538e-06 -0.00200124 0 1.7356e-05 -0.00136216 0 2.68217e-05 -0.000833243 0 3.67351e-05 -0.000427078 0 + 4.58293e-05 -0.000126795 0 5.31766e-05 8.83226e-05 0 5.81194e-05 0.00023812 0 6.00915e-05 0.000337056 0 + 5.90576e-05 0.000394852 0 5.56005e-05 0.000419686 0 5.05518e-05 0.000419762 0 4.46662e-05 0.000403432 0 + 3.8467e-05 0.000378709 0 3.22305e-05 0.000352517 0 2.60483e-05 0.000330054 0 1.99243e-05 0.000314426 0 + 1.3901e-05 0.000306406 0 8.22873e-06 0.0003024 0 3.51691e-06 0.000283381 0 7.5153e-07 0.000179928 0 + -6.41937e-07 0.000181327 0 -2.97488e-06 0.000287104 0 -6.78628e-06 0.000307236 0 -1.10232e-05 0.000311507 0 + -1.5059e-05 0.000319399 0 -1.86754e-05 0.00033483 0 -2.18996e-05 0.000357161 0 -2.48605e-05 0.000383293 0 + -2.76998e-05 0.000407944 0 -3.04892e-05 0.000424016 0 -3.31439e-05 0.000423261 0 -3.53612e-05 0.000397108 0 + -3.66404e-05 0.000337297 0 -3.64442e-05 0.000235928 0 -3.44802e-05 8.38795e-05 0 -3.07654e-05 -0.000133047 0 + -2.54374e-05 -0.000434727 0 -1.90132e-05 -0.000841183 0 -1.25093e-05 -0.00136912 0 -4.63425e-06 -0.00201187 0 + 4.84827e-06 -0.00201236 0 1.26708e-05 -0.0013697 0 1.91062e-05 -0.000841597 0 2.54866e-05 -0.000435018 0 + 3.07886e-05 -0.000133251 0 3.4488e-05 8.37321e-05 0 3.64426e-05 0.000235813 0 3.66332e-05 0.0003372 0 + 3.5351e-05 0.000397024 0 3.31326e-05 0.00042319 0 3.04783e-05 0.000423961 0 2.76905e-05 0.000407907 0 + 2.48535e-05 0.000383271 0 2.1895e-05 0.00035715 0 1.86732e-05 0.000334825 0 1.50586e-05 0.000319393 0 + 1.10239e-05 0.000311497 0 6.78725e-06 0.000307219 0 2.97547e-06 0.000287086 0 6.42083e-07 0.000181322 0 + -4.22214e-07 0.000182391 0 -2.01195e-06 0.000289962 0 -4.49472e-06 0.000310671 0 -6.83572e-06 0.000314649 0 + -8.42217e-06 0.000321879 0 -9.08641e-06 0.000336631 0 -8.93668e-06 0.000358435 0 -8.23561e-06 0.000384279 0 + -7.3503e-06 0.000408912 0 -6.69512e-06 0.000425182 0 -6.63333e-06 0.000424687 0 -7.35076e-06 0.000398616 0 + -8.74879e-06 0.000338466 0 -1.04244e-05 0.000236239 0 -1.17865e-05 8.29671e-05 0 -1.22649e-05 -0.000135371 0 + -1.14635e-05 -0.000438533 0 -9.43715e-06 -0.000845828 0 -6.77655e-06 -0.00137364 0 -2.63874e-06 -0.00201936 0 + 2.84359e-06 -0.00201983 0 6.932e-06 -0.00137414 0 9.52964e-06 -0.00084619 0 1.15169e-05 -0.000438793 0 + 1.2295e-05 -0.000135557 0 1.18026e-05 8.28308e-05 0 1.04319e-05 0.000236131 0 8.7507e-06 0.000338373 0 + 7.34893e-06 0.000398534 0 6.62913e-06 0.000424618 0 6.68975e-06 0.000425127 0 7.34482e-06 0.000408873 0 + 8.2309e-06 0.000384256 0 8.93333e-06 0.000358422 0 9.08465e-06 0.000336624 0 8.42185e-06 0.000321872 0 + 6.83636e-06 0.000314638 0 4.49562e-06 0.000310655 0 2.01251e-06 0.000289946 0 4.22355e-07 0.000182386 0 + -5.02383e-08 0.000182864 0 -5.07725e-07 0.000291537 0 -1.17701e-06 0.000312249 0 -1.13353e-06 0.00031537 0 + 1.93289e-07 0.000321418 0 2.90683e-06 0.000335042 0 6.81274e-06 0.000355968 0 1.15217e-05 0.000381336 0 + 1.64613e-05 0.00040603 0 2.0899e-05 0.000422971 0 2.40383e-05 0.000423697 0 2.51937e-05 0.000399168 0 + 2.40072e-05 0.000340499 0 2.06396e-05 0.00023925 0 1.58371e-05 8.61208e-05 0 1.06879e-05 -0.000132897 0 + 6.14699e-06 -0.000437267 0 2.70516e-06 -0.000845678 0 4.03745e-07 -0.00137415 0 -1.88737e-07 -0.0020224 0 + 3.80095e-07 -0.00202285 0 -2.56511e-07 -0.00137458 0 -2.61254e-06 -0.000845995 0 -6.08833e-06 -0.0004375 0 + -1.06502e-05 -0.000133066 0 -1.58123e-05 8.59947e-05 0 -2.0623e-05 0.000239148 0 -2.39965e-05 0.000340411 0 + -2.51875e-05 0.00039909 0 -2.40358e-05 0.00042363 0 -2.08991e-05 0.000422917 0 -1.6463e-05 0.000405992 0 + -1.1524e-05 0.000381312 0 -6.81464e-06 0.000355954 0 -2.90783e-06 0.000335034 0 -1.93246e-07 0.00032141 0 + 1.13434e-06 0.000315358 0 1.17801e-06 0.000312232 0 5.08337e-07 0.000291521 0 5.03907e-08 0.000182859 0 + 5.07696e-07 0.000182406 0 1.65304e-06 0.000291307 0 3.35732e-06 0.000311444 0 6.31248e-06 0.000313176 0 + 1.10274e-05 0.000317571 0 1.75355e-05 0.000329668 0 2.55598e-05 0.000349411 0 3.46019e-05 0.000374141 0 + 4.39155e-05 0.000398972 0 5.24877e-05 0.00041702 0 5.91182e-05 0.000419879 0 6.26242e-05 0.000398325 0 + 6.21465e-05 0.000343006 0 5.74906e-05 0.000244766 0 4.93628e-05 9.35347e-05 0 3.91793e-05 -0.000124978 0 + 2.84256e-05 -0.000429891 0 1.82396e-05 -0.000839426 0 9.45167e-06 -0.00136932 0 2.79464e-06 -0.00201999 0 + -2.6201e-06 -0.00202042 0 -9.31412e-06 -0.00136969 0 -1.81452e-05 -0.000839705 0 -2.83605e-05 -0.000430099 0 + -3.91334e-05 -0.000125132 0 -4.93292e-05 9.34184e-05 0 -5.74653e-05 0.000244671 0 -6.21275e-05 0.000342923 0 + -6.26106e-05 0.000398252 0 -5.91095e-05 0.000419816 0 -5.2483e-05 0.000416969 0 -4.39137e-05 0.000398935 0 + -3.46017e-05 0.000374118 0 -2.55602e-05 0.000349397 0 -1.75355e-05 0.000329659 0 -1.10268e-05 0.000317562 0 + -6.31131e-06 0.000313163 0 -3.35609e-06 0.000311428 0 -1.65232e-06 0.000291291 0 -5.07517e-07 0.000182402 0 + 1.27291e-06 0.000180626 0 4.56457e-06 0.00028865 0 9.29685e-06 0.000307664 0 1.57538e-05 0.000307544 0 + 2.4354e-05 0.000309888 0 3.50662e-05 0.000320131 0 4.75494e-05 0.000338441 0 6.12288e-05 0.000362391 0 + 7.52302e-05 0.000387408 0 8.83123e-05 0.00040693 0 9.89135e-05 0.000412737 0 0.000105365 0.000395509 0 + 0.000106261 0.000345404 0 0.000100925 0.00025236 0 8.98018e-05 0.000105191 0 7.43631e-05 -0.000111012 0 + 5.64989e-05 -0.000415239 0 3.8076e-05 -0.00082547 0 2.08888e-05 -0.0013573 0 6.45548e-06 -0.00201091 0 + -6.2972e-06 -0.00201132 0 -2.07601e-05 -0.00135762 0 -3.79793e-05 -0.000825716 0 -5.64273e-05 -0.000415425 0 + -7.43093e-05 -0.000111151 0 -8.976e-05 0.000105084 0 -0.000100891 0.000252273 0 -0.000106235 0.000345327 0 + -0.000105345 0.000395441 0 -9.88995e-05 0.000412679 0 -8.83034e-05 0.000406883 0 -7.52254e-05 0.000387374 0 + -6.12264e-05 0.000362368 0 -4.75482e-05 0.000338427 0 -3.50651e-05 0.000320122 0 -2.43526e-05 0.000309878 0 + -1.57521e-05 0.000307531 0 -9.29531e-06 0.000307648 0 -4.56371e-06 0.000288636 0 -1.2727e-06 0.000180622 0 + 2.27207e-06 0.000177081 0 8.3235e-06 0.000282852 0 1.68251e-05 0.000300228 0 2.74344e-05 0.000297913 0 + 4.04263e-05 0.000297926 0 5.5725e-05 0.000306082 0 7.29682e-05 0.000322764 0 9.15568e-05 0.0003458 0 + 0.000110551 0.000371003 0 0.000128548 0.000392255 0 0.000143682 0.000401676 0 0.000153819 0.000389982 0 + 0.000156954 0.0003469 0 0.000151779 0.000261376 0 0.000138209 0.000120868 0 0.00011745 -9.04905e-05 0 + 9.1578e-05 -0.000392025 0 6.32051e-05 -0.000801888 0 3.53784e-05 -0.00133587 0 1.10437e-05 -0.00199358 0 + -1.08976e-05 -0.00199396 0 -3.52557e-05 -0.00133616 0 -6.3107e-05 -0.000802108 0 -9.15011e-05 -0.000392191 0 + -0.000117389 -9.06157e-05 0 -0.00013816 0.000120771 0 -0.000151739 0.000261297 0 -0.000156922 0.00034683 0 + -0.000153794 0.000389921 0 -0.000143664 0.000401624 0 -0.000128535 0.000392214 0 -0.000110543 0.000370973 0 + -9.15525e-05 0.00034578 0 -7.29655e-05 0.000322751 0 -5.57228e-05 0.000306073 0 -4.0424e-05 0.000297916 0 + -2.74321e-05 0.000297901 0 -1.68232e-05 0.000300213 0 -8.32246e-06 0.000282839 0 -2.27183e-06 0.000177077 0 + 3.52951e-06 0.000171279 0 1.30096e-05 0.000273122 0 2.60764e-05 0.00028839 0 4.15087e-05 0.00028371 0 + 5.93675e-05 0.000281278 0 7.95685e-05 0.00028723 0 0.000101796 0.000302145 0 0.000125502 0.000324123 0 + 0.000149763 0.000349425 0 0.000173102 0.000372498 0 0.000193425 0.000385976 0 0.000208163 0.000380808 0 + 0.000214661 0.000346441 0 0.000210793 0.000270878 0 0.000195626 0.000140103 0 0.000169718 -6.30582e-05 0 + 0.000135012 -0.000358879 0 9.47885e-05 -0.000766438 0 5.37017e-05 -0.0013024 0 1.6841e-05 -0.00196585 0 + -1.67026e-05 -0.00196621 0 -5.35825e-05 -0.00130268 0 -9.46889e-05 -0.000766636 0 -0.00013493 -0.000359027 0 + -0.000169651 -6.31699e-05 0 -0.000195571 0.000140016 0 -0.000210748 0.000270807 0 -0.000214624 0.000346379 0 + -0.000208135 0.000380754 0 -0.000193404 0.000385931 0 -0.000173088 0.000372462 0 -0.000149754 0.000349399 0 + -0.000125496 0.000324106 0 -0.000101792 0.000302133 0 -7.9565e-05 0.000287221 0 -5.93643e-05 0.000281268 0 + -4.15056e-05 0.000283698 0 -2.6074e-05 0.000288376 0 -1.30084e-05 0.00027311 0 -3.52923e-06 0.000171276 0 + 5.05214e-06 0.000162698 0 1.86326e-05 0.000258643 0 3.70378e-05 0.000271397 0 5.79042e-05 0.000264404 0 + 8.10016e-05 0.000259628 0 0.000106286 0.000263396 0 0.000133581 0.000276458 0 0.00016249 0.000297195 0 + 0.000192211 0.000322371 0 0.000221302 0.000347121 0 0.000247544 0.000364788 0 0.00026799 0.000366812 0 + 0.000279293 0.000342636 0 0.000278311 0.000279533 0 0.000262877 0.00016205 0 0.000232431 -2.86508e-05 0 + 0.000188306 -0.000314456 0 0.000134234 -0.000716567 0 7.68258e-05 -0.00125378 0 2.41837e-05 -0.00192497 0 + -2.40495e-05 -0.00192531 0 -7.67077e-05 -0.00125404 0 -0.000134132 -0.000716747 0 -0.00018822 -0.000314587 0 + -0.00023236 -2.87493e-05 0 -0.000262818 0.000161974 0 -0.000278262 0.00027947 0 -0.000279253 0.000342583 0 + -0.000267959 0.000366766 0 -0.000247521 0.00036475 0 -0.000221286 0.000347091 0 -0.0001922 0.00032235 0 + -0.000162483 0.00029718 0 -0.000133575 0.000276447 0 -0.000106281 0.000263386 0 -8.09974e-05 0.000259618 0 + -5.79004e-05 0.000264393 0 -3.7035e-05 0.000271384 0 -1.86312e-05 0.000258632 0 -5.05184e-06 0.000162695 0 + 6.8094e-06 0.000150836 0 2.50583e-05 0.000238676 0 4.94109e-05 0.000248607 0 7.61266e-05 0.000239612 0 + 0.000104615 0.000232834 0 0.000134927 0.000234592 0 0.000167133 0.00024576 0 0.000201109 0.000265008 0 + 0.0002363 0.000289648 0 0.00027144 0.000315613 0 0.000304324 0.00033717 0 0.000331738 0.00034657 0 + 0.000349648 0.000333665 0 0.000353719 0.000285415 0 0.000340131 0.00018519 0 0.00030655 1.22365e-05 0 + 0.000253018 -0.000257686 0 0.000183266 -0.000649512 0 0.000106049 -0.00118621 0 3.35392e-05 -0.00186738 0 + -3.34061e-05 -0.00186772 0 -0.00010593 -0.00118645 0 -0.000183162 -0.000649676 0 -0.00025293 -0.000257802 0 + -0.000306476 1.21515e-05 0 -0.00034007 0.000185125 0 -0.000353668 0.000285362 0 -0.000349607 0.000333621 0 + -0.000331706 0.000346533 0 -0.0003043 0.000337139 0 -0.000271422 0.000315589 0 -0.000236287 0.00028963 0 + -0.0002011 0.000264995 0 -0.000167126 0.00024575 0 -0.000134921 0.000234584 0 -0.00010461 0.000232825 0 + -7.61222e-05 0.000239601 0 -4.94078e-05 0.000248595 0 -2.50569e-05 0.000238666 0 -6.80909e-06 0.000150834 0 + 8.71016e-06 0.000135317 0 3.19245e-05 0.000212732 0 6.24479e-05 0.000219675 0 9.50227e-05 0.000209254 0 + 0.00012866 0.000201067 0 0.000163563 0.000201145 0 0.000200147 0.000210416 0 0.000238685 0.000227839 0 + 0.000279008 0.000251303 0 0.000320195 0.000277631 0 0.00036025 0.000302213 0 0.000395882 0.000318481 0 + 0.000422488 0.000317238 0 0.000434465 0.000285793 0 0.000425952 0.000206913 0 0.000392045 5.80021e-05 0 + 0.000330485 -0.00018836 0 0.000244015 -0.000562617 0 0.00014326 -0.00109513 0 4.5647e-05 -0.00178834 0 + -4.55124e-05 -0.00178866 0 -0.000143138 -0.00109536 0 -0.000243908 -0.000562765 0 -0.000330394 -0.000188461 0 + -0.000391969 5.79311e-05 0 -0.00042589 0.00020686 0 -0.000434415 0.000285751 0 -0.000422448 0.000317203 0 + -0.00039585 0.000318452 0 -0.000360226 0.00030219 0 -0.000320177 0.000277613 0 -0.000278995 0.00025129 0 + -0.000238674 0.000227829 0 -0.000200139 0.000210408 0 -0.000163556 0.000201137 0 -0.000128654 0.000201059 0 + -9.50178e-05 0.000209244 0 -6.24446e-05 0.000219665 0 -3.1923e-05 0.000212724 0 -8.70986e-06 0.000135315 0 + 1.058e-05 0.000116026 0 3.85576e-05 0.00018083 0 7.47934e-05 0.000184818 0 0.000112548 0.000173782 0 + 0.000150462 0.000164987 0 0.000188935 0.00016385 0 0.000228804 0.000171258 0 0.000270828 0.000186436 0 + 0.000315359 0.000207852 0 0.000361996 0.000233259 0 0.000409203 0.000259323 0 0.000453926 0.000281016 0 + 0.000491296 0.000290727 0 0.000514598 0.000277025 0 0.000515738 0.000223054 0 0.000486513 0.000104993 0 + 0.000420967 -0.000108245 0 0.000318873 -0.000454169 0 0.000191327 -0.000975279 0 6.17917e-05 -0.00168104 0 + -6.1653e-05 -0.00168135 0 -0.000191202 -0.000975493 0 -0.000318764 -0.0004543 0 -0.000420876 -0.000108329 0 + -0.000486438 0.000104937 0 -0.000515678 0.000223014 0 -0.00051455 0.000276994 0 -0.000491258 0.000290702 0 + -0.000453896 0.000280995 0 -0.00040918 0.000259306 0 -0.000361978 0.000233245 0 -0.000315346 0.000207842 0 + -0.000270818 0.000186428 0 -0.000228795 0.000171251 0 -0.000188927 0.000163843 0 -0.000150456 0.00016498 0 + -0.000112543 0.000173774 0 -7.47902e-05 0.000184809 0 -3.85562e-05 0.000180824 0 -1.05798e-05 0.000116026 0 + 1.21423e-05 9.33041e-05 0 4.39118e-05 0.000143806 0 8.43792e-05 0.000145139 0 0.000125619 0.000134467 0 + 0.000166022 0.000125985 0 0.000206219 0.000124181 0 0.000247487 0.00012979 0 0.000291104 0.000142261 0 + 0.000338011 0.000160589 0 0.000388481 0.000183415 0 0.000441718 0.000208723 0 0.00049534 0.000233272 0 + 0.000544787 0.000251654 0 0.000582802 0.000254782 0 0.000599343 0.000227616 0 0.000582588 0.00014641 0 + 0.000521514 -2.30422e-05 0 0.000409662 -0.000325425 0 0.000254631 -0.000821445 0 8.43451e-05 -0.00153506 0 + -8.41994e-05 -0.00153535 0 -0.000254502 -0.000821643 0 -0.000409553 -0.000325537 0 -0.000521426 -2.31067e-05 0 + -0.000582519 0.00014637 0 -0.000599287 0.000227589 0 -0.000582758 0.000254762 0 -0.000544753 0.000251637 0 + -0.000495312 0.000233258 0 -0.000441696 0.000208712 0 -0.000388464 0.000183406 0 -0.000337997 0.000160582 0 + -0.000291093 0.000142255 0 -0.000247477 0.000129785 0 -0.000206211 0.000124176 0 -0.000166015 0.00012598 0 + -0.000125614 0.00013446 0 -8.43762e-05 0.000145133 0 -4.39106e-05 0.000143801 0 -1.21421e-05 9.33038e-05 0 + 1.30016e-05 6.81602e-05 0 4.65383e-05 0.000103643 0 8.84147e-05 0.000102957 0 0.000130138 9.36853e-05 0 + 0.000170067 8.64355e-05 0 0.000209081 8.45192e-05 0 0.000248835 8.84308e-05 0 0.000291063 9.77757e-05 0 + 0.000337253 0.000111978 0 0.0003884 0.000130409 0 0.000444665 0.000152227 0 0.000504838 0.000175973 0 + 0.000565525 0.000198818 0 0.000620067 0.000215062 0 0.000657585 0.000213277 0 0.000663314 0.000171775 0 + 0.000621299 5.46813e-05 0 0.000514854 -0.000184852 0 0.000339227 -0.000631361 0 0.000117623 -0.00133325 0 + -0.000117467 -0.00133352 0 -0.000339097 -0.000631537 0 -0.00051475 -0.000184938 0 -0.000621221 5.46379e-05 0 + -0.000663254 0.000171751 0 -0.000657539 0.000213262 0 -0.00062003 0.00021505 0 -0.000565495 0.000198808 0 + -0.000504814 0.000175965 0 -0.000444645 0.00015222 0 -0.000388384 0.000130404 0 -0.000337239 0.000111973 0 + -0.000291052 9.77718e-05 0 -0.000248826 8.84272e-05 0 -0.000209073 8.45154e-05 0 -0.00017006 8.64312e-05 0 + -0.000130134 9.36806e-05 0 -8.84121e-05 0.000102953 0 -4.65373e-05 0.000103641 0 -1.30015e-05 6.81602e-05 0 + 1.26154e-05 4.25432e-05 0 4.45636e-05 6.37754e-05 0 8.34737e-05 6.2039e-05 0 0.000121235 5.51185e-05 0 + 0.000156447 4.98624e-05 0 0.000190213 4.83125e-05 0 0.000224413 5.06834e-05 0 0.000261023 5.66853e-05 0 + 0.00030187 6.60316e-05 0 0.000348506 7.8572e-05 0 0.000402045 9.42602e-05 0 0.000462792 0.00011302 0 + 0.000529471 0.000134405 0 0.000597781 0.000156624 0 0.00065826 0.000173718 0 0.000695236 0.00016863 0 + 0.000692034 0.000103043 0 0.000620534 -5.5268e-05 0 0.000448786 -0.00041357 0 0.00016758 -0.00104823 0 + -0.000167409 -0.00104846 0 -0.000448662 -0.000413713 0 -0.000620447 -5.53247e-05 0 -0.000691973 0.000103021 0 + -0.000695192 0.00016862 0 -0.000658226 0.000173712 0 -0.000597754 0.000156619 0 -0.000529449 0.0001344 0 + -0.000462773 0.000113016 0 -0.000402029 9.42568e-05 0 -0.000348492 7.85691e-05 0 -0.000301858 6.60291e-05 0 + -0.000261013 5.66831e-05 0 -0.000224404 5.06812e-05 0 -0.000190206 4.83102e-05 0 -0.000156442 4.98597e-05 0 + -0.000121232 5.51156e-05 0 -8.34717e-05 6.20363e-05 0 -4.4563e-05 6.37739e-05 0 -1.26153e-05 4.25434e-05 0 + 1.0222e-05 1.97058e-05 0 3.56051e-05 2.92815e-05 0 6.55812e-05 2.76467e-05 0 9.36204e-05 2.37097e-05 0 + 0.000118827 2.08532e-05 0 0.00014241 1.99725e-05 0 0.000166167 2.10668e-05 0 0.000191916 2.39425e-05 0 + 0.000221365 2.84786e-05 0 0.000256143 3.47111e-05 0 0.000297854 4.28712e-05 0 0.000348066 5.34498e-05 0 + 0.000408052 6.73094e-05 0 0.000477791 8.56698e-05 0 0.000553133 0.00010885 0 0.000620903 0.000128752 0 + 0.000671156 9.58706e-05 0 0.000674128 2.0433e-05 0 0.000557817 -0.000201212 0 0.000229649 -0.000651215 0 + -0.00022947 -0.000651371 0 -0.000557718 -0.000201302 0 -0.000674075 2.04067e-05 0 -0.000671124 9.58649e-05 0 + -0.00062088 0.000128751 0 -0.000553114 0.00010885 0 -0.000477774 8.56688e-05 0 -0.000408037 6.73082e-05 0 + -0.000348053 5.34484e-05 0 -0.000297843 4.28699e-05 0 -0.000256133 3.47099e-05 0 -0.000221357 2.84776e-05 0 + -0.000191909 2.39416e-05 0 -0.000166161 2.10659e-05 0 -0.000142405 1.99714e-05 0 -0.000118823 2.0852e-05 0 + -9.36178e-05 2.37084e-05 0 -6.55799e-05 2.76455e-05 0 -3.56048e-05 2.92808e-05 0 -1.02221e-05 1.9706e-05 0 + 4.74191e-06 4.74191e-06 0 1.65441e-05 7.06025e-06 0 3.00201e-05 6.4158e-06 0 4.16788e-05 5.24285e-06 0 + 5.1357e-05 4.43542e-06 0 5.99782e-05 4.18571e-06 0 6.86194e-05 4.45548e-06 0 7.82496e-05 5.17472e-06 0 + 8.97355e-05 6.31125e-06 0 0.000103942 7.89475e-06 0 0.000121877 1.00409e-05 0 0.000144932 1.30135e-05 0 + 0.000175319 1.73734e-05 0 0.000216938 2.42465e-05 0 0.000276527 3.53424e-05 0 0.000361443 4.95734e-05 0 + 0.000448628 3.76111e-05 0 0.000505294 1.90551e-05 0 0.000473059 -5.12896e-05 0 0.00021093 -0.00021084 0 + -0.000210804 -0.000210894 0 -0.000473016 -5.13185e-05 0 -0.000505286 1.9049e-05 0 -0.000448625 3.76114e-05 0 + -0.00036144 4.95743e-05 0 -0.000276522 3.53428e-05 0 -0.000216933 2.42466e-05 0 -0.000175313 1.73732e-05 0 + -0.000144927 1.30133e-05 0 -0.000121873 1.00407e-05 0 -0.000103938 7.89451e-06 0 -8.9732e-05 6.31103e-06 0 + -7.82465e-05 5.17452e-06 0 -6.86167e-05 4.45528e-06 0 -5.9976e-05 4.18547e-06 0 -5.13554e-05 4.43513e-06 0 + -4.16777e-05 5.24252e-06 0 -3.00197e-05 6.4155e-06 0 -1.65441e-05 7.0601e-06 0 -4.74199e-06 4.74199e-06 0 0 0 0 0 0 0 0 0 0 0 0 0 @@ -1493,141 +1493,141 @@ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - - -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 - -0.000200263 -0.000200263 -0.000200263 -0.000200262 -0.000200259 -0.000200253 -0.000200244 -0.000200233 -0.000200233 -0.000200244 -0.000200253 -0.000200259 - -0.000200262 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000200263 - -0.000200263 -0.000200263 -0.000200263 -0.000200263 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 - -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317406 -0.000317403 -0.000317395 -0.00031738 -0.000317359 -0.000317336 - -0.000317336 -0.000317359 -0.00031738 -0.000317395 -0.000317403 -0.000317406 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 - -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000317408 -0.000434553 -0.000434553 -0.000434553 -0.000434553 - -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434552 -0.000434551 -0.000434545 -0.000434532 - -0.000434505 -0.000434459 -0.000434393 -0.000434321 -0.000434321 -0.000434393 -0.000434459 -0.000434505 -0.000434532 -0.000434545 -0.000434551 -0.000434552 - -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 -0.000434553 - -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000551697 - -0.000551695 -0.000551688 -0.000551668 -0.000551624 -0.000551541 -0.000551406 -0.000551221 -0.000551016 -0.000551016 -0.000551221 -0.000551406 -0.000551541 - -0.000551624 -0.000551668 -0.000551688 -0.000551695 -0.000551697 -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000551698 - -0.000551698 -0.000551698 -0.000551698 -0.000551698 -0.000668843 -0.000668843 -0.000668843 -0.000668843 -0.000668843 -0.000668843 -0.000668843 -0.000668843 - -0.000668843 -0.000668843 -0.000668842 -0.00066884 -0.000668831 -0.000668805 -0.000668744 -0.000668616 -0.000668388 -0.000668032 -0.000667556 -0.000667034 - -0.000667034 -0.000667556 -0.000668032 -0.000668388 -0.000668616 -0.000668744 -0.000668805 -0.000668831 -0.00066884 -0.000668842 -0.000668843 -0.000668843 - -0.000668843 -0.000668843 -0.000668843 -0.000668843 -0.000668843 -0.000668843 -0.000668843 -0.000668843 -0.000785988 -0.000785988 -0.000785988 -0.000785988 - -0.000785988 -0.000785988 -0.000785988 -0.000785988 -0.000785988 -0.000785987 -0.000785984 -0.000785974 -0.000785946 -0.000785869 -0.000785698 -0.000785369 - -0.000784809 -0.000783973 -0.00078288 -0.000781692 -0.000781692 -0.00078288 -0.000783973 -0.000784809 -0.000785369 -0.000785698 -0.000785869 -0.000785946 - -0.000785974 -0.000785984 -0.000785987 -0.000785988 -0.000785988 -0.000785988 -0.000785988 -0.000785988 -0.000785988 -0.000785988 -0.000785988 -0.000785988 - -0.000903133 -0.000903133 -0.000903133 -0.000903133 -0.000903133 -0.000903133 -0.000903133 -0.000903132 -0.000903132 -0.000903128 -0.000903118 -0.000903087 - -0.000903005 -0.000902802 -0.000902386 -0.000901632 -0.000900415 -0.000898664 -0.000896435 -0.000894029 -0.000894029 -0.000896435 -0.000898664 -0.000900415 - -0.000901632 -0.000902386 -0.000902802 -0.000903005 -0.000903087 -0.000903118 -0.000903128 -0.000903132 -0.000903132 -0.000903133 -0.000903133 -0.000903133 - -0.000903133 -0.000903133 -0.000903133 -0.000903133 -0.00102028 -0.00102028 -0.00102028 -0.00102028 -0.00102028 -0.00102028 -0.00102028 -0.00102028 - -0.00102027 -0.00102026 -0.00102023 -0.00102014 -0.00101994 -0.00101947 -0.00101857 -0.00101704 -0.00101468 -0.00101142 -0.00100736 -0.00100301 - -0.00100301 -0.00100736 -0.00101142 -0.00101468 -0.00101704 -0.00101857 -0.00101947 -0.00101994 -0.00102014 -0.00102023 -0.00102026 -0.00102027 - -0.00102028 -0.00102028 -0.00102028 -0.00102028 -0.00102028 -0.00102028 -0.00102028 -0.00102028 -0.00113742 -0.00113742 -0.00113742 -0.00113742 - -0.00113742 -0.00113742 -0.00113742 -0.00113742 -0.00113741 -0.00113738 -0.00113729 -0.00113708 -0.00113662 -0.00113568 -0.00113396 -0.00113117 - -0.00112709 -0.00112161 -0.00111496 -0.00110786 -0.00110786 -0.00111496 -0.00112161 -0.00112709 -0.00113117 -0.00113396 -0.00113568 -0.00113662 - -0.00113708 -0.00113729 -0.00113738 -0.00113741 -0.00113742 -0.00113742 -0.00113742 -0.00113742 -0.00113742 -0.00113742 -0.00113742 -0.00113742 - -0.00125457 -0.00125457 -0.00125457 -0.00125457 -0.00125457 -0.00125457 -0.00125456 -0.00125455 -0.00125453 -0.00125445 -0.00125425 -0.0012538 - -0.0012529 -0.0012512 -0.00124824 -0.00124368 -0.00123726 -0.00122893 -0.001219 -0.00120842 -0.00120842 -0.001219 -0.00122893 -0.00123726 - -0.00124368 -0.00124824 -0.0012512 -0.0012529 -0.0012538 -0.00125425 -0.00125445 -0.00125453 -0.00125455 -0.00125456 -0.00125457 -0.00125457 - -0.00125457 -0.00125457 -0.00125457 -0.00125457 -0.00137171 -0.00137171 -0.00137171 -0.00137171 -0.00137171 -0.00137171 -0.0013717 -0.00137168 - -0.00137161 -0.00137144 -0.00137104 -0.00137021 -0.00136862 -0.00136584 -0.00136121 -0.00135442 -0.00134519 -0.00133352 -0.00131982 -0.00130517 - -0.00130517 -0.00131982 -0.00133352 -0.00134519 -0.00135442 -0.00136121 -0.00136584 -0.00136862 -0.00137021 -0.00137104 -0.00137144 -0.00137161 - -0.00137168 -0.0013717 -0.00137171 -0.00137171 -0.00137171 -0.00137171 -0.00137171 -0.00137171 -0.00148886 -0.00148886 -0.00148886 -0.00148886 - -0.00148886 -0.00148885 -0.00148884 -0.00148879 -0.00148865 -0.00148832 -0.0014876 -0.0014862 -0.00148368 -0.00147949 -0.00147287 -0.0014635 - -0.00145117 -0.00143593 -0.00141822 -0.00139908 -0.00139908 -0.00141822 -0.00143593 -0.00145117 -0.0014635 -0.00147287 -0.00147949 -0.00148368 - -0.0014862 -0.0014876 -0.00148832 -0.00148865 -0.00148879 -0.00148884 -0.00148885 -0.00148886 -0.00148886 -0.00148886 -0.00148886 -0.00148886 - -0.001606 -0.001606 -0.001606 -0.001606 -0.001606 -0.00160599 -0.00160596 -0.00160586 -0.00160562 -0.00160505 -0.00160389 -0.00160172 - -0.00159801 -0.00159212 -0.00158338 -0.00157129 -0.00155581 -0.00153702 -0.00151526 -0.00149136 -0.00149136 -0.00151526 -0.00153702 -0.00155581 - -0.00157129 -0.00158338 -0.00159212 -0.00159801 -0.00160172 -0.00160389 -0.00160505 -0.00160562 -0.00160586 -0.00160596 -0.00160599 -0.001606 - -0.001606 -0.001606 -0.001606 -0.001606 -0.00172315 -0.00172315 -0.00172315 -0.00172315 -0.00172314 -0.00172312 -0.00172307 -0.00172291 - -0.0017225 -0.00172163 -0.0017199 -0.00171683 -0.00171178 -0.00170408 -0.00169308 -0.00167832 -0.00165984 -0.0016377 -0.00161206 -0.0015832 - -0.0015832 -0.00161206 -0.0016377 -0.00165984 -0.00167832 -0.00169308 -0.00170408 -0.00171178 -0.00171683 -0.0017199 -0.00172163 -0.0017225 - -0.00172291 -0.00172307 -0.00172312 -0.00172314 -0.00172315 -0.00172315 -0.00172315 -0.00172315 -0.00184029 -0.00184029 -0.00184029 -0.00184029 - -0.00184028 -0.00184025 -0.00184016 -0.00183991 -0.00183931 -0.00183804 -0.00183566 -0.00183157 -0.0018251 -0.00181556 -0.00180237 -0.00178514 - -0.00176396 -0.00173885 -0.00170961 -0.00167563 -0.00167563 -0.00170961 -0.00173885 -0.00176396 -0.00178514 -0.00180237 -0.00181556 -0.0018251 - -0.00183157 -0.00183566 -0.00183804 -0.00183931 -0.00183991 -0.00184016 -0.00184025 -0.00184028 -0.00184029 -0.00184029 -0.00184029 -0.00184029 - -0.00195744 -0.00195744 -0.00195744 -0.00195743 -0.00195742 -0.00195738 -0.00195724 -0.00195687 -0.00195604 -0.00195434 -0.00195124 -0.00194609 - -0.00193819 -0.00192688 -0.00191167 -0.00189227 -0.00186882 -0.00184121 -0.00180873 -0.00176946 -0.00176946 -0.00180873 -0.00184121 -0.00186882 - -0.00189227 -0.00191167 -0.00192688 -0.00193819 -0.00194609 -0.00195124 -0.00195434 -0.00195604 -0.00195687 -0.00195724 -0.00195738 -0.00195742 - -0.00195743 -0.00195744 -0.00195744 -0.00195744 -0.00207458 -0.00207458 -0.00207458 -0.00207458 -0.00207456 -0.0020745 -0.0020743 -0.00207381 - -0.00207272 -0.00207056 -0.00206674 -0.00206054 -0.00205127 -0.00203832 -0.00202134 -0.00200014 -0.00197491 -0.00194535 -0.00191005 -0.00186527 - -0.00186527 -0.00191005 -0.00194535 -0.00197491 -0.00200014 -0.00202134 -0.00203832 -0.00205127 -0.00206054 -0.00206674 -0.00207056 -0.00207272 - -0.00207381 -0.0020743 -0.0020745 -0.00207456 -0.00207458 -0.00207458 -0.00207458 -0.00207458 -0.00219173 -0.00219173 -0.00219172 -0.00219172 - -0.0021917 -0.00219161 -0.00219136 -0.00219074 -0.00218938 -0.00218677 -0.00218224 -0.00217505 -0.00216452 -0.00215014 -0.00213167 -0.0021091 - -0.00208262 -0.00205172 -0.00201405 -0.00196347 -0.00196347 -0.00201405 -0.00205172 -0.00208262 -0.0021091 -0.00213167 -0.00215014 -0.00216452 - -0.00217505 -0.00218224 -0.00218677 -0.00218938 -0.00219074 -0.00219136 -0.00219161 -0.0021917 -0.00219172 -0.00219172 -0.00219173 -0.00219173 - -0.00230887 -0.00230887 -0.00230887 -0.00230886 -0.00230883 -0.00230873 -0.00230842 -0.00230767 -0.00230607 -0.00230303 -0.00229785 -0.00228976 - -0.00227813 -0.00226252 -0.00224288 -0.00221937 -0.00219222 -0.00216063 -0.00212107 -0.00206433 -0.00206433 -0.00212107 -0.00216063 -0.00219222 - -0.00221937 -0.00224288 -0.00226252 -0.00227813 -0.00228976 -0.00229785 -0.00230303 -0.00230607 -0.00230767 -0.00230842 -0.00230873 -0.00230883 - -0.00230886 -0.00230887 -0.00230887 -0.00230887 -0.00242602 -0.00242601 -0.00242601 -0.00242601 -0.00242597 -0.00242585 -0.00242549 -0.00242463 - -0.00242281 -0.00241941 -0.00241366 -0.0024048 -0.00239222 -0.00237561 -0.00235513 -0.00233114 -0.00230391 -0.00227231 -0.00223135 -0.00216797 - -0.00216797 -0.00223135 -0.00227231 -0.00230391 -0.00233114 -0.00235513 -0.00237561 -0.00239222 -0.0024048 -0.00241366 -0.00241941 -0.00242281 - -0.00242463 -0.00242549 -0.00242585 -0.00242597 -0.00242601 -0.00242601 -0.00242601 -0.00242602 -0.00254316 -0.00254316 -0.00254316 -0.00254315 - -0.00254311 -0.00254297 -0.00254258 -0.00254164 -0.00253966 -0.00253596 -0.00252975 -0.00252025 -0.00250691 -0.00248954 -0.00246852 -0.00244449 - -0.00241778 -0.00238687 -0.00234502 -0.00227441 -0.00227441 -0.00234502 -0.00238687 -0.00241778 -0.00244449 -0.00246852 -0.00248954 -0.00250691 - -0.00252025 -0.00252975 -0.00253596 -0.00253966 -0.00254164 -0.00254258 -0.00254297 -0.00254311 -0.00254315 -0.00254316 -0.00254316 -0.00254316 - -0.0026603 -0.0026603 -0.0026603 -0.00266029 -0.00266025 -0.00266011 -0.00265971 -0.00265872 -0.00265663 -0.00265273 -0.00264619 -0.00263622 - -0.00262229 -0.00260438 -0.00258311 -0.00255946 -0.00253384 -0.00250433 -0.00246209 -0.00238357 -0.00238357 -0.00246209 -0.00250433 -0.00253384 - -0.00255946 -0.00258311 -0.00260438 -0.00262229 -0.00263622 -0.00264619 -0.00265273 -0.00265663 -0.00265872 -0.00265971 -0.00266011 -0.00266025 - -0.00266029 -0.0026603 -0.0026603 -0.0026603 -0.00277745 -0.00277745 -0.00277745 -0.00277744 -0.0027774 -0.00277726 -0.00277686 -0.00277587 - -0.00277376 -0.00276978 -0.00276305 -0.00275275 -0.00273841 -0.00272014 -0.00269885 -0.00267599 -0.002652 -0.00262458 -0.00258251 -0.00249528 - -0.00249528 -0.00258251 -0.00262458 -0.002652 -0.00267599 -0.00269885 -0.00272014 -0.00273841 -0.00275275 -0.00276305 -0.00276978 -0.00277376 - -0.00277587 -0.00277686 -0.00277726 -0.0027774 -0.00277744 -0.00277745 -0.00277745 -0.00277745 -0.00289459 -0.00289459 -0.00289459 -0.00289459 - -0.00289455 -0.00289442 -0.00289405 -0.00289311 -0.00289105 -0.00288711 -0.00288036 -0.00286992 -0.00285535 -0.0028369 -0.00281579 -0.00279396 - -0.00277207 -0.00274743 -0.00270608 -0.00260927 -0.00260927 -0.00270608 -0.00274743 -0.00277207 -0.00279396 -0.00281579 -0.0028369 -0.00285535 - -0.00286992 -0.00288036 -0.00288711 -0.00289105 -0.00289311 -0.00289405 -0.00289442 -0.00289455 -0.00289459 -0.00289459 -0.00289459 -0.00289459 - -0.00301174 -0.00301174 -0.00301174 -0.00301173 -0.0030117 -0.00301159 -0.00301126 -0.00301041 -0.00300851 -0.00300475 -0.00299816 -0.00298779 - -0.00297317 -0.00295469 -0.00293385 -0.00291321 -0.00289379 -0.00287258 -0.00283257 -0.00272525 -0.00272525 -0.00283257 -0.00287258 -0.00289379 - -0.00291321 -0.00293385 -0.00295469 -0.00297317 -0.00298779 -0.00299816 -0.00300475 -0.00300851 -0.00301041 -0.00301126 -0.00301159 -0.0030117 - -0.00301173 -0.00301174 -0.00301174 -0.00301174 -0.00312888 -0.00312888 -0.00312888 -0.00312888 -0.00312886 -0.00312877 -0.0031285 -0.00312778 - -0.00312611 -0.00312268 -0.00311646 -0.0031064 -0.00309195 -0.00307355 -0.00305303 -0.00303351 -0.00301686 -0.00299966 -0.00296166 -0.0028429 - -0.0028429 -0.00296166 -0.00299966 -0.00301686 -0.00303351 -0.00305303 -0.00307355 -0.00309195 -0.0031064 -0.00311646 -0.00312268 -0.00312611 - -0.00312778 -0.0031285 -0.00312877 -0.00312886 -0.00312888 -0.00312888 -0.00312888 -0.00312888 -0.00324603 -0.00324603 -0.00324603 -0.00324602 - -0.00324601 -0.00324594 -0.00324573 -0.00324516 -0.00324379 -0.00324089 -0.00323523 -0.00322577 -0.00321174 -0.00319354 -0.00317327 -0.00315466 - -0.00314097 -0.00312827 -0.003093 -0.00296189 -0.00296189 -0.00309299 -0.00312827 -0.00314097 -0.00315466 -0.00317327 -0.00319354 -0.00321174 - -0.00322577 -0.00323523 -0.00324089 -0.00324379 -0.00324516 -0.00324573 -0.00324594 -0.00324601 -0.00324602 -0.00324603 -0.00324603 -0.00324603 - -0.00336317 -0.00336317 -0.00336317 -0.00336317 -0.00336316 -0.00336311 -0.00336295 -0.00336251 -0.00336143 -0.00335906 -0.00335431 -0.00334609 - -0.00333282 -0.00331476 -0.00329451 -0.00327657 -0.00326586 -0.00325794 -0.0032262 -0.00308192 -0.00308192 -0.0032262 -0.00325794 -0.00326586 - -0.00327657 -0.00329451 -0.00331476 -0.00333282 -0.00334609 -0.00335431 -0.00335906 -0.00336143 -0.00336251 -0.00336295 -0.00336311 -0.00336316 - -0.00336317 -0.00336317 -0.00336317 -0.00336317 -0.00348032 -0.00348032 -0.00348032 -0.00348031 -0.00348031 -0.00348027 -0.00348016 -0.00347984 - -0.00347902 -0.00347716 -0.00347334 -0.00346641 -0.00345495 -0.0034388 -0.00341712 -0.00339941 -0.00339138 -0.00338823 -0.00336085 -0.00320269 - -0.00320269 -0.00336085 -0.00338823 -0.00339138 -0.00339941 -0.00341712 -0.0034388 -0.00345495 -0.00346641 -0.00347334 -0.00347716 -0.00347902 - -0.00347984 -0.00348016 -0.00348027 -0.00348031 -0.00348031 -0.00348032 -0.00348032 -0.00348032 -0.00359746 -0.00359746 -0.00359746 -0.00359746 - -0.00359745 -0.00359743 -0.00359735 -0.00359713 -0.00359653 -0.00359514 -0.0035922 -0.00358665 -0.00357723 -0.00356313 -0.00354457 -0.00352418 - -0.00351761 -0.00351862 -0.00349642 -0.00332395 -0.00332394 -0.00349642 -0.00351862 -0.00351761 -0.00352418 -0.00354457 -0.00356313 -0.00357723 - -0.00358665 -0.0035922 -0.00359514 -0.00359653 -0.00359713 -0.00359735 -0.00359743 -0.00359745 -0.00359746 -0.00359746 -0.00359746 -0.00359746 - -0.00371461 -0.00371461 -0.00371461 -0.00371461 -0.0037146 -0.00371459 -0.00371454 -0.00371438 -0.00371397 -0.00371299 -0.00371083 -0.00370659 - -0.00369919 -0.00368769 -0.0036724 -0.00365307 -0.003645 -0.00364865 -0.00363227 -0.00344548 -0.00344548 -0.00363227 -0.00364865 -0.003645 - -0.00365307 -0.0036724 -0.00368769 -0.00369919 -0.00370659 -0.00371083 -0.00371299 -0.00371397 -0.00371438 -0.00371454 -0.00371459 -0.0037146 - -0.00371461 -0.00371461 -0.00371461 -0.00371461 -0.00383175 -0.00383175 -0.00383175 -0.00383175 -0.00383175 -0.00383174 -0.00383171 -0.00383161 - -0.00383134 -0.00383068 -0.00382918 -0.00382612 -0.00382058 -0.00381166 -0.00379959 -0.00378668 -0.00377428 -0.0037779 -0.0037675 -0.00356712 - -0.00356712 -0.0037675 -0.0037779 -0.00377428 -0.00378668 -0.00379959 -0.00381166 -0.00382058 -0.00382612 -0.00382918 -0.00383068 -0.00383134 - -0.00383161 -0.00383171 -0.00383174 -0.00383175 -0.00383175 -0.00383175 -0.00383175 -0.00383175 -0.0039489 -0.0039489 -0.0039489 -0.00394889 - -0.00394889 -0.00394889 -0.00394887 -0.00394881 -0.00394865 -0.00394823 -0.00394726 -0.00394518 -0.00394126 -0.00393471 -0.0039255 -0.00391564 - -0.00390445 -0.00390621 -0.00390076 -0.00368875 -0.00368875 -0.00390076 -0.00390621 -0.00390445 -0.00391564 -0.0039255 -0.00393471 -0.00394126 - -0.00394518 -0.00394726 -0.00394823 -0.00394865 -0.00394881 -0.00394887 -0.00394889 -0.00394889 -0.00394889 -0.0039489 -0.0039489 -0.0039489 - -0.00406604 -0.00406604 -0.00406604 -0.00406604 -0.00406604 -0.00406604 -0.00406603 -0.00406599 -0.0040659 -0.00406566 -0.00406507 -0.00406376 - -0.00406117 -0.00405665 -0.00405001 -0.0040425 -0.00403354 -0.00403374 -0.00402994 -0.00381029 -0.00381028 -0.00402994 -0.00403374 -0.00403354 - -0.0040425 -0.00405001 -0.00405665 -0.00406117 -0.00406376 -0.00406507 -0.00406566 -0.0040659 -0.00406599 -0.00406603 -0.00406604 -0.00406604 - -0.00406604 -0.00406604 -0.00406604 -0.00406604 -0.00418318 -0.00418318 -0.00418318 -0.00418318 -0.00418318 -0.00418318 -0.00418318 -0.00418316 - -0.00418312 -0.00418299 -0.00418266 -0.00418191 -0.00418033 -0.00417743 -0.00417295 -0.00416758 -0.00416207 -0.00416051 -0.00415314 -0.00393093 - -0.00393093 -0.00415314 -0.00416051 -0.00416207 -0.00416758 -0.00417295 -0.00417743 -0.00418033 -0.00418191 -0.00418266 -0.00418299 -0.00418312 - -0.00418316 -0.00418318 -0.00418318 -0.00418318 -0.00418318 -0.00418318 -0.00418318 -0.00418318 -0.00430035 -0.00430035 -0.00430035 -0.00430035 - -0.00430035 -0.00430035 -0.00430035 -0.00430034 -0.00430032 -0.00430026 -0.0043001 -0.00429971 -0.00429884 -0.00429715 -0.00429436 -0.00429079 - -0.004288 -0.00428581 -0.00427388 -0.00404606 -0.00404606 -0.00427388 -0.00428581 -0.004288 -0.00429079 -0.00429436 -0.00429715 -0.00429884 - -0.00429971 -0.0043001 -0.00430026 -0.00430032 -0.00430034 -0.00430035 -0.00430035 -0.00430035 -0.00430035 -0.00430035 -0.00430035 -0.00430035 - -0.00441752 -0.00441752 -0.00441752 -0.00441752 -0.00441752 -0.00441752 -0.00441752 -0.00441751 -0.00441751 -0.00441748 -0.00441742 -0.00441724 - -0.00441683 -0.00441595 -0.00441439 -0.00441223 -0.00441032 -0.0044088 -0.00439134 -0.00415126 -0.00415126 -0.00439134 -0.0044088 -0.00441032 - -0.00441223 -0.00441439 -0.00441595 -0.00441683 -0.00441724 -0.00441742 -0.00441748 -0.00441751 -0.00441751 -0.00441752 -0.00441752 -0.00441752 - -0.00441752 -0.00441752 -0.00441752 -0.00441752 -0.00453469 -0.00453469 -0.00453469 -0.00453469 -0.00453469 -0.00453469 -0.00453469 -0.00453469 - -0.00453468 -0.00453468 -0.00453465 -0.00453459 -0.00453442 -0.00453404 -0.00453328 -0.00453212 -0.00453094 -0.00453011 -0.00450065 -0.00423594 - -0.00423593 -0.00450065 -0.00453011 -0.00453094 -0.00453212 -0.00453328 -0.00453404 -0.00453442 -0.00453459 -0.00453465 -0.00453468 -0.00453468 - -0.00453469 -0.00453469 -0.00453469 -0.00453469 -0.00453469 -0.00453469 -0.00453469 -0.00453469 -0.00465186 -0.00465186 -0.00465186 -0.00465186 - -0.00465186 -0.00465186 -0.00465186 -0.00465186 -0.00465186 -0.00465185 -0.00465185 -0.00465183 -0.00465178 -0.00465164 -0.00465133 -0.00465078 - -0.00465013 -0.00464966 -0.00457433 -0.00426554 -0.00426554 -0.00457433 -0.00464966 -0.00465013 -0.00465078 -0.00465133 -0.00465164 -0.00465178 - -0.00465183 -0.00465185 -0.00465185 -0.00465186 -0.00465186 -0.00465186 -0.00465186 -0.00465186 -0.00465186 -0.00465186 -0.00465186 -0.00465186 - -0.00476903 -0.00476903 -0.00476903 -0.00476903 -0.00476903 -0.00476903 -0.00476903 -0.00476903 -0.00476903 -0.00476902 -0.00476902 -0.00476902 - -0.00476901 -0.00476897 -0.00476886 -0.00476857 -0.00459112 -0.0044374 -0.00427172 -0.0040601 -0.0040601 -0.00427172 -0.0044374 -0.00459112 - -0.00476857 -0.00476886 -0.00476897 -0.00476901 -0.00476902 -0.00476902 -0.00476902 -0.00476903 -0.00476903 -0.00476903 -0.00476903 -0.00476903 - -0.00476903 -0.00476903 -0.00476903 -0.00476903 + + -0.000153409 -0.0001363 -0.000125954 -0.000117228 -0.000108676 -9.98377e-05 -9.15658e-05 -8.29966e-05 -7.37752e-05 -6.40306e-05 -5.43447e-05 -4.49954e-05 + -3.62593e-05 -2.83512e-05 -2.13714e-05 -1.52821e-05 -9.91219e-06 -5.19934e-06 -8.05881e-07 4.1644e-06 4.32414e-06 -6.83688e-07 -5.09232e-06 -9.81307e-06 + -1.51901e-05 -2.12857e-05 -2.82716e-05 -3.61855e-05 -4.49273e-05 -5.42823e-05 -6.39736e-05 -7.37234e-05 -8.29498e-05 -9.15236e-05 -9.97993e-05 -0.000108641 + -0.000117196 -0.000125926 -0.000136275 -0.000153389 -0.000242829 -0.000206259 -0.000181712 -0.000167066 -0.000158842 -0.000153714 -0.00014928 -0.000145265 + -0.000141589 -0.000138148 -0.000134766 -0.000131511 -0.000128475 -0.000125754 -0.000123423 -0.000121518 -0.000120021 -0.000117985 -0.00011387 -0.00010606 + -0.000105892 -0.00011376 -0.000117898 -0.000119944 -0.000121443 -0.000123352 -0.000125686 -0.000128409 -0.000131448 -0.000134707 -0.000138092 -0.000141536 + -0.000145215 -0.000149233 -0.00015367 -0.000158801 -0.000167027 -0.000181676 -0.000206229 -0.000242807 -0.000351298 -0.000310676 -0.000287511 -0.00027591 + -0.000269561 -0.000265277 -0.000261923 -0.000259087 -0.000256595 -0.000254381 -0.000252436 -0.000250785 -0.000249459 -0.000248469 -0.000247765 -0.000247191 + -0.000246419 -0.000243555 -0.000236386 -0.000221901 -0.000221725 -0.000236288 -0.000243488 -0.000246365 -0.00024714 -0.000247716 -0.000248421 -0.000249412 + -0.000250739 -0.000252392 -0.000254338 -0.000256554 -0.000259049 -0.000261887 -0.000265243 -0.000269529 -0.000275879 -0.000287481 -0.000310648 -0.000351278 + -0.000466589 -0.00042478 -0.00040388 -0.000394945 -0.000390436 -0.000387327 -0.000384772 -0.00038257 -0.000380697 -0.00037918 -0.000378063 -0.000377388 + -0.000377167 -0.000377347 -0.000377746 -0.000377974 -0.000377319 -0.000373023 -0.000361722 -0.000338406 -0.000338224 -0.000361636 -0.000372975 -0.000377287 + -0.000377946 -0.000377718 -0.000377319 -0.000377139 -0.000377359 -0.000378034 -0.000379152 -0.00038067 -0.000382544 -0.000384747 -0.000387303 -0.000390412 + -0.000394921 -0.000403855 -0.000424756 -0.000466572 -0.000584951 -0.000542477 -0.000523233 -0.000516244 -0.000513324 -0.000511447 -0.000509844 -0.000508417 + -0.000507251 -0.000506466 -0.00050618 -0.000506476 -0.000507374 -0.000508765 -0.000510327 -0.000511386 -0.000510723 -0.000504822 -0.000488867 -0.00045512 + -0.000454934 -0.000488791 -0.000504789 -0.000510708 -0.000511377 -0.000510318 -0.000508755 -0.000507361 -0.000506462 -0.000506164 -0.00050645 -0.000507234 + -0.000508401 -0.000509827 -0.000511431 -0.000513307 -0.000516226 -0.000523213 -0.000542456 -0.000584936 -0.000704868 -0.000661752 -0.00064351 -0.00063785 + -0.000636207 -0.000635476 -0.000634871 -0.000634325 -0.000633988 -0.000634057 -0.000634717 -0.000636104 -0.000638252 -0.000641009 -0.000643903 -0.000645939 + -0.000645304 -0.000637867 -0.000617198 -0.000571932 -0.000571744 -0.000617132 -0.000637844 -0.000645301 -0.000645943 -0.000643908 -0.000641012 -0.000638252 + -0.000636101 -0.000634711 -0.000634049 -0.000633979 -0.000634316 -0.00063486 -0.000635465 -0.000636194 -0.000637835 -0.000643493 -0.000661733 -0.000704855 + -0.000825616 -0.000781809 -0.00076407 -0.000759251 -0.000758559 -0.000758788 -0.000759101 -0.000759434 -0.000759971 -0.00076096 -0.000762646 -0.000765208 + -0.000768698 -0.000772922 -0.000777267 -0.000780408 -0.000779916 -0.000771181 -0.000746172 -0.0006888 -0.000688609 -0.000746111 -0.000771162 -0.000779916 + -0.000780417 -0.000777279 -0.000772933 -0.000768705 -0.000765213 -0.000762647 -0.000760959 -0.000759967 -0.000759429 -0.000759095 -0.00075878 -0.000758549 + -0.000759238 -0.000764055 -0.000781792 -0.000825604 -0.000946806 -0.000902286 -0.00088471 -0.000880368 -0.000880336 -0.00088131 -0.000882398 -0.000883526 + -0.000884898 -0.000886801 -0.000889517 -0.000893258 -0.000898084 -0.000903763 -0.000909545 -0.000913815 -0.000913578 -0.000903894 -0.000875286 -0.000805704 + -0.000805511 -0.000875225 -0.000903869 -0.000913574 -0.000913823 -0.000909558 -0.000903776 -0.000898096 -0.000893267 -0.000889522 -0.000886803 -0.000884897 + -0.000883523 -0.000882393 -0.000881304 -0.000880328 -0.000880357 -0.000884697 -0.000902271 -0.000946796 -0.00106802 -0.00102313 -0.00100537 -0.00100125 + -0.00100164 -0.00100317 -0.00100487 -0.00100668 -0.0010088 -0.00101156 -0.00101525 -0.0010201 -0.00102616 -0.00103315 -0.00104021 -0.00104547 + -0.00104552 -0.00103529 -0.0010041 -0.000922631 -0.000922436 -0.00100403 -0.00103526 -0.00104551 -0.00104547 -0.00104022 -0.00103317 -0.00102618 + -0.00102011 -0.00101526 -0.00101156 -0.0010088 -0.00100667 -0.00100487 -0.00100316 -0.00100164 -0.00100124 -0.00100536 -0.00102311 -0.00106801 + -0.00118913 -0.00114405 -0.00112616 -0.00112196 -0.00112261 -0.00112452 -0.0011267 -0.00112907 -0.00113186 -0.0011354 -0.00113997 -0.00114582 + -0.00115294 -0.001161 -0.00116903 -0.00117499 -0.00117525 -0.00116488 -0.00113226 -0.00103957 -0.00103938 -0.00113217 -0.00116483 -0.00117522 + -0.00117498 -0.00116903 -0.00116101 -0.00115295 -0.00114583 -0.00113998 -0.0011354 -0.00113186 -0.00112907 -0.0011267 -0.00112452 -0.00112261 + -0.00112195 -0.00112615 -0.00114404 -0.00118912 -0.00131014 -0.00126496 -0.00124695 -0.0012426 -0.00124335 -0.00124552 -0.00124806 -0.00125091 + -0.00125429 -0.00125852 -0.00126389 -0.00127058 -0.00127856 -0.00128739 -0.001296 -0.00130227 -0.00130255 -0.00129242 -0.00125949 -0.00115653 + -0.00115633 -0.00125939 -0.00129236 -0.00130251 -0.00130224 -0.00129599 -0.00128739 -0.00127856 -0.00127059 -0.0012639 -0.00125852 -0.00125429 + -0.00125091 -0.00124806 -0.00124552 -0.00124335 -0.00124259 -0.00124694 -0.00126495 -0.00131013 -0.00143103 -0.00138582 -0.00136766 -0.00136315 + -0.00136393 -0.00136628 -0.00136911 -0.00137236 -0.00137627 -0.00138113 -0.00138719 -0.00139458 -0.00140318 -0.00141246 -0.00142124 -0.00142738 + -0.00142749 -0.00141792 -0.00138567 -0.00127349 -0.00127329 -0.00138554 -0.00141784 -0.00142744 -0.00142735 -0.00142123 -0.00141246 -0.00140318 + -0.00139459 -0.0013872 -0.00138113 -0.00137627 -0.00137236 -0.00136911 -0.00136627 -0.00136392 -0.00136315 -0.00136766 -0.00138581 -0.00143102 + -0.0015518 -0.00150657 -0.00148827 -0.00148361 -0.00148439 -0.00148686 -0.00148994 -0.00149356 -0.00149795 -0.00150338 -0.00151003 -0.00151796 + -0.00152695 -0.00153637 -0.00154493 -0.00155057 -0.00155034 -0.00154155 -0.00151074 -0.00139046 -0.00139026 -0.00151059 -0.00154146 -0.00155029 + -0.00155054 -0.00154492 -0.00153636 -0.00152695 -0.00151797 -0.00151004 -0.00150338 -0.00149795 -0.00149356 -0.00148994 -0.00148686 -0.00148439 + -0.00148361 -0.00148826 -0.00150656 -0.00155179 -0.00167243 -0.00162721 -0.00160874 -0.00160397 -0.00160476 -0.00160733 -0.00161062 -0.00161458 + -0.00161942 -0.00162536 -0.00163251 -0.00164082 -0.00164998 -0.00165924 -0.00166727 -0.00167214 -0.00167149 -0.00166359 -0.00163475 -0.00150743 + -0.00150723 -0.00163458 -0.0016635 -0.00167144 -0.00167211 -0.00166725 -0.00165923 -0.00164998 -0.00164082 -0.00163251 -0.00162537 -0.00161943 + -0.00161458 -0.00161062 -0.00160733 -0.00160476 -0.00160396 -0.00160873 -0.0016272 -0.00167242 -0.0017929 -0.00174769 -0.00172903 -0.00172423 + -0.00172504 -0.00172769 -0.00173118 -0.00173548 -0.00174074 -0.00174713 -0.00175466 -0.0017632 -0.00177232 -0.00178118 -0.00178845 -0.00179239 + -0.00179135 -0.00178435 -0.00175779 -0.00162441 -0.0016242 -0.0017576 -0.00178427 -0.0017913 -0.00179236 -0.00178843 -0.00178117 -0.00177232 + -0.0017632 -0.00175466 -0.00174713 -0.00174075 -0.00173548 -0.00173118 -0.00172769 -0.00172504 -0.00172423 -0.00172902 -0.00174768 -0.0017929 + -0.00191322 -0.00186798 -0.00184917 -0.0018444 -0.00184523 -0.00184796 -0.00185166 -0.00185627 -0.00186192 -0.00186868 -0.00187649 -0.00188511 + -0.00189401 -0.00190228 -0.00190864 -0.00191166 -0.00191026 -0.00190413 -0.00187998 -0.00174139 -0.00174118 -0.00187978 -0.00190406 -0.00191022 + -0.00191164 -0.00190863 -0.00190227 -0.001894 -0.0018851 -0.00187649 -0.00186868 -0.00186192 -0.00185627 -0.00185166 -0.00184796 -0.00184522 + -0.0018444 -0.00184917 -0.00186797 -0.00191322 -0.00203334 -0.00198805 -0.00196921 -0.00196448 -0.00196532 -0.00196814 -0.00197203 -0.00197694 + -0.00198293 -0.00198999 -0.00199797 -0.00200652 -0.00201505 -0.00202261 -0.00202798 -0.00203007 -0.0020285 -0.00202316 -0.00200146 -0.00185836 + -0.00185816 -0.00200126 -0.00202309 -0.00202846 -0.00203005 -0.00202797 -0.0020226 -0.00201504 -0.00200652 -0.00199797 -0.00198999 -0.00198293 + -0.00197694 -0.00197203 -0.00196814 -0.00196532 -0.00196447 -0.0019692 -0.00198804 -0.00203334 -0.00215322 -0.00210798 -0.00208914 -0.00208445 + -0.00208531 -0.00208821 -0.0020923 -0.00209748 -0.00210375 -0.00211102 -0.00211906 -0.00212744 -0.00213547 -0.00214222 -0.0021466 -0.00214785 + -0.00214627 -0.00214163 -0.00212235 -0.00197535 -0.00197514 -0.00212214 -0.00214157 -0.00214624 -0.00214783 -0.00214659 -0.00214221 -0.00213546 + -0.00212743 -0.00211906 -0.00211102 -0.00210375 -0.00209748 -0.0020923 -0.00208821 -0.00208531 -0.00208444 -0.00208913 -0.00210797 -0.00215322 + -0.00227287 -0.00222776 -0.00220895 -0.00220431 -0.00220519 -0.00220817 -0.00221243 -0.00221784 -0.00222433 -0.00223174 -0.00223974 -0.00224783 + -0.0022553 -0.00226121 -0.00226467 -0.00226528 -0.00226372 -0.00225967 -0.00224274 -0.00209233 -0.00209212 -0.00224254 -0.00225962 -0.0022637 + -0.00226527 -0.00226466 -0.0022612 -0.00225529 -0.00224782 -0.00223973 -0.00223173 -0.00222433 -0.00221784 -0.00221243 -0.00220817 -0.00220518 + -0.0022043 -0.00220895 -0.00222775 -0.00227287 -0.00239233 -0.00234742 -0.00232867 -0.00232406 -0.00232495 -0.00232801 -0.0023324 -0.00233799 + -0.00234463 -0.00235208 -0.00235996 -0.00236771 -0.00237456 -0.00237967 -0.00238233 -0.00238248 -0.00238096 -0.00237739 -0.00236272 -0.00220931 + -0.0022091 -0.00236254 -0.00237735 -0.00238094 -0.00238247 -0.00238232 -0.00237966 -0.00237455 -0.0023677 -0.00235996 -0.00235208 -0.00234463 + -0.00233799 -0.0023324 -0.002328 -0.00232495 -0.00232406 -0.00232867 -0.00234741 -0.00239232 -0.00251161 -0.00246698 -0.00244831 -0.00244372 + -0.0024446 -0.00244769 -0.00245219 -0.00245789 -0.0024646 -0.00247204 -0.00247973 -0.00248708 -0.00249332 -0.00249769 -0.0024997 -0.00249956 + -0.00249804 -0.00249487 -0.00248235 -0.00232629 -0.00232608 -0.00248218 -0.00249484 -0.00249803 -0.00249955 -0.00249969 -0.00249769 -0.00249331 + -0.00248707 -0.00247973 -0.00247203 -0.0024646 -0.00245788 -0.00245219 -0.00244769 -0.0024446 -0.00244372 -0.0024483 -0.00246697 -0.0025116 + -0.00263074 -0.00258646 -0.00256787 -0.00256328 -0.00256413 -0.00256722 -0.00257176 -0.0025775 -0.00258423 -0.00259157 -0.00259903 -0.00260597 + -0.00261164 -0.00261536 -0.00261686 -0.00261656 -0.00261503 -0.00261215 -0.00260166 -0.00244327 -0.00244306 -0.00260151 -0.00261213 -0.00261502 + -0.00261655 -0.00261686 -0.00261535 -0.00261163 -0.00260596 -0.00259903 -0.00259157 -0.00258422 -0.0025775 -0.00257176 -0.00256722 -0.00256412 + -0.00256328 -0.00256786 -0.00258645 -0.00263074 -0.00274977 -0.00270589 -0.00268737 -0.00268276 -0.00268353 -0.00268658 -0.00269109 -0.00269681 + -0.00270347 -0.00271068 -0.00271788 -0.00272442 -0.00272957 -0.00273275 -0.0027339 -0.00273353 -0.00273194 -0.00272928 -0.00272067 -0.00256026 + -0.00256004 -0.00272055 -0.00272926 -0.00273194 -0.00273353 -0.0027339 -0.00273275 -0.00272956 -0.00272441 -0.00271788 -0.00271067 -0.00270347 + -0.00269681 -0.00269109 -0.00268658 -0.00268353 -0.00268275 -0.00268737 -0.00270588 -0.00274976 -0.00286871 -0.0028253 -0.00280684 -0.00280216 + -0.00280282 -0.00280577 -0.00281018 -0.0028158 -0.00282233 -0.00282935 -0.0028363 -0.00284247 -0.00284717 -0.00284992 -0.00285085 -0.00285049 + -0.00284881 -0.00284628 -0.00283938 -0.00267724 -0.00267702 -0.00283928 -0.00284627 -0.00284881 -0.00285049 -0.00285085 -0.00284992 -0.00284716 + -0.00284246 -0.00283629 -0.00282934 -0.00282232 -0.0028158 -0.00281018 -0.00280576 -0.00280282 -0.00280216 -0.00280684 -0.0028253 -0.00286871 + -0.0029876 -0.00294474 -0.00292631 -0.00292151 -0.00292201 -0.00292478 -0.00292902 -0.00293445 -0.00294079 -0.0029476 -0.00295429 -0.00296016 + -0.00296451 -0.00296692 -0.00296774 -0.00296743 -0.00296564 -0.00296319 -0.00295775 -0.00279422 -0.002794 -0.00295767 -0.00296319 -0.00296563 + -0.00296742 -0.00296774 -0.00296692 -0.0029645 -0.00296015 -0.00295428 -0.00294759 -0.00294078 -0.00293445 -0.00292902 -0.00292478 -0.00292201 + -0.00292151 -0.00292631 -0.00294473 -0.0029876 -0.00310647 -0.00306423 -0.00304581 -0.00304084 -0.00304111 -0.00304363 -0.00304761 -0.00305278 + -0.00305885 -0.00306541 -0.00307187 -0.00307751 -0.00308162 -0.00308381 -0.00308458 -0.0030843 -0.00308242 -0.00308003 -0.00307573 -0.0029112 + -0.00291098 -0.00307567 -0.00308003 -0.00308242 -0.0030843 -0.00308458 -0.00308381 -0.00308161 -0.00307751 -0.00307187 -0.00306541 -0.00305885 + -0.00305278 -0.00304761 -0.00304363 -0.0030411 -0.00304084 -0.00304581 -0.00306422 -0.00310647 -0.00322537 -0.00318383 -0.00316539 -0.00316018 + -0.00316016 -0.00316239 -0.00316605 -0.00317088 -0.00317662 -0.00318286 -0.00318903 -0.00319445 -0.0031984 -0.00320052 -0.00320128 -0.00320105 + -0.00319916 -0.00319681 -0.00319322 -0.00302818 -0.00302796 -0.00319319 -0.00319681 -0.00319915 -0.00320105 -0.00320128 -0.00320051 -0.0031984 + -0.00319444 -0.00318903 -0.00318285 -0.00317661 -0.00317088 -0.00316605 -0.00316239 -0.00316016 -0.00316018 -0.00316538 -0.00318382 -0.00322537 + -0.00334416 -0.00330358 -0.00328514 -0.00327964 -0.00327927 -0.00328114 -0.0032844 -0.00328879 -0.00329409 -0.00329993 -0.00330578 -0.00331096 + -0.00331482 -0.00331698 -0.00331784 -0.00331762 -0.00331581 -0.00331354 -0.00331012 -0.00314516 -0.00314494 -0.00331011 -0.00331354 -0.0033158 + -0.00331762 -0.00331784 -0.00331698 -0.00331481 -0.00331096 -0.00330577 -0.00329993 -0.00329409 -0.00328879 -0.00328439 -0.00328114 -0.00327927 + -0.00327963 -0.00328514 -0.00330358 -0.00334416 -0.00346284 -0.00342351 -0.00340517 -0.00339931 -0.00339851 -0.00339992 -0.00340269 -0.00340656 + -0.00341133 -0.00341668 -0.00342213 -0.00342707 -0.00343086 -0.00343315 -0.00343418 -0.00343404 -0.00343234 -0.00343021 -0.00342692 -0.00326169 + -0.00326148 -0.00342691 -0.00343021 -0.00343233 -0.00343404 -0.00343417 -0.00343314 -0.00343085 -0.00342706 -0.00342212 -0.00341668 -0.00341133 + -0.00340656 -0.00340269 -0.00339992 -0.00339851 -0.00339931 -0.00340517 -0.0034235 -0.00346283 -0.00358143 -0.00354366 -0.00352558 -0.00351929 + -0.00351796 -0.00351882 -0.00352101 -0.00352426 -0.0035284 -0.00353316 -0.00353814 -0.00354279 -0.00354651 -0.00354896 -0.00355018 -0.00355023 + -0.00354871 -0.00354682 -0.00354367 -0.00337761 -0.00337741 -0.00354367 -0.00354681 -0.0035487 -0.00355022 -0.00355017 -0.00354895 -0.00354651 + -0.00354278 -0.00353814 -0.00353316 -0.0035284 -0.00352426 -0.00352101 -0.00351882 -0.00351795 -0.00351929 -0.00352557 -0.00354366 -0.00358142 + -0.00369994 -0.0036641 -0.00364645 -0.00363971 -0.00363775 -0.00363798 -0.0036395 -0.00364203 -0.00364543 -0.0036495 -0.00365391 -0.00365818 + -0.00366179 -0.00366436 -0.00366578 -0.00366609 -0.00366487 -0.00366334 -0.00366038 -0.00349273 -0.00349254 -0.00366037 -0.00366333 -0.00366486 + -0.00366609 -0.00366578 -0.00366436 -0.00366179 -0.00365818 -0.0036539 -0.0036495 -0.00364543 -0.00364203 -0.0036395 -0.00363798 -0.00363775 + -0.00363971 -0.00364644 -0.0036641 -0.00369994 -0.00381841 -0.0037849 -0.00376789 -0.00376074 -0.0037581 -0.0037576 -0.00375836 -0.00376007 + -0.00376263 -0.00376589 -0.0037696 -0.00377338 -0.00377678 -0.00377939 -0.00378099 -0.0037816 -0.00378078 -0.00377977 -0.00377701 -0.00360679 + -0.0036066 -0.003777 -0.00377977 -0.00378078 -0.0037816 -0.00378098 -0.00377938 -0.00377677 -0.00377338 -0.0037696 -0.00376589 -0.00376263 + -0.00376007 -0.00375836 -0.0037576 -0.00375809 -0.00376073 -0.00376789 -0.00378489 -0.00381841 -0.00393686 -0.0039061 -0.00389002 -0.00388256 + -0.00387924 -0.00387797 -0.00387789 -0.00387871 -0.00388033 -0.00388265 -0.00388552 -0.00388865 -0.00389167 -0.00389418 -0.00389589 -0.00389661 + -0.00389644 -0.00389614 -0.00389356 -0.0037194 -0.00371922 -0.00389355 -0.00389614 -0.00389644 -0.00389661 -0.00389589 -0.00389417 -0.00389166 + -0.00388865 -0.00388552 -0.00388265 -0.00388032 -0.00387871 -0.00387789 -0.00387797 -0.00387924 -0.00388256 -0.00389002 -0.0039061 -0.00393686 + -0.0040553 -0.00402777 -0.00401294 -0.0040054 -0.00400151 -0.00399948 -0.00399854 -0.00399841 -0.003999 -0.00400027 -0.00400214 -0.00400443 + -0.00400685 -0.00400907 -0.00401077 -0.00401167 -0.00401207 -0.00401254 -0.00400998 -0.00382996 -0.00382978 -0.00400997 -0.00401254 -0.00401207 + -0.00401166 -0.00401076 -0.00400907 -0.00400685 -0.00400443 -0.00400214 -0.00400027 -0.003999 -0.00399841 -0.00399854 -0.00399948 -0.0040015 + -0.0040054 -0.00401294 -0.00402777 -0.0040553 -0.00417377 -0.00414993 -0.00413672 -0.00412943 -0.0041252 -0.00412257 -0.00412085 -0.0041198 + -0.00411933 -0.00411946 -0.00412018 -0.00412142 -0.004123 -0.00412467 -0.00412613 -0.00412714 -0.00412793 -0.00412915 -0.00412621 -0.00393743 + -0.00393726 -0.0041262 -0.00412915 -0.00412793 -0.00412714 -0.00412613 -0.00412466 -0.004123 -0.00412142 -0.00412018 -0.00411946 -0.00411933 + -0.00411979 -0.00412085 -0.00412257 -0.0041252 -0.00412943 -0.00413671 -0.00414993 -0.00417377 -0.00429234 -0.0042726 -0.00426138 -0.00425478 + -0.00425059 -0.00424764 -0.00424538 -0.00424356 -0.00424214 -0.00424115 -0.00424065 -0.00424067 -0.00424115 -0.00424195 -0.00424288 -0.00424376 + -0.00424457 -0.00424636 -0.00424202 -0.00403991 -0.00403975 -0.00424201 -0.00424636 -0.00424457 -0.00424375 -0.00424288 -0.00424195 -0.00424114 + -0.00424067 -0.00424065 -0.00424115 -0.00424214 -0.00424356 -0.00424538 -0.00424764 -0.00425058 -0.00425478 -0.00426137 -0.0042726 -0.00429234 + -0.00441103 -0.00439573 -0.00438683 -0.00438136 -0.00437766 -0.00437484 -0.00437242 -0.00437019 -0.00436811 -0.00436622 -0.00436461 -0.00436338 + -0.00436259 -0.00436224 -0.00436227 -0.00436262 -0.00436335 -0.00436498 -0.00435653 -0.00413326 -0.00413311 -0.00435652 -0.00436498 -0.00436335 + -0.00436261 -0.00436227 -0.00436223 -0.00436259 -0.00436338 -0.00436461 -0.00436622 -0.00436811 -0.00437019 -0.00437242 -0.00437484 -0.00437766 + -0.00438136 -0.00438683 -0.00439572 -0.00441103 -0.00452992 -0.00451919 -0.00451288 -0.00450891 -0.00450613 -0.00450389 -0.00450179 -0.00449966 + -0.00449743 -0.00449512 -0.0044928 -0.00449059 -0.00448862 -0.00448699 -0.00448581 -0.00448517 -0.0044853 -0.00448607 -0.00446568 -0.00420684 + -0.00420669 -0.00446566 -0.00448607 -0.0044853 -0.00448517 -0.00448581 -0.00448699 -0.00448862 -0.00449059 -0.0044928 -0.00449511 -0.00449743 + -0.00449966 -0.00450179 -0.00450388 -0.00450613 -0.00450891 -0.00451287 -0.00451919 -0.00452992 -0.00464906 -0.00464276 -0.00463908 -0.00463681 + -0.00463524 -0.00463391 -0.00463256 -0.00463103 -0.00462925 -0.00462719 -0.00462487 -0.00462235 -0.00461972 -0.00461709 -0.00461464 -0.00461266 + -0.00461171 -0.0046123 -0.00454304 -0.00422497 -0.00422483 -0.00454299 -0.0046123 -0.00461171 -0.00461266 -0.00461464 -0.00461709 -0.00461972 + -0.00462235 -0.00462487 -0.00462719 -0.00462925 -0.00463103 -0.00463256 -0.00463391 -0.00463524 -0.00463681 -0.00463908 -0.00464275 -0.00464906 + -0.0047682 -0.00476575 -0.00476444 -0.00476376 -0.00476336 -0.004763 -0.00476254 -0.00476188 -0.00476096 -0.00475974 -0.00475818 -0.00475624 + -0.00475384 -0.00475094 -0.00474753 -0.00474402 -0.00455185 -0.00438883 -0.00421303 -0.00399463 -0.00399458 -0.00421301 -0.00438882 -0.00455184 + -0.00474402 -0.00474753 -0.00475094 -0.00475384 -0.00475623 -0.00475818 -0.00475974 -0.00476096 -0.00476188 -0.00476254 -0.004763 -0.00476336 + -0.00476376 -0.00476444 -0.00476575 -0.0047682 diff --git a/test/references/test_kovasznay-reference.vtu b/test/references/test_kovasznay-reference.vtu index 274f82e2de6b9c964ea7f7ddb4ffcafb39a6637d..2ebc7049891491a259d10365f84452a329c14b98 100644 --- a/test/references/test_kovasznay-reference.vtu +++ b/test/references/test_kovasznay-reference.vtu @@ -2,844 +2,844 @@ - - - -0.749079 -0.610346 -0.504136 -0.410101 -0.324902 -0.247117 -0.176005 -0.111065 -0.0518674 0.00199463 0.0509208 0.0953034 - 0.135523 0.171942 0.204904 0.234731 0.261719 0.286139 0.30824 0.328247 0.346364 0.362773 0.37764 0.391113 - 0.403328 0.414403 0.424448 0.433562 0.441831 0.449337 0.456152 0.462342 0.467967 0.47308 0.477731 0.481967 - 0.485827 0.489351 0.492574 0.495528 0.498243 0.500747 0.503065 0.505221 0.507238 0.509139 0.510957 0.512746 - 0.514654 0.517106 -0.749079 -0.605647 -0.50357 -0.410174 -0.324761 -0.246656 -0.175313 -0.110254 -0.0510274 0.00280281 - 0.0516615 0.0959588 0.136087 0.172417 0.205297 0.23505 0.261974 0.286339 0.308395 0.328364 0.34645 0.362834 - 0.377681 0.391138 0.40334 0.414406 0.424444 0.433551 0.441817 0.44932 0.456134 0.462323 0.467947 0.473061 - 0.477714 0.481951 0.485815 0.489342 0.492568 0.495526 0.498246 0.500755 0.503078 0.50524 0.507263 0.509171 - 0.51099 0.51276 0.514543 0.51639 -0.749079 -0.602602 -0.503329 -0.410571 -0.325002 -0.246565 -0.174934 -0.109685 - -0.050362 0.00349368 0.0523292 0.0965728 0.136631 0.172884 0.205687 0.235367 0.262225 0.286534 0.30854 0.328469 - 0.346521 0.362878 0.377703 0.391144 0.403333 0.414389 0.424419 0.433521 0.441783 0.449284 0.456096 0.462285 - 0.467909 0.473024 0.477678 0.481917 0.485781 0.489311 0.492539 0.4955 0.498222 0.500734 0.503061 0.505226 - 0.507252 0.509157 0.510961 0.512679 0.514313 0.515803 -0.749079 -0.603652 -0.504846 -0.411828 -0.325756 -0.246834 - -0.174829 -0.109328 -0.0498557 0.00407008 0.0529193 0.097138 0.137146 0.173336 0.206071 0.235683 0.262478 0.286729 - 0.308687 0.328573 0.346591 0.362919 0.377722 0.391145 0.403319 0.414364 0.424387 0.433483 0.441741 0.449239 - 0.456049 0.462237 0.467861 0.472975 0.477629 0.481868 0.485733 0.489262 0.492491 0.495452 0.498175 0.500688 - 0.503016 0.505182 0.507208 0.509109 0.510898 0.512572 0.514103 0.515398 -0.749079 -0.609032 -0.508444 -0.414101 - -0.32706 -0.247449 -0.174973 -0.109163 -0.0495004 0.0045316 0.0534258 0.0976455 0.137625 0.173766 0.206443 0.235995 - 0.262731 0.286929 0.308838 0.328684 0.346666 0.362966 0.377746 0.39115 0.40331 0.414343 0.424357 0.433446 - 0.441699 0.449193 0.456001 0.462186 0.467808 0.472921 0.477574 0.481811 0.485675 0.489202 0.492429 0.495388 - 0.498109 0.50062 0.502946 0.505112 0.507137 0.509037 0.51082 0.512477 0.513971 0.515205 -0.749079 -0.617432 - -0.513493 -0.417098 -0.328768 -0.248335 -0.175329 -0.109175 -0.0492919 0.00487448 0.0538406 0.0980851 0.138054 0.174164 - 0.206795 0.236296 0.26298 0.287129 0.308995 0.328802 0.346752 0.363024 0.377781 0.391166 0.403311 0.414333 - 0.424336 0.433418 0.441665 0.449154 0.455958 0.462139 0.467758 0.472868 0.477518 0.481752 0.485612 0.489135 - 0.492358 0.495312 0.498028 0.500535 0.502857 0.50502 0.507045 0.508948 0.510738 0.512409 0.51393 0.515222 - -0.749079 -0.626527 -0.51882 -0.420256 -0.330608 -0.249357 -0.175831 -0.109332 -0.0492187 0.00510048 0.0541606 0.0984506 - 0.138428 0.174519 0.207117 0.236577 0.263219 0.287327 0.309154 0.328928 0.346848 0.363095 0.37783 0.391197 - 0.403327 0.414336 0.42433 0.433404 0.441643 0.449126 0.455924 0.462101 0.467716 0.472821 0.477466 0.481695 - 0.485549 0.489067 0.492283 0.495229 0.497938 0.500436 0.502752 0.50491 0.506934 0.508843 0.51065 0.51236 - 0.513957 0.515396 -0.749079 -0.633847 -0.523242 -0.422993 -0.332274 -0.25035 -0.17639 -0.109585 -0.049252 0.00522587 - 0.0543956 0.0987471 0.138746 0.174831 0.207407 0.236837 0.263445 0.287519 0.309316 0.32906 0.346954 0.363179 - 0.377894 0.391245 0.403361 0.414358 0.424341 0.433405 0.441637 0.449113 0.455904 0.462075 0.467683 0.472783 - 0.477421 0.481643 0.48549 0.489 0.492207 0.495144 0.497842 0.500329 0.502635 0.504784 0.506804 0.508717 - 0.510545 0.512305 0.514003 0.515635 -0.749079 -0.637845 -0.526064 -0.424934 -0.333515 -0.251151 -0.17691 -0.109864 - -0.0493463 0.00528243 0.0545715 0.0989948 0.139024 0.175111 0.207672 0.23708 0.263662 0.28771 0.30948 0.329201 - 0.347073 0.363278 0.377976 0.391311 0.403412 0.414397 0.424369 0.433424 0.441647 0.449115 0.455899 0.462062 - 0.467664 0.472755 0.477386 0.4816 0.485438 0.488938 0.492134 0.495058 0.497743 0.500216 0.502507 0.504644 - 0.506653 0.508565 0.510408 0.512212 0.514009 0.515831 -0.749079 -0.638762 -0.527211 -0.426022 -0.334184 -0.25164 - -0.177329 -0.110106 -0.0494547 0.00530712 0.0547276 0.0992288 0.139289 0.175381 0.207931 0.237321 0.263882 0.287907 - 0.309656 0.329355 0.347208 0.363395 0.378076 0.391396 0.403484 0.414456 0.424417 0.433462 0.441675 0.449134 - 0.455909 0.462064 0.467657 0.472741 0.477363 0.481567 0.485395 0.488883 0.492066 0.494976 0.497644 0.5001 - 0.502372 0.504489 0.506481 0.508381 0.510225 0.512054 0.513918 0.51588 -0.749079 -0.637694 -0.526504 -0.425554 - -0.334078 -0.251638 -0.177615 -0.110275 -0.0495533 0.00532131 0.0549123 0.0994964 0.139583 0.175673 0.20821 0.237581 - 0.264121 0.288125 0.309852 0.329532 0.347366 0.363534 0.378199 0.391504 0.403577 0.414536 0.424485 0.433518 - 0.44172 0.44917 0.455935 0.462081 0.467665 0.472738 0.47735 0.481544 0.48536 0.488835 0.492003 0.494897 - 0.497546 0.499981 0.502229 0.50432 0.506285 0.50816 0.509983 0.511806 0.51369 0.515711 -0.749079 -0.635709 - -0.525144 -0.424495 -0.333273 -0.250941 -0.176793 -0.109813 -0.0496187 0.00529352 0.0551916 0.0998568 0.139951 0.176026 - 0.208539 0.237884 0.264398 0.288378 0.310082 0.329739 0.347552 0.363701 0.378348 0.391635 0.403693 0.414638 - 0.424573 0.433594 0.441784 0.449222 0.455977 0.462112 0.467685 0.472748 0.477349 0.481531 0.485334 0.488794 - 0.491946 0.494822 0.49745 0.499859 0.502079 0.504137 0.506065 0.507898 0.509678 0.511458 0.513305 0.515297 - -0.749079 -0.633803 -0.523595 -0.423156 -0.332107 -0.249903 -0.175822 -0.108975 -0.04881 0.00555934 0.055678 0.100347 - 0.140404 0.176436 0.208908 0.238216 0.264696 0.288645 0.310321 0.329953 0.347743 0.363872 0.3785 0.39177 - 0.403813 0.414743 0.424665 0.433673 0.441852 0.449279 0.456023 0.462148 0.467711 0.472764 0.477354 0.481525 - 0.485315 0.48876 0.491894 0.494749 0.497353 0.499735 0.501921 0.503939 0.505819 0.507595 0.509306 0.511006 - 0.512762 0.514653 -0.749079 -0.635797 -0.525251 -0.424615 -0.3334 -0.251071 -0.176924 -0.109932 -0.0497399 0.00519619 - 0.0550947 0.0997669 0.13987 0.175952 0.208472 0.237823 0.264343 0.288327 0.310034 0.329693 0.347507 0.363657 - 0.378303 0.39159 0.403646 0.414588 0.424521 0.433538 0.441725 0.449158 0.455908 0.462037 0.467602 0.472656 - 0.477245 0.481413 0.485198 0.488637 0.491763 0.494604 0.497191 0.49955 0.501706 0.503686 0.505516 0.507227 - 0.508855 0.510446 0.512066 0.513816 -0.749079 -0.637891 -0.526731 -0.425794 -0.334323 -0.251881 -0.177859 -0.110473 - -0.0497438 0.00515065 0.0547579 0.0993593 0.139463 0.175568 0.208119 0.2375 0.264049 0.28806 0.309791 0.329473 - 0.347306 0.363473 0.378135 0.391435 0.403503 0.414455 0.424396 0.43342 0.441612 0.44905 0.455803 0.461934 - 0.467501 0.472554 0.477141 0.481304 0.485083 0.488512 0.491625 0.49445 0.497014 0.499344 0.501462 0.503394 - 0.505161 0.506791 0.508312 0.509765 0.511214 0.512783 -0.749079 -0.63907 -0.527556 -0.426364 -0.334525 -0.251967 - -0.177634 -0.110376 -0.0496984 0.00509196 0.0545393 0.099066 0.13915 0.175262 0.20783 0.237233 0.263804 0.287837 - 0.309588 0.329287 0.347137 0.363319 0.377992 0.391303 0.40338 0.41434 0.424287 0.433316 0.441513 0.448954 - 0.455709 0.46184 0.467406 0.472457 0.47704 0.481197 0.484968 0.488386 0.491483 0.494288 0.496827 0.499124 - 0.5012 0.503077 0.504773 0.506309 0.507707 0.508996 0.510234 0.511551 -0.749079 -0.638259 -0.52649 -0.425352 - -0.333916 -0.251523 -0.177246 -0.110159 -0.0496042 0.00506032 0.0543826 0.0988362 0.138892 0.175002 0.207581 0.237001 - 0.263592 0.287643 0.309413 0.329128 0.346993 0.363186 0.377871 0.39119 0.403275 0.41424 0.424192 0.433225 - 0.441424 0.448867 0.455622 0.461752 0.467316 0.472363 0.476941 0.481091 0.484851 0.488256 0.491336 0.494119 - 0.49663 0.49889 0.50092 0.502737 0.504355 0.505788 0.50705 0.508157 0.509151 0.510147 -0.749079 -0.634321 - -0.523695 -0.423419 -0.332666 -0.250702 -0.176699 -0.109849 -0.0494743 0.00504208 0.0542463 0.0986279 0.138652 0.174757 - 0.207346 0.236784 0.263394 0.287465 0.309253 0.328985 0.346863 0.363069 0.377763 0.391091 0.403182 0.414152 - 0.424108 0.433143 0.441344 0.448786 0.45554 0.461669 0.467229 0.472271 0.476842 0.480984 0.484733 0.488123 - 0.491184 0.493943 0.496424 0.498645 0.500626 0.502378 0.503915 0.505241 0.506361 0.507278 0.508012 0.508643 - -0.749079 -0.626936 -0.519181 -0.420583 -0.330901 -0.249611 -0.176044 -0.109503 -0.0493504 0.00500392 0.0540939 0.0984077 - 0.138402 0.174504 0.207106 0.236563 0.263196 0.287289 0.309098 0.328848 0.346741 0.36296 0.377664 0.391 - 0.403096 0.414071 0.42403 0.433067 0.441268 0.44871 0.455462 0.461588 0.467144 0.472181 0.476744 0.480876 - 0.484613 0.487987 0.491029 0.493763 0.496211 0.498393 0.500323 0.502011 0.503465 0.504685 0.505667 0.5064 - 0.506881 0.507146 -0.749079 -0.617555 -0.513586 -0.417191 -0.328859 -0.24841 -0.175378 -0.109193 -0.0492804 0.00491157 - 0.0538966 0.0981523 0.138125 0.174229 0.206848 0.236329 0.262988 0.287107 0.308939 0.328709 0.346619 0.362851 - 0.377566 0.39091 0.403013 0.413993 0.423954 0.432993 0.441194 0.448635 0.455386 0.461509 0.46706 0.472091 - 0.476647 0.480769 0.484493 0.487851 0.490873 0.493582 0.495999 0.498142 0.500022 0.501648 0.503023 0.504144 - 0.505 0.50557 0.50583 0.505774 -0.749079 -0.608555 -0.50805 -0.413824 -0.326862 -0.247285 -0.17481 -0.108985 - -0.0493048 0.0047394 0.0536365 0.0978485 0.137809 0.173924 0.206565 0.236075 0.262765 0.286912 0.308769 0.328561 - 0.34649 0.362737 0.377464 0.390817 0.402928 0.413912 0.423877 0.432918 0.44112 0.44856 0.455309 0.461429 - 0.466977 0.472002 0.476551 0.480663 0.484376 0.48772 0.490723 0.493408 0.495796 0.497901 0.499736 0.501305 - 0.502611 0.503645 0.504394 0.504833 0.504924 0.504634 -0.749079 -0.602153 -0.50375 -0.411099 -0.325249 -0.246423 - -0.174442 -0.108935 -0.0494542 0.00447058 0.0533033 0.0974899 0.137452 0.173585 0.206255 0.235798 0.26252 0.286699 - 0.308583 0.328399 0.346348 0.362612 0.377352 0.390716 0.402834 0.413825 0.423794 0.432838 0.441041 0.448483 - 0.455231 0.46135 0.466894 0.471915 0.476458 0.480563 0.484265 0.487596 0.490583 0.493248 0.49561 0.497684 - 0.499479 0.501 0.502247 0.503212 0.503879 0.504224 0.50421 0.503792 -0.749079 -0.599535 -0.501415 -0.409457 - -0.324279 -0.245977 -0.174361 -0.109091 -0.049754 0.00409134 0.052889 0.0970708 0.137048 0.173209 0.205913 0.235492 - 0.26225 0.286461 0.308375 0.328216 0.346186 0.362467 0.377223 0.390599 0.402727 0.413725 0.423701 0.432749 - 0.440957 0.4484 0.45515 0.461269 0.466812 0.471831 0.47637 0.48047 0.484165 0.487487 0.490461 0.49311 - 0.495452 0.497501 0.499266 0.50075 0.501952 0.502865 0.503476 0.503765 0.503703 0.503258 -0.749079 -0.600404 - -0.501052 -0.409009 -0.324074 -0.24604 -0.174629 -0.109492 -0.0502288 0.00358578 0.0523821 0.0965819 0.13659 0.172787 - 0.205531 0.235149 0.261944 0.286189 0.308134 0.328002 0.345995 0.362297 0.377069 0.390459 0.4026 0.413609 - 0.423593 0.432649 0.440862 0.448311 0.455064 0.461186 0.466731 0.47175 0.476289 0.480387 0.484078 0.487395 - 0.490362 0.493001 0.49533 0.497363 0.499107 0.500566 0.50174 0.502621 0.503199 0.50346 0.503391 0.502985 - -0.749079 -0.603022 -0.50201 -0.40958 -0.324624 -0.246647 -0.175285 -0.110169 -0.0509017 0.00293621 0.0517679 0.0960102 - 0.136064 0.172308 0.205097 0.234758 0.261593 0.285874 0.307851 0.327748 0.345767 0.362091 0.376884 0.390292 - 0.402448 0.41347 0.423467 0.432533 0.440755 0.448212 0.454973 0.4611 0.46665 0.471674 0.476216 0.480315 - 0.484008 0.487324 0.490289 0.492926 0.495251 0.497277 0.499012 0.500461 0.501621 0.502488 0.503052 0.503304 - 0.503242 0.502887 -0.749079 -0.603022 -0.50201 -0.40958 -0.324624 -0.246647 -0.175285 -0.110169 -0.0509017 0.00293621 - 0.0517679 0.0960102 0.136064 0.172308 0.205097 0.234758 0.261593 0.285874 0.307851 0.327748 0.345767 0.362091 - 0.376884 0.390292 0.402448 0.41347 0.423467 0.432533 0.440755 0.448212 0.454973 0.4611 0.46665 0.471674 - 0.476216 0.480315 0.484008 0.487324 0.490289 0.492926 0.495251 0.497277 0.499012 0.500461 0.501621 0.502488 - 0.503052 0.503304 0.503242 0.502887 -0.749079 -0.600404 -0.501052 -0.409009 -0.324074 -0.24604 -0.174629 -0.109492 - -0.0502288 0.00358578 0.0523821 0.0965819 0.13659 0.172787 0.205531 0.235149 0.261944 0.286189 0.308134 0.328002 - 0.345995 0.362297 0.377069 0.390459 0.4026 0.413609 0.423593 0.432649 0.440862 0.448311 0.455064 0.461186 - 0.466731 0.47175 0.476289 0.480387 0.484078 0.487395 0.490362 0.493001 0.49533 0.497363 0.499107 0.500566 - 0.50174 0.502621 0.503199 0.50346 0.503391 0.502985 -0.749079 -0.599535 -0.501415 -0.409457 -0.324279 -0.245977 - -0.174361 -0.109091 -0.049754 0.00409134 0.052889 0.0970708 0.137048 0.173209 0.205913 0.235492 0.26225 0.286461 - 0.308375 0.328216 0.346186 0.362467 0.377223 0.390599 0.402727 0.413725 0.423701 0.432749 0.440957 0.4484 - 0.45515 0.461269 0.466812 0.471831 0.47637 0.48047 0.484165 0.487487 0.490461 0.49311 0.495452 0.497501 - 0.499266 0.50075 0.501952 0.502865 0.503476 0.503765 0.503703 0.503258 -0.749079 -0.602153 -0.50375 -0.411099 - -0.325249 -0.246423 -0.174442 -0.108935 -0.0494542 0.00447058 0.0533033 0.0974899 0.137452 0.173585 0.206255 0.235798 - 0.26252 0.286699 0.308583 0.328399 0.346348 0.362612 0.377352 0.390716 0.402834 0.413825 0.423794 0.432838 - 0.441041 0.448483 0.455231 0.46135 0.466894 0.471915 0.476458 0.480563 0.484265 0.487596 0.490583 0.493248 - 0.49561 0.497684 0.499479 0.501 0.502247 0.503212 0.503879 0.504224 0.50421 0.503792 -0.749079 -0.608555 - -0.50805 -0.413824 -0.326862 -0.247285 -0.17481 -0.108985 -0.0493048 0.0047394 0.0536365 0.0978485 0.137809 0.173924 - 0.206565 0.236075 0.262765 0.286912 0.308769 0.328561 0.34649 0.362737 0.377464 0.390817 0.402928 0.413912 - 0.423877 0.432918 0.44112 0.44856 0.455309 0.461429 0.466977 0.472002 0.476551 0.480663 0.484376 0.48772 - 0.490723 0.493408 0.495796 0.497901 0.499736 0.501305 0.502611 0.503645 0.504394 0.504833 0.504924 0.504634 - -0.749079 -0.617555 -0.513586 -0.417191 -0.328859 -0.24841 -0.175378 -0.109193 -0.0492804 0.00491157 0.0538966 0.0981523 - 0.138125 0.174229 0.206848 0.236329 0.262988 0.287107 0.308939 0.328709 0.346619 0.362851 0.377566 0.39091 - 0.403013 0.413993 0.423954 0.432993 0.441194 0.448635 0.455386 0.461509 0.46706 0.472091 0.476647 0.480769 - 0.484493 0.487851 0.490873 0.493582 0.495999 0.498142 0.500022 0.501648 0.503023 0.504144 0.505 0.50557 - 0.50583 0.505774 -0.749079 -0.626936 -0.519181 -0.420583 -0.330901 -0.249611 -0.176044 -0.109503 -0.0493504 0.00500392 - 0.0540939 0.0984077 0.138402 0.174504 0.207106 0.236563 0.263196 0.287289 0.309098 0.328848 0.346741 0.36296 - 0.377664 0.391 0.403096 0.414071 0.42403 0.433067 0.441268 0.44871 0.455462 0.461588 0.467144 0.472181 - 0.476744 0.480876 0.484613 0.487987 0.491029 0.493763 0.496211 0.498393 0.500323 0.502011 0.503465 0.504685 - 0.505667 0.5064 0.506881 0.507146 -0.749079 -0.634321 -0.523695 -0.423419 -0.332666 -0.250702 -0.176699 -0.109849 - -0.0494743 0.00504208 0.0542463 0.0986279 0.138652 0.174757 0.207346 0.236784 0.263394 0.287465 0.309253 0.328985 - 0.346863 0.363069 0.377763 0.391091 0.403182 0.414152 0.424108 0.433143 0.441344 0.448786 0.45554 0.461669 - 0.467229 0.472271 0.476842 0.480984 0.484733 0.488123 0.491184 0.493943 0.496424 0.498645 0.500626 0.502378 - 0.503915 0.505241 0.506361 0.507278 0.508012 0.508643 -0.749079 -0.638259 -0.52649 -0.425352 -0.333916 -0.251523 - -0.177246 -0.110159 -0.0496042 0.00506032 0.0543826 0.0988362 0.138892 0.175002 0.207581 0.237001 0.263592 0.287643 - 0.309413 0.329128 0.346993 0.363186 0.377871 0.39119 0.403275 0.41424 0.424192 0.433225 0.441424 0.448867 - 0.455622 0.461752 0.467316 0.472363 0.476941 0.481091 0.484851 0.488256 0.491336 0.494119 0.49663 0.49889 - 0.50092 0.502737 0.504355 0.505788 0.50705 0.508157 0.509151 0.510147 -0.749079 -0.63907 -0.527556 -0.426364 - -0.334525 -0.251967 -0.177634 -0.110376 -0.0496984 0.00509196 0.0545393 0.099066 0.13915 0.175262 0.20783 0.237233 - 0.263804 0.287837 0.309588 0.329287 0.347137 0.363319 0.377992 0.391303 0.40338 0.41434 0.424287 0.433316 - 0.441513 0.448954 0.455709 0.46184 0.467406 0.472457 0.47704 0.481197 0.484968 0.488386 0.491483 0.494288 - 0.496827 0.499124 0.5012 0.503077 0.504773 0.506309 0.507707 0.508996 0.510234 0.511551 -0.749079 -0.637891 - -0.526731 -0.425794 -0.334323 -0.251881 -0.177859 -0.110473 -0.0497438 0.00515065 0.0547579 0.0993593 0.139463 0.175568 - 0.208119 0.2375 0.264049 0.28806 0.309791 0.329473 0.347306 0.363473 0.378135 0.391435 0.403503 0.414455 - 0.424396 0.43342 0.441612 0.44905 0.455803 0.461934 0.467501 0.472554 0.477141 0.481304 0.485083 0.488512 - 0.491625 0.49445 0.497014 0.499344 0.501462 0.503394 0.505161 0.506791 0.508312 0.509765 0.511214 0.512783 - -0.749079 -0.635797 -0.525251 -0.424615 -0.3334 -0.251071 -0.176924 -0.109932 -0.0497399 0.00519619 0.0550947 0.0997669 - 0.13987 0.175952 0.208472 0.237823 0.264343 0.288327 0.310034 0.329693 0.347507 0.363657 0.378303 0.39159 - 0.403646 0.414588 0.424521 0.433538 0.441725 0.449158 0.455908 0.462037 0.467602 0.472656 0.477245 0.481413 - 0.485198 0.488637 0.491763 0.494604 0.497191 0.49955 0.501706 0.503686 0.505516 0.507227 0.508855 0.510446 - 0.512066 0.513816 -0.749079 -0.633803 -0.523595 -0.423156 -0.332107 -0.249903 -0.175822 -0.108975 -0.04881 0.00555934 - 0.055678 0.100347 0.140404 0.176436 0.208908 0.238216 0.264696 0.288645 0.310321 0.329953 0.347743 0.363872 - 0.3785 0.39177 0.403813 0.414743 0.424665 0.433673 0.441852 0.449279 0.456023 0.462148 0.467711 0.472764 - 0.477354 0.481525 0.485315 0.48876 0.491894 0.494749 0.497353 0.499735 0.501921 0.503939 0.505819 0.507595 - 0.509306 0.511006 0.512762 0.514653 -0.749079 -0.635709 -0.525144 -0.424495 -0.333273 -0.250941 -0.176793 -0.109813 - -0.0496187 0.00529352 0.0551916 0.0998568 0.139951 0.176026 0.208539 0.237884 0.264398 0.288378 0.310082 0.329739 - 0.347552 0.363701 0.378348 0.391635 0.403693 0.414638 0.424573 0.433594 0.441784 0.449222 0.455977 0.462112 - 0.467685 0.472748 0.477349 0.481531 0.485334 0.488794 0.491946 0.494822 0.49745 0.499859 0.502079 0.504137 - 0.506065 0.507898 0.509678 0.511458 0.513305 0.515297 -0.749079 -0.637694 -0.526504 -0.425554 -0.334078 -0.251638 - -0.177615 -0.110275 -0.0495533 0.00532131 0.0549123 0.0994964 0.139583 0.175673 0.20821 0.237581 0.264121 0.288125 - 0.309852 0.329532 0.347366 0.363534 0.378199 0.391504 0.403577 0.414536 0.424485 0.433518 0.44172 0.44917 - 0.455935 0.462081 0.467665 0.472738 0.47735 0.481544 0.48536 0.488835 0.492003 0.494897 0.497546 0.499981 - 0.502229 0.50432 0.506285 0.50816 0.509983 0.511806 0.51369 0.515711 -0.749079 -0.638762 -0.527211 -0.426022 - -0.334184 -0.25164 -0.177329 -0.110106 -0.0494547 0.00530712 0.0547276 0.0992288 0.139289 0.175381 0.207931 0.237321 - 0.263882 0.287907 0.309656 0.329355 0.347208 0.363395 0.378076 0.391396 0.403484 0.414456 0.424417 0.433462 - 0.441675 0.449134 0.455909 0.462064 0.467657 0.472741 0.477363 0.481567 0.485395 0.488883 0.492066 0.494976 - 0.497644 0.5001 0.502372 0.504489 0.506481 0.508381 0.510225 0.512054 0.513918 0.51588 -0.749079 -0.637845 - -0.526064 -0.424934 -0.333515 -0.251151 -0.17691 -0.109864 -0.0493463 0.00528243 0.0545715 0.0989948 0.139024 0.175111 - 0.207672 0.23708 0.263662 0.28771 0.30948 0.329201 0.347073 0.363278 0.377976 0.391311 0.403412 0.414397 - 0.424369 0.433424 0.441647 0.449115 0.455899 0.462062 0.467664 0.472755 0.477386 0.4816 0.485438 0.488938 - 0.492134 0.495058 0.497743 0.500216 0.502507 0.504644 0.506653 0.508565 0.510408 0.512212 0.514009 0.515831 - -0.749079 -0.633847 -0.523242 -0.422993 -0.332274 -0.25035 -0.17639 -0.109585 -0.049252 0.00522587 0.0543956 0.0987471 - 0.138746 0.174831 0.207407 0.236837 0.263445 0.287519 0.309316 0.32906 0.346954 0.363179 0.377894 0.391245 - 0.403361 0.414358 0.424341 0.433405 0.441637 0.449113 0.455904 0.462075 0.467683 0.472783 0.477421 0.481643 - 0.48549 0.489 0.492207 0.495144 0.497842 0.500329 0.502635 0.504784 0.506804 0.508717 0.510545 0.512305 - 0.514003 0.515635 -0.749079 -0.626527 -0.51882 -0.420256 -0.330608 -0.249357 -0.175831 -0.109332 -0.0492187 0.00510048 - 0.0541606 0.0984506 0.138428 0.174519 0.207117 0.236577 0.263219 0.287327 0.309154 0.328928 0.346848 0.363095 - 0.37783 0.391197 0.403327 0.414336 0.42433 0.433404 0.441643 0.449126 0.455924 0.462101 0.467716 0.472821 - 0.477466 0.481695 0.485549 0.489067 0.492283 0.495229 0.497938 0.500436 0.502752 0.50491 0.506934 0.508843 - 0.51065 0.51236 0.513957 0.515396 -0.749079 -0.617432 -0.513493 -0.417098 -0.328768 -0.248335 -0.175329 -0.109175 - -0.0492919 0.00487448 0.0538406 0.0980851 0.138054 0.174164 0.206795 0.236296 0.26298 0.287129 0.308995 0.328802 - 0.346752 0.363024 0.377781 0.391166 0.403311 0.414333 0.424336 0.433418 0.441665 0.449154 0.455958 0.462139 - 0.467758 0.472868 0.477518 0.481752 0.485612 0.489135 0.492358 0.495312 0.498028 0.500535 0.502857 0.50502 - 0.507045 0.508948 0.510738 0.512409 0.51393 0.515222 -0.749079 -0.609032 -0.508444 -0.414101 -0.32706 -0.247449 - -0.174973 -0.109163 -0.0495004 0.0045316 0.0534258 0.0976455 0.137625 0.173766 0.206443 0.235995 0.262731 0.286929 - 0.308838 0.328684 0.346666 0.362966 0.377746 0.39115 0.40331 0.414343 0.424357 0.433446 0.441699 0.449193 - 0.456001 0.462186 0.467808 0.472921 0.477574 0.481811 0.485675 0.489202 0.492429 0.495388 0.498109 0.50062 - 0.502946 0.505112 0.507137 0.509037 0.51082 0.512477 0.513971 0.515205 -0.749079 -0.603652 -0.504846 -0.411828 - -0.325756 -0.246834 -0.174829 -0.109328 -0.0498557 0.00407008 0.0529193 0.097138 0.137146 0.173336 0.206071 0.235683 - 0.262478 0.286729 0.308687 0.328573 0.346591 0.362919 0.377722 0.391145 0.403319 0.414364 0.424387 0.433483 - 0.441741 0.449239 0.456049 0.462237 0.467861 0.472975 0.477629 0.481868 0.485733 0.489262 0.492491 0.495452 - 0.498175 0.500688 0.503016 0.505182 0.507208 0.509109 0.510898 0.512572 0.514103 0.515398 -0.749079 -0.602602 - -0.503329 -0.410571 -0.325002 -0.246565 -0.174934 -0.109685 -0.050362 0.00349368 0.0523292 0.0965728 0.136631 0.172884 - 0.205687 0.235367 0.262225 0.286534 0.30854 0.328469 0.346521 0.362878 0.377703 0.391144 0.403333 0.414389 - 0.424419 0.433521 0.441783 0.449284 0.456096 0.462285 0.467909 0.473024 0.477678 0.481917 0.485781 0.489311 - 0.492539 0.4955 0.498222 0.500734 0.503061 0.505226 0.507252 0.509157 0.510961 0.512679 0.514313 0.515803 - -0.749079 -0.605647 -0.50357 -0.410174 -0.324761 -0.246656 -0.175313 -0.110254 -0.0510274 0.00280281 0.0516615 0.0959588 - 0.136087 0.172417 0.205297 0.23505 0.261974 0.286339 0.308395 0.328364 0.34645 0.362834 0.377681 0.391138 - 0.40334 0.414406 0.424444 0.433551 0.441817 0.44932 0.456134 0.462323 0.467947 0.473061 0.477714 0.481951 - 0.485815 0.489342 0.492568 0.495526 0.498246 0.500755 0.503078 0.50524 0.507263 0.509171 0.51099 0.51276 - 0.514543 0.51639 -0.749079 -0.610346 -0.504136 -0.410101 -0.324902 -0.247117 -0.176005 -0.111065 -0.0518674 0.00199463 - 0.0509208 0.0953034 0.135523 0.171942 0.204904 0.234731 0.261719 0.286139 0.30824 0.328247 0.346364 0.362773 - 0.37764 0.391113 0.403328 0.414403 0.424448 0.433562 0.441831 0.449337 0.456152 0.462342 0.467967 0.47308 - 0.477731 0.481967 0.485827 0.489351 0.492574 0.495528 0.498243 0.500747 0.503065 0.505221 0.507238 0.509139 - 0.510957 0.512746 0.514654 0.517106 + + + -0.749079 -0.615405 -0.507054 -0.411442 -0.325135 -0.246597 -0.174991 -0.10974 -0.0503596 0.00359659 0.0525568 0.0969336 + 0.137121 0.173494 0.206401 0.236168 0.263096 0.287458 0.309503 0.329458 0.347525 0.363889 0.378715 0.392151 + 0.404332 0.415376 0.425394 0.434482 0.442728 0.450214 0.457011 0.463184 0.468794 0.473895 0.478536 0.482762 + 0.486616 0.490135 0.493355 0.496308 0.499024 0.501531 0.503855 0.50602 0.508048 0.509963 0.511795 0.5136 + 0.51552 0.517978 -0.749079 -0.609871 -0.505876 -0.411125 -0.324765 -0.246013 -0.174243 -0.108913 -0.049528 0.00438326 + 0.0532695 0.0975586 0.137655 0.17394 0.206767 0.236463 0.263329 0.287639 0.309641 0.32956 0.347599 0.363939 + 0.378747 0.392168 0.404337 0.415373 0.425384 0.434467 0.44271 0.450194 0.456989 0.463162 0.468773 0.473875 + 0.478517 0.482746 0.486603 0.490125 0.493349 0.496306 0.499027 0.50154 0.50387 0.506041 0.508076 0.509997 + 0.511831 0.513616 0.515413 0.517268 -0.749079 -0.605669 -0.504804 -0.41095 -0.324625 -0.245676 -0.17371 -0.108253 + -0.0488129 0.00509654 0.053942 0.0981664 0.138186 0.17439 0.207138 0.236762 0.263563 0.287816 0.309771 0.32965 + 0.347657 0.363972 0.378759 0.392165 0.404322 0.415349 0.425353 0.434431 0.442672 0.450153 0.456948 0.463121 + 0.468732 0.473835 0.478479 0.482709 0.486568 0.490092 0.493319 0.496279 0.499003 0.501519 0.503853 0.506028 + 0.508065 0.509985 0.511805 0.51354 0.51519 0.516693 -0.749079 -0.605399 -0.505395 -0.411557 -0.324928 -0.245635 + -0.173393 -0.107754 -0.0482147 0.00573001 0.0545647 0.0987472 0.138706 0.174839 0.207514 0.237067 0.263803 0.287999 + 0.309904 0.329742 0.347715 0.364002 0.378768 0.392157 0.4043 0.415317 0.425314 0.434387 0.442624 0.450103 + 0.456897 0.463069 0.46868 0.473783 0.478427 0.482658 0.486517 0.490042 0.493268 0.496229 0.498953 0.50147 + 0.503805 0.505982 0.50802 0.509937 0.511743 0.513437 0.514989 0.516304 -0.749079 -0.60951 -0.50811 -0.413207 + -0.325786 -0.24593 -0.173309 -0.107428 -0.0477461 0.00626875 0.055122 0.0992861 0.139202 0.175277 0.207887 0.237374 + 0.264049 0.288189 0.310046 0.329843 0.347781 0.36404 0.378783 0.392153 0.404283 0.415289 0.425278 0.434345 + 0.442577 0.450053 0.456844 0.463014 0.468624 0.473725 0.478368 0.482597 0.486455 0.489978 0.493202 0.496161 + 0.498883 0.501399 0.503732 0.505908 0.507947 0.509863 0.511665 0.513346 0.514865 0.516127 -0.749079 -0.616886 + -0.512447 -0.41569 -0.327116 -0.246534 -0.173455 -0.107284 -0.0474236 0.00669385 0.0555946 0.0997649 0.139656 0.175689 + 0.208245 0.237676 0.264296 0.288385 0.310196 0.329954 0.347859 0.36409 0.37881 0.392163 0.404277 0.415272 + 0.425251 0.434311 0.442538 0.450009 0.456796 0.462963 0.468569 0.473668 0.478308 0.482534 0.486388 0.489907 + 0.493127 0.49608 0.498798 0.501308 0.503638 0.505811 0.50785 0.50977 0.511582 0.513279 0.514831 0.516158 + -0.749079 -0.625326 -0.517304 -0.41849 -0.328678 -0.247339 -0.173789 -0.107312 -0.0472511 0.00699459 0.0559696 0.10017 + 0.140057 0.176061 0.208578 0.237963 0.264536 0.288581 0.310352 0.330075 0.347949 0.364155 0.378853 0.392188 + 0.404288 0.41527 0.42524 0.434291 0.442511 0.449976 0.456758 0.462921 0.468522 0.473616 0.478252 0.482472 + 0.48632 0.489833 0.493046 0.495992 0.498702 0.501204 0.503526 0.505694 0.507732 0.509658 0.511489 0.513228 + 0.51486 0.516341 -0.749079 -0.632376 -0.521497 -0.421026 -0.330171 -0.248189 -0.174231 -0.107469 -0.047209 0.00717915 + 0.0562499 0.1005 0.140399 0.176391 0.208879 0.238229 0.264765 0.288774 0.310512 0.330204 0.348052 0.364235 + 0.378913 0.392231 0.404317 0.415287 0.425245 0.434288 0.4425 0.449958 0.456734 0.46289 0.468486 0.473574 + 0.478203 0.482417 0.486257 0.489761 0.492965 0.4959 0.498599 0.501089 0.503401 0.50556 0.507592 0.509524 + 0.511376 0.513166 0.514904 0.516584 -0.749079 -0.636386 -0.524263 -0.422886 -0.331329 -0.248914 -0.174684 -0.10769 + -0.0472548 0.0072761 0.056458 0.100772 0.140695 0.176683 0.209154 0.238478 0.264985 0.288966 0.310677 0.330344 + 0.348169 0.364331 0.378992 0.392293 0.404365 0.415322 0.42527 0.434303 0.442506 0.449957 0.456725 0.462874 + 0.468462 0.473543 0.478164 0.482369 0.4862 0.489694 0.492886 0.495808 0.498493 0.500968 0.503264 0.505409 + 0.507431 0.50936 0.511227 0.513063 0.514901 0.516774 -0.749079 -0.637378 -0.525427 -0.423962 -0.331974 -0.249377 + -0.175077 -0.107905 -0.0473391 0.00732379 0.0566334 0.101021 0.140973 0.176962 0.209419 0.238723 0.265207 0.289164 + 0.310852 0.330497 0.348302 0.364446 0.379089 0.392376 0.404433 0.415378 0.425315 0.434338 0.442531 0.449972 + 0.456732 0.462873 0.468453 0.473524 0.478136 0.482332 0.486152 0.489634 0.492812 0.495719 0.498386 0.500843 + 0.503119 0.505243 0.507246 0.509162 0.511028 0.512888 0.514794 0.516808 -0.749079 -0.636331 -0.524729 -0.423502 + -0.331873 -0.249376 -0.175369 -0.108066 -0.0474336 0.00734896 0.0568271 0.101296 0.141272 0.177259 0.209701 0.238985 + 0.265447 0.289382 0.311048 0.330673 0.348458 0.364584 0.37921 0.392481 0.404524 0.415456 0.42538 0.434391 + 0.442574 0.450005 0.456755 0.462886 0.468457 0.473519 0.47812 0.482305 0.486112 0.489581 0.492744 0.495633 + 0.498281 0.500715 0.502965 0.505061 0.507036 0.508924 0.510767 0.512619 0.514542 0.516614 -0.749079 -0.634336 + -0.52337 -0.422448 -0.331073 -0.248683 -0.174547 -0.107618 -0.0475145 0.00733047 0.0571094 0.101658 0.141641 0.177611 + 0.21003 0.239288 0.265724 0.289634 0.311276 0.330879 0.348643 0.364749 0.379357 0.39261 0.404638 0.415555 + 0.425466 0.434464 0.442635 0.450055 0.456794 0.462914 0.468474 0.473525 0.478115 0.482287 0.486082 0.489535 + 0.492681 0.495551 0.498176 0.500584 0.502804 0.504865 0.506799 0.508642 0.510439 0.512243 0.514124 0.516164 + -0.749079 -0.632414 -0.521811 -0.421106 -0.329907 -0.247648 -0.17358 -0.106788 -0.0467161 0.0075919 0.0575905 0.102142 + 0.142088 0.178016 0.210394 0.239615 0.266018 0.289897 0.311512 0.331089 0.34883 0.364916 0.379505 0.392742 + 0.404754 0.415657 0.425554 0.43454 0.4427 0.450109 0.456837 0.462948 0.468497 0.473538 0.478117 0.482278 + 0.486058 0.489495 0.492623 0.495472 0.498071 0.500449 0.502633 0.504652 0.506535 0.508317 0.51004 0.511758 + 0.51354 0.515472 -0.749079 -0.634433 -0.523489 -0.422582 -0.331216 -0.248831 -0.174695 -0.107751 -0.0476501 0.00722244 + 0.0570025 0.101559 0.141552 0.177531 0.209957 0.239222 0.265664 0.289579 0.311224 0.330828 0.348594 0.3647 + 0.379308 0.39256 0.404586 0.415501 0.425409 0.434404 0.442571 0.449986 0.456719 0.462833 0.468385 0.473426 + 0.478004 0.482162 0.485938 0.489368 0.492486 0.49532 0.497901 0.500255 0.502407 0.504384 0.506214 0.507927 + 0.50956 0.511161 0.512798 0.514576 -0.749079 -0.636549 -0.524982 -0.423772 -0.332149 -0.24965 -0.175645 -0.108288 + -0.0476465 0.00715959 0.0566571 0.101146 0.141142 0.177145 0.209602 0.238898 0.26537 0.289312 0.310981 0.330608 + 0.348393 0.364516 0.379139 0.392404 0.404441 0.415366 0.425282 0.434284 0.442457 0.449877 0.456613 0.462729 + 0.468281 0.473321 0.477897 0.482049 0.485818 0.489238 0.492341 0.495158 0.497715 0.500037 0.502149 0.504075 + 0.505838 0.507464 0.508984 0.510438 0.511892 0.513476 -0.749079 -0.637722 -0.525814 -0.424348 -0.33236 -0.249747 + -0.175423 -0.108209 -0.0476118 0.00708507 0.0564262 0.100844 0.140822 0.176834 0.20931 0.238628 0.265123 0.289087 + 0.310777 0.330421 0.348222 0.36436 0.378995 0.392271 0.404318 0.41525 0.425172 0.434179 0.442356 0.449778 + 0.456516 0.462632 0.468184 0.473221 0.477792 0.481938 0.485698 0.489105 0.492193 0.494988 0.497518 0.499805 + 0.501872 0.50374 0.505427 0.506953 0.508341 0.509622 0.510854 0.512171 -0.749079 -0.636849 -0.524743 -0.423359 + -0.331784 -0.249336 -0.175065 -0.108023 -0.0475439 0.00702926 0.0562499 0.100599 0.140552 0.176565 0.209054 0.238392 + 0.264907 0.288891 0.310599 0.33026 0.348076 0.364227 0.378872 0.392157 0.404211 0.415149 0.425076 0.434086 + 0.442265 0.449689 0.456427 0.462542 0.468091 0.473124 0.477689 0.481827 0.485576 0.488969 0.492038 0.49481 + 0.49731 0.499558 0.501576 0.503379 0.504983 0.506401 0.507645 0.508734 0.509709 0.51069 -0.749079 -0.632909 + -0.522009 -0.42151 -0.330619 -0.248592 -0.174583 -0.107769 -0.0474599 0.00697322 0.0560837 0.100368 0.140295 0.176307 + 0.208809 0.238167 0.264704 0.288708 0.310436 0.330115 0.347945 0.364108 0.378763 0.392056 0.404116 0.415059 + 0.42499 0.434002 0.442182 0.449606 0.456343 0.462455 0.468001 0.473029 0.477587 0.481715 0.485452 0.48883 + 0.491879 0.494625 0.497092 0.499299 0.501264 0.503 0.504517 0.505821 0.506916 0.507805 0.508506 0.509107 + -0.749079 -0.625788 -0.517716 -0.418865 -0.329014 -0.247633 -0.174035 -0.107509 -0.047404 0.00688139 0.0558896 0.100116 + 0.140021 0.176036 0.208556 0.237936 0.264498 0.288527 0.310277 0.329974 0.34782 0.363996 0.378662 0.391963 + 0.404029 0.414976 0.42491 0.433924 0.442104 0.449527 0.456262 0.462372 0.467912 0.472935 0.477484 0.481603 + 0.485326 0.488687 0.491715 0.494434 0.496868 0.499032 0.500943 0.502611 0.50404 0.505232 0.506181 0.506876 + 0.507312 0.50753 -0.749079 -0.617035 -0.51256 -0.415801 -0.327221 -0.246623 -0.173517 -0.107314 -0.0474229 0.00672068 + 0.0556402 0.0998208 0.139714 0.175739 0.208281 0.23769 0.264282 0.288338 0.310113 0.329831 0.347695 0.363885 + 0.378562 0.391872 0.403944 0.414896 0.424832 0.433848 0.442028 0.44945 0.456183 0.462289 0.467825 0.472841 + 0.477383 0.48149 0.4852 0.488544 0.491551 0.494244 0.496644 0.498767 0.500625 0.502226 0.503572 0.504659 + 0.505474 0.505996 0.5062 0.506082 -0.749079 -0.608996 -0.507675 -0.41289 -0.325557 -0.245743 -0.173132 -0.107244 + -0.0475511 0.00647009 0.0553209 0.0994727 0.139366 0.175409 0.207981 0.237423 0.264048 0.288136 0.309938 0.32968 + 0.347563 0.363768 0.378458 0.391777 0.403857 0.414813 0.424753 0.433771 0.441952 0.449373 0.456104 0.462207 + 0.467739 0.472749 0.477283 0.48138 0.485078 0.488406 0.491393 0.49406 0.496429 0.498513 0.500322 0.501863 + 0.503135 0.50413 0.504831 0.505213 0.505238 0.504871 -0.749079 -0.603761 -0.504158 -0.410705 -0.324322 -0.245153 + -0.172962 -0.107339 -0.0478087 0.00612055 0.0549276 0.0990692 0.138975 0.175047 0.207653 0.237133 0.263794 0.287915 + 0.309747 0.329514 0.347418 0.36364 0.378344 0.391674 0.403761 0.414724 0.424669 0.433689 0.441872 0.449294 + 0.456024 0.462125 0.467653 0.472659 0.477186 0.481276 0.484962 0.488277 0.491246 0.493892 0.496233 0.498283 + 0.500051 0.50154 0.502749 0.50367 0.504284 0.504565 0.504475 0.503967 -0.749079 -0.602319 -0.502612 -0.409597 + -0.323722 -0.244967 -0.173067 -0.107631 -0.0482078 0.00566812 0.0544592 0.0986102 0.138542 0.174649 0.207295 0.236815 + 0.263515 0.287671 0.309534 0.329327 0.347253 0.363494 0.378213 0.391555 0.403653 0.414624 0.424574 0.4336 + 0.441786 0.44921 0.455941 0.462042 0.467569 0.472572 0.477096 0.481179 0.484858 0.488162 0.491118 0.493747 + 0.496067 0.49809 0.499825 0.501275 0.502436 0.503301 0.503854 0.504073 0.503928 0.503382 -0.749079 -0.604156 + -0.502893 -0.409583 -0.323814 -0.245237 -0.173482 -0.108137 -0.0487587 0.00510699 0.0539116 0.0980915 0.138061 0.174211 + 0.206901 0.236464 0.263203 0.287395 0.309289 0.32911 0.347061 0.363322 0.378058 0.391415 0.403525 0.414506 + 0.424466 0.433498 0.44169 0.449119 0.455854 0.461958 0.467487 0.47249 0.477012 0.481094 0.484769 0.488067 + 0.491015 0.493633 0.495939 0.497945 0.499658 0.501081 0.502212 0.503042 0.503558 0.503746 0.503587 0.503073 + -0.749079 -0.607343 -0.504223 -0.410402 -0.324532 -0.24596 -0.174219 -0.108872 -0.0494729 0.00442767 0.0532759 0.0975042 + 0.137524 0.173724 0.206461 0.236069 0.262849 0.287079 0.309006 0.328856 0.346832 0.363117 0.377873 0.391247 + 0.403373 0.414368 0.424339 0.433382 0.441583 0.44902 0.455762 0.461872 0.467405 0.472412 0.476938 0.481021 + 0.484697 0.487995 0.490941 0.493556 0.495857 0.497855 0.499559 0.50097 0.502087 0.502901 0.503402 0.503578 + 0.503424 0.502955 -0.749079 -0.607343 -0.504223 -0.410402 -0.324532 -0.24596 -0.174219 -0.108872 -0.0494729 0.00442767 + 0.0532759 0.0975042 0.137524 0.173724 0.206461 0.236069 0.262849 0.287079 0.309006 0.328856 0.346832 0.363117 + 0.377873 0.391247 0.403373 0.414368 0.424339 0.433382 0.441583 0.44902 0.455762 0.461872 0.467405 0.472412 + 0.476938 0.481021 0.484697 0.487995 0.490941 0.493556 0.495857 0.497855 0.499559 0.50097 0.502087 0.502901 + 0.503402 0.503578 0.503424 0.502955 -0.749079 -0.604156 -0.502893 -0.409583 -0.323814 -0.245237 -0.173482 -0.108137 + -0.0487587 0.00510699 0.0539116 0.0980915 0.138061 0.174211 0.206901 0.236464 0.263203 0.287395 0.309289 0.32911 + 0.347061 0.363322 0.378058 0.391415 0.403525 0.414506 0.424466 0.433498 0.44169 0.449119 0.455854 0.461958 + 0.467487 0.47249 0.477012 0.481094 0.484769 0.488067 0.491015 0.493633 0.495939 0.497945 0.499658 0.501081 + 0.502212 0.503042 0.503558 0.503746 0.503587 0.503073 -0.749079 -0.602319 -0.502612 -0.409597 -0.323722 -0.244967 + -0.173067 -0.107631 -0.0482078 0.00566812 0.0544592 0.0986102 0.138542 0.174649 0.207295 0.236815 0.263515 0.287671 + 0.309534 0.329327 0.347253 0.363494 0.378213 0.391555 0.403653 0.414624 0.424574 0.4336 0.441786 0.44921 + 0.455941 0.462042 0.467569 0.472572 0.477096 0.481179 0.484858 0.488162 0.491118 0.493747 0.496067 0.49809 + 0.499825 0.501275 0.502436 0.503301 0.503854 0.504073 0.503928 0.503382 -0.749079 -0.603761 -0.504158 -0.410705 + -0.324322 -0.245153 -0.172962 -0.107339 -0.0478087 0.00612055 0.0549276 0.0990692 0.138975 0.175047 0.207653 0.237133 + 0.263794 0.287915 0.309747 0.329514 0.347418 0.36364 0.378344 0.391674 0.403761 0.414724 0.424669 0.433689 + 0.441872 0.449294 0.456024 0.462125 0.467653 0.472659 0.477186 0.481276 0.484962 0.488277 0.491246 0.493892 + 0.496233 0.498283 0.500051 0.50154 0.502749 0.50367 0.504284 0.504565 0.504475 0.503967 -0.749079 -0.608996 + -0.507675 -0.41289 -0.325557 -0.245743 -0.173132 -0.107244 -0.0475511 0.00647009 0.0553209 0.0994727 0.139366 0.175409 + 0.207981 0.237423 0.264048 0.288136 0.309938 0.32968 0.347563 0.363768 0.378458 0.391777 0.403857 0.414813 + 0.424753 0.433771 0.441952 0.449373 0.456104 0.462207 0.467739 0.472749 0.477283 0.48138 0.485078 0.488406 + 0.491393 0.49406 0.496429 0.498513 0.500322 0.501863 0.503135 0.50413 0.504831 0.505213 0.505238 0.504871 + -0.749079 -0.617035 -0.51256 -0.415801 -0.327221 -0.246623 -0.173517 -0.107314 -0.0474229 0.00672068 0.0556402 0.0998208 + 0.139714 0.175739 0.208281 0.23769 0.264282 0.288338 0.310113 0.329831 0.347695 0.363885 0.378562 0.391872 + 0.403944 0.414896 0.424832 0.433848 0.442028 0.44945 0.456183 0.462289 0.467825 0.472841 0.477383 0.48149 + 0.4852 0.488544 0.491551 0.494244 0.496644 0.498767 0.500625 0.502226 0.503572 0.504659 0.505474 0.505996 + 0.5062 0.506082 -0.749079 -0.625788 -0.517716 -0.418865 -0.329014 -0.247633 -0.174035 -0.107509 -0.047404 0.00688139 + 0.0558896 0.100116 0.140021 0.176036 0.208556 0.237936 0.264498 0.288527 0.310277 0.329974 0.34782 0.363996 + 0.378662 0.391963 0.404029 0.414976 0.42491 0.433924 0.442104 0.449527 0.456262 0.462372 0.467912 0.472935 + 0.477484 0.481603 0.485326 0.488687 0.491715 0.494434 0.496868 0.499032 0.500943 0.502611 0.50404 0.505232 + 0.506181 0.506876 0.507312 0.50753 -0.749079 -0.632909 -0.522009 -0.42151 -0.330619 -0.248592 -0.174583 -0.107769 + -0.0474599 0.00697322 0.0560837 0.100368 0.140295 0.176307 0.208809 0.238167 0.264704 0.288708 0.310436 0.330115 + 0.347945 0.364108 0.378763 0.392056 0.404116 0.415059 0.42499 0.434002 0.442182 0.449606 0.456343 0.462455 + 0.468001 0.473029 0.477587 0.481715 0.485452 0.48883 0.491879 0.494625 0.497092 0.499299 0.501264 0.503 + 0.504517 0.505821 0.506916 0.507805 0.508506 0.509107 -0.749079 -0.636849 -0.524743 -0.423359 -0.331784 -0.249336 + -0.175065 -0.108023 -0.0475439 0.00702926 0.0562499 0.100599 0.140552 0.176565 0.209054 0.238392 0.264907 0.288891 + 0.310599 0.33026 0.348076 0.364227 0.378872 0.392157 0.404211 0.415149 0.425076 0.434086 0.442265 0.449689 + 0.456427 0.462542 0.468091 0.473124 0.477689 0.481827 0.485576 0.488969 0.492038 0.49481 0.49731 0.499558 + 0.501576 0.503379 0.504983 0.506401 0.507645 0.508734 0.509709 0.51069 -0.749079 -0.637722 -0.525814 -0.424348 + -0.33236 -0.249747 -0.175423 -0.108209 -0.0476118 0.00708507 0.0564262 0.100844 0.140822 0.176834 0.20931 0.238628 + 0.265123 0.289087 0.310777 0.330421 0.348222 0.36436 0.378995 0.392271 0.404318 0.41525 0.425172 0.434179 + 0.442356 0.449778 0.456516 0.462632 0.468184 0.473221 0.477792 0.481938 0.485698 0.489105 0.492193 0.494988 + 0.497518 0.499805 0.501872 0.50374 0.505427 0.506953 0.508341 0.509622 0.510854 0.512171 -0.749079 -0.636549 + -0.524982 -0.423772 -0.332149 -0.24965 -0.175645 -0.108288 -0.0476465 0.00715959 0.0566571 0.101146 0.141142 0.177145 + 0.209602 0.238898 0.26537 0.289312 0.310981 0.330608 0.348393 0.364516 0.379139 0.392404 0.404441 0.415366 + 0.425282 0.434284 0.442457 0.449877 0.456613 0.462729 0.468281 0.473321 0.477897 0.482049 0.485818 0.489238 + 0.492341 0.495158 0.497715 0.500037 0.502149 0.504075 0.505838 0.507464 0.508984 0.510438 0.511892 0.513476 + -0.749079 -0.634433 -0.523489 -0.422582 -0.331216 -0.248831 -0.174695 -0.107751 -0.0476501 0.00722244 0.0570025 0.101559 + 0.141552 0.177531 0.209957 0.239222 0.265664 0.289579 0.311224 0.330828 0.348594 0.3647 0.379308 0.39256 + 0.404586 0.415501 0.425409 0.434404 0.442571 0.449986 0.456719 0.462833 0.468385 0.473426 0.478004 0.482162 + 0.485938 0.489368 0.492486 0.49532 0.497901 0.500255 0.502407 0.504384 0.506214 0.507927 0.50956 0.511161 + 0.512798 0.514576 -0.749079 -0.632414 -0.521811 -0.421106 -0.329907 -0.247648 -0.17358 -0.106788 -0.0467161 0.0075919 + 0.0575905 0.102142 0.142088 0.178016 0.210394 0.239615 0.266018 0.289897 0.311512 0.331089 0.34883 0.364916 + 0.379505 0.392742 0.404754 0.415657 0.425554 0.43454 0.4427 0.450109 0.456837 0.462948 0.468497 0.473538 + 0.478117 0.482278 0.486058 0.489495 0.492623 0.495472 0.498071 0.500449 0.502633 0.504652 0.506535 0.508317 + 0.51004 0.511758 0.51354 0.515472 -0.749079 -0.634336 -0.52337 -0.422448 -0.331073 -0.248683 -0.174547 -0.107618 + -0.0475145 0.00733047 0.0571094 0.101658 0.141641 0.177611 0.21003 0.239288 0.265724 0.289634 0.311276 0.330879 + 0.348643 0.364749 0.379357 0.39261 0.404638 0.415555 0.425466 0.434464 0.442635 0.450055 0.456794 0.462914 + 0.468474 0.473525 0.478115 0.482287 0.486082 0.489535 0.492681 0.495551 0.498176 0.500584 0.502804 0.504865 + 0.506799 0.508642 0.510439 0.512243 0.514124 0.516164 -0.749079 -0.636331 -0.524729 -0.423502 -0.331873 -0.249376 + -0.175369 -0.108066 -0.0474336 0.00734896 0.0568271 0.101296 0.141272 0.177259 0.209701 0.238985 0.265447 0.289382 + 0.311048 0.330673 0.348458 0.364584 0.37921 0.392481 0.404524 0.415456 0.42538 0.434391 0.442574 0.450005 + 0.456755 0.462886 0.468457 0.473519 0.47812 0.482305 0.486112 0.489581 0.492744 0.495633 0.498281 0.500715 + 0.502965 0.505061 0.507036 0.508924 0.510767 0.512619 0.514542 0.516614 -0.749079 -0.637378 -0.525427 -0.423962 + -0.331974 -0.249377 -0.175077 -0.107905 -0.0473391 0.00732379 0.0566334 0.101021 0.140973 0.176962 0.209419 0.238723 + 0.265207 0.289164 0.310852 0.330497 0.348302 0.364446 0.379089 0.392376 0.404433 0.415378 0.425315 0.434338 + 0.442531 0.449972 0.456732 0.462873 0.468453 0.473524 0.478136 0.482332 0.486152 0.489634 0.492812 0.495719 + 0.498386 0.500843 0.503119 0.505243 0.507246 0.509162 0.511028 0.512888 0.514794 0.516808 -0.749079 -0.636386 + -0.524263 -0.422886 -0.331329 -0.248914 -0.174684 -0.10769 -0.0472548 0.0072761 0.056458 0.100772 0.140695 0.176683 + 0.209154 0.238478 0.264985 0.288966 0.310677 0.330344 0.348169 0.364331 0.378992 0.392293 0.404365 0.415322 + 0.42527 0.434303 0.442506 0.449957 0.456725 0.462874 0.468462 0.473543 0.478164 0.482369 0.4862 0.489694 + 0.492886 0.495808 0.498493 0.500968 0.503264 0.505409 0.507431 0.50936 0.511227 0.513063 0.514901 0.516774 + -0.749079 -0.632376 -0.521497 -0.421026 -0.330171 -0.248189 -0.174231 -0.107469 -0.047209 0.00717915 0.0562499 0.1005 + 0.140399 0.176391 0.208879 0.238229 0.264765 0.288774 0.310512 0.330204 0.348052 0.364235 0.378913 0.392231 + 0.404317 0.415287 0.425245 0.434288 0.4425 0.449958 0.456734 0.46289 0.468486 0.473574 0.478203 0.482417 + 0.486257 0.489761 0.492965 0.4959 0.498599 0.501089 0.503401 0.50556 0.507592 0.509524 0.511376 0.513166 + 0.514904 0.516584 -0.749079 -0.625326 -0.517304 -0.41849 -0.328678 -0.247339 -0.173789 -0.107312 -0.0472511 0.00699459 + 0.0559696 0.10017 0.140057 0.176061 0.208578 0.237963 0.264536 0.288581 0.310352 0.330075 0.347949 0.364155 + 0.378853 0.392188 0.404288 0.41527 0.42524 0.434291 0.442511 0.449976 0.456758 0.462921 0.468522 0.473616 + 0.478252 0.482472 0.48632 0.489833 0.493046 0.495992 0.498702 0.501204 0.503526 0.505694 0.507732 0.509658 + 0.511489 0.513228 0.51486 0.516341 -0.749079 -0.616886 -0.512447 -0.41569 -0.327116 -0.246534 -0.173455 -0.107284 + -0.0474236 0.00669385 0.0555946 0.0997649 0.139656 0.175689 0.208245 0.237676 0.264296 0.288385 0.310196 0.329954 + 0.347859 0.36409 0.37881 0.392163 0.404277 0.415272 0.425251 0.434311 0.442538 0.450009 0.456796 0.462963 + 0.468569 0.473668 0.478308 0.482534 0.486388 0.489907 0.493127 0.49608 0.498798 0.501308 0.503638 0.505811 + 0.50785 0.50977 0.511582 0.513279 0.514831 0.516158 -0.749079 -0.60951 -0.50811 -0.413207 -0.325786 -0.24593 + -0.173309 -0.107428 -0.0477461 0.00626875 0.055122 0.0992861 0.139202 0.175277 0.207887 0.237374 0.264049 0.288189 + 0.310046 0.329843 0.347781 0.36404 0.378783 0.392153 0.404283 0.415289 0.425278 0.434345 0.442577 0.450053 + 0.456844 0.463014 0.468624 0.473725 0.478368 0.482597 0.486455 0.489978 0.493202 0.496161 0.498883 0.501399 + 0.503732 0.505908 0.507947 0.509863 0.511665 0.513346 0.514865 0.516127 -0.749079 -0.605399 -0.505395 -0.411557 + -0.324928 -0.245635 -0.173393 -0.107754 -0.0482147 0.00573001 0.0545647 0.0987472 0.138706 0.174839 0.207514 0.237067 + 0.263803 0.287999 0.309904 0.329742 0.347715 0.364002 0.378768 0.392157 0.4043 0.415317 0.425314 0.434387 + 0.442624 0.450103 0.456897 0.463069 0.46868 0.473783 0.478427 0.482658 0.486517 0.490042 0.493268 0.496229 + 0.498953 0.50147 0.503805 0.505982 0.50802 0.509937 0.511743 0.513437 0.514989 0.516304 -0.749079 -0.605669 + -0.504804 -0.41095 -0.324625 -0.245676 -0.17371 -0.108253 -0.0488129 0.00509654 0.053942 0.0981664 0.138186 0.17439 + 0.207138 0.236762 0.263563 0.287816 0.309771 0.32965 0.347657 0.363972 0.378759 0.392165 0.404322 0.415349 + 0.425353 0.434431 0.442672 0.450153 0.456948 0.463121 0.468732 0.473835 0.478479 0.482709 0.486568 0.490092 + 0.493319 0.496279 0.499003 0.501519 0.503853 0.506028 0.508065 0.509985 0.511805 0.51354 0.51519 0.516693 + -0.749079 -0.609871 -0.505876 -0.411125 -0.324765 -0.246013 -0.174243 -0.108913 -0.049528 0.00438326 0.0532695 0.0975586 + 0.137655 0.17394 0.206767 0.236463 0.263329 0.287639 0.309641 0.32956 0.347599 0.363939 0.378747 0.392168 + 0.404337 0.415373 0.425384 0.434467 0.44271 0.450194 0.456989 0.463162 0.468773 0.473875 0.478517 0.482746 + 0.486603 0.490125 0.493349 0.496306 0.499027 0.50154 0.50387 0.506041 0.508076 0.509997 0.511831 0.513616 + 0.515413 0.517268 -0.749079 -0.615405 -0.507054 -0.411442 -0.325135 -0.246597 -0.174991 -0.10974 -0.0503596 0.00359659 + 0.0525568 0.0969336 0.137121 0.173494 0.206401 0.236168 0.263096 0.287458 0.309503 0.329458 0.347525 0.363889 + 0.378715 0.392151 0.404332 0.415376 0.425394 0.434482 0.442728 0.450214 0.457011 0.463184 0.468794 0.473895 + 0.478536 0.482762 0.486616 0.490135 0.493355 0.496308 0.499024 0.501531 0.503855 0.50602 0.508048 0.509963 + 0.511795 0.5136 0.51552 0.517978 - - 2.56881 0.0290946 0 2.49702 0.0274085 0 2.42959 0.0265336 0 2.36427 0.0257228 0 - 2.30109 0.024827 0 2.24024 0.0238515 0 2.18188 0.0228325 0 2.12609 0.0218037 0 - 2.07285 0.0207891 0 2.02211 0.0198035 0 1.97378 0.0188554 0 1.92778 0.0179488 0 - 1.88398 0.0170849 0 1.8423 0.0162635 0 1.80262 0.0154834 0 1.76483 0.0147427 0 - 1.72886 0.0140393 0 1.69459 0.0133713 0 1.66196 0.0127366 0 1.63087 0.0121333 0 - 1.60125 0.0115595 0 1.57304 0.0110137 0 1.54615 0.0104942 0 1.52053 0.00999981 0 - 1.49612 0.00952907 0 1.47286 0.00908083 0 1.45069 0.00865396 0 1.42957 0.00824741 0 - 1.40943 0.00786019 0 1.39024 0.00749139 0 1.37195 0.00714012 0 1.35452 0.00680557 0 - 1.3379 0.00648694 0 1.32207 0.00618352 0 1.30697 0.00589458 0 1.29258 0.00561948 0 - 1.27886 0.00535757 0 1.26577 0.00510826 0 1.2533 0.00487098 0 1.2414 0.00464517 0 - 1.23006 0.00443029 0 1.21924 0.00422584 0 1.20892 0.00403137 0 1.19907 0.00384651 0 - 1.18967 0.00367125 0 1.1807 0.00350638 0 1.17212 0.00335499 0 1.1639 0.00322558 0 - 1.15595 0.0031347 0 1.1482 0.0030653 0 2.46739 0.0857453 0 2.39626 0.0813146 0 - 2.33142 0.0784365 0 2.26929 0.0757859 0 2.20966 0.0730103 0 2.1525 0.0700821 0 - 2.09777 0.0670646 0 2.04549 0.0640303 0 1.99564 0.0610376 0 1.94817 0.0581262 0 - 1.90301 0.055321 0 1.86007 0.0526355 0 1.81927 0.0500758 0 1.78049 0.0476426 0 - 1.74364 0.0453334 0 1.7086 0.0431434 0 1.6753 0.0410671 0 1.64362 0.039098 0 - 1.61348 0.03723 0 1.58479 0.035457 0 1.55749 0.0337732 0 1.53149 0.0321733 0 - 1.50672 0.0306525 0 1.48314 0.0292062 0 1.46066 0.0278304 0 1.43925 0.0265212 0 - 1.41884 0.0252752 0 1.39939 0.0240891 0 1.38085 0.0229599 0 1.36317 0.0218848 0 - 1.34631 0.0208612 0 1.33024 0.0198866 0 1.31492 0.0189588 0 1.3003 0.0180754 0 - 1.28636 0.0172346 0 1.27306 0.0164343 0 1.26037 0.0156727 0 1.24826 0.0149482 0 - 1.2367 0.0142589 0 1.22566 0.0136035 0 1.21512 0.0129802 0 1.20505 0.0123876 0 - 1.19543 0.0118244 0 1.18623 0.0112895 0 1.17743 0.0107829 0 1.16901 0.0103067 0 - 1.16095 0.00986863 0 1.15321 0.00948667 0 1.14577 0.00918296 0 1.13871 0.00886301 0 - 2.27486 0.137404 0 2.21021 0.131517 0 2.15206 0.126622 0 2.0963 0.121918 0 - 2.04311 0.117122 0 1.99249 0.112207 0 1.94434 0.107233 0 1.8986 0.102283 0 - 1.85515 0.0974229 0 1.81392 0.0927053 0 1.7748 0.0881639 0 1.73771 0.0838191 0 - 1.70253 0.0796808 0 1.66916 0.0757514 0 1.63751 0.0720276 0 1.60747 0.0685024 0 - 1.57896 0.0651663 0 1.55188 0.0620091 0 1.52614 0.05902 0 1.50167 0.0561883 0 - 1.4784 0.0535041 0 1.45626 0.0509579 0 1.43518 0.0485411 0 1.4151 0.0462459 0 - 1.39598 0.044065 0 1.37777 0.0419918 0 1.36041 0.0400203 0 1.34386 0.038145 0 - 1.32808 0.0363609 0 1.31303 0.0346631 0 1.29868 0.0330475 0 1.28499 0.03151 0 - 1.27192 0.0300468 0 1.25946 0.0286546 0 1.24756 0.0273299 0 1.23619 0.0260698 0 - 1.22534 0.0248715 0 1.21497 0.0237321 0 1.20507 0.0226492 0 1.1956 0.0216202 0 - 1.18654 0.0206427 0 1.17787 0.0197144 0 1.16957 0.018833 0 1.16163 0.0179967 0 - 1.15401 0.0172048 0 1.14671 0.0164594 0 1.13971 0.0157678 0 1.13301 0.0151435 0 - 1.12663 0.0145831 0 1.12062 0.0139129 0 2.00261 0.180689 0 1.94914 0.174443 0 - 1.90185 0.168047 0 1.85642 0.161443 0 1.81327 0.154667 0 1.77246 0.14781 0 - 1.73392 0.140975 0 1.69754 0.13425 0 1.66317 0.127702 0 1.63071 0.121381 0 - 1.60004 0.115319 0 1.57105 0.109534 0 1.54364 0.104036 0 1.51772 0.0988266 0 - 1.49319 0.0938991 0 1.46996 0.0892436 0 1.44794 0.0848467 0 1.42707 0.0806938 0 - 1.40727 0.0767694 0 1.38846 0.0730587 0 1.37059 0.0695472 0 1.3536 0.0662217 0 - 1.33744 0.0630699 0 1.32206 0.0600805 0 1.30741 0.0572433 0 1.29346 0.0545491 0 - 1.28016 0.0519894 0 1.26748 0.0495565 0 1.25539 0.0472435 0 1.24386 0.0450439 0 - 1.23286 0.0429519 0 1.22235 0.040962 0 1.21232 0.0390693 0 1.20274 0.0372692 0 - 1.19359 0.0355574 0 1.18485 0.03393 0 1.17648 0.0323834 0 1.16848 0.0309139 0 - 1.16083 0.0295185 0 1.15349 0.0281938 0 1.14647 0.0269369 0 1.13973 0.0257445 0 - 1.13326 0.0246137 0 1.12705 0.0235414 0 1.12109 0.0225253 0 1.11535 0.0215646 0 - 1.10986 0.020661 0 1.1046 0.0198144 0 1.09963 0.0189954 0 1.09499 0.0180191 0 - 1.66786 0.212958 0 1.62967 0.207011 0 1.59679 0.199607 0 1.56524 0.191468 0 - 1.53542 0.183015 0 1.50742 0.174507 0 1.48117 0.166108 0 1.45656 0.157919 0 - 1.43346 0.150004 0 1.41176 0.142404 0 1.39138 0.135144 0 1.3722 0.128238 0 - 1.35416 0.121692 0 1.33717 0.115504 0 1.32115 0.109664 0 1.30603 0.104158 0 - 1.29175 0.0989691 0 1.27824 0.0940772 0 1.26545 0.089463 0 1.25333 0.0851074 0 - 1.24183 0.0809924 0 1.23091 0.0771011 0 1.22054 0.0734181 0 1.21067 0.0699293 0 - 1.20129 0.0666218 0 1.19235 0.0634842 0 1.18383 0.060506 0 1.17571 0.0576776 0 - 1.16796 0.0549905 0 1.16057 0.0524369 0 1.15351 0.0500097 0 1.14677 0.0477023 0 - 1.14032 0.0455088 0 1.13416 0.0434238 0 1.12826 0.0414423 0 1.12261 0.0395597 0 - 1.11721 0.0377719 0 1.11202 0.0360748 0 1.10704 0.0344648 0 1.10226 0.0329382 0 - 1.09766 0.0314916 0 1.09324 0.0301214 0 1.08897 0.0288236 0 1.08485 0.0275939 0 - 1.08087 0.0264277 0 1.07703 0.0253195 0 1.07334 0.0242617 0 1.06981 0.0232384 0 - 1.06649 0.0222 0 1.06343 0.0209836 0 1.29189 0.232203 0 1.2724 0.226759 0 - 1.25667 0.218744 0 1.24166 0.209577 0 1.22763 0.199983 0 1.21461 0.190358 0 - 1.20254 0.180913 0 1.19135 0.171757 0 1.18097 0.162948 0 1.17134 0.154518 0 - 1.16241 0.146487 0 1.15412 0.138865 0 1.14642 0.131658 0 1.13926 0.124861 0 - 1.13258 0.118462 0 1.12635 0.112442 0 1.12052 0.10678 0 1.11505 0.101452 0 - 1.1099 0.0964349 0 1.10506 0.091707 0 1.10049 0.0872468 0 1.09617 0.0830348 0 - 1.09208 0.0790534 0 1.08821 0.0752863 0 1.08453 0.0717189 0 1.08103 0.068338 0 - 1.0777 0.0651317 0 1.07452 0.0620893 0 1.07149 0.0592011 0 1.06859 0.0564583 0 - 1.06582 0.0538529 0 1.06316 0.0513778 0 1.06062 0.0490264 0 1.05817 0.0467929 0 - 1.05582 0.0446717 0 1.05356 0.0426581 0 1.05138 0.0407476 0 1.04927 0.0389361 0 - 1.04722 0.0372197 0 1.04524 0.0355949 0 1.04331 0.0340579 0 1.04142 0.032605 0 - 1.03957 0.0312316 0 1.03776 0.0299325 0 1.03597 0.0287002 0 1.03422 0.0275243 0 - 1.0325 0.0263875 0 1.03084 0.0252577 0 1.0293 0.0240682 0 1.02792 0.0226785 0 - 0.898516 0.237131 0 0.900213 0.231946 0 0.903226 0.223733 0 0.906201 0.214211 0 - 0.909158 0.204209 0 0.912113 0.194188 0 0.915063 0.184381 0 0.918004 0.174888 0 - 0.920946 0.165766 0 0.923897 0.157042 0 0.926867 0.148733 0 0.929857 0.140859 0 - 0.932853 0.133427 0 0.935836 0.126434 0 0.938787 0.119867 0 0.941689 0.113702 0 - 0.944528 0.107916 0 0.947293 0.102481 0 0.949978 0.0973721 0 0.952578 0.0925648 0 - 0.955089 0.0880359 0 0.957509 0.0837647 0 0.959836 0.079732 0 0.962071 0.0759207 0 - 0.964213 0.0723152 0 0.966262 0.0689016 0 0.96822 0.0656672 0 0.970088 0.0626008 0 - 0.971866 0.0596921 0 0.973557 0.056932 0 0.975162 0.0543123 0 0.976683 0.0518255 0 - 0.978122 0.0494648 0 0.979479 0.0472244 0 0.980757 0.0450987 0 0.981956 0.0430829 0 - 0.983077 0.0411727 0 0.98412 0.0393641 0 0.985086 0.0376537 0 0.985974 0.0360379 0 - 0.986782 0.0345135 0 0.987509 0.0330767 0 0.988153 0.0317232 0 0.98871 0.0304468 0 - 0.989181 0.0292384 0 0.989567 0.0280832 0 0.989876 0.0269555 0 0.990131 0.0258082 0 - 0.990377 0.0245556 0 0.990684 0.0230541 0 0.512475 0.227179 0 0.536409 0.221828 0 - 0.558223 0.21399 0 0.579033 0.204925 0 0.598769 0.19534 0 0.617482 0.185721 0 - 0.635216 0.1763 0 0.652048 0.167149 0 0.66807 0.158334 0 0.683361 0.14988 0 - 0.697996 0.141811 0 0.712027 0.134165 0 0.725479 0.126962 0 0.738365 0.120204 0 - 0.750694 0.113873 0 0.762481 0.107945 0 0.773744 0.102392 0 0.784501 0.0971865 0 - 0.794773 0.0923011 0 0.80458 0.0877107 0 0.813941 0.0833921 0 0.822877 0.0793242 0 - 0.831405 0.0754881 0 0.839543 0.0718665 0 0.847308 0.0684442 0 0.854715 0.0652073 0 - 0.861779 0.0621434 0 0.868516 0.0592414 0 0.874937 0.0564912 0 0.881057 0.053884 0 - 0.886888 0.0514116 0 0.892441 0.0490669 0 0.897727 0.0468435 0 0.902758 0.0447357 0 - 0.907541 0.0427384 0 0.912087 0.0408472 0 0.916403 0.0390582 0 0.920498 0.037368 0 - 0.924377 0.0357737 0 0.928046 0.0342724 0 0.93151 0.0328616 0 0.934771 0.0315383 0 - 0.937831 0.0302986 0 0.940691 0.0291368 0 0.943353 0.028043 0 0.945815 0.0269999 0 - 0.948085 0.0259756 0 0.950177 0.0249098 0 0.952134 0.0236917 0 0.95406 0.0221319 0 - 0.157527 0.20253 0 0.202481 0.197028 0 0.241358 0.190238 0 0.278396 0.182398 0 - 0.313506 0.173991 0 0.346731 0.165521 0 0.378128 0.157196 0 0.407833 0.149024 0 - 0.435995 0.141113 0 0.462736 0.133475 0 0.488193 0.126142 0 0.512464 0.119193 0 - 0.535596 0.112667 0 0.557629 0.106565 0 0.578604 0.100868 0 0.598567 0.0955486 0 - 0.617568 0.090577 0 0.635657 0.0859249 0 0.65288 0.0815662 0 0.669285 0.0774766 0 - 0.684913 0.0736345 0 0.699804 0.0700202 0 0.713996 0.066616 0 0.727524 0.0634062 0 - 0.740419 0.0603766 0 0.752712 0.0575145 0 0.764433 0.0548085 0 0.775606 0.0522483 0 - 0.786259 0.049825 0 0.796413 0.0475304 0 0.806093 0.0453572 0 0.815318 0.043299 0 - 0.824108 0.0413501 0 0.832483 0.0395055 0 0.840459 0.0377609 0 0.848053 0.0361126 0 - 0.855281 0.0345577 0 0.862155 0.0330934 0 0.868689 0.0317178 0 0.874894 0.0304292 0 - 0.880779 0.0292261 0 0.886352 0.0281067 0 0.891618 0.0270687 0 0.896582 0.0261075 0 - 0.901243 0.0252142 0 0.905602 0.0243712 0 0.909659 0.0235429 0 0.913423 0.0226575 0 - 0.916934 0.02157 0 0.920332 0.0199947 0 -0.145792 0.164499 0 -0.084254 0.159486 0 - -0.0311113 0.154164 0 0.0198549 0.148069 0 0.0682519 0.141514 0 0.114027 0.134797 0 - 0.157343 0.128149 0 0.198353 0.121499 0 0.237178 0.115049 0 0.273946 0.108732 0 - 0.308864 0.102585 0 0.342065 0.0967723 0 0.373608 0.0913459 0 0.403559 0.0862996 0 - 0.431992 0.0816074 0 0.458992 0.0772393 0 0.48464 0.0731667 0 0.509016 0.0693636 0 - 0.532193 0.0658064 0 0.554241 0.0624744 0 0.575223 0.0593488 0 0.595198 0.056413 0 - 0.61422 0.0536522 0 0.632339 0.0510529 0 0.649602 0.0486033 0 0.666052 0.0462927 0 - 0.68173 0.0441116 0 0.696674 0.0420514 0 0.710918 0.0401046 0 0.724497 0.0382644 0 - 0.737441 0.0365249 0 0.749779 0.0348807 0 0.761539 0.0333275 0 0.772748 0.0318614 0 - 0.783429 0.0304791 0 0.793605 0.029178 0 0.803298 0.0279562 0 0.812527 0.0268123 0 - 0.821309 0.0257455 0 0.829662 0.0247554 0 0.837599 0.0238422 0 0.845132 0.0230059 0 - 0.85227 0.0222462 0 0.859018 0.0215608 0 0.865378 0.0209434 0 0.871349 0.0203783 0 - 0.876925 0.0198288 0 0.882111 0.0192118 0 0.886946 0.018339 0 0.891605 0.0167806 0 - -0.378931 0.115745 0 -0.306739 0.112003 0 -0.243311 0.10839 0 -0.182337 0.104291 0 - -0.123979 0.0998885 0 -0.0682788 0.0952425 0 -0.0151554 0.0905522 0 0.0352929 0.0859294 0 - 0.082888 0.081483 0 0.127806 0.0769489 0 0.170355 0.0723944 0 0.210697 0.0681289 0 - 0.248903 0.0641898 0 0.28508 0.0605534 0 0.319353 0.0571884 0 0.351844 0.0540665 0 - 0.382665 0.0511634 0 0.411925 0.0484587 0 0.439718 0.0459344 0 0.466135 0.043575 0 - 0.491255 0.0413666 0 0.515153 0.0392971 0 0.537897 0.0373554 0 0.55955 0.0355317 0 - 0.580171 0.0338174 0 0.599813 0.0322046 0 0.618526 0.0306863 0 0.636358 0.0292563 0 - 0.653352 0.027909 0 0.669549 0.0266397 0 0.684987 0.0254441 0 0.699703 0.0243185 0 - 0.713729 0.02326 0 0.727099 0.0222663 0 0.739842 0.0213353 0 0.751985 0.020466 0 - 0.763556 0.0196577 0 0.774578 0.0189104 0 0.785073 0.0182249 0 0.795062 0.0176024 0 - 0.804563 0.017045 0 0.81359 0.016555 0 0.822156 0.0161345 0 0.830267 0.0157847 0 - 0.837928 0.015503 0 0.845134 0.0152774 0 0.85188 0.0150719 0 0.858165 0.0147919 0 - 0.864031 0.0141975 0 0.869677 0.0126787 0 -0.526768 0.0597798 0 -0.449846 0.0578014 0 - -0.380056 0.0560167 0 -0.312647 0.0539577 0 -0.247847 0.0516953 0 -0.185827 0.0492599 0 - -0.126709 0.0467415 0 -0.0704407 0.0443666 0 -0.0168465 0.0420943 0 0.0339631 0.0397553 0 - 0.0818719 0.0372217 0 0.127043 0.0348919 0 0.169657 0.0327704 0 0.209911 0.0308277 0 - 0.247981 0.0290392 0 0.284027 0.0273868 0 0.318189 0.0258562 0 0.350592 0.024436 0 - 0.381349 0.0231163 0 0.410564 0.0218887 0 0.438328 0.0207456 0 0.464727 0.0196804 0 - 0.489839 0.0186869 0 0.513736 0.0177599 0 0.536484 0.0168943 0 0.558145 0.0160858 0 - 0.578774 0.0153305 0 0.598426 0.014625 0 0.61715 0.0139662 0 0.634992 0.0133517 0 - 0.651995 0.0127791 0 0.6682 0.012247 0 0.683645 0.011754 0 0.698366 0.0112995 0 - 0.712397 0.0108832 0 0.72577 0.0105055 0 0.738513 0.0101673 0 0.750654 0.00987025 0 - 0.762219 0.00961673 0 0.773231 0.00940994 0 0.78371 0.00925388 0 0.793674 0.00915334 0 - 0.803136 0.0091136 0 0.812107 0.00913955 0 0.82059 0.00923326 0 0.828584 0.0093874 0 - 0.83608 0.00956787 0 0.84308 0.00966847 0 0.849625 0.00939131 0 0.855926 0.00792747 0 - -0.578014 0.000103433 0 -0.500352 0.000175394 0 -0.428291 0.000161587 0 -0.358552 9.53661e-05 0 - -0.291403 -1.98095e-06 0 -0.227079 -0.000117659 0 -0.165743 -0.000244394 0 -0.107345 -0.000380624 0 - -0.0517494 -0.000510325 0 0.00119229 -0.000641129 0 0.0512503 -0.000755375 0 0.0982386 -0.000858234 0 - 0.142462 -0.00095022 0 0.184183 -0.00103088 0 0.223609 -0.00109973 0 0.260916 -0.00115643 0 - 0.296255 -0.00120075 0 0.329759 -0.00123268 0 0.361548 -0.00125232 0 0.391731 -0.00125995 0 - 0.420404 -0.00125596 0 0.447659 -0.00124087 0 0.473576 -0.00121525 0 0.498231 -0.00117971 0 - 0.521694 -0.00113485 0 0.544028 -0.00108127 0 0.565295 -0.00101945 0 0.585549 -0.000949798 0 - 0.604842 -0.000872552 0 0.623223 -0.000787777 0 0.640737 -0.000695312 0 0.657427 -0.000594731 0 - 0.673334 -0.000485294 0 0.688493 -0.000365896 0 0.702942 -0.000235003 0 0.716712 -9.0578e-05 0 - 0.729836 6.99993e-05 0 0.742341 0.000250039 0 0.754255 0.00045366 0 0.765603 0.000685922 0 - 0.776405 0.000952969 0 0.786681 0.00126213 0 0.796448 0.00162182 0 0.805715 0.00204091 0 - 0.814488 0.00252628 0 0.822768 0.00307571 0 0.830549 0.00365767 0 0.83783 0.00415481 0 - 0.844653 0.00421005 0 0.851223 0.00281202 0 -0.526693 -0.0595893 0 -0.449662 -0.0574788 0 - -0.379789 -0.0557307 0 -0.312278 -0.0538116 0 -0.247362 -0.0517477 0 -0.185221 -0.0495442 0 - -0.125983 -0.0472764 0 -0.0696032 -0.0451712 0 -0.0159068 -0.0431534 0 0.0349818 -0.0410624 0 - 0.0829473 -0.0387528 0 0.128163 -0.0366243 0 0.170812 -0.0346818 0 0.211086 -0.0328954 0 - 0.249166 -0.0312397 0 0.285208 -0.0296958 0 0.319354 -0.0282492 0 0.35173 -0.0268885 0 - 0.38245 -0.025604 0 0.411617 -0.0243879 0 0.439326 -0.0232335 0 0.465661 -0.022135 0 - 0.490702 -0.0210877 0 0.514522 -0.0200874 0 0.537188 -0.0191303 0 0.558763 -0.0182133 0 - 0.579304 -0.0173334 0 0.598865 -0.016488 0 0.617497 -0.0156745 0 0.635247 -0.0148905 0 - 0.652158 -0.0141335 0 0.668274 -0.013401 0 0.683632 -0.0126903 0 0.698269 -0.0119985 0 - 0.712221 -0.0113222 0 0.725518 -0.0106577 0 0.738192 -0.0100009 0 0.750271 -0.00934658 0 - 0.761781 -0.00868912 0 0.772747 -0.00802162 0 0.78319 -0.00733591 0 0.79313 -0.00662225 0 - 0.802583 -0.00586929 0 0.811562 -0.00506445 0 0.820073 -0.00419622 0 0.828118 -0.00326176 0 - 0.835693 -0.0022898 0 0.842799 -0.00140711 0 0.849471 -0.00102393 0 0.855882 -0.00233866 0 - -0.378789 -0.115598 0 -0.306389 -0.111761 0 -0.242811 -0.10821 0 -0.181649 -0.10427 0 - -0.123082 -0.100076 0 -0.0671627 -0.0956639 0 -0.013822 -0.091219 0 0.0368198 -0.0868463 0 - 0.0845757 -0.0826401 0 0.12963 -0.0783302 0 0.172289 -0.0739844 0 0.212714 -0.0699057 0 - 0.250979 -0.0661311 0 0.287193 -0.0626366 0 0.321478 -0.0593901 0 0.353958 -0.056363 0 - 0.384747 -0.0535308 0 0.413954 -0.050873 0 0.441675 -0.0483723 0 0.468 -0.0460137 0 - 0.493013 -0.0437843 0 0.516789 -0.041673 0 0.539398 -0.03967 0 0.560904 -0.0377668 0 - 0.58137 -0.0359559 0 0.600849 -0.0342306 0 0.619394 -0.032585 0 0.637054 -0.0310134 0 - 0.653875 -0.0295109 0 0.669898 -0.0280727 0 0.685165 -0.0266942 0 0.699713 -0.0253708 0 - 0.713576 -0.0240981 0 0.72679 -0.0228714 0 0.739384 -0.0216858 0 0.751389 -0.0205361 0 - 0.762833 -0.0194166 0 0.773741 -0.0183206 0 0.784139 -0.0172411 0 0.794048 -0.0161694 0 - 0.803489 -0.0150957 0 0.812481 -0.0140082 0 0.82104 -0.012893 0 0.829179 -0.0117345 0 - 0.836906 -0.0105171 0 0.844227 -0.00923331 0 0.851139 -0.00790871 0 0.857642 -0.00667535 0 - 0.863754 -0.00598273 0 0.869601 -0.007186 0 -0.145604 -0.164412 0 -0.0837899 -0.159365 0 - -0.0304393 -0.154149 0 0.0207822 -0.148237 0 0.0694544 -0.141901 0 0.115509 -0.135417 0 - 0.159091 -0.129003 0 0.200341 -0.122576 0 0.239375 -0.116342 0 0.276317 -0.110225 0 - 0.311374 -0.104262 0 0.344679 -0.0986122 0 0.376292 -0.0933276 0 0.40628 -0.0884009 0 - 0.434719 -0.0838054 0 0.461694 -0.0795112 0 0.487287 -0.0754893 0 0.511581 -0.0717142 0 - 0.534649 -0.0681628 0 0.556563 -0.0648152 0 0.577389 -0.0616538 0 0.597188 -0.0586631 0 - 0.616017 -0.0558296 0 0.633927 -0.0531413 0 0.65097 -0.0505876 0 0.667191 -0.0481588 0 - 0.682633 -0.0458465 0 0.697336 -0.0436427 0 0.711338 -0.0415403 0 0.724676 -0.0395325 0 - 0.737383 -0.037613 0 0.74949 -0.0357755 0 0.761027 -0.0340141 0 0.772022 -0.0323225 0 - 0.782503 -0.0306947 0 0.792494 -0.029124 0 0.802019 -0.0276035 0 0.8111 -0.0261253 0 - 0.819759 -0.0246811 0 0.828014 -0.0232611 0 0.835885 -0.0218539 0 0.843388 -0.0204462 0 - 0.850538 -0.0190225 0 0.857349 -0.0175646 0 0.863831 -0.0160542 0 0.86999 -0.0144802 0 - 0.87583 -0.012864 0 0.881349 -0.0113372 0 0.886549 -0.0103705 0 0.891498 -0.0114346 0 - 0.15773 -0.202507 0 0.202988 -0.197057 0 0.242105 -0.190431 0 0.279439 -0.1828 0 - 0.314867 -0.174619 0 0.348404 -0.166373 0 0.380091 -0.158262 0 0.410055 -0.150288 0 - 0.438438 -0.142564 0 0.465359 -0.135095 0 0.490956 -0.127914 0 0.515326 -0.121099 0 - 0.538518 -0.114686 0 0.560572 -0.108676 0 0.581531 -0.103049 0 0.601443 -0.0977769 0 - 0.620358 -0.0928309 0 0.638328 -0.0881831 0 0.655402 -0.083808 0 0.671628 -0.0796825 0 - 0.687052 -0.0757863 0 0.701717 -0.0721011 0 0.715662 -0.0686107 0 0.728927 -0.0653006 0 - 0.741546 -0.062158 0 0.753554 -0.0591713 0 0.764982 -0.0563301 0 0.775861 -0.0536247 0 - 0.786219 -0.0510464 0 0.796082 -0.048587 0 0.805475 -0.0462387 0 0.814424 -0.043994 0 - 0.822949 -0.0418458 0 0.831074 -0.0397868 0 0.838817 -0.0378098 0 0.846199 -0.0359073 0 - 0.853238 -0.0340712 0 0.859952 -0.0322931 0 0.866356 -0.0305635 0 0.872467 -0.0288719 0 - 0.878299 -0.0272059 0 0.883868 -0.0255515 0 0.889186 -0.0238918 0 0.894266 -0.0222078 0 - 0.89912 -0.0204794 0 0.903758 -0.018693 0 0.908186 -0.0168661 0 0.912405 -0.0151252 0 - 0.916406 -0.0139427 0 0.920189 -0.0148484 0 0.512656 -0.227216 0 0.536883 -0.222026 0 - 0.558955 -0.214413 0 0.580082 -0.205586 0 0.600147 -0.196227 0 0.619173 -0.186815 0 - 0.637187 -0.177581 0 0.654259 -0.168598 0 0.670477 -0.159934 0 0.68592 -0.151616 0 - 0.700663 -0.143666 0 0.714759 -0.13612 0 0.728236 -0.128999 0 0.741105 -0.122301 0 - 0.753379 -0.11601 0 0.765074 -0.110101 0 0.776207 -0.104546 0 0.7868 -0.0993183 0 - 0.796875 -0.0943922 0 0.806456 -0.0897438 0 0.815565 -0.0853515 0 0.824225 -0.0811957 0 - 0.832458 -0.0772591 0 0.840286 -0.073526 0 0.847728 -0.0699823 0 0.854806 -0.0666153 0 - 0.861537 -0.0634135 0 0.867939 -0.0603662 0 0.87403 -0.0574637 0 0.879826 -0.0546968 0 - 0.885342 -0.052057 0 0.890594 -0.0495359 0 0.895596 -0.0471257 0 0.90036 -0.0448184 0 - 0.904901 -0.042606 0 0.909231 -0.0404806 0 0.913362 -0.0384335 0 0.917304 -0.0364557 0 - 0.921071 -0.0345374 0 0.924672 -0.0326675 0 0.928119 -0.0308336 0 0.931422 -0.0290211 0 - 0.934593 -0.0272133 0 0.937643 -0.0253907 0 0.940585 -0.0235334 0 0.943432 -0.0216267 0 - 0.946194 -0.0196852 0 0.948876 -0.0178267 0 0.951458 -0.016507 0 0.953877 -0.0172461 0 - 0.898652 -0.237218 0 0.900596 -0.232321 0 0.903873 -0.224398 0 0.90716 -0.215132 0 - 0.910426 -0.205345 0 0.913657 -0.195503 0 0.916834 -0.185847 0 0.919953 -0.176485 0 - 0.923024 -0.167479 0 0.92606 -0.158855 0 0.929073 -0.150631 0 0.932063 -0.142824 0 - 0.93502 -0.135442 0 0.937927 -0.128479 0 0.940764 -0.121921 0 0.943514 -0.115746 0 - 0.946166 -0.109929 0 0.948711 -0.104446 0 0.951146 -0.0992724 0 0.953468 -0.0943855 0 - 0.955677 -0.0897642 0 0.957775 -0.0853894 0 0.959764 -0.0812438 0 0.96165 -0.0773116 0 - 0.963434 -0.0735787 0 0.965123 -0.070032 0 0.966721 -0.0666598 0 0.968233 -0.0634512 0 - 0.969664 -0.0603961 0 0.971019 -0.0574851 0 0.972304 -0.0547092 0 0.973522 -0.0520598 0 - 0.974679 -0.0495288 0 0.97578 -0.0471079 0 0.97683 -0.0447891 0 0.977833 -0.0425639 0 - 0.978795 -0.0404239 0 0.97972 -0.0383598 0 0.980614 -0.0363617 0 0.981483 -0.0344189 0 - 0.982332 -0.032519 0 0.983169 -0.030648 0 0.984002 -0.0287897 0 0.984841 -0.0269259 0 - 0.985698 -0.0250375 0 0.986587 -0.023111 0 0.987522 -0.021159 0 0.988512 -0.0192894 0 - 0.98953 -0.0179245 0 0.990451 -0.018501 0 1.29196 -0.232334 0 1.27264 -0.227314 0 - 1.25717 -0.219648 0 1.24245 -0.210737 0 1.22867 -0.201327 0 1.21583 -0.191836 0 - 1.20388 -0.182498 0 1.19276 -0.173432 0 1.1824 -0.164702 0 1.17275 -0.15634 0 - 1.16376 -0.148362 0 1.15538 -0.140779 0 1.14755 -0.133592 0 1.14023 -0.126797 0 - 1.13336 -0.120379 0 1.1269 -0.114321 0 1.12081 -0.108603 0 1.11506 -0.103203 0 - 1.1096 -0.0981003 0 1.10443 -0.0932745 0 1.09951 -0.0887067 0 1.09483 -0.0843794 0 - 1.09037 -0.0802767 0 1.08611 -0.0763838 0 1.08205 -0.0726873 0 1.07818 -0.0691751 0 - 1.07448 -0.0658357 0 1.07095 -0.0626588 0 1.06757 -0.0596346 0 1.06435 -0.0567539 0 - 1.06128 -0.054008 0 1.05834 -0.0513886 0 1.05555 -0.0488877 0 1.05288 -0.0464972 0 - 1.05034 -0.0442093 0 1.04793 -0.0420158 0 1.04564 -0.0399086 0 1.04347 -0.0378787 0 - 1.04142 -0.0359169 0 1.03948 -0.0340128 0 1.03767 -0.032155 0 1.03598 -0.0303304 0 - 1.03442 -0.0285244 0 1.03299 -0.0267207 0 1.03171 -0.0249025 0 1.03059 -0.0230586 0 - 1.02964 -0.0212013 0 1.02888 -0.0194271 0 1.02826 -0.018112 0 1.02763 -0.0185414 0 - 1.66784 -0.213131 0 1.62973 -0.207751 0 1.5971 -0.200729 0 1.56576 -0.19281 0 - 1.53607 -0.184478 0 1.50811 -0.176044 0 1.48182 -0.167701 0 1.45711 -0.159563 0 - 1.43387 -0.151696 0 1.41201 -0.144138 0 1.39144 -0.136908 0 1.37205 -0.130018 0 - 1.35377 -0.123469 0 1.33652 -0.117258 0 1.32021 -0.111377 0 1.30478 -0.105811 0 - 1.29016 -0.100546 0 1.2763 -0.0955636 0 1.26313 -0.0908481 0 1.25063 -0.0863827 0 - 1.23874 -0.0821515 0 1.22743 -0.0781398 0 1.21666 -0.0743339 0 1.20641 -0.0707211 0 - 1.19664 -0.0672896 0 1.18734 -0.0640287 0 1.17847 -0.0609283 0 1.17002 -0.0579789 0 - 1.16196 -0.0551717 0 1.15428 -0.0524985 0 1.14697 -0.0499512 0 1.14 -0.0475223 0 - 1.13336 -0.0452044 0 1.12704 -0.0429901 0 1.12102 -0.0408721 0 1.1153 -0.0388433 0 - 1.10985 -0.0368958 0 1.10469 -0.0350219 0 1.09979 -0.033213 0 1.09515 -0.0314599 0 - 1.09077 -0.0297524 0 1.08664 -0.0280792 0 1.08277 -0.0264277 0 1.07915 -0.0247841 0 - 1.0758 -0.0231348 0 1.07273 -0.0214717 0 1.06996 -0.0198072 0 1.06748 -0.0182262 0 - 1.06526 -0.0170479 0 1.06308 -0.0173543 0 2.00245 -0.180911 0 1.94895 -0.175377 0 - 1.90186 -0.169333 0 1.85651 -0.162851 0 1.81327 -0.1561 0 1.77227 -0.149246 0 - 1.73346 -0.142422 0 1.69677 -0.13572 0 1.66209 -0.129204 0 1.6293 -0.122912 0 - 1.59829 -0.116867 0 1.56896 -0.111083 0 1.54119 -0.105567 0 1.51489 -0.100319 0 - 1.48997 -0.0953333 0 1.46634 -0.0906029 0 1.44391 -0.0861173 0 1.42262 -0.0818647 0 - 1.40239 -0.077833 0 1.38316 -0.0740099 0 1.36487 -0.0703834 0 1.34747 -0.0669422 0 - 1.33092 -0.0636754 0 1.31517 -0.060573 0 1.30017 -0.0576254 0 1.28589 -0.0548239 0 - 1.27229 -0.0521601 0 1.25934 -0.0496262 0 1.24701 -0.0472149 0 1.23526 -0.0449192 0 - 1.22408 -0.0427323 0 1.21344 -0.0406478 0 1.2033 -0.0386594 0 1.19365 -0.0367608 0 - 1.18448 -0.0349459 0 1.17575 -0.0332084 0 1.16745 -0.0315419 0 1.15958 -0.0299396 0 - 1.1521 -0.0283945 0 1.14501 -0.0268988 0 1.13831 -0.0254442 0 1.13198 -0.0240213 0 - 1.12602 -0.0226199 0 1.12043 -0.0212294 0 1.11522 -0.0198396 0 1.11039 -0.0184454 0 - 1.10595 -0.0170594 0 1.1019 -0.0157527 0 1.09819 -0.0147814 0 1.09458 -0.0149917 0 - 2.27451 -0.1377 0 2.2096 -0.132632 0 2.1515 -0.127931 0 2.09552 -0.12318 0 - 2.04191 -0.118299 0 1.99078 -0.113333 0 1.94211 -0.108354 0 1.89585 -0.103426 0 - 1.85191 -0.0986013 0 1.8102 -0.0939139 0 1.77061 -0.0893878 0 1.73304 -0.085038 0 - 1.69738 -0.0808731 0 1.66353 -0.0768965 0 1.63139 -0.0731079 0 1.60087 -0.0695037 0 - 1.57187 -0.0660783 0 1.54432 -0.0628249 0 1.51813 -0.0597356 0 1.49323 -0.0568025 0 - 1.46955 -0.0540175 0 1.44702 -0.0513728 0 1.4256 -0.0488606 0 1.40521 -0.046474 0 - 1.38581 -0.0442058 0 1.36735 -0.0420498 0 1.34978 -0.0399997 0 1.33306 -0.0380498 0 - 1.31714 -0.0361944 0 1.302 -0.0344283 0 1.28758 -0.0327464 0 1.27387 -0.0311437 0 - 1.26082 -0.0296155 0 1.2484 -0.0281569 0 1.2366 -0.0267633 0 1.22537 -0.0254299 0 - 1.21471 -0.0241516 0 1.20458 -0.0229236 0 1.19497 -0.0217402 0 1.18585 -0.0205958 0 - 1.17723 -0.0194839 0 1.16908 -0.0183979 0 1.1614 -0.0173302 0 1.15418 -0.0162731 0 - 1.14742 -0.01522 0 1.14113 -0.0141683 0 1.13531 -0.0131292 0 1.12995 -0.0121575 0 - 1.12499 -0.0114411 0 1.12016 -0.0115791 0 2.4666 -0.086154 0 2.39459 -0.0824318 0 - 2.32933 -0.0794446 0 2.26646 -0.0765837 0 2.20604 -0.0736786 0 2.14813 -0.070713 0 - 2.09273 -0.0677182 0 2.03983 -0.0647325 0 1.98938 -0.061789 0 1.94133 -0.0589129 0 - 1.89558 -0.0561223 0 1.85206 -0.0534293 0 1.81067 -0.0508417 0 1.77131 -0.0483637 0 - 1.7339 -0.0459967 0 1.69833 -0.0437401 0 1.66451 -0.0415916 0 1.63236 -0.0395479 0 - 1.60179 -0.0376049 0 1.57272 -0.0357584 0 1.54508 -0.0340037 0 1.51879 -0.0323365 0 - 1.49379 -0.0307522 0 1.47 -0.0292466 0 1.44738 -0.0278155 0 1.42586 -0.0264551 0 - 1.40539 -0.0251615 0 1.38592 -0.0239312 0 1.36739 -0.0227607 0 1.34977 -0.0216468 0 - 1.333 -0.0205861 0 1.31706 -0.0195757 0 1.3019 -0.0186126 0 1.28748 -0.0176936 0 - 1.27377 -0.0168159 0 1.26074 -0.0159764 0 1.24837 -0.015172 0 1.23662 -0.0143996 0 - 1.22547 -0.0136557 0 1.2149 -0.0129368 0 1.2049 -0.0122389 0 1.19544 -0.0115578 0 - 1.18652 -0.010889 0 1.17813 -0.0102281 0 1.17027 -0.00957102 0 1.16293 -0.00891695 0 - 1.15612 -0.00827388 0 1.14981 -0.00767686 0 1.14392 -0.00724126 0 1.13818 -0.00732199 0 - 2.56625 -0.0293322 0 2.49126 -0.0279284 0 2.42272 -0.0269064 0 2.35664 -0.0259602 0 - 2.29293 -0.0250043 0 2.23165 -0.0240251 0 2.17283 -0.0230309 0 2.11649 -0.0220347 0 - 2.06264 -0.0210482 0 2.01123 -0.0200807 0 1.9622 -0.0191391 0 1.9155 -0.0182281 0 - 1.87102 -0.0173508 0 1.8287 -0.0165093 0 1.78843 -0.0157042 0 1.75013 -0.0149357 0 - 1.71371 -0.0142033 0 1.67907 -0.013506 0 1.64613 -0.0128426 0 1.61482 -0.0122119 0 - 1.58504 -0.0116122 0 1.55672 -0.0110423 0 1.52979 -0.0105006 0 1.50418 -0.00998576 0 - 1.47983 -0.00949636 0 1.45667 -0.0090311 0 1.43464 -0.00858871 0 1.4137 -0.00816798 0 - 1.39378 -0.00776775 0 1.37484 -0.00738689 0 1.35682 -0.00702431 0 1.33969 -0.00667896 0 - 1.32341 -0.00634981 0 1.30792 -0.00603582 0 1.29321 -0.00573599 0 1.27923 -0.00544927 0 - 1.26595 -0.00517463 0 1.25334 -0.00491096 0 1.24138 -0.00465711 0 1.23004 -0.00441186 0 - 1.21931 -0.00417388 0 1.20917 -0.00394176 0 1.1996 -0.00371398 0 1.19059 -0.00348905 0 - 1.18215 -0.00326572 0 1.17426 -0.00304378 0 1.16693 -0.00282616 0 1.16011 -0.00262499 0 - 1.15373 -0.00247932 0 1.1475 -0.00250654 0 2.56625 0.0293322 0 2.49126 0.0279284 0 - 2.42272 0.0269064 0 2.35664 0.0259602 0 2.29293 0.0250043 0 2.23165 0.0240251 0 - 2.17283 0.0230309 0 2.11649 0.0220347 0 2.06264 0.0210482 0 2.01123 0.0200807 0 - 1.9622 0.0191391 0 1.9155 0.0182281 0 1.87102 0.0173508 0 1.8287 0.0165093 0 - 1.78843 0.0157042 0 1.75013 0.0149357 0 1.71371 0.0142033 0 1.67907 0.013506 0 - 1.64613 0.0128426 0 1.61482 0.0122119 0 1.58504 0.0116122 0 1.55672 0.0110423 0 - 1.52979 0.0105006 0 1.50418 0.00998576 0 1.47983 0.00949636 0 1.45667 0.0090311 0 - 1.43464 0.00858871 0 1.4137 0.00816798 0 1.39378 0.00776775 0 1.37484 0.00738689 0 - 1.35682 0.00702431 0 1.33969 0.00667896 0 1.32341 0.00634981 0 1.30792 0.00603582 0 - 1.29321 0.00573599 0 1.27923 0.00544927 0 1.26595 0.00517463 0 1.25334 0.00491096 0 - 1.24138 0.00465711 0 1.23004 0.00441186 0 1.21931 0.00417388 0 1.20917 0.00394176 0 - 1.1996 0.00371398 0 1.19059 0.00348905 0 1.18215 0.00326572 0 1.17426 0.00304378 0 - 1.16693 0.00282616 0 1.16011 0.00262499 0 1.15373 0.00247932 0 1.1475 0.00250654 0 - 2.4666 0.086154 0 2.39459 0.0824318 0 2.32933 0.0794446 0 2.26646 0.0765837 0 - 2.20604 0.0736786 0 2.14813 0.070713 0 2.09273 0.0677182 0 2.03983 0.0647325 0 - 1.98938 0.061789 0 1.94133 0.0589129 0 1.89558 0.0561223 0 1.85206 0.0534293 0 - 1.81067 0.0508417 0 1.77131 0.0483637 0 1.7339 0.0459967 0 1.69833 0.0437401 0 - 1.66451 0.0415916 0 1.63236 0.0395479 0 1.60179 0.0376049 0 1.57272 0.0357584 0 - 1.54508 0.0340037 0 1.51879 0.0323365 0 1.49379 0.0307522 0 1.47 0.0292466 0 - 1.44738 0.0278155 0 1.42586 0.0264551 0 1.40539 0.0251615 0 1.38592 0.0239312 0 - 1.36739 0.0227607 0 1.34977 0.0216468 0 1.333 0.0205861 0 1.31706 0.0195757 0 - 1.3019 0.0186126 0 1.28748 0.0176936 0 1.27377 0.0168159 0 1.26074 0.0159764 0 - 1.24837 0.015172 0 1.23662 0.0143996 0 1.22547 0.0136557 0 1.2149 0.0129368 0 - 1.2049 0.0122389 0 1.19544 0.0115578 0 1.18652 0.010889 0 1.17813 0.0102281 0 - 1.17027 0.00957102 0 1.16293 0.00891695 0 1.15612 0.00827388 0 1.14981 0.00767686 0 - 1.14392 0.00724126 0 1.13818 0.00732199 0 2.27451 0.1377 0 2.2096 0.132632 0 - 2.1515 0.127931 0 2.09552 0.12318 0 2.04191 0.118299 0 1.99078 0.113333 0 - 1.94211 0.108354 0 1.89585 0.103426 0 1.85191 0.0986013 0 1.8102 0.0939139 0 - 1.77061 0.0893878 0 1.73304 0.085038 0 1.69738 0.0808731 0 1.66353 0.0768965 0 - 1.63139 0.0731079 0 1.60087 0.0695037 0 1.57187 0.0660783 0 1.54432 0.0628249 0 - 1.51813 0.0597356 0 1.49323 0.0568025 0 1.46955 0.0540175 0 1.44702 0.0513728 0 - 1.4256 0.0488606 0 1.40521 0.046474 0 1.38581 0.0442058 0 1.36735 0.0420498 0 - 1.34978 0.0399997 0 1.33306 0.0380498 0 1.31714 0.0361944 0 1.302 0.0344283 0 - 1.28758 0.0327464 0 1.27387 0.0311437 0 1.26082 0.0296155 0 1.2484 0.0281569 0 - 1.2366 0.0267633 0 1.22537 0.0254299 0 1.21471 0.0241516 0 1.20458 0.0229236 0 - 1.19497 0.0217402 0 1.18585 0.0205958 0 1.17723 0.0194839 0 1.16908 0.0183979 0 - 1.1614 0.0173302 0 1.15418 0.0162731 0 1.14742 0.01522 0 1.14113 0.0141683 0 - 1.13531 0.0131292 0 1.12995 0.0121575 0 1.12499 0.0114411 0 1.12016 0.0115791 0 - 2.00245 0.180911 0 1.94895 0.175377 0 1.90186 0.169333 0 1.85651 0.162851 0 - 1.81327 0.1561 0 1.77227 0.149246 0 1.73346 0.142422 0 1.69677 0.13572 0 - 1.66209 0.129204 0 1.6293 0.122912 0 1.59829 0.116867 0 1.56896 0.111083 0 - 1.54119 0.105567 0 1.51489 0.100319 0 1.48997 0.0953333 0 1.46634 0.0906029 0 - 1.44391 0.0861173 0 1.42262 0.0818647 0 1.40239 0.077833 0 1.38316 0.0740099 0 - 1.36487 0.0703834 0 1.34747 0.0669422 0 1.33092 0.0636754 0 1.31517 0.060573 0 - 1.30017 0.0576254 0 1.28589 0.0548239 0 1.27229 0.0521601 0 1.25934 0.0496262 0 - 1.24701 0.0472149 0 1.23526 0.0449192 0 1.22408 0.0427323 0 1.21344 0.0406478 0 - 1.2033 0.0386594 0 1.19365 0.0367608 0 1.18448 0.0349459 0 1.17575 0.0332084 0 - 1.16745 0.0315419 0 1.15958 0.0299396 0 1.1521 0.0283945 0 1.14501 0.0268988 0 - 1.13831 0.0254442 0 1.13198 0.0240213 0 1.12602 0.0226199 0 1.12043 0.0212294 0 - 1.11522 0.0198396 0 1.11039 0.0184454 0 1.10595 0.0170594 0 1.1019 0.0157527 0 - 1.09819 0.0147814 0 1.09458 0.0149917 0 1.66784 0.213131 0 1.62973 0.207751 0 - 1.5971 0.200729 0 1.56576 0.19281 0 1.53607 0.184478 0 1.50811 0.176044 0 - 1.48182 0.167701 0 1.45711 0.159563 0 1.43387 0.151696 0 1.41201 0.144138 0 - 1.39144 0.136908 0 1.37205 0.130018 0 1.35377 0.123469 0 1.33652 0.117258 0 - 1.32021 0.111377 0 1.30478 0.105811 0 1.29016 0.100546 0 1.2763 0.0955636 0 - 1.26313 0.0908481 0 1.25063 0.0863827 0 1.23874 0.0821515 0 1.22743 0.0781398 0 - 1.21666 0.0743339 0 1.20641 0.0707211 0 1.19664 0.0672896 0 1.18734 0.0640287 0 - 1.17847 0.0609283 0 1.17002 0.0579789 0 1.16196 0.0551717 0 1.15428 0.0524985 0 - 1.14697 0.0499512 0 1.14 0.0475223 0 1.13336 0.0452044 0 1.12704 0.0429901 0 - 1.12102 0.0408721 0 1.1153 0.0388433 0 1.10985 0.0368958 0 1.10469 0.0350219 0 - 1.09979 0.033213 0 1.09515 0.0314599 0 1.09077 0.0297524 0 1.08664 0.0280792 0 - 1.08277 0.0264277 0 1.07915 0.0247841 0 1.0758 0.0231348 0 1.07273 0.0214717 0 - 1.06996 0.0198072 0 1.06748 0.0182262 0 1.06526 0.0170479 0 1.06308 0.0173543 0 - 1.29196 0.232334 0 1.27264 0.227314 0 1.25717 0.219648 0 1.24245 0.210737 0 - 1.22867 0.201327 0 1.21583 0.191836 0 1.20388 0.182498 0 1.19276 0.173432 0 - 1.1824 0.164702 0 1.17275 0.15634 0 1.16376 0.148362 0 1.15538 0.140779 0 - 1.14755 0.133592 0 1.14023 0.126797 0 1.13336 0.120379 0 1.1269 0.114321 0 - 1.12081 0.108603 0 1.11506 0.103203 0 1.1096 0.0981003 0 1.10443 0.0932745 0 - 1.09951 0.0887067 0 1.09483 0.0843794 0 1.09037 0.0802767 0 1.08611 0.0763838 0 - 1.08205 0.0726873 0 1.07818 0.0691751 0 1.07448 0.0658357 0 1.07095 0.0626588 0 - 1.06757 0.0596346 0 1.06435 0.0567539 0 1.06128 0.054008 0 1.05834 0.0513886 0 - 1.05555 0.0488877 0 1.05288 0.0464972 0 1.05034 0.0442093 0 1.04793 0.0420158 0 - 1.04564 0.0399086 0 1.04347 0.0378787 0 1.04142 0.0359169 0 1.03948 0.0340128 0 - 1.03767 0.032155 0 1.03598 0.0303304 0 1.03442 0.0285244 0 1.03299 0.0267207 0 - 1.03171 0.0249025 0 1.03059 0.0230586 0 1.02964 0.0212013 0 1.02888 0.0194271 0 - 1.02826 0.018112 0 1.02763 0.0185414 0 0.898652 0.237218 0 0.900596 0.232321 0 - 0.903873 0.224398 0 0.90716 0.215132 0 0.910426 0.205345 0 0.913657 0.195503 0 - 0.916834 0.185847 0 0.919953 0.176485 0 0.923024 0.167479 0 0.92606 0.158855 0 - 0.929073 0.150631 0 0.932063 0.142824 0 0.93502 0.135442 0 0.937927 0.128479 0 - 0.940764 0.121921 0 0.943514 0.115746 0 0.946166 0.109929 0 0.948711 0.104446 0 - 0.951146 0.0992724 0 0.953468 0.0943855 0 0.955677 0.0897642 0 0.957775 0.0853894 0 - 0.959764 0.0812438 0 0.96165 0.0773116 0 0.963434 0.0735787 0 0.965123 0.070032 0 - 0.966721 0.0666598 0 0.968233 0.0634512 0 0.969664 0.0603961 0 0.971019 0.0574851 0 - 0.972304 0.0547092 0 0.973522 0.0520598 0 0.974679 0.0495288 0 0.97578 0.0471079 0 - 0.97683 0.0447891 0 0.977833 0.0425639 0 0.978795 0.0404239 0 0.97972 0.0383598 0 - 0.980614 0.0363617 0 0.981483 0.0344189 0 0.982332 0.032519 0 0.983169 0.030648 0 - 0.984002 0.0287897 0 0.984841 0.0269259 0 0.985698 0.0250375 0 0.986587 0.023111 0 - 0.987522 0.021159 0 0.988512 0.0192894 0 0.98953 0.0179245 0 0.990451 0.018501 0 - 0.512656 0.227216 0 0.536883 0.222026 0 0.558955 0.214413 0 0.580082 0.205586 0 - 0.600147 0.196227 0 0.619173 0.186815 0 0.637187 0.177581 0 0.654259 0.168598 0 - 0.670477 0.159934 0 0.68592 0.151616 0 0.700663 0.143666 0 0.714759 0.13612 0 - 0.728236 0.128999 0 0.741105 0.122301 0 0.753379 0.11601 0 0.765074 0.110101 0 - 0.776207 0.104546 0 0.7868 0.0993183 0 0.796875 0.0943922 0 0.806456 0.0897438 0 - 0.815565 0.0853515 0 0.824225 0.0811957 0 0.832458 0.0772591 0 0.840286 0.073526 0 - 0.847728 0.0699823 0 0.854806 0.0666153 0 0.861537 0.0634135 0 0.867939 0.0603662 0 - 0.87403 0.0574637 0 0.879826 0.0546968 0 0.885342 0.052057 0 0.890594 0.0495359 0 - 0.895596 0.0471257 0 0.90036 0.0448184 0 0.904901 0.042606 0 0.909231 0.0404806 0 - 0.913362 0.0384335 0 0.917304 0.0364557 0 0.921071 0.0345374 0 0.924672 0.0326675 0 - 0.928119 0.0308336 0 0.931422 0.0290211 0 0.934593 0.0272133 0 0.937643 0.0253907 0 - 0.940585 0.0235334 0 0.943432 0.0216267 0 0.946194 0.0196852 0 0.948876 0.0178267 0 - 0.951458 0.016507 0 0.953877 0.0172461 0 0.15773 0.202507 0 0.202988 0.197057 0 - 0.242105 0.190431 0 0.279439 0.1828 0 0.314867 0.174619 0 0.348404 0.166373 0 - 0.380091 0.158262 0 0.410055 0.150288 0 0.438438 0.142564 0 0.465359 0.135095 0 - 0.490956 0.127914 0 0.515326 0.121099 0 0.538518 0.114686 0 0.560572 0.108676 0 - 0.581531 0.103049 0 0.601443 0.0977769 0 0.620358 0.0928309 0 0.638328 0.0881831 0 - 0.655402 0.083808 0 0.671628 0.0796825 0 0.687052 0.0757863 0 0.701717 0.0721011 0 - 0.715662 0.0686107 0 0.728927 0.0653006 0 0.741546 0.062158 0 0.753554 0.0591713 0 - 0.764982 0.0563301 0 0.775861 0.0536247 0 0.786219 0.0510464 0 0.796082 0.048587 0 - 0.805475 0.0462387 0 0.814424 0.043994 0 0.822949 0.0418458 0 0.831074 0.0397868 0 - 0.838817 0.0378098 0 0.846199 0.0359073 0 0.853238 0.0340712 0 0.859952 0.0322931 0 - 0.866356 0.0305635 0 0.872467 0.0288719 0 0.878299 0.0272059 0 0.883868 0.0255515 0 - 0.889186 0.0238918 0 0.894266 0.0222078 0 0.89912 0.0204794 0 0.903758 0.018693 0 - 0.908186 0.0168661 0 0.912405 0.0151252 0 0.916406 0.0139427 0 0.920189 0.0148484 0 - -0.145604 0.164412 0 -0.0837899 0.159365 0 -0.0304393 0.154149 0 0.0207822 0.148237 0 - 0.0694544 0.141901 0 0.115509 0.135417 0 0.159091 0.129003 0 0.200341 0.122576 0 - 0.239375 0.116342 0 0.276317 0.110225 0 0.311374 0.104262 0 0.344679 0.0986122 0 - 0.376292 0.0933276 0 0.40628 0.0884009 0 0.434719 0.0838054 0 0.461694 0.0795112 0 - 0.487287 0.0754893 0 0.511581 0.0717142 0 0.534649 0.0681628 0 0.556563 0.0648152 0 - 0.577389 0.0616538 0 0.597188 0.0586631 0 0.616017 0.0558296 0 0.633927 0.0531413 0 - 0.65097 0.0505876 0 0.667191 0.0481588 0 0.682633 0.0458465 0 0.697336 0.0436427 0 - 0.711338 0.0415403 0 0.724676 0.0395325 0 0.737383 0.037613 0 0.74949 0.0357755 0 - 0.761027 0.0340141 0 0.772022 0.0323225 0 0.782503 0.0306947 0 0.792494 0.029124 0 - 0.802019 0.0276035 0 0.8111 0.0261253 0 0.819759 0.0246811 0 0.828014 0.0232611 0 - 0.835885 0.0218539 0 0.843388 0.0204462 0 0.850538 0.0190225 0 0.857349 0.0175646 0 - 0.863831 0.0160542 0 0.86999 0.0144802 0 0.87583 0.012864 0 0.881349 0.0113372 0 - 0.886549 0.0103705 0 0.891498 0.0114346 0 -0.378789 0.115598 0 -0.306389 0.111761 0 - -0.242811 0.10821 0 -0.181649 0.10427 0 -0.123082 0.100076 0 -0.0671627 0.0956639 0 - -0.013822 0.091219 0 0.0368198 0.0868463 0 0.0845757 0.0826401 0 0.12963 0.0783302 0 - 0.172289 0.0739844 0 0.212714 0.0699057 0 0.250979 0.0661311 0 0.287193 0.0626366 0 - 0.321478 0.0593901 0 0.353958 0.056363 0 0.384747 0.0535308 0 0.413954 0.050873 0 - 0.441675 0.0483723 0 0.468 0.0460137 0 0.493013 0.0437843 0 0.516789 0.041673 0 - 0.539398 0.03967 0 0.560904 0.0377668 0 0.58137 0.0359559 0 0.600849 0.0342306 0 - 0.619394 0.032585 0 0.637054 0.0310134 0 0.653875 0.0295109 0 0.669898 0.0280727 0 - 0.685165 0.0266942 0 0.699713 0.0253708 0 0.713576 0.0240981 0 0.72679 0.0228714 0 - 0.739384 0.0216858 0 0.751389 0.0205361 0 0.762833 0.0194166 0 0.773741 0.0183206 0 - 0.784139 0.0172411 0 0.794048 0.0161694 0 0.803489 0.0150957 0 0.812481 0.0140082 0 - 0.82104 0.012893 0 0.829179 0.0117345 0 0.836906 0.0105171 0 0.844227 0.00923331 0 - 0.851139 0.00790871 0 0.857642 0.00667535 0 0.863754 0.00598273 0 0.869601 0.007186 0 - -0.526693 0.0595893 0 -0.449662 0.0574788 0 -0.379789 0.0557307 0 -0.312278 0.0538116 0 - -0.247362 0.0517477 0 -0.185221 0.0495442 0 -0.125983 0.0472764 0 -0.0696032 0.0451712 0 - -0.0159068 0.0431534 0 0.0349818 0.0410624 0 0.0829473 0.0387528 0 0.128163 0.0366243 0 - 0.170812 0.0346818 0 0.211086 0.0328954 0 0.249166 0.0312397 0 0.285208 0.0296958 0 - 0.319354 0.0282492 0 0.35173 0.0268885 0 0.38245 0.025604 0 0.411617 0.0243879 0 - 0.439326 0.0232335 0 0.465661 0.022135 0 0.490702 0.0210877 0 0.514522 0.0200874 0 - 0.537188 0.0191303 0 0.558763 0.0182133 0 0.579304 0.0173334 0 0.598865 0.016488 0 - 0.617497 0.0156745 0 0.635247 0.0148905 0 0.652158 0.0141335 0 0.668274 0.013401 0 - 0.683632 0.0126903 0 0.698269 0.0119985 0 0.712221 0.0113222 0 0.725518 0.0106577 0 - 0.738192 0.0100009 0 0.750271 0.00934658 0 0.761781 0.00868912 0 0.772747 0.00802162 0 - 0.78319 0.00733591 0 0.79313 0.00662225 0 0.802583 0.00586929 0 0.811562 0.00506445 0 - 0.820073 0.00419622 0 0.828118 0.00326176 0 0.835693 0.0022898 0 0.842799 0.00140711 0 - 0.849471 0.00102393 0 0.855882 0.00233866 0 -0.578014 -0.000103433 0 -0.500352 -0.000175394 0 - -0.428291 -0.000161587 0 -0.358552 -9.53661e-05 0 -0.291403 1.98095e-06 0 -0.227079 0.000117659 0 - -0.165743 0.000244394 0 -0.107345 0.000380624 0 -0.0517494 0.000510325 0 0.00119229 0.000641129 0 - 0.0512503 0.000755375 0 0.0982386 0.000858234 0 0.142462 0.00095022 0 0.184183 0.00103088 0 - 0.223609 0.00109973 0 0.260916 0.00115643 0 0.296255 0.00120075 0 0.329759 0.00123268 0 - 0.361548 0.00125232 0 0.391731 0.00125995 0 0.420404 0.00125596 0 0.447659 0.00124087 0 - 0.473576 0.00121525 0 0.498231 0.00117971 0 0.521694 0.00113485 0 0.544028 0.00108127 0 - 0.565295 0.00101945 0 0.585549 0.000949798 0 0.604842 0.000872552 0 0.623223 0.000787777 0 - 0.640737 0.000695312 0 0.657427 0.000594731 0 0.673334 0.000485294 0 0.688493 0.000365896 0 - 0.702942 0.000235003 0 0.716712 9.0578e-05 0 0.729836 -6.99993e-05 0 0.742341 -0.000250039 0 - 0.754255 -0.00045366 0 0.765603 -0.000685922 0 0.776405 -0.000952969 0 0.786681 -0.00126213 0 - 0.796448 -0.00162182 0 0.805715 -0.00204091 0 0.814488 -0.00252628 0 0.822768 -0.00307571 0 - 0.830549 -0.00365767 0 0.83783 -0.00415481 0 0.844653 -0.00421005 0 0.851223 -0.00281202 0 - -0.526768 -0.0597798 0 -0.449846 -0.0578014 0 -0.380056 -0.0560167 0 -0.312647 -0.0539577 0 - -0.247847 -0.0516953 0 -0.185827 -0.0492599 0 -0.126709 -0.0467415 0 -0.0704407 -0.0443666 0 - -0.0168465 -0.0420943 0 0.0339631 -0.0397553 0 0.0818719 -0.0372217 0 0.127043 -0.0348919 0 - 0.169657 -0.0327704 0 0.209911 -0.0308277 0 0.247981 -0.0290392 0 0.284027 -0.0273868 0 - 0.318189 -0.0258562 0 0.350592 -0.024436 0 0.381349 -0.0231163 0 0.410564 -0.0218887 0 - 0.438328 -0.0207456 0 0.464727 -0.0196804 0 0.489839 -0.0186869 0 0.513736 -0.0177599 0 - 0.536484 -0.0168943 0 0.558145 -0.0160858 0 0.578774 -0.0153305 0 0.598426 -0.014625 0 - 0.61715 -0.0139662 0 0.634992 -0.0133517 0 0.651995 -0.0127791 0 0.6682 -0.012247 0 - 0.683645 -0.011754 0 0.698366 -0.0112995 0 0.712397 -0.0108832 0 0.72577 -0.0105055 0 - 0.738513 -0.0101673 0 0.750654 -0.00987025 0 0.762219 -0.00961673 0 0.773231 -0.00940994 0 - 0.78371 -0.00925388 0 0.793674 -0.00915334 0 0.803136 -0.0091136 0 0.812107 -0.00913955 0 - 0.82059 -0.00923326 0 0.828584 -0.0093874 0 0.83608 -0.00956787 0 0.84308 -0.00966847 0 - 0.849625 -0.00939131 0 0.855926 -0.00792747 0 -0.378931 -0.115745 0 -0.306739 -0.112003 0 - -0.243311 -0.10839 0 -0.182337 -0.104291 0 -0.123979 -0.0998885 0 -0.0682788 -0.0952425 0 - -0.0151554 -0.0905522 0 0.0352929 -0.0859294 0 0.082888 -0.081483 0 0.127806 -0.0769489 0 - 0.170355 -0.0723944 0 0.210697 -0.0681289 0 0.248903 -0.0641898 0 0.28508 -0.0605534 0 - 0.319353 -0.0571884 0 0.351844 -0.0540665 0 0.382665 -0.0511634 0 0.411925 -0.0484587 0 - 0.439718 -0.0459344 0 0.466135 -0.043575 0 0.491255 -0.0413666 0 0.515153 -0.0392971 0 - 0.537897 -0.0373554 0 0.55955 -0.0355317 0 0.580171 -0.0338174 0 0.599813 -0.0322046 0 - 0.618526 -0.0306863 0 0.636358 -0.0292563 0 0.653352 -0.027909 0 0.669549 -0.0266397 0 - 0.684987 -0.0254441 0 0.699703 -0.0243185 0 0.713729 -0.02326 0 0.727099 -0.0222663 0 - 0.739842 -0.0213353 0 0.751985 -0.020466 0 0.763556 -0.0196577 0 0.774578 -0.0189104 0 - 0.785073 -0.0182249 0 0.795062 -0.0176024 0 0.804563 -0.017045 0 0.81359 -0.016555 0 - 0.822156 -0.0161345 0 0.830267 -0.0157847 0 0.837928 -0.015503 0 0.845134 -0.0152774 0 - 0.85188 -0.0150719 0 0.858165 -0.0147919 0 0.864031 -0.0141975 0 0.869677 -0.0126787 0 - -0.145792 -0.164499 0 -0.084254 -0.159486 0 -0.0311113 -0.154164 0 0.0198549 -0.148069 0 - 0.0682519 -0.141514 0 0.114027 -0.134797 0 0.157343 -0.128149 0 0.198353 -0.121499 0 - 0.237178 -0.115049 0 0.273946 -0.108732 0 0.308864 -0.102585 0 0.342065 -0.0967723 0 - 0.373608 -0.0913459 0 0.403559 -0.0862996 0 0.431992 -0.0816074 0 0.458992 -0.0772393 0 - 0.48464 -0.0731667 0 0.509016 -0.0693636 0 0.532193 -0.0658064 0 0.554241 -0.0624744 0 - 0.575223 -0.0593488 0 0.595198 -0.056413 0 0.61422 -0.0536522 0 0.632339 -0.0510529 0 - 0.649602 -0.0486033 0 0.666052 -0.0462927 0 0.68173 -0.0441116 0 0.696674 -0.0420514 0 - 0.710918 -0.0401046 0 0.724497 -0.0382644 0 0.737441 -0.0365249 0 0.749779 -0.0348807 0 - 0.761539 -0.0333275 0 0.772748 -0.0318614 0 0.783429 -0.0304791 0 0.793605 -0.029178 0 - 0.803298 -0.0279562 0 0.812527 -0.0268123 0 0.821309 -0.0257455 0 0.829662 -0.0247554 0 - 0.837599 -0.0238422 0 0.845132 -0.0230059 0 0.85227 -0.0222462 0 0.859018 -0.0215608 0 - 0.865378 -0.0209434 0 0.871349 -0.0203783 0 0.876925 -0.0198288 0 0.882111 -0.0192118 0 - 0.886946 -0.018339 0 0.891605 -0.0167806 0 0.157527 -0.20253 0 0.202481 -0.197028 0 - 0.241358 -0.190238 0 0.278396 -0.182398 0 0.313506 -0.173991 0 0.346731 -0.165521 0 - 0.378128 -0.157196 0 0.407833 -0.149024 0 0.435995 -0.141113 0 0.462736 -0.133475 0 - 0.488193 -0.126142 0 0.512464 -0.119193 0 0.535596 -0.112667 0 0.557629 -0.106565 0 - 0.578604 -0.100868 0 0.598567 -0.0955486 0 0.617568 -0.090577 0 0.635657 -0.0859249 0 - 0.65288 -0.0815662 0 0.669285 -0.0774766 0 0.684913 -0.0736345 0 0.699804 -0.0700202 0 - 0.713996 -0.066616 0 0.727524 -0.0634062 0 0.740419 -0.0603766 0 0.752712 -0.0575145 0 - 0.764433 -0.0548085 0 0.775606 -0.0522483 0 0.786259 -0.049825 0 0.796413 -0.0475304 0 - 0.806093 -0.0453572 0 0.815318 -0.043299 0 0.824108 -0.0413501 0 0.832483 -0.0395055 0 - 0.840459 -0.0377609 0 0.848053 -0.0361126 0 0.855281 -0.0345577 0 0.862155 -0.0330934 0 - 0.868689 -0.0317178 0 0.874894 -0.0304292 0 0.880779 -0.0292261 0 0.886352 -0.0281067 0 - 0.891618 -0.0270687 0 0.896582 -0.0261075 0 0.901243 -0.0252142 0 0.905602 -0.0243712 0 - 0.909659 -0.0235429 0 0.913423 -0.0226575 0 0.916934 -0.02157 0 0.920332 -0.0199947 0 - 0.512475 -0.227179 0 0.536409 -0.221828 0 0.558223 -0.21399 0 0.579033 -0.204925 0 - 0.598769 -0.19534 0 0.617482 -0.185721 0 0.635216 -0.1763 0 0.652048 -0.167149 0 - 0.66807 -0.158334 0 0.683361 -0.14988 0 0.697996 -0.141811 0 0.712027 -0.134165 0 - 0.725479 -0.126962 0 0.738365 -0.120204 0 0.750694 -0.113873 0 0.762481 -0.107945 0 - 0.773744 -0.102392 0 0.784501 -0.0971865 0 0.794773 -0.0923011 0 0.80458 -0.0877107 0 - 0.813941 -0.0833921 0 0.822877 -0.0793242 0 0.831405 -0.0754881 0 0.839543 -0.0718665 0 - 0.847308 -0.0684442 0 0.854715 -0.0652073 0 0.861779 -0.0621434 0 0.868516 -0.0592414 0 - 0.874937 -0.0564912 0 0.881057 -0.053884 0 0.886888 -0.0514116 0 0.892441 -0.0490669 0 - 0.897727 -0.0468435 0 0.902758 -0.0447357 0 0.907541 -0.0427384 0 0.912087 -0.0408472 0 - 0.916403 -0.0390582 0 0.920498 -0.037368 0 0.924377 -0.0357737 0 0.928046 -0.0342724 0 - 0.93151 -0.0328616 0 0.934771 -0.0315383 0 0.937831 -0.0302986 0 0.940691 -0.0291368 0 - 0.943353 -0.028043 0 0.945815 -0.0269999 0 0.948085 -0.0259756 0 0.950177 -0.0249098 0 - 0.952134 -0.0236917 0 0.95406 -0.0221319 0 0.898516 -0.237131 0 0.900213 -0.231946 0 - 0.903226 -0.223733 0 0.906201 -0.214211 0 0.909158 -0.204209 0 0.912113 -0.194188 0 - 0.915063 -0.184381 0 0.918004 -0.174888 0 0.920946 -0.165766 0 0.923897 -0.157042 0 - 0.926867 -0.148733 0 0.929857 -0.140859 0 0.932853 -0.133427 0 0.935836 -0.126434 0 - 0.938787 -0.119867 0 0.941689 -0.113702 0 0.944528 -0.107916 0 0.947293 -0.102481 0 - 0.949978 -0.0973721 0 0.952578 -0.0925648 0 0.955089 -0.0880359 0 0.957509 -0.0837647 0 - 0.959836 -0.079732 0 0.962071 -0.0759207 0 0.964213 -0.0723152 0 0.966262 -0.0689016 0 - 0.96822 -0.0656672 0 0.970088 -0.0626008 0 0.971866 -0.0596921 0 0.973557 -0.056932 0 - 0.975162 -0.0543123 0 0.976683 -0.0518255 0 0.978122 -0.0494648 0 0.979479 -0.0472244 0 - 0.980757 -0.0450987 0 0.981956 -0.0430829 0 0.983077 -0.0411727 0 0.98412 -0.0393641 0 - 0.985086 -0.0376537 0 0.985974 -0.0360379 0 0.986782 -0.0345135 0 0.987509 -0.0330767 0 - 0.988153 -0.0317232 0 0.98871 -0.0304468 0 0.989181 -0.0292384 0 0.989567 -0.0280832 0 - 0.989876 -0.0269555 0 0.990131 -0.0258082 0 0.990377 -0.0245556 0 0.990684 -0.0230541 0 - 1.29189 -0.232203 0 1.2724 -0.226759 0 1.25667 -0.218744 0 1.24166 -0.209577 0 - 1.22763 -0.199983 0 1.21461 -0.190358 0 1.20254 -0.180913 0 1.19135 -0.171757 0 - 1.18097 -0.162948 0 1.17134 -0.154518 0 1.16241 -0.146487 0 1.15412 -0.138865 0 - 1.14642 -0.131658 0 1.13926 -0.124861 0 1.13258 -0.118462 0 1.12635 -0.112442 0 - 1.12052 -0.10678 0 1.11505 -0.101452 0 1.1099 -0.0964349 0 1.10506 -0.091707 0 - 1.10049 -0.0872468 0 1.09617 -0.0830348 0 1.09208 -0.0790534 0 1.08821 -0.0752863 0 - 1.08453 -0.0717189 0 1.08103 -0.068338 0 1.0777 -0.0651317 0 1.07452 -0.0620893 0 - 1.07149 -0.0592011 0 1.06859 -0.0564583 0 1.06582 -0.0538529 0 1.06316 -0.0513778 0 - 1.06062 -0.0490264 0 1.05817 -0.0467929 0 1.05582 -0.0446717 0 1.05356 -0.0426581 0 - 1.05138 -0.0407476 0 1.04927 -0.0389361 0 1.04722 -0.0372197 0 1.04524 -0.0355949 0 - 1.04331 -0.0340579 0 1.04142 -0.032605 0 1.03957 -0.0312316 0 1.03776 -0.0299325 0 - 1.03597 -0.0287002 0 1.03422 -0.0275243 0 1.0325 -0.0263875 0 1.03084 -0.0252577 0 - 1.0293 -0.0240682 0 1.02792 -0.0226785 0 1.66786 -0.212958 0 1.62967 -0.207011 0 - 1.59679 -0.199607 0 1.56524 -0.191468 0 1.53542 -0.183015 0 1.50742 -0.174507 0 - 1.48117 -0.166108 0 1.45656 -0.157919 0 1.43346 -0.150004 0 1.41176 -0.142404 0 - 1.39138 -0.135144 0 1.3722 -0.128238 0 1.35416 -0.121692 0 1.33717 -0.115504 0 - 1.32115 -0.109664 0 1.30603 -0.104158 0 1.29175 -0.0989691 0 1.27824 -0.0940772 0 - 1.26545 -0.089463 0 1.25333 -0.0851074 0 1.24183 -0.0809924 0 1.23091 -0.0771011 0 - 1.22054 -0.0734181 0 1.21067 -0.0699293 0 1.20129 -0.0666218 0 1.19235 -0.0634842 0 - 1.18383 -0.060506 0 1.17571 -0.0576776 0 1.16796 -0.0549905 0 1.16057 -0.0524369 0 - 1.15351 -0.0500097 0 1.14677 -0.0477023 0 1.14032 -0.0455088 0 1.13416 -0.0434238 0 - 1.12826 -0.0414423 0 1.12261 -0.0395597 0 1.11721 -0.0377719 0 1.11202 -0.0360748 0 - 1.10704 -0.0344648 0 1.10226 -0.0329382 0 1.09766 -0.0314916 0 1.09324 -0.0301214 0 - 1.08897 -0.0288236 0 1.08485 -0.0275939 0 1.08087 -0.0264277 0 1.07703 -0.0253195 0 - 1.07334 -0.0242617 0 1.06981 -0.0232384 0 1.06649 -0.0222 0 1.06343 -0.0209836 0 - 2.00261 -0.180689 0 1.94914 -0.174443 0 1.90185 -0.168047 0 1.85642 -0.161443 0 - 1.81327 -0.154667 0 1.77246 -0.14781 0 1.73392 -0.140975 0 1.69754 -0.13425 0 - 1.66317 -0.127702 0 1.63071 -0.121381 0 1.60004 -0.115319 0 1.57105 -0.109534 0 - 1.54364 -0.104036 0 1.51772 -0.0988266 0 1.49319 -0.0938991 0 1.46996 -0.0892436 0 - 1.44794 -0.0848467 0 1.42707 -0.0806938 0 1.40727 -0.0767694 0 1.38846 -0.0730587 0 - 1.37059 -0.0695472 0 1.3536 -0.0662217 0 1.33744 -0.0630699 0 1.32206 -0.0600805 0 - 1.30741 -0.0572433 0 1.29346 -0.0545491 0 1.28016 -0.0519894 0 1.26748 -0.0495565 0 - 1.25539 -0.0472435 0 1.24386 -0.0450439 0 1.23286 -0.0429519 0 1.22235 -0.040962 0 - 1.21232 -0.0390693 0 1.20274 -0.0372692 0 1.19359 -0.0355574 0 1.18485 -0.03393 0 - 1.17648 -0.0323834 0 1.16848 -0.0309139 0 1.16083 -0.0295185 0 1.15349 -0.0281938 0 - 1.14647 -0.0269369 0 1.13973 -0.0257445 0 1.13326 -0.0246137 0 1.12705 -0.0235414 0 - 1.12109 -0.0225253 0 1.11535 -0.0215646 0 1.10986 -0.020661 0 1.1046 -0.0198144 0 - 1.09963 -0.0189954 0 1.09499 -0.0180191 0 2.27486 -0.137404 0 2.21021 -0.131517 0 - 2.15206 -0.126622 0 2.0963 -0.121918 0 2.04311 -0.117122 0 1.99249 -0.112207 0 - 1.94434 -0.107233 0 1.8986 -0.102283 0 1.85515 -0.0974229 0 1.81392 -0.0927053 0 - 1.7748 -0.0881639 0 1.73771 -0.0838191 0 1.70253 -0.0796808 0 1.66916 -0.0757514 0 - 1.63751 -0.0720276 0 1.60747 -0.0685024 0 1.57896 -0.0651663 0 1.55188 -0.0620091 0 - 1.52614 -0.05902 0 1.50167 -0.0561883 0 1.4784 -0.0535041 0 1.45626 -0.0509579 0 - 1.43518 -0.0485411 0 1.4151 -0.0462459 0 1.39598 -0.044065 0 1.37777 -0.0419918 0 - 1.36041 -0.0400203 0 1.34386 -0.038145 0 1.32808 -0.0363609 0 1.31303 -0.0346631 0 - 1.29868 -0.0330475 0 1.28499 -0.03151 0 1.27192 -0.0300468 0 1.25946 -0.0286546 0 - 1.24756 -0.0273299 0 1.23619 -0.0260698 0 1.22534 -0.0248715 0 1.21497 -0.0237321 0 - 1.20507 -0.0226492 0 1.1956 -0.0216202 0 1.18654 -0.0206427 0 1.17787 -0.0197144 0 - 1.16957 -0.018833 0 1.16163 -0.0179967 0 1.15401 -0.0172048 0 1.14671 -0.0164594 0 - 1.13971 -0.0157678 0 1.13301 -0.0151435 0 1.12663 -0.0145831 0 1.12062 -0.0139129 0 - 2.46739 -0.0857453 0 2.39626 -0.0813146 0 2.33142 -0.0784365 0 2.26929 -0.0757859 0 - 2.20966 -0.0730103 0 2.1525 -0.0700821 0 2.09777 -0.0670646 0 2.04549 -0.0640303 0 - 1.99564 -0.0610376 0 1.94817 -0.0581262 0 1.90301 -0.055321 0 1.86007 -0.0526355 0 - 1.81927 -0.0500758 0 1.78049 -0.0476426 0 1.74364 -0.0453334 0 1.7086 -0.0431434 0 - 1.6753 -0.0410671 0 1.64362 -0.039098 0 1.61348 -0.03723 0 1.58479 -0.035457 0 - 1.55749 -0.0337732 0 1.53149 -0.0321733 0 1.50672 -0.0306525 0 1.48314 -0.0292062 0 - 1.46066 -0.0278304 0 1.43925 -0.0265212 0 1.41884 -0.0252752 0 1.39939 -0.0240891 0 - 1.38085 -0.0229599 0 1.36317 -0.0218848 0 1.34631 -0.0208612 0 1.33024 -0.0198866 0 - 1.31492 -0.0189588 0 1.3003 -0.0180754 0 1.28636 -0.0172346 0 1.27306 -0.0164343 0 - 1.26037 -0.0156727 0 1.24826 -0.0149482 0 1.2367 -0.0142589 0 1.22566 -0.0136035 0 - 1.21512 -0.0129802 0 1.20505 -0.0123876 0 1.19543 -0.0118244 0 1.18623 -0.0112895 0 - 1.17743 -0.0107829 0 1.16901 -0.0103067 0 1.16095 -0.00986863 0 1.15321 -0.00948667 0 - 1.14577 -0.00918296 0 1.13871 -0.00886301 0 2.56881 -0.0290946 0 2.49702 -0.0274085 0 - 2.42959 -0.0265336 0 2.36427 -0.0257228 0 2.30109 -0.024827 0 2.24024 -0.0238515 0 - 2.18188 -0.0228325 0 2.12609 -0.0218037 0 2.07285 -0.0207891 0 2.02211 -0.0198035 0 - 1.97378 -0.0188554 0 1.92778 -0.0179488 0 1.88398 -0.0170849 0 1.8423 -0.0162635 0 - 1.80262 -0.0154834 0 1.76483 -0.0147427 0 1.72886 -0.0140393 0 1.69459 -0.0133713 0 - 1.66196 -0.0127366 0 1.63087 -0.0121333 0 1.60125 -0.0115595 0 1.57304 -0.0110137 0 - 1.54615 -0.0104942 0 1.52053 -0.00999981 0 1.49612 -0.00952907 0 1.47286 -0.00908083 0 - 1.45069 -0.00865396 0 1.42957 -0.00824741 0 1.40943 -0.00786019 0 1.39024 -0.00749139 0 - 1.37195 -0.00714012 0 1.35452 -0.00680557 0 1.3379 -0.00648694 0 1.32207 -0.00618352 0 - 1.30697 -0.00589458 0 1.29258 -0.00561948 0 1.27886 -0.00535757 0 1.26577 -0.00510826 0 - 1.2533 -0.00487098 0 1.2414 -0.00464517 0 1.23006 -0.00443029 0 1.21924 -0.00422584 0 - 1.20892 -0.00403137 0 1.19907 -0.00384651 0 1.18967 -0.00367125 0 1.1807 -0.00350638 0 - 1.17212 -0.00335499 0 1.1639 -0.00322558 0 1.15595 -0.0031347 0 1.1482 -0.0030653 0 + + 2.56902 0.029554 0 2.49712 0.0276693 0 2.42921 0.0266607 0 2.36367 0.0257708 0 + 2.30042 0.0248317 0 2.23959 0.0238343 0 2.18129 0.0228058 0 2.12556 0.0217742 0 + 2.07239 0.0207602 0 2.02172 0.019777 0 1.97346 0.0188318 0 1.92751 0.0179282 0 + 1.88377 0.0170673 0 1.84212 0.0162486 0 1.80247 0.0154708 0 1.76472 0.0147321 0 + 1.72877 0.0140305 0 1.69452 0.013364 0 1.6619 0.0127305 0 1.63083 0.0121282 0 + 1.60123 0.0115552 0 1.57302 0.0110101 0 1.54614 0.0104913 0 1.52053 0.00999733 0 + 1.49613 0.00952701 0 1.47287 0.00907911 0 1.45071 0.00865253 0 1.42958 0.00824623 0 + 1.40945 0.00785924 0 1.39026 0.00749063 0 1.37197 0.00713954 0 1.35454 0.00680514 0 + 1.33793 0.00648666 0 1.32209 0.00618338 0 1.30699 0.00589458 0 1.2926 0.00561962 0 + 1.27888 0.00535786 0 1.2658 0.0051087 0 1.25332 0.00487158 0 1.24142 0.00464592 0 + 1.23008 0.00443122 0 1.21926 0.00422694 0 1.20893 0.00403262 0 1.19908 0.00384789 0 + 1.18968 0.0036727 0 1.1807 0.00350779 0 1.17212 0.00335617 0 1.1639 0.00322621 0 + 1.15595 0.00313439 0 1.1482 0.00306408 0 2.46762 0.0870729 0 2.39637 0.0821149 0 + 2.33096 0.078871 0 2.26847 0.0759864 0 2.20866 0.0730689 0 2.15141 0.0700591 0 + 2.09669 0.0669979 0 2.04446 0.0639433 0 1.99469 0.060944 0 1.94731 0.058034 0 + 1.90225 0.0552345 0 1.85941 0.0525568 0 1.8187 0.0500055 0 1.78 0.0475808 0 + 1.74323 0.0452796 0 1.70826 0.043097 0 1.67501 0.0410272 0 1.64339 0.0390639 0 + 1.61329 0.0372009 0 1.58465 0.0354322 0 1.55737 0.0337521 0 1.5314 0.0321554 0 + 1.50667 0.0306372 0 1.4831 0.0291933 0 1.46064 0.0278194 0 1.43925 0.0265119 0 + 1.41885 0.0252674 0 1.39941 0.0240825 0 1.38088 0.0229545 0 1.36321 0.0218803 0 + 1.34636 0.0208576 0 1.3303 0.0198838 0 1.31498 0.0189567 0 1.30036 0.018074 0 + 1.28642 0.0172339 0 1.27312 0.0164343 0 1.26043 0.0156734 0 1.24832 0.0149495 0 + 1.23676 0.0142611 0 1.22572 0.0136063 0 1.21517 0.0129838 0 1.2051 0.012392 0 + 1.19547 0.0118296 0 1.18626 0.0112954 0 1.17746 0.0107892 0 1.16903 0.010313 0 + 1.16096 0.00987423 0 1.15321 0.00949044 0 1.14577 0.00918343 0 1.13871 0.00885996 0 + 2.27507 0.139466 0 2.21034 0.132825 0 2.1517 0.127399 0 2.0956 0.122332 0 + 2.0422 0.117297 0 1.99145 0.112229 0 1.94325 0.107162 0 1.8975 0.102158 0 + 1.8541 0.0972716 0 1.81293 0.0925443 0 1.77389 0.088004 0 1.73688 0.0836666 0 + 1.70179 0.0795395 0 1.66851 0.0756229 0 1.63695 0.0719124 0 1.60699 0.0684002 0 + 1.57855 0.0650764 0 1.55153 0.0619305 0 1.52586 0.0589515 0 1.50144 0.0561289 0 + 1.47822 0.0534526 0 1.45611 0.0509134 0 1.43507 0.0485028 0 1.41503 0.0462129 0 + 1.39594 0.0440366 0 1.37775 0.0419674 0 1.36041 0.0399994 0 1.34388 0.0381272 0 + 1.32812 0.0363458 0 1.31308 0.0346505 0 1.29874 0.0330371 0 1.28506 0.0315016 0 + 1.27201 0.0300403 0 1.25954 0.0286498 0 1.24765 0.0273269 0 1.23629 0.0260685 0 + 1.22544 0.0248718 0 1.21507 0.0237342 0 1.20516 0.022653 0 1.19569 0.0216259 0 + 1.18663 0.0206503 0 1.17795 0.0197239 0 1.16965 0.0188443 0 1.16169 0.0180097 0 + 1.15407 0.0172191 0 1.14675 0.0164742 0 1.13974 0.0157817 0 1.13303 0.0151544 0 + 1.12663 0.0145881 0 1.12062 0.0139105 0 2.00279 0.183281 0 1.94931 0.176133 0 + 1.90169 0.169105 0 1.85599 0.162058 0 1.81264 0.154975 0 1.7717 0.147911 0 + 1.73307 0.140938 0 1.69664 0.134125 0 1.66227 0.127526 0 1.62983 0.121177 0 + 1.5992 0.115104 0 1.57027 0.109321 0 1.54292 0.103832 0 1.51707 0.0986348 0 + 1.49261 0.0937226 0 1.46945 0.0890833 0 1.4475 0.0847026 0 1.4267 0.0805652 0 + 1.40695 0.0766554 0 1.3882 0.072958 0 1.37038 0.0694587 0 1.35343 0.0661441 0 + 1.33731 0.063002 0 1.32197 0.0600213 0 1.30736 0.0571918 0 1.29343 0.0545043 0 + 1.28016 0.0519506 0 1.26751 0.0495231 0 1.25544 0.0472149 0 1.24392 0.0450196 0 + 1.23294 0.0429315 0 1.22244 0.0409452 0 1.21243 0.0390559 0 1.20286 0.037259 0 + 1.19371 0.0355503 0 1.18497 0.033926 0 1.17661 0.0323823 0 1.16861 0.030916 0 + 1.16095 0.0295237 0 1.15362 0.0282023 0 1.14659 0.0269487 0 1.13984 0.0257598 0 + 1.13337 0.0246324 0 1.12715 0.0235633 0 1.12117 0.02255 0 1.11542 0.0215909 0 + 1.10991 0.020687 0 1.10464 0.0198369 0 1.09965 0.01901 0 1.09499 0.0180216 0 + 1.66803 0.215812 0 1.62992 0.208921 0 1.59688 0.200855 0 1.56515 0.192243 0 + 1.53517 0.183451 0 1.50704 0.174701 0 1.48068 0.166132 0 1.45599 0.157827 0 + 1.43285 0.149836 0 1.41114 0.142189 0 1.39075 0.134904 0 1.3716 0.127989 0 + 1.35359 0.121445 0 1.33664 0.115265 0 1.32067 0.109439 0 1.3056 0.10395 0 + 1.29136 0.0987777 0 1.27791 0.0939034 0 1.26517 0.0893063 0 1.25309 0.084967 0 + 1.24164 0.0808672 0 1.23077 0.0769898 0 1.22043 0.0733196 0 1.21061 0.0698423 0 + 1.20125 0.0665452 0 1.19234 0.063417 0 1.18385 0.0604472 0 1.17575 0.0576265 0 + 1.16803 0.0549463 0 1.16066 0.052399 0 1.15361 0.0499775 0 1.14688 0.0476755 0 + 1.14045 0.045487 0 1.1343 0.0434068 0 1.12841 0.0414299 0 1.12277 0.0395519 0 + 1.11736 0.0377686 0 1.11218 0.0360761 0 1.1072 0.0344708 0 1.10242 0.0329493 0 + 1.09782 0.0315078 0 1.09338 0.0301429 0 1.08911 0.0288505 0 1.08498 0.0276261 0 + 1.08098 0.0264646 0 1.07713 0.0253599 0 1.07341 0.0243033 0 1.06986 0.0232772 0 + 1.06652 0.0222297 0 1.06343 0.0209955 0 1.29205 0.235012 0 1.27273 0.228714 0 + 1.25699 0.220087 0 1.2419 0.210465 0 1.22775 0.200529 0 1.21461 0.190647 0 + 1.20243 0.181013 0 1.19115 0.171719 0 1.18071 0.162814 0 1.17103 0.15432 0 + 1.16207 0.146249 0 1.15377 0.138606 0 1.14607 0.131392 0 1.13893 0.124597 0 + 1.13227 0.118207 0 1.12607 0.112201 0 1.12027 0.106554 0 1.11483 0.101244 0 + 1.10972 0.0962445 0 1.10491 0.0915339 0 1.10038 0.0870903 0 1.09609 0.0828942 0 + 1.09203 0.0789274 0 1.08819 0.0751739 0 1.08454 0.071619 0 1.08106 0.0682495 0 + 1.07775 0.0650537 0 1.0746 0.0620209 0 1.07159 0.0591414 0 1.06871 0.0564067 0 + 1.06595 0.0538088 0 1.06331 0.0513407 0 1.06078 0.0489959 0 1.05834 0.0467687 0 + 1.056 0.0446537 0 1.05374 0.0426462 0 1.05156 0.0407418 0 1.04945 0.0389365 0 + 1.04741 0.0372266 0 1.04542 0.0356085 0 1.04349 0.0340786 0 1.0416 0.0326331 0 + 1.03974 0.0312674 0 1.03791 0.0299759 0 1.03611 0.028751 0 1.03433 0.0275812 0 + 1.03259 0.0264482 0 1.03091 0.0253174 0 1.02934 0.0241185 0 1.02793 0.0227041 0 + 0.898638 0.23959 0 0.900569 0.23379 0 0.903712 0.225087 0 0.906678 0.215163 0 + 0.909567 0.204838 0 0.912433 0.194561 0 0.91529 0.184556 0 0.918145 0.174914 0 + 0.921014 0.165681 0 0.923907 0.156879 0 0.926833 0.148518 0 0.929791 0.140611 0 + 0.932768 0.133163 0 0.935743 0.126165 0 0.938693 0.119601 0 0.941601 0.113445 0 + 0.944451 0.107672 0 0.947232 0.102252 0 0.949935 0.0971599 0 0.952554 0.0923694 0 + 0.955086 0.0878573 0 0.957528 0.0836023 0 0.959877 0.0795851 0 0.962132 0.0757885 0 + 0.964294 0.0721967 0 0.966363 0.0687957 0 0.968339 0.0655732 0 0.970223 0.0625177 0 + 0.972017 0.0596192 0 0.973722 0.0568686 0 0.97534 0.0542578 0 0.976871 0.0517793 0 + 0.978319 0.0494267 0 0.979684 0.0471939 0 0.980968 0.0450758 0 0.982171 0.0430675 0 + 0.983295 0.0411649 0 0.98434 0.0393641 0 0.985305 0.0376617 0 0.986189 0.0360545 0 + 0.986992 0.0345391 0 0.987711 0.0331119 0 0.988344 0.0317685 0 0.988887 0.0305025 0 + 0.98934 0.0293046 0 0.989703 0.028159 0 0.989985 0.0270385 0 0.990208 0.0258932 0 + 0.990419 0.0246316 0 0.990696 0.0230974 0 0.512534 0.229051 0 0.536695 0.22345 0 + 0.558734 0.215282 0 0.579616 0.20589 0 0.599349 0.196014 0 0.618022 0.186153 0 + 0.635698 0.176537 0 0.652467 0.167233 0 0.668427 0.1583 0 0.683662 0.149758 0 + 0.698249 0.141628 0 0.712241 0.133941 0 0.725661 0.126715 0 0.738522 0.119945 0 + 0.750834 0.113611 0 0.76261 0.107688 0 0.773866 0.102144 0 0.784621 0.096951 0 + 0.794895 0.0920798 0 0.804706 0.0875046 0 0.814075 0.0832017 0 0.823019 0.0791494 0 + 0.831557 0.0753286 0 0.839705 0.0717218 0 0.847481 0.0683135 0 0.854898 0.0650899 0 + 0.861973 0.0620384 0 0.868719 0.0591481 0 0.87515 0.056409 0 0.881279 0.0538122 0 + 0.887117 0.0513496 0 0.892676 0.0490143 0 0.897968 0.0468 0 0.903003 0.044701 0 + 0.907789 0.0427124 0 0.912337 0.0408299 0 0.916654 0.0390497 0 0.920748 0.0373687 0 + 0.924625 0.0357839 0 0.928289 0.0342928 0 0.931746 0.032893 0 0.934998 0.0315814 0 + 0.938046 0.0303544 0 0.940891 0.0292059 0 0.943533 0.0281261 0 0.945971 0.0270966 0 + 0.94821 0.0260839 0 0.950266 0.0250242 0 0.952183 0.0237982 0 0.954074 0.0221962 0 + 0.157467 0.203753 0 0.202558 0.198358 0 0.24174 0.191397 0 0.278942 0.183308 0 + 0.314134 0.174656 0 0.347388 0.165971 0 0.378779 0.157465 0 0.40846 0.149145 0 + 0.436586 0.141118 0 0.463287 0.13339 0 0.488705 0.125992 0 0.512936 0.118998 0 + 0.536032 0.112444 0 0.558031 0.106327 0 0.578977 0.100624 0 0.598915 0.0953044 0 + 0.617896 0.0903382 0 0.635968 0.0856952 0 0.653179 0.0813479 0 0.669574 0.0772713 0 + 0.685195 0.0734431 0 0.700082 0.069843 0 0.714272 0.0664531 0 0.727798 0.0632574 0 + 0.740694 0.0602413 0 0.752988 0.0573923 0 0.76471 0.0546987 0 0.775886 0.0521505 0 + 0.78654 0.0497385 0 0.796696 0.0474547 0 0.806377 0.0452918 0 0.815603 0.0432436 0 + 0.824394 0.0413043 0 0.832769 0.0394692 0 0.840745 0.0377342 0 0.848338 0.0360955 0 + 0.855563 0.0345504 0 0.862433 0.0330964 0 0.868963 0.0317317 0 0.875161 0.0304547 0 + 0.881038 0.0292643 0 0.8866 0.0281588 0 0.891853 0.0271359 0 0.8968 0.0261911 0 + 0.90144 0.0253155 0 0.905773 0.0244906 0 0.909797 0.0236792 0 0.913521 0.0228046 0 + 0.916988 0.0217108 0 0.920347 0.020083 0 -0.146012 0.16522 0 -0.0844795 0.160488 0 + -0.030966 0.155111 0 0.0202635 0.148848 0 0.0688346 0.142105 0 0.114718 0.135212 0 + 0.158093 0.12841 0 0.199126 0.121629 0 0.23795 0.115075 0 0.274702 0.108671 0 + 0.309596 0.102463 0 0.342765 0.0966072 0 0.374273 0.0911525 0 0.404186 0.0860889 0 + 0.432583 0.0813877 0 0.459549 0.0770173 0 0.485166 0.0729472 0 0.509513 0.0691503 0 + 0.532666 0.0656019 0 0.554692 0.0622804 0 0.575655 0.0591666 0 0.595613 0.0562432 0 + 0.614621 0.0534951 0 0.632728 0.0509086 0 0.649981 0.0484715 0 0.666422 0.0461732 0 + 0.682093 0.044004 0 0.697029 0.0419553 0 0.711268 0.0400196 0 0.724841 0.0381901 0 + 0.73778 0.0364609 0 0.750113 0.0348269 0 0.761869 0.0332836 0 0.773073 0.0318273 0 + 0.783749 0.0304549 0 0.793919 0.0291639 0 0.803606 0.0279526 0 0.812828 0.0268198 0 + 0.821603 0.0257648 0 0.829947 0.0247876 0 0.837874 0.0238886 0 0.845395 0.023068 0 + 0.852518 0.0223258 0 0.859248 0.0216599 0 0.865586 0.021064 0 0.871529 0.0205218 0 + 0.877071 0.0199947 0 0.882215 0.019394 0 0.887004 0.0185171 0 0.891622 0.0168949 0 + -0.379289 0.116155 0 -0.307247 0.112669 0 -0.243426 0.109061 0 -0.182115 0.104866 0 + -0.123498 0.100336 0 -0.0676083 0.0955624 0 -0.0143541 0.0907566 0 0.0361716 0.0860354 0 + 0.0838004 0.0815063 0 0.128729 0.0768951 0 0.171271 0.0722901 0 0.21159 0.0679891 0 + 0.249764 0.0640255 0 0.285904 0.0603733 0 0.320137 0.0569993 0 0.352586 0.0538738 0 + 0.383368 0.0509714 0 0.41259 0.0482707 0 0.440349 0.0457529 0 0.466732 0.0434017 0 + 0.491822 0.0412029 0 0.515693 0.0391437 0 0.538412 0.0372128 0 0.560044 0.0354003 0 + 0.580644 0.0336971 0 0.600268 0.0320953 0 0.618965 0.0305878 0 0.636782 0.0291684 0 + 0.653762 0.0278315 0 0.669947 0.0265723 0 0.685373 0.0253865 0 0.700078 0.0242708 0 + 0.714094 0.023222 0 0.727454 0.022238 0 0.740187 0.021317 0 0.752321 0.020458 0 + 0.763882 0.0196605 0 0.774893 0.0189247 0 0.785378 0.0182517 0 0.795356 0.0176431 0 + 0.804845 0.0171011 0 0.813858 0.0166283 0 0.822408 0.0162275 0 0.830501 0.0159 0 + 0.838138 0.0156435 0 0.845316 0.0154455 0 0.852028 0.0152681 0 0.858271 0.0150103 0 + 0.864091 0.0144143 0 0.869695 0.0128204 0 -0.527224 0.0599785 0 -0.450561 0.0581433 0 + -0.380368 0.0563753 0 -0.312577 0.0542713 0 -0.247457 0.0519407 0 -0.185189 0.0494323 0 + -0.125891 0.0468447 0 -0.069498 0.0444127 0 -0.0158247 0.0420874 0 0.0350213 0.0396944 0 + 0.0829337 0.0371271 0 0.128088 0.0347731 0 0.170674 0.0326341 0 0.21089 0.0306796 0 + 0.248919 0.028884 0 0.28492 0.0272284 0 0.319036 0.0256979 0 0.351394 0.0242803 0 + 0.382108 0.0229653 0 0.411281 0.021744 0 0.439007 0.0206083 0 0.465369 0.0195513 0 + 0.490448 0.0185667 0 0.514314 0.0176488 0 0.537033 0.0167926 0 0.558667 0.0159935 0 + 0.579273 0.0152476 0 0.598902 0.0145515 0 0.617605 0.0139019 0 0.635428 0.0132965 0 + 0.652413 0.012733 0 0.668601 0.0122099 0 0.684031 0.0117261 0 0.698737 0.0112809 0 + 0.712754 0.0108742 0 0.726113 0.0105066 0 0.738843 0.0101792 0 0.750972 0.00989376 0 + 0.762524 0.00965309 0 0.773522 0.00946066 0 0.783987 0.00932087 0 0.793935 0.00923893 0 + 0.803381 0.00922062 0 0.812333 0.00927137 0 0.820793 0.0093936 0 0.82876 0.00957978 0 + 0.836223 0.00979383 0 0.843182 0.00992246 0 0.849683 0.00964647 0 0.855943 0.00809671 0 + -0.578509 0.000117823 0 -0.501145 0.000200615 0 -0.428674 0.000186778 0 -0.358532 0.000113469 0 + -0.291035 4.39197e-06 0 -0.226434 -0.000126082 0 -0.164892 -0.000269577 0 -0.106346 -0.000423987 0 + -0.0506507 -0.000570788 0 0.00234161 -0.000718087 0 0.0524109 -0.000845676 0 0.0993876 -0.000959361 0 + 0.143585 -0.0010597 0 0.185268 -0.00114629 0 0.22465 -0.00121877 0 0.26191 -0.00127696 0 + 0.297199 -0.00132089 0 0.330653 -0.00135077 0 0.362393 -0.00136697 0 0.392528 -0.00137 0 + 0.421156 -0.0013605 0 0.448367 -0.00133918 0 0.474244 -0.00130678 0 0.498861 -0.00126408 0 + 0.522288 -0.0012118 0 0.544589 -0.00115062 0 0.565825 -0.00108111 0 0.586051 -0.00100371 0 + 0.605317 -0.000918679 0 0.623674 -0.000826078 0 0.641165 -0.000725717 0 0.657834 -0.000617116 0 + 0.67372 -0.00049946 0 0.688861 -0.000371535 0 0.703292 -0.000231674 0 0.717046 -7.76714e-05 0 + 0.730153 9.3301e-05 0 0.742643 0.000284806 0 0.754542 0.000501265 0 0.765875 0.000748109 0 + 0.776662 0.00103192 0 0.786922 0.00136056 0 0.796671 0.00174306 0 0.80592 0.00218891 0 + 0.814672 0.00270558 0 0.822927 0.00329084 0 0.830678 0.00391128 0 0.837923 0.0044418 0 + 0.844705 0.00450098 0 0.851238 0.00300732 0 -0.527142 -0.0597614 0 -0.450356 -0.0577738 0 + -0.380071 -0.0560436 0 -0.312165 -0.0540947 0 -0.246913 -0.0519866 0 -0.184507 -0.04974 0 + -0.125074 -0.0474361 0 -0.0685545 -0.0453098 0 -0.0147656 -0.0432724 0 0.0361695 -0.0411585 0 + 0.0841449 -0.038841 0 0.129349 -0.0367089 0 0.171971 -0.0347648 0 0.212208 -0.0329775 0 + 0.250242 -0.0313211 0 0.286235 -0.0297763 0 0.320329 -0.0283284 0 0.352653 -0.0269656 0 + 0.383321 -0.0256786 0 0.412437 -0.0244592 0 0.440096 -0.023301 0 0.466385 -0.0221982 0 + 0.491381 -0.0211462 0 0.515159 -0.0201407 0 0.537786 -0.0191782 0 0.559323 -0.0182555 0 + 0.579829 -0.0173698 0 0.599358 -0.0165184 0 0.61796 -0.0156988 0 0.635681 -0.0149085 0 + 0.652567 -0.014145 0 0.668658 -0.0134058 0 0.683994 -0.012688 0 0.69861 -0.0119887 0 + 0.712541 -0.0113043 0 0.72582 -0.0106311 0 0.738476 -0.00996446 0 0.750539 -0.00929918 0 + 0.762033 -0.00862919 0 0.772983 -0.00794722 0 0.78341 -0.00724459 0 0.793335 -0.00651099 0 + 0.802772 -0.00573435 0 0.811733 -0.00490131 0 0.820225 -0.00399966 0 0.828248 -0.00302637 0 + 0.835798 -0.00201203 0 0.842874 -0.00109168 0 0.849513 -0.000702358 0 0.855894 -0.00212104 0 + -0.37913 -0.115988 0 -0.306858 -0.112389 0 -0.242867 -0.108849 0 -0.181345 -0.104832 0 + -0.12249 -0.100535 0 -0.0663529 -0.0960256 0 -0.0128519 -0.0914979 0 0.0378937 -0.0870602 0 + 0.0857051 -0.0828023 0 0.130787 -0.0784425 0 0.173452 -0.074069 0 0.213863 -0.0699729 0 + 0.252099 -0.0661868 0 0.288273 -0.0626847 0 0.322513 -0.0594333 0 0.354943 -0.0564027 0 + 0.385681 -0.053568 0 0.414835 -0.0509082 0 0.442504 -0.0484055 0 0.468779 -0.0460448 0 + 0.493742 -0.0438131 0 0.51747 -0.0416992 0 0.540034 -0.0396933 0 0.561497 -0.037787 0 + 0.581922 -0.0359727 0 0.601363 -0.0342438 0 0.619873 -0.0325942 0 0.6375 -0.0310185 0 + 0.654289 -0.0295116 0 0.670283 -0.0280687 0 0.685523 -0.0266852 0 0.700045 -0.0253565 0 + 0.713886 -0.024078 0 0.727077 -0.022845 0 0.739651 -0.0216524 0 0.751637 -0.0204949 0 + 0.763063 -0.0193664 0 0.773955 -0.0182603 0 0.784337 -0.0171687 0 0.794231 -0.016083 0 + 0.803658 -0.0149926 0 0.812636 -0.0138851 0 0.821181 -0.0127459 0 0.829306 -0.0115583 0 + 0.837018 -0.0103061 0 0.844322 -0.00898155 0 0.851216 -0.00761191 0 0.857697 -0.00633792 0 + 0.863786 -0.00563756 0 0.869611 -0.00695095 0 -0.145801 -0.165119 0 -0.0839611 -0.160344 0 + -0.0302135 -0.155085 0 0.021304 -0.149027 0 0.0701866 -0.14253 0 0.116387 -0.135901 0 + 0.160065 -0.129366 0 0.201374 -0.122836 0 0.240436 -0.116525 0 0.277385 -0.110344 0 + 0.312433 -0.104338 0 0.345716 -0.0986588 0 0.377297 -0.0933546 0 0.407244 -0.0884146 0 + 0.435639 -0.0838106 0 0.462565 -0.0795109 0 0.48811 -0.0754856 0 0.512353 -0.0717083 0 + 0.535372 -0.0681556 0 0.557238 -0.064807 0 0.578017 -0.0616447 0 0.597771 -0.0586532 0 + 0.616556 -0.0558186 0 0.634427 -0.053129 0 0.651431 -0.0505737 0 0.667615 -0.0481432 0 + 0.683023 -0.0458287 0 0.697694 -0.0436225 0 0.711667 -0.0415174 0 0.724977 -0.0395066 0 + 0.737658 -0.0375836 0 0.749741 -0.0357422 0 0.761256 -0.0339764 0 0.772231 -0.0322798 0 + 0.782693 -0.0306462 0 0.792666 -0.0290688 0 0.802175 -0.0275403 0 0.811241 -0.0260528 0 + 0.819886 -0.0245974 0 0.828129 -0.023164 0 0.835988 -0.0217406 0 0.84348 -0.0203133 0 + 0.85062 -0.0188657 0 0.857421 -0.0173787 0 0.863893 -0.0158332 0 0.870043 -0.0142175 0 + 0.875873 -0.012555 0 0.88138 -0.0109858 0 0.886567 -0.0100101 0 0.891503 -0.0111874 0 + 0.157694 -0.203724 0 0.203126 -0.198384 0 0.242578 -0.191604 0 0.280114 -0.18375 0 + 0.315666 -0.175355 0 0.349277 -0.166925 0 0.381001 -0.158663 0 0.410979 -0.150567 0 + 0.439359 -0.142748 0 0.466266 -0.135207 0 0.49184 -0.127973 0 0.516179 -0.12112 0 + 0.539335 -0.114682 0 0.561349 -0.108656 0 0.582265 -0.103018 0 0.602132 -0.097739 0 + 0.621002 -0.0927892 0 0.638927 -0.0881396 0 0.655958 -0.0837638 0 0.672141 -0.0796385 0 + 0.687524 -0.0757428 0 0.702149 -0.0720581 0 0.716057 -0.0685682 0 0.729286 -0.0652585 0 + 0.741871 -0.0621161 0 0.753847 -0.0591293 0 0.765246 -0.0562876 0 0.776097 -0.0535815 0 + 0.786429 -0.0510021 0 0.796267 -0.0485411 0 0.805639 -0.0461908 0 0.814567 -0.0439436 0 + 0.823073 -0.0417923 0 0.83118 -0.0397296 0 0.838908 -0.037748 0 0.846276 -0.0358398 0 + 0.853302 -0.0339969 0 0.860003 -0.0322104 0 0.866397 -0.0304706 0 0.872499 -0.0287665 0 + 0.878323 -0.0270852 0 0.883885 -0.0254119 0 0.889198 -0.0237291 0 0.894274 -0.0220167 0 + 0.899125 -0.0202537 0 0.903762 -0.0184261 0 0.90819 -0.016553 0 0.912409 -0.0147692 0 + 0.916409 -0.0135765 0 0.920191 -0.0145952 0 0.512738 -0.229089 0 0.537225 -0.223665 0 + 0.559556 -0.21575 0 0.580796 -0.206625 0 0.600905 -0.197009 0 0.619939 -0.187386 0 + 0.63794 -0.177983 0 0.654989 -0.168868 0 0.671177 -0.160102 0 0.686587 -0.151706 0 + 0.701296 -0.1437 0 0.715357 -0.136114 0 0.728796 -0.128965 0 0.741628 -0.122249 0 + 0.753864 -0.115946 0 0.76552 -0.11003 0 0.776616 -0.104471 0 0.787172 -0.0992425 0 + 0.797211 -0.0943167 0 0.806758 -0.0896694 0 0.815834 -0.0852788 0 0.824462 -0.0811249 0 + 0.832666 -0.0771903 0 0.840465 -0.073459 0 0.847881 -0.069917 0 0.854934 -0.0665514 0 + 0.861641 -0.0633505 0 0.868022 -0.0603039 0 0.874093 -0.0574016 0 0.87987 -0.0546345 0 + 0.885369 -0.051994 0 0.890606 -0.0494717 0 0.895593 -0.0470596 0 0.900345 -0.0447497 0 + 0.904875 -0.0425338 0 0.909195 -0.0404039 0 0.913317 -0.038351 0 0.917252 -0.036366 0 + 0.921013 -0.0344386 0 0.92461 -0.0325574 0 0.928054 -0.0307092 0 0.931356 -0.0288792 0 + 0.934528 -0.0270494 0 0.937581 -0.0251999 0 0.940528 -0.0233095 0 0.943383 -0.0213631 0 + 0.946155 -0.0193768 0 0.94885 -0.0174763 0 0.951445 -0.0161457 0 0.953873 -0.0169941 0 + 0.89879 -0.239685 0 0.900998 -0.234204 0 0.904437 -0.225827 0 0.907759 -0.216197 0 + 0.911004 -0.206121 0 0.914193 -0.196052 0 0.917321 -0.186221 0 0.920391 -0.176725 0 + 0.923416 -0.167616 0 0.92641 -0.158916 0 0.929383 -0.150636 0 0.932338 -0.14279 0 + 0.935263 -0.13538 0 0.938138 -0.1284 0 0.940945 -0.12183 0 0.943667 -0.115648 0 + 0.946292 -0.109829 0 0.948811 -0.104346 0 0.951221 -0.0991731 0 0.953519 -0.0942884 0 + 0.955706 -0.0896699 0 0.957783 -0.0852981 0 0.959752 -0.0811556 0 0.961619 -0.0772264 0 + 0.963386 -0.0734963 0 0.965059 -0.0699521 0 0.966642 -0.0665821 0 0.96814 -0.0633753 0 + 0.969558 -0.0603215 0 0.970902 -0.0574114 0 0.972176 -0.0546358 0 0.973385 -0.0519863 0 + 0.974535 -0.0494545 0 0.975629 -0.047032 0 0.976673 -0.0447107 0 0.977672 -0.0424821 0 + 0.978631 -0.0403374 0 0.979555 -0.0382671 0 0.980449 -0.0362612 0 0.981319 -0.0343083 0 + 0.982172 -0.0323956 0 0.983014 -0.0305086 0 0.983855 -0.0286302 0 0.984705 -0.0267414 0 + 0.985575 -0.0248224 0 0.986482 -0.0228589 0 0.987439 -0.020865 0 0.988454 -0.0189555 0 + 0.9895 -0.0175793 0 0.990443 -0.0182581 0 1.29212 -0.235156 0 1.273 -0.229327 0 + 1.25755 -0.221096 0 1.24279 -0.211773 0 1.22893 -0.202057 0 1.21602 -0.192337 0 + 1.204 -0.182826 0 1.19282 -0.17363 0 1.18241 -0.164803 0 1.17272 -0.156369 0 + 1.16369 -0.14834 0 1.15528 -0.140721 0 1.14743 -0.133509 0 1.14009 -0.126697 0 + 1.1332 -0.12027 0 1.12673 -0.114207 0 1.12062 -0.108487 0 1.11485 -0.103088 0 + 1.10939 -0.097987 0 1.1042 -0.0931642 0 1.09927 -0.0885999 0 1.09458 -0.0842765 0 + 1.09011 -0.0801776 0 1.08585 -0.0762885 0 1.08179 -0.0725956 0 1.07791 -0.0690867 0 + 1.0742 -0.0657503 0 1.07066 -0.0625759 0 1.06729 -0.0595538 0 1.06406 -0.0566748 0 + 1.06099 -0.0539301 0 1.05805 -0.0513113 0 1.05525 -0.0488103 0 1.05259 -0.0464191 0 + 1.05005 -0.0441296 0 1.04764 -0.0419337 0 1.04535 -0.0398228 0 1.04319 -0.0377879 0 + 1.04114 -0.0358195 0 1.03922 -0.0339067 0 1.03741 -0.0320377 0 1.03574 -0.030199 0 + 1.03419 -0.0283753 0 1.03278 -0.0265493 0 1.03152 -0.0247037 0 1.03043 -0.0228265 0 + 1.02951 -0.0209313 0 1.02879 -0.0191207 0 1.02822 -0.0177943 0 1.02761 -0.0183159 0 + 1.668 -0.216002 0 1.62999 -0.209737 0 1.59722 -0.20211 0 1.56574 -0.193767 0 + 1.53593 -0.185132 0 1.50787 -0.176478 0 1.48149 -0.167973 0 1.45672 -0.159717 0 + 1.43344 -0.151763 0 1.41155 -0.144141 0 1.39095 -0.136867 0 1.37155 -0.129945 0 + 1.35326 -0.123375 0 1.336 -0.117151 0 1.31969 -0.111261 0 1.30426 -0.105692 0 + 1.28964 -0.100425 0 1.27578 -0.0954446 0 1.26262 -0.0907318 0 1.25012 -0.0862698 0 + 1.23824 -0.0820425 0 1.22693 -0.078035 0 1.21616 -0.0742334 0 1.20592 -0.0706247 0 + 1.19615 -0.0671972 0 1.18685 -0.0639399 0 1.17799 -0.0608428 0 1.16954 -0.0578963 0 + 1.16149 -0.0550917 0 1.15382 -0.0524206 0 1.14651 -0.049875 0 1.13955 -0.0474472 0 + 1.13292 -0.0451298 0 1.1266 -0.0429154 0 1.12059 -0.0407967 0 1.11488 -0.0387661 0 + 1.10945 -0.0368159 0 1.10429 -0.0349381 0 1.09941 -0.0331238 0 1.09478 -0.0313635 0 + 1.09042 -0.0296468 0 1.08631 -0.0279617 0 1.08246 -0.026295 0 1.07887 -0.0246324 0 + 1.07555 -0.0229596 0 1.07252 -0.0212679 0 1.06978 -0.0195708 0 1.06736 -0.017958 0 + 1.06519 -0.016769 0 1.06306 -0.0171546 0 2.00262 -0.183522 0 1.9491 -0.177159 0 + 1.9017 -0.170549 0 1.85611 -0.163676 0 1.8127 -0.156651 0 1.77157 -0.149601 0 + 1.73268 -0.142637 0 1.69593 -0.135834 0 1.66121 -0.129244 0 1.6284 -0.122899 0 + 1.59738 -0.116817 0 1.56805 -0.111008 0 1.54029 -0.105474 0 1.514 -0.100215 0 + 1.4891 -0.0952239 0 1.46548 -0.090491 0 1.44307 -0.0860053 0 1.4218 -0.0817544 0 + 1.40158 -0.0777255 0 1.38237 -0.0739059 0 1.3641 -0.0702833 0 1.34673 -0.0668461 0 + 1.33019 -0.0635834 0 1.31445 -0.060485 0 1.29947 -0.0575412 0 1.2852 -0.0547432 0 + 1.27162 -0.0520826 0 1.25869 -0.0495517 0 1.24637 -0.047143 0 1.23464 -0.0448494 0 + 1.22347 -0.0426643 0 1.21284 -0.0405811 0 1.20272 -0.0385935 0 1.19309 -0.0366952 0 + 1.18393 -0.03488 0 1.17522 -0.0331414 0 1.16694 -0.031473 0 1.15908 -0.0298678 0 + 1.15162 -0.0283186 0 1.14455 -0.0268173 0 1.13787 -0.0253554 0 1.13157 -0.023923 0 + 1.12564 -0.0225095 0 1.12008 -0.0211038 0 1.11491 -0.019695 0 1.11012 -0.0182777 0 + 1.10574 -0.0168651 0 1.10175 -0.0155324 0 1.09811 -0.0145517 0 1.09456 -0.0148259 0 + 2.27468 -0.13978 0 2.20967 -0.134042 0 2.1511 -0.128885 0 2.09479 -0.123819 0 + 2.04096 -0.11872 0 1.98968 -0.113599 0 1.94091 -0.10851 0 1.89459 -0.103504 0 + 1.85063 -0.0986229 0 1.80891 -0.0938956 0 1.76932 -0.0893414 0 1.73177 -0.0849724 0 + 1.69613 -0.0807949 0 1.66231 -0.0768107 0 1.6302 -0.0730179 0 1.59972 -0.0694122 0 + 1.57075 -0.0659871 0 1.54323 -0.0627353 0 1.51708 -0.0596485 0 1.49221 -0.0567184 0 + 1.46856 -0.0539367 0 1.44606 -0.0512954 0 1.42466 -0.0487866 0 1.40431 -0.0464033 0 + 1.38493 -0.0441383 0 1.3665 -0.0419852 0 1.34895 -0.0399379 0 1.33225 -0.0379904 0 + 1.31636 -0.0361372 0 1.30124 -0.0343729 0 1.28684 -0.0326926 0 1.27315 -0.0310912 0 + 1.26012 -0.0295638 0 1.24773 -0.0281057 0 1.23594 -0.026712 0 1.22474 -0.025378 0 + 1.2141 -0.0240985 0 1.20399 -0.0228684 0 1.1944 -0.0216822 0 1.18532 -0.0205338 0 + 1.17672 -0.0194167 0 1.1686 -0.0183237 0 1.16095 -0.0172472 0 1.15378 -0.016179 0 + 1.14707 -0.015112 0 1.14083 -0.0140433 0 1.13507 -0.0129846 0 1.12978 -0.0119935 0 + 1.1249 -0.0112697 0 1.12013 -0.0114546 0 2.46679 -0.0874934 0 2.39461 -0.0833357 0 + 2.32876 -0.0800531 0 2.26549 -0.0769896 0 2.20481 -0.0739437 0 2.14673 -0.0708793 0 + 2.09122 -0.0678144 0 2.03827 -0.0647787 0 1.9878 -0.0617996 0 1.93974 -0.0588983 0 + 1.89401 -0.05609 0 1.85052 -0.053385 0 1.80916 -0.0507896 0 1.76985 -0.0483069 0 + 1.73248 -0.0459375 0 1.69695 -0.0436801 0 1.66318 -0.041532 0 1.63107 -0.0394894 0 + 1.60055 -0.0375481 0 1.57152 -0.0357036 0 1.54392 -0.0339511 0 1.51767 -0.0322862 0 + 1.4927 -0.0307041 0 1.46896 -0.0292007 0 1.44637 -0.0277718 0 1.42488 -0.0264133 0 + 1.40444 -0.0251215 0 1.385 -0.0238929 0 1.3665 -0.0227239 0 1.34891 -0.0216112 0 + 1.33217 -0.0205516 0 1.31625 -0.0195421 0 1.30112 -0.0185796 0 1.28672 -0.017661 0 + 1.27304 -0.0167833 0 1.26004 -0.0159435 0 1.24769 -0.0151385 0 1.23597 -0.0143649 0 + 1.22485 -0.0136193 0 1.21431 -0.012898 0 1.20433 -0.0121969 0 1.19491 -0.0115116 0 + 1.18603 -0.0108375 0 1.17769 -0.0101698 0 1.16988 -0.00950426 0 1.1626 -0.00883982 0 + 1.15585 -0.00818471 0 1.14962 -0.00757569 0 1.14382 -0.00713529 0 1.13815 -0.00724457 0 + 2.56645 -0.0297951 0 2.49127 -0.0282396 0 2.42207 -0.0271156 0 2.35555 -0.0260995 0 + 2.29156 -0.0250951 0 2.23009 -0.0240818 0 2.17116 -0.0230635 0 2.11477 -0.0220501 0 + 2.06089 -0.0210514 0 2.00948 -0.0200752 0 1.96048 -0.0191276 0 1.9138 -0.0182125 0 + 1.86937 -0.0173326 0 1.82709 -0.0164895 0 1.78688 -0.0156836 0 1.74863 -0.0149148 0 + 1.71226 -0.0141825 0 1.67767 -0.0134857 0 1.64479 -0.0128229 0 1.61352 -0.0121928 0 + 1.58378 -0.011594 0 1.55551 -0.0110248 0 1.52862 -0.0104839 0 1.50306 -0.00996986 0 + 1.47874 -0.00948119 0 1.45562 -0.00901662 0 1.43363 -0.00857487 0 1.41272 -0.00815473 0 + 1.39283 -0.00775501 0 1.37392 -0.00737461 0 1.35594 -0.00701242 0 1.33884 -0.00666738 0 + 1.32258 -0.00633845 0 1.30713 -0.0060246 0 1.29244 -0.0057248 0 1.27849 -0.00543801 0 + 1.26523 -0.00516315 0 1.25266 -0.0048991 0 1.24073 -0.00464469 0 1.22942 -0.00439865 0 + 1.21872 -0.00415961 0 1.20862 -0.00392609 0 1.19909 -0.00369652 0 1.19013 -0.00346931 0 + 1.18174 -0.00324313 0 1.17392 -0.00301771 0 1.16665 -0.00279603 0 1.15991 -0.00259079 0 + 1.15362 -0.00244346 0 1.14747 -0.00248025 0 2.56645 0.0297951 0 2.49127 0.0282396 0 + 2.42207 0.0271156 0 2.35555 0.0260995 0 2.29156 0.0250951 0 2.23009 0.0240818 0 + 2.17116 0.0230635 0 2.11477 0.0220501 0 2.06089 0.0210514 0 2.00948 0.0200752 0 + 1.96048 0.0191276 0 1.9138 0.0182125 0 1.86937 0.0173326 0 1.82709 0.0164895 0 + 1.78688 0.0156836 0 1.74863 0.0149148 0 1.71226 0.0141825 0 1.67767 0.0134857 0 + 1.64479 0.0128229 0 1.61352 0.0121928 0 1.58378 0.011594 0 1.55551 0.0110248 0 + 1.52862 0.0104839 0 1.50306 0.00996986 0 1.47874 0.00948119 0 1.45562 0.00901662 0 + 1.43363 0.00857487 0 1.41272 0.00815473 0 1.39283 0.00775501 0 1.37392 0.00737461 0 + 1.35594 0.00701242 0 1.33884 0.00666738 0 1.32258 0.00633845 0 1.30713 0.0060246 0 + 1.29244 0.0057248 0 1.27849 0.00543801 0 1.26523 0.00516315 0 1.25266 0.0048991 0 + 1.24073 0.00464469 0 1.22942 0.00439865 0 1.21872 0.00415961 0 1.20862 0.00392609 0 + 1.19909 0.00369652 0 1.19013 0.00346931 0 1.18174 0.00324313 0 1.17392 0.00301771 0 + 1.16665 0.00279603 0 1.15991 0.00259079 0 1.15362 0.00244346 0 1.14747 0.00248025 0 + 2.46679 0.0874934 0 2.39461 0.0833357 0 2.32876 0.0800531 0 2.26549 0.0769896 0 + 2.20481 0.0739437 0 2.14673 0.0708793 0 2.09122 0.0678144 0 2.03827 0.0647787 0 + 1.9878 0.0617996 0 1.93974 0.0588983 0 1.89401 0.05609 0 1.85052 0.053385 0 + 1.80916 0.0507896 0 1.76985 0.0483069 0 1.73248 0.0459375 0 1.69695 0.0436801 0 + 1.66318 0.041532 0 1.63107 0.0394894 0 1.60055 0.0375481 0 1.57152 0.0357036 0 + 1.54392 0.0339511 0 1.51767 0.0322862 0 1.4927 0.0307041 0 1.46896 0.0292007 0 + 1.44637 0.0277718 0 1.42488 0.0264133 0 1.40444 0.0251215 0 1.385 0.0238929 0 + 1.3665 0.0227239 0 1.34891 0.0216112 0 1.33217 0.0205516 0 1.31625 0.0195421 0 + 1.30112 0.0185796 0 1.28672 0.017661 0 1.27304 0.0167833 0 1.26004 0.0159435 0 + 1.24769 0.0151385 0 1.23597 0.0143649 0 1.22485 0.0136193 0 1.21431 0.012898 0 + 1.20433 0.0121969 0 1.19491 0.0115116 0 1.18603 0.0108375 0 1.17769 0.0101698 0 + 1.16988 0.00950426 0 1.1626 0.00883982 0 1.15585 0.00818471 0 1.14962 0.00757569 0 + 1.14382 0.00713529 0 1.13815 0.00724457 0 2.27468 0.13978 0 2.20967 0.134042 0 + 2.1511 0.128885 0 2.09479 0.123819 0 2.04096 0.11872 0 1.98968 0.113599 0 + 1.94091 0.10851 0 1.89459 0.103504 0 1.85063 0.0986229 0 1.80891 0.0938956 0 + 1.76932 0.0893414 0 1.73177 0.0849724 0 1.69613 0.0807949 0 1.66231 0.0768107 0 + 1.6302 0.0730179 0 1.59972 0.0694122 0 1.57075 0.0659871 0 1.54323 0.0627353 0 + 1.51708 0.0596485 0 1.49221 0.0567184 0 1.46856 0.0539367 0 1.44606 0.0512954 0 + 1.42466 0.0487866 0 1.40431 0.0464033 0 1.38493 0.0441383 0 1.3665 0.0419852 0 + 1.34895 0.0399379 0 1.33225 0.0379904 0 1.31636 0.0361372 0 1.30124 0.0343729 0 + 1.28684 0.0326926 0 1.27315 0.0310912 0 1.26012 0.0295638 0 1.24773 0.0281057 0 + 1.23594 0.026712 0 1.22474 0.025378 0 1.2141 0.0240985 0 1.20399 0.0228684 0 + 1.1944 0.0216822 0 1.18532 0.0205338 0 1.17672 0.0194167 0 1.1686 0.0183237 0 + 1.16095 0.0172472 0 1.15378 0.016179 0 1.14707 0.015112 0 1.14083 0.0140433 0 + 1.13507 0.0129846 0 1.12978 0.0119935 0 1.1249 0.0112697 0 1.12013 0.0114546 0 + 2.00262 0.183522 0 1.9491 0.177159 0 1.9017 0.170549 0 1.85611 0.163676 0 + 1.8127 0.156651 0 1.77157 0.149601 0 1.73268 0.142637 0 1.69593 0.135834 0 + 1.66121 0.129244 0 1.6284 0.122899 0 1.59738 0.116817 0 1.56805 0.111008 0 + 1.54029 0.105474 0 1.514 0.100215 0 1.4891 0.0952239 0 1.46548 0.090491 0 + 1.44307 0.0860053 0 1.4218 0.0817544 0 1.40158 0.0777255 0 1.38237 0.0739059 0 + 1.3641 0.0702833 0 1.34673 0.0668461 0 1.33019 0.0635834 0 1.31445 0.060485 0 + 1.29947 0.0575412 0 1.2852 0.0547432 0 1.27162 0.0520826 0 1.25869 0.0495517 0 + 1.24637 0.047143 0 1.23464 0.0448494 0 1.22347 0.0426643 0 1.21284 0.0405811 0 + 1.20272 0.0385935 0 1.19309 0.0366952 0 1.18393 0.03488 0 1.17522 0.0331414 0 + 1.16694 0.031473 0 1.15908 0.0298678 0 1.15162 0.0283186 0 1.14455 0.0268173 0 + 1.13787 0.0253554 0 1.13157 0.023923 0 1.12564 0.0225095 0 1.12008 0.0211038 0 + 1.11491 0.019695 0 1.11012 0.0182777 0 1.10574 0.0168651 0 1.10175 0.0155324 0 + 1.09811 0.0145517 0 1.09456 0.0148259 0 1.668 0.216002 0 1.62999 0.209737 0 + 1.59722 0.20211 0 1.56574 0.193767 0 1.53593 0.185132 0 1.50787 0.176478 0 + 1.48149 0.167973 0 1.45672 0.159717 0 1.43344 0.151763 0 1.41155 0.144141 0 + 1.39095 0.136867 0 1.37155 0.129945 0 1.35326 0.123375 0 1.336 0.117151 0 + 1.31969 0.111261 0 1.30426 0.105692 0 1.28964 0.100425 0 1.27578 0.0954446 0 + 1.26262 0.0907318 0 1.25012 0.0862698 0 1.23824 0.0820425 0 1.22693 0.078035 0 + 1.21616 0.0742334 0 1.20592 0.0706247 0 1.19615 0.0671972 0 1.18685 0.0639399 0 + 1.17799 0.0608428 0 1.16954 0.0578963 0 1.16149 0.0550917 0 1.15382 0.0524206 0 + 1.14651 0.049875 0 1.13955 0.0474472 0 1.13292 0.0451298 0 1.1266 0.0429154 0 + 1.12059 0.0407967 0 1.11488 0.0387661 0 1.10945 0.0368159 0 1.10429 0.0349381 0 + 1.09941 0.0331238 0 1.09478 0.0313635 0 1.09042 0.0296468 0 1.08631 0.0279617 0 + 1.08246 0.026295 0 1.07887 0.0246324 0 1.07555 0.0229596 0 1.07252 0.0212679 0 + 1.06978 0.0195708 0 1.06736 0.017958 0 1.06519 0.016769 0 1.06306 0.0171546 0 + 1.29212 0.235156 0 1.273 0.229327 0 1.25755 0.221096 0 1.24279 0.211773 0 + 1.22893 0.202057 0 1.21602 0.192337 0 1.204 0.182826 0 1.19282 0.17363 0 + 1.18241 0.164803 0 1.17272 0.156369 0 1.16369 0.14834 0 1.15528 0.140721 0 + 1.14743 0.133509 0 1.14009 0.126697 0 1.1332 0.12027 0 1.12673 0.114207 0 + 1.12062 0.108487 0 1.11485 0.103088 0 1.10939 0.097987 0 1.1042 0.0931642 0 + 1.09927 0.0885999 0 1.09458 0.0842765 0 1.09011 0.0801776 0 1.08585 0.0762885 0 + 1.08179 0.0725956 0 1.07791 0.0690867 0 1.0742 0.0657503 0 1.07066 0.0625759 0 + 1.06729 0.0595538 0 1.06406 0.0566748 0 1.06099 0.0539301 0 1.05805 0.0513113 0 + 1.05525 0.0488103 0 1.05259 0.0464191 0 1.05005 0.0441296 0 1.04764 0.0419337 0 + 1.04535 0.0398228 0 1.04319 0.0377879 0 1.04114 0.0358195 0 1.03922 0.0339067 0 + 1.03741 0.0320377 0 1.03574 0.030199 0 1.03419 0.0283753 0 1.03278 0.0265493 0 + 1.03152 0.0247037 0 1.03043 0.0228265 0 1.02951 0.0209313 0 1.02879 0.0191207 0 + 1.02822 0.0177943 0 1.02761 0.0183159 0 0.89879 0.239685 0 0.900998 0.234204 0 + 0.904437 0.225827 0 0.907759 0.216197 0 0.911004 0.206121 0 0.914193 0.196052 0 + 0.917321 0.186221 0 0.920391 0.176725 0 0.923416 0.167616 0 0.92641 0.158916 0 + 0.929383 0.150636 0 0.932338 0.14279 0 0.935263 0.13538 0 0.938138 0.1284 0 + 0.940945 0.12183 0 0.943667 0.115648 0 0.946292 0.109829 0 0.948811 0.104346 0 + 0.951221 0.0991731 0 0.953519 0.0942884 0 0.955706 0.0896699 0 0.957783 0.0852981 0 + 0.959752 0.0811556 0 0.961619 0.0772264 0 0.963386 0.0734963 0 0.965059 0.0699521 0 + 0.966642 0.0665821 0 0.96814 0.0633753 0 0.969558 0.0603215 0 0.970902 0.0574114 0 + 0.972176 0.0546358 0 0.973385 0.0519863 0 0.974535 0.0494545 0 0.975629 0.047032 0 + 0.976673 0.0447107 0 0.977672 0.0424821 0 0.978631 0.0403374 0 0.979555 0.0382671 0 + 0.980449 0.0362612 0 0.981319 0.0343083 0 0.982172 0.0323956 0 0.983014 0.0305086 0 + 0.983855 0.0286302 0 0.984705 0.0267414 0 0.985575 0.0248224 0 0.986482 0.0228589 0 + 0.987439 0.020865 0 0.988454 0.0189555 0 0.9895 0.0175793 0 0.990443 0.0182581 0 + 0.512738 0.229089 0 0.537225 0.223665 0 0.559556 0.21575 0 0.580796 0.206625 0 + 0.600905 0.197009 0 0.619939 0.187386 0 0.63794 0.177983 0 0.654989 0.168868 0 + 0.671177 0.160102 0 0.686587 0.151706 0 0.701296 0.1437 0 0.715357 0.136114 0 + 0.728796 0.128965 0 0.741628 0.122249 0 0.753864 0.115946 0 0.76552 0.11003 0 + 0.776616 0.104471 0 0.787172 0.0992425 0 0.797211 0.0943167 0 0.806758 0.0896694 0 + 0.815834 0.0852788 0 0.824462 0.0811249 0 0.832666 0.0771903 0 0.840465 0.073459 0 + 0.847881 0.069917 0 0.854934 0.0665514 0 0.861641 0.0633505 0 0.868022 0.0603039 0 + 0.874093 0.0574016 0 0.87987 0.0546345 0 0.885369 0.051994 0 0.890606 0.0494717 0 + 0.895593 0.0470596 0 0.900345 0.0447497 0 0.904875 0.0425338 0 0.909195 0.0404039 0 + 0.913317 0.038351 0 0.917252 0.036366 0 0.921013 0.0344386 0 0.92461 0.0325574 0 + 0.928054 0.0307092 0 0.931356 0.0288792 0 0.934528 0.0270494 0 0.937581 0.0251999 0 + 0.940528 0.0233095 0 0.943383 0.0213631 0 0.946155 0.0193768 0 0.94885 0.0174763 0 + 0.951445 0.0161457 0 0.953873 0.0169941 0 0.157694 0.203724 0 0.203126 0.198384 0 + 0.242578 0.191604 0 0.280114 0.18375 0 0.315666 0.175355 0 0.349277 0.166925 0 + 0.381001 0.158663 0 0.410979 0.150567 0 0.439359 0.142748 0 0.466266 0.135207 0 + 0.49184 0.127973 0 0.516179 0.12112 0 0.539335 0.114682 0 0.561349 0.108656 0 + 0.582265 0.103018 0 0.602132 0.097739 0 0.621002 0.0927892 0 0.638927 0.0881396 0 + 0.655958 0.0837638 0 0.672141 0.0796385 0 0.687524 0.0757428 0 0.702149 0.0720581 0 + 0.716057 0.0685682 0 0.729286 0.0652585 0 0.741871 0.0621161 0 0.753847 0.0591293 0 + 0.765246 0.0562876 0 0.776097 0.0535815 0 0.786429 0.0510021 0 0.796267 0.0485411 0 + 0.805639 0.0461908 0 0.814567 0.0439436 0 0.823073 0.0417923 0 0.83118 0.0397296 0 + 0.838908 0.037748 0 0.846276 0.0358398 0 0.853302 0.0339969 0 0.860003 0.0322104 0 + 0.866397 0.0304706 0 0.872499 0.0287665 0 0.878323 0.0270852 0 0.883885 0.0254119 0 + 0.889198 0.0237291 0 0.894274 0.0220167 0 0.899125 0.0202537 0 0.903762 0.0184261 0 + 0.90819 0.016553 0 0.912409 0.0147692 0 0.916409 0.0135765 0 0.920191 0.0145952 0 + -0.145801 0.165119 0 -0.0839611 0.160344 0 -0.0302135 0.155085 0 0.021304 0.149027 0 + 0.0701866 0.14253 0 0.116387 0.135901 0 0.160065 0.129366 0 0.201374 0.122836 0 + 0.240436 0.116525 0 0.277385 0.110344 0 0.312433 0.104338 0 0.345716 0.0986588 0 + 0.377297 0.0933546 0 0.407244 0.0884146 0 0.435639 0.0838106 0 0.462565 0.0795109 0 + 0.48811 0.0754856 0 0.512353 0.0717083 0 0.535372 0.0681556 0 0.557238 0.064807 0 + 0.578017 0.0616447 0 0.597771 0.0586532 0 0.616556 0.0558186 0 0.634427 0.053129 0 + 0.651431 0.0505737 0 0.667615 0.0481432 0 0.683023 0.0458287 0 0.697694 0.0436225 0 + 0.711667 0.0415174 0 0.724977 0.0395066 0 0.737658 0.0375836 0 0.749741 0.0357422 0 + 0.761256 0.0339764 0 0.772231 0.0322798 0 0.782693 0.0306462 0 0.792666 0.0290688 0 + 0.802175 0.0275403 0 0.811241 0.0260528 0 0.819886 0.0245974 0 0.828129 0.023164 0 + 0.835988 0.0217406 0 0.84348 0.0203133 0 0.85062 0.0188657 0 0.857421 0.0173787 0 + 0.863893 0.0158332 0 0.870043 0.0142175 0 0.875873 0.012555 0 0.88138 0.0109858 0 + 0.886567 0.0100101 0 0.891503 0.0111874 0 -0.37913 0.115988 0 -0.306858 0.112389 0 + -0.242867 0.108849 0 -0.181345 0.104832 0 -0.12249 0.100535 0 -0.0663529 0.0960256 0 + -0.0128519 0.0914979 0 0.0378937 0.0870602 0 0.0857051 0.0828023 0 0.130787 0.0784425 0 + 0.173452 0.074069 0 0.213863 0.0699729 0 0.252099 0.0661868 0 0.288273 0.0626847 0 + 0.322513 0.0594333 0 0.354943 0.0564027 0 0.385681 0.053568 0 0.414835 0.0509082 0 + 0.442504 0.0484055 0 0.468779 0.0460448 0 0.493742 0.0438131 0 0.51747 0.0416992 0 + 0.540034 0.0396933 0 0.561497 0.037787 0 0.581922 0.0359727 0 0.601363 0.0342438 0 + 0.619873 0.0325942 0 0.6375 0.0310185 0 0.654289 0.0295116 0 0.670283 0.0280687 0 + 0.685523 0.0266852 0 0.700045 0.0253565 0 0.713886 0.024078 0 0.727077 0.022845 0 + 0.739651 0.0216524 0 0.751637 0.0204949 0 0.763063 0.0193664 0 0.773955 0.0182603 0 + 0.784337 0.0171687 0 0.794231 0.016083 0 0.803658 0.0149926 0 0.812636 0.0138851 0 + 0.821181 0.0127459 0 0.829306 0.0115583 0 0.837018 0.0103061 0 0.844322 0.00898155 0 + 0.851216 0.00761191 0 0.857697 0.00633792 0 0.863786 0.00563756 0 0.869611 0.00695095 0 + -0.527142 0.0597614 0 -0.450356 0.0577738 0 -0.380071 0.0560436 0 -0.312165 0.0540947 0 + -0.246913 0.0519866 0 -0.184507 0.04974 0 -0.125074 0.0474361 0 -0.0685545 0.0453098 0 + -0.0147656 0.0432724 0 0.0361695 0.0411585 0 0.0841449 0.038841 0 0.129349 0.0367089 0 + 0.171971 0.0347648 0 0.212208 0.0329775 0 0.250242 0.0313211 0 0.286235 0.0297763 0 + 0.320329 0.0283284 0 0.352653 0.0269656 0 0.383321 0.0256786 0 0.412437 0.0244592 0 + 0.440096 0.023301 0 0.466385 0.0221982 0 0.491381 0.0211462 0 0.515159 0.0201407 0 + 0.537786 0.0191782 0 0.559323 0.0182555 0 0.579829 0.0173698 0 0.599358 0.0165184 0 + 0.61796 0.0156988 0 0.635681 0.0149085 0 0.652567 0.014145 0 0.668658 0.0134058 0 + 0.683994 0.012688 0 0.69861 0.0119887 0 0.712541 0.0113043 0 0.72582 0.0106311 0 + 0.738476 0.00996446 0 0.750539 0.00929918 0 0.762033 0.00862919 0 0.772983 0.00794722 0 + 0.78341 0.00724459 0 0.793335 0.00651099 0 0.802772 0.00573435 0 0.811733 0.00490131 0 + 0.820225 0.00399966 0 0.828248 0.00302637 0 0.835798 0.00201203 0 0.842874 0.00109168 0 + 0.849513 0.000702358 0 0.855894 0.00212104 0 -0.578509 -0.000117823 0 -0.501145 -0.000200615 0 + -0.428674 -0.000186778 0 -0.358532 -0.000113469 0 -0.291035 -4.39197e-06 0 -0.226434 0.000126082 0 + -0.164892 0.000269577 0 -0.106346 0.000423987 0 -0.0506507 0.000570788 0 0.00234161 0.000718087 0 + 0.0524109 0.000845676 0 0.0993876 0.000959361 0 0.143585 0.0010597 0 0.185268 0.00114629 0 + 0.22465 0.00121877 0 0.26191 0.00127696 0 0.297199 0.00132089 0 0.330653 0.00135077 0 + 0.362393 0.00136697 0 0.392528 0.00137 0 0.421156 0.0013605 0 0.448367 0.00133918 0 + 0.474244 0.00130678 0 0.498861 0.00126408 0 0.522288 0.0012118 0 0.544589 0.00115062 0 + 0.565825 0.00108111 0 0.586051 0.00100371 0 0.605317 0.000918679 0 0.623674 0.000826078 0 + 0.641165 0.000725717 0 0.657834 0.000617116 0 0.67372 0.00049946 0 0.688861 0.000371535 0 + 0.703292 0.000231674 0 0.717046 7.76714e-05 0 0.730153 -9.3301e-05 0 0.742643 -0.000284806 0 + 0.754542 -0.000501265 0 0.765875 -0.000748109 0 0.776662 -0.00103192 0 0.786922 -0.00136056 0 + 0.796671 -0.00174306 0 0.80592 -0.00218891 0 0.814672 -0.00270558 0 0.822927 -0.00329084 0 + 0.830678 -0.00391128 0 0.837923 -0.0044418 0 0.844705 -0.00450098 0 0.851238 -0.00300732 0 + -0.527224 -0.0599785 0 -0.450561 -0.0581433 0 -0.380368 -0.0563753 0 -0.312577 -0.0542713 0 + -0.247457 -0.0519407 0 -0.185189 -0.0494323 0 -0.125891 -0.0468447 0 -0.069498 -0.0444127 0 + -0.0158247 -0.0420874 0 0.0350213 -0.0396944 0 0.0829337 -0.0371271 0 0.128088 -0.0347731 0 + 0.170674 -0.0326341 0 0.21089 -0.0306796 0 0.248919 -0.028884 0 0.28492 -0.0272284 0 + 0.319036 -0.0256979 0 0.351394 -0.0242803 0 0.382108 -0.0229653 0 0.411281 -0.021744 0 + 0.439007 -0.0206083 0 0.465369 -0.0195513 0 0.490448 -0.0185667 0 0.514314 -0.0176488 0 + 0.537033 -0.0167926 0 0.558667 -0.0159935 0 0.579273 -0.0152476 0 0.598902 -0.0145515 0 + 0.617605 -0.0139019 0 0.635428 -0.0132965 0 0.652413 -0.012733 0 0.668601 -0.0122099 0 + 0.684031 -0.0117261 0 0.698737 -0.0112809 0 0.712754 -0.0108742 0 0.726113 -0.0105066 0 + 0.738843 -0.0101792 0 0.750972 -0.00989376 0 0.762524 -0.00965309 0 0.773522 -0.00946066 0 + 0.783987 -0.00932087 0 0.793935 -0.00923893 0 0.803381 -0.00922062 0 0.812333 -0.00927137 0 + 0.820793 -0.0093936 0 0.82876 -0.00957978 0 0.836223 -0.00979383 0 0.843182 -0.00992246 0 + 0.849683 -0.00964647 0 0.855943 -0.00809671 0 -0.379289 -0.116155 0 -0.307247 -0.112669 0 + -0.243426 -0.109061 0 -0.182115 -0.104866 0 -0.123498 -0.100336 0 -0.0676083 -0.0955624 0 + -0.0143541 -0.0907566 0 0.0361716 -0.0860354 0 0.0838004 -0.0815063 0 0.128729 -0.0768951 0 + 0.171271 -0.0722901 0 0.21159 -0.0679891 0 0.249764 -0.0640255 0 0.285904 -0.0603733 0 + 0.320137 -0.0569993 0 0.352586 -0.0538738 0 0.383368 -0.0509714 0 0.41259 -0.0482707 0 + 0.440349 -0.0457529 0 0.466732 -0.0434017 0 0.491822 -0.0412029 0 0.515693 -0.0391437 0 + 0.538412 -0.0372128 0 0.560044 -0.0354003 0 0.580644 -0.0336971 0 0.600268 -0.0320953 0 + 0.618965 -0.0305878 0 0.636782 -0.0291684 0 0.653762 -0.0278315 0 0.669947 -0.0265723 0 + 0.685373 -0.0253865 0 0.700078 -0.0242708 0 0.714094 -0.023222 0 0.727454 -0.022238 0 + 0.740187 -0.021317 0 0.752321 -0.020458 0 0.763882 -0.0196605 0 0.774893 -0.0189247 0 + 0.785378 -0.0182517 0 0.795356 -0.0176431 0 0.804845 -0.0171011 0 0.813858 -0.0166283 0 + 0.822408 -0.0162275 0 0.830501 -0.0159 0 0.838138 -0.0156435 0 0.845316 -0.0154455 0 + 0.852028 -0.0152681 0 0.858271 -0.0150103 0 0.864091 -0.0144143 0 0.869695 -0.0128204 0 + -0.146012 -0.16522 0 -0.0844795 -0.160488 0 -0.030966 -0.155111 0 0.0202635 -0.148848 0 + 0.0688346 -0.142105 0 0.114718 -0.135212 0 0.158093 -0.12841 0 0.199126 -0.121629 0 + 0.23795 -0.115075 0 0.274702 -0.108671 0 0.309596 -0.102463 0 0.342765 -0.0966072 0 + 0.374273 -0.0911525 0 0.404186 -0.0860889 0 0.432583 -0.0813877 0 0.459549 -0.0770173 0 + 0.485166 -0.0729472 0 0.509513 -0.0691503 0 0.532666 -0.0656019 0 0.554692 -0.0622804 0 + 0.575655 -0.0591666 0 0.595613 -0.0562432 0 0.614621 -0.0534951 0 0.632728 -0.0509086 0 + 0.649981 -0.0484715 0 0.666422 -0.0461732 0 0.682093 -0.044004 0 0.697029 -0.0419553 0 + 0.711268 -0.0400196 0 0.724841 -0.0381901 0 0.73778 -0.0364609 0 0.750113 -0.0348269 0 + 0.761869 -0.0332836 0 0.773073 -0.0318273 0 0.783749 -0.0304549 0 0.793919 -0.0291639 0 + 0.803606 -0.0279526 0 0.812828 -0.0268198 0 0.821603 -0.0257648 0 0.829947 -0.0247876 0 + 0.837874 -0.0238886 0 0.845395 -0.023068 0 0.852518 -0.0223258 0 0.859248 -0.0216599 0 + 0.865586 -0.021064 0 0.871529 -0.0205218 0 0.877071 -0.0199947 0 0.882215 -0.019394 0 + 0.887004 -0.0185171 0 0.891622 -0.0168949 0 0.157467 -0.203753 0 0.202558 -0.198358 0 + 0.24174 -0.191397 0 0.278942 -0.183308 0 0.314134 -0.174656 0 0.347388 -0.165971 0 + 0.378779 -0.157465 0 0.40846 -0.149145 0 0.436586 -0.141118 0 0.463287 -0.13339 0 + 0.488705 -0.125992 0 0.512936 -0.118998 0 0.536032 -0.112444 0 0.558031 -0.106327 0 + 0.578977 -0.100624 0 0.598915 -0.0953044 0 0.617896 -0.0903382 0 0.635968 -0.0856952 0 + 0.653179 -0.0813479 0 0.669574 -0.0772713 0 0.685195 -0.0734431 0 0.700082 -0.069843 0 + 0.714272 -0.0664531 0 0.727798 -0.0632574 0 0.740694 -0.0602413 0 0.752988 -0.0573923 0 + 0.76471 -0.0546987 0 0.775886 -0.0521505 0 0.78654 -0.0497385 0 0.796696 -0.0474547 0 + 0.806377 -0.0452918 0 0.815603 -0.0432436 0 0.824394 -0.0413043 0 0.832769 -0.0394692 0 + 0.840745 -0.0377342 0 0.848338 -0.0360955 0 0.855563 -0.0345504 0 0.862433 -0.0330964 0 + 0.868963 -0.0317317 0 0.875161 -0.0304547 0 0.881038 -0.0292643 0 0.8866 -0.0281588 0 + 0.891853 -0.0271359 0 0.8968 -0.0261911 0 0.90144 -0.0253155 0 0.905773 -0.0244906 0 + 0.909797 -0.0236792 0 0.913521 -0.0228046 0 0.916988 -0.0217108 0 0.920347 -0.020083 0 + 0.512534 -0.229051 0 0.536695 -0.22345 0 0.558734 -0.215282 0 0.579616 -0.20589 0 + 0.599349 -0.196014 0 0.618022 -0.186153 0 0.635698 -0.176537 0 0.652467 -0.167233 0 + 0.668427 -0.1583 0 0.683662 -0.149758 0 0.698249 -0.141628 0 0.712241 -0.133941 0 + 0.725661 -0.126715 0 0.738522 -0.119945 0 0.750834 -0.113611 0 0.76261 -0.107688 0 + 0.773866 -0.102144 0 0.784621 -0.096951 0 0.794895 -0.0920798 0 0.804706 -0.0875046 0 + 0.814075 -0.0832017 0 0.823019 -0.0791494 0 0.831557 -0.0753286 0 0.839705 -0.0717218 0 + 0.847481 -0.0683135 0 0.854898 -0.0650899 0 0.861973 -0.0620384 0 0.868719 -0.0591481 0 + 0.87515 -0.056409 0 0.881279 -0.0538122 0 0.887117 -0.0513496 0 0.892676 -0.0490143 0 + 0.897968 -0.0468 0 0.903003 -0.044701 0 0.907789 -0.0427124 0 0.912337 -0.0408299 0 + 0.916654 -0.0390497 0 0.920748 -0.0373687 0 0.924625 -0.0357839 0 0.928289 -0.0342928 0 + 0.931746 -0.032893 0 0.934998 -0.0315814 0 0.938046 -0.0303544 0 0.940891 -0.0292059 0 + 0.943533 -0.0281261 0 0.945971 -0.0270966 0 0.94821 -0.0260839 0 0.950266 -0.0250242 0 + 0.952183 -0.0237982 0 0.954074 -0.0221962 0 0.898638 -0.23959 0 0.900569 -0.23379 0 + 0.903712 -0.225087 0 0.906678 -0.215163 0 0.909567 -0.204838 0 0.912433 -0.194561 0 + 0.91529 -0.184556 0 0.918145 -0.174914 0 0.921014 -0.165681 0 0.923907 -0.156879 0 + 0.926833 -0.148518 0 0.929791 -0.140611 0 0.932768 -0.133163 0 0.935743 -0.126165 0 + 0.938693 -0.119601 0 0.941601 -0.113445 0 0.944451 -0.107672 0 0.947232 -0.102252 0 + 0.949935 -0.0971599 0 0.952554 -0.0923694 0 0.955086 -0.0878573 0 0.957528 -0.0836023 0 + 0.959877 -0.0795851 0 0.962132 -0.0757885 0 0.964294 -0.0721967 0 0.966363 -0.0687957 0 + 0.968339 -0.0655732 0 0.970223 -0.0625177 0 0.972017 -0.0596192 0 0.973722 -0.0568686 0 + 0.97534 -0.0542578 0 0.976871 -0.0517793 0 0.978319 -0.0494267 0 0.979684 -0.0471939 0 + 0.980968 -0.0450758 0 0.982171 -0.0430675 0 0.983295 -0.0411649 0 0.98434 -0.0393641 0 + 0.985305 -0.0376617 0 0.986189 -0.0360545 0 0.986992 -0.0345391 0 0.987711 -0.0331119 0 + 0.988344 -0.0317685 0 0.988887 -0.0305025 0 0.98934 -0.0293046 0 0.989703 -0.028159 0 + 0.989985 -0.0270385 0 0.990208 -0.0258932 0 0.990419 -0.0246316 0 0.990696 -0.0230974 0 + 1.29205 -0.235012 0 1.27273 -0.228714 0 1.25699 -0.220087 0 1.2419 -0.210465 0 + 1.22775 -0.200529 0 1.21461 -0.190647 0 1.20243 -0.181013 0 1.19115 -0.171719 0 + 1.18071 -0.162814 0 1.17103 -0.15432 0 1.16207 -0.146249 0 1.15377 -0.138606 0 + 1.14607 -0.131392 0 1.13893 -0.124597 0 1.13227 -0.118207 0 1.12607 -0.112201 0 + 1.12027 -0.106554 0 1.11483 -0.101244 0 1.10972 -0.0962445 0 1.10491 -0.0915339 0 + 1.10038 -0.0870903 0 1.09609 -0.0828942 0 1.09203 -0.0789274 0 1.08819 -0.0751739 0 + 1.08454 -0.071619 0 1.08106 -0.0682495 0 1.07775 -0.0650537 0 1.0746 -0.0620209 0 + 1.07159 -0.0591414 0 1.06871 -0.0564067 0 1.06595 -0.0538088 0 1.06331 -0.0513407 0 + 1.06078 -0.0489959 0 1.05834 -0.0467687 0 1.056 -0.0446537 0 1.05374 -0.0426462 0 + 1.05156 -0.0407418 0 1.04945 -0.0389365 0 1.04741 -0.0372266 0 1.04542 -0.0356085 0 + 1.04349 -0.0340786 0 1.0416 -0.0326331 0 1.03974 -0.0312674 0 1.03791 -0.0299759 0 + 1.03611 -0.028751 0 1.03433 -0.0275812 0 1.03259 -0.0264482 0 1.03091 -0.0253174 0 + 1.02934 -0.0241185 0 1.02793 -0.0227041 0 1.66803 -0.215812 0 1.62992 -0.208921 0 + 1.59688 -0.200855 0 1.56515 -0.192243 0 1.53517 -0.183451 0 1.50704 -0.174701 0 + 1.48068 -0.166132 0 1.45599 -0.157827 0 1.43285 -0.149836 0 1.41114 -0.142189 0 + 1.39075 -0.134904 0 1.3716 -0.127989 0 1.35359 -0.121445 0 1.33664 -0.115265 0 + 1.32067 -0.109439 0 1.3056 -0.10395 0 1.29136 -0.0987777 0 1.27791 -0.0939034 0 + 1.26517 -0.0893063 0 1.25309 -0.084967 0 1.24164 -0.0808672 0 1.23077 -0.0769898 0 + 1.22043 -0.0733196 0 1.21061 -0.0698423 0 1.20125 -0.0665452 0 1.19234 -0.063417 0 + 1.18385 -0.0604472 0 1.17575 -0.0576265 0 1.16803 -0.0549463 0 1.16066 -0.052399 0 + 1.15361 -0.0499775 0 1.14688 -0.0476755 0 1.14045 -0.045487 0 1.1343 -0.0434068 0 + 1.12841 -0.0414299 0 1.12277 -0.0395519 0 1.11736 -0.0377686 0 1.11218 -0.0360761 0 + 1.1072 -0.0344708 0 1.10242 -0.0329493 0 1.09782 -0.0315078 0 1.09338 -0.0301429 0 + 1.08911 -0.0288505 0 1.08498 -0.0276261 0 1.08098 -0.0264646 0 1.07713 -0.0253599 0 + 1.07341 -0.0243033 0 1.06986 -0.0232772 0 1.06652 -0.0222297 0 1.06343 -0.0209955 0 + 2.00279 -0.183281 0 1.94931 -0.176133 0 1.90169 -0.169105 0 1.85599 -0.162058 0 + 1.81264 -0.154975 0 1.7717 -0.147911 0 1.73307 -0.140938 0 1.69664 -0.134125 0 + 1.66227 -0.127526 0 1.62983 -0.121177 0 1.5992 -0.115104 0 1.57027 -0.109321 0 + 1.54292 -0.103832 0 1.51707 -0.0986348 0 1.49261 -0.0937226 0 1.46945 -0.0890833 0 + 1.4475 -0.0847026 0 1.4267 -0.0805652 0 1.40695 -0.0766554 0 1.3882 -0.072958 0 + 1.37038 -0.0694587 0 1.35343 -0.0661441 0 1.33731 -0.063002 0 1.32197 -0.0600213 0 + 1.30736 -0.0571918 0 1.29343 -0.0545043 0 1.28016 -0.0519506 0 1.26751 -0.0495231 0 + 1.25544 -0.0472149 0 1.24392 -0.0450196 0 1.23294 -0.0429315 0 1.22244 -0.0409452 0 + 1.21243 -0.0390559 0 1.20286 -0.037259 0 1.19371 -0.0355503 0 1.18497 -0.033926 0 + 1.17661 -0.0323823 0 1.16861 -0.030916 0 1.16095 -0.0295237 0 1.15362 -0.0282023 0 + 1.14659 -0.0269487 0 1.13984 -0.0257598 0 1.13337 -0.0246324 0 1.12715 -0.0235633 0 + 1.12117 -0.02255 0 1.11542 -0.0215909 0 1.10991 -0.020687 0 1.10464 -0.0198369 0 + 1.09965 -0.01901 0 1.09499 -0.0180216 0 2.27507 -0.139466 0 2.21034 -0.132825 0 + 2.1517 -0.127399 0 2.0956 -0.122332 0 2.0422 -0.117297 0 1.99145 -0.112229 0 + 1.94325 -0.107162 0 1.8975 -0.102158 0 1.8541 -0.0972716 0 1.81293 -0.0925443 0 + 1.77389 -0.088004 0 1.73688 -0.0836666 0 1.70179 -0.0795395 0 1.66851 -0.0756229 0 + 1.63695 -0.0719124 0 1.60699 -0.0684002 0 1.57855 -0.0650764 0 1.55153 -0.0619305 0 + 1.52586 -0.0589515 0 1.50144 -0.0561289 0 1.47822 -0.0534526 0 1.45611 -0.0509134 0 + 1.43507 -0.0485028 0 1.41503 -0.0462129 0 1.39594 -0.0440366 0 1.37775 -0.0419674 0 + 1.36041 -0.0399994 0 1.34388 -0.0381272 0 1.32812 -0.0363458 0 1.31308 -0.0346505 0 + 1.29874 -0.0330371 0 1.28506 -0.0315016 0 1.27201 -0.0300403 0 1.25954 -0.0286498 0 + 1.24765 -0.0273269 0 1.23629 -0.0260685 0 1.22544 -0.0248718 0 1.21507 -0.0237342 0 + 1.20516 -0.022653 0 1.19569 -0.0216259 0 1.18663 -0.0206503 0 1.17795 -0.0197239 0 + 1.16965 -0.0188443 0 1.16169 -0.0180097 0 1.15407 -0.0172191 0 1.14675 -0.0164742 0 + 1.13974 -0.0157817 0 1.13303 -0.0151544 0 1.12663 -0.0145881 0 1.12062 -0.0139105 0 + 2.46762 -0.0870729 0 2.39637 -0.0821149 0 2.33096 -0.078871 0 2.26847 -0.0759864 0 + 2.20866 -0.0730689 0 2.15141 -0.0700591 0 2.09669 -0.0669979 0 2.04446 -0.0639433 0 + 1.99469 -0.060944 0 1.94731 -0.058034 0 1.90225 -0.0552345 0 1.85941 -0.0525568 0 + 1.8187 -0.0500055 0 1.78 -0.0475808 0 1.74323 -0.0452796 0 1.70826 -0.043097 0 + 1.67501 -0.0410272 0 1.64339 -0.0390639 0 1.61329 -0.0372009 0 1.58465 -0.0354322 0 + 1.55737 -0.0337521 0 1.5314 -0.0321554 0 1.50667 -0.0306372 0 1.4831 -0.0291933 0 + 1.46064 -0.0278194 0 1.43925 -0.0265119 0 1.41885 -0.0252674 0 1.39941 -0.0240825 0 + 1.38088 -0.0229545 0 1.36321 -0.0218803 0 1.34636 -0.0208576 0 1.3303 -0.0198838 0 + 1.31498 -0.0189567 0 1.30036 -0.018074 0 1.28642 -0.0172339 0 1.27312 -0.0164343 0 + 1.26043 -0.0156734 0 1.24832 -0.0149495 0 1.23676 -0.0142611 0 1.22572 -0.0136063 0 + 1.21517 -0.0129838 0 1.2051 -0.012392 0 1.19547 -0.0118296 0 1.18626 -0.0112954 0 + 1.17746 -0.0107892 0 1.16903 -0.010313 0 1.16096 -0.00987423 0 1.15321 -0.00949044 0 + 1.14577 -0.00918343 0 1.13871 -0.00885996 0 2.56902 -0.029554 0 2.49712 -0.0276693 0 + 2.42921 -0.0266607 0 2.36367 -0.0257708 0 2.30042 -0.0248317 0 2.23959 -0.0238343 0 + 2.18129 -0.0228058 0 2.12556 -0.0217742 0 2.07239 -0.0207602 0 2.02172 -0.019777 0 + 1.97346 -0.0188318 0 1.92751 -0.0179282 0 1.88377 -0.0170673 0 1.84212 -0.0162486 0 + 1.80247 -0.0154708 0 1.76472 -0.0147321 0 1.72877 -0.0140305 0 1.69452 -0.013364 0 + 1.6619 -0.0127305 0 1.63083 -0.0121282 0 1.60123 -0.0115552 0 1.57302 -0.0110101 0 + 1.54614 -0.0104913 0 1.52053 -0.00999733 0 1.49613 -0.00952701 0 1.47287 -0.00907911 0 + 1.45071 -0.00865253 0 1.42958 -0.00824623 0 1.40945 -0.00785924 0 1.39026 -0.00749063 0 + 1.37197 -0.00713954 0 1.35454 -0.00680514 0 1.33793 -0.00648666 0 1.32209 -0.00618338 0 + 1.30699 -0.00589458 0 1.2926 -0.00561962 0 1.27888 -0.00535786 0 1.2658 -0.0051087 0 + 1.25332 -0.00487158 0 1.24142 -0.00464592 0 1.23008 -0.00443122 0 1.21926 -0.00422694 0 + 1.20893 -0.00403262 0 1.19908 -0.00384789 0 1.18968 -0.0036727 0 1.1807 -0.00350779 0 + 1.17212 -0.00335617 0 1.1639 -0.00322621 0 1.15595 -0.00313439 0 1.1482 -0.00306408 0 0 0 0 0 0 0 0 0 0 0 0 0 @@ -1414,19 +1414,19 @@ 0.754695 0.0096607 0 0.766235 0.00920622 0 0.777232 0.00877312 0 0.787712 0.00836039 0 0.797699 0.00796708 0 0.807216 0.00759227 0 0.816286 0.0072351 0 0.824928 0.00689473 0 0.833165 0.00657037 0 0.841013 0.00626127 0 0.848493 0.00596671 0 0.85562 0.00568601 0 - -0.580556 -1.58545e-17 0 -0.5062 -1.51086e-17 0 -0.435341 -1.43978e-17 0 -0.367817 -1.37205e-17 0 - -0.303468 -1.3075e-17 0 -0.242147 -1.24599e-17 0 -0.183711 -1.18737e-17 0 -0.128024 -1.13151e-17 0 - -0.0749569 -1.07828e-17 0 -0.0243861 -1.02756e-17 0 0.0238056 -9.79215e-18 0 0.0697301 -9.33148e-18 0 - 0.113494 -8.89249e-18 0 0.155199 -8.47414e-18 0 0.194943 -8.07548e-18 0 0.232816 -7.69558e-18 0 - 0.268908 -7.33354e-18 0 0.303302 -6.98854e-18 0 0.336077 -6.65977e-18 0 0.367311 -6.34646e-18 0 - 0.397076 -6.0479e-18 0 0.42544 -5.76338e-18 0 0.45247 -5.49224e-18 0 0.478228 -5.23386e-18 0 - 0.502775 -4.98764e-18 0 0.526166 -4.753e-18 0 0.548458 -4.52939e-18 0 0.5697 -4.31631e-18 0 - 0.589943 -4.11325e-18 0 0.609234 -3.91975e-18 0 0.627618 -3.73535e-18 0 0.645136 -3.55962e-18 0 - 0.661831 -3.39216e-18 0 0.67774 -3.23258e-18 0 0.6929 -3.0805e-18 0 0.707347 -2.93558e-18 0 - 0.721115 -2.79748e-18 0 0.734235 -2.66587e-18 0 0.746738 -2.54046e-18 0 0.758652 -2.42094e-18 0 - 0.770007 -2.30705e-18 0 0.780826 -2.19852e-18 0 0.791137 -2.09509e-18 0 0.800963 -1.99653e-18 0 - 0.810327 -1.9026e-18 0 0.81925 -1.81309e-18 0 0.827753 -1.7278e-18 0 0.835856 -1.64651e-18 0 - 0.843578 -1.56906e-18 0 0.850937 -1.49524e-18 0 -0.5309 -0.0602904 0 -0.45888 -0.0574541 0 + -0.580556 -0 0 -0.5062 -0 0 -0.435341 -0 0 -0.367817 -0 0 + -0.303468 -0 0 -0.242147 -0 0 -0.183711 -0 0 -0.128024 -0 0 + -0.0749569 -0 0 -0.0243861 -0 0 0.0238056 -0 0 0.0697301 -0 0 + 0.113494 -0 0 0.155199 -0 0 0.194943 -0 0 0.232816 -0 0 + 0.268908 -0 0 0.303302 -0 0 0.336077 -0 0 0.367311 -0 0 + 0.397076 -0 0 0.42544 -0 0 0.45247 -0 0 0.478228 -0 0 + 0.502775 -0 0 0.526166 -0 0 0.548458 -0 0 0.5697 -0 0 + 0.589943 -0 0 0.609234 -0 0 0.627618 -0 0 0.645136 -0 0 + 0.661831 -0 0 0.67774 -0 0 0.6929 -0 0 0.707347 -0 0 + 0.721115 -0 0 0.734235 -0 0 0.746738 -0 0 0.758652 -0 0 + 0.770007 -0 0 0.780826 -0 0 0.791137 -0 0 0.800963 -0 0 + 0.810327 -0 0 0.81925 -0 0 0.827753 -0 0 0.835856 -0 0 + 0.843578 -0 0 0.850937 -0 0 -0.5309 -0.0602904 0 -0.45888 -0.0574541 0 -0.390247 -0.0547512 0 -0.324844 -0.0521755 0 -0.262517 -0.0497209 0 -0.203123 -0.0473818 0 -0.146523 -0.0451527 0 -0.0925852 -0.0430286 0 -0.0411851 -0.0410043 0 0.00779687 -0.0390753 0 0.0544745 -0.037237 0 0.0989563 -0.0354852 0 0.141345 -0.0338158 0 0.18174 -0.032225 0 @@ -1898,7 +1898,7 @@ -0.3 -0.5 0 -0.3 -0.46 0 -0.25 -0.5 0 -0.25 -0.46 0 -0.2 -0.5 0 -0.2 -0.46 0 -0.15 -0.5 0 -0.15 -0.46 0 -0.1 -0.5 0 -0.1 -0.46 0 -0.05 -0.5 0 -0.05 -0.46 0 - 2.77556e-17 -0.5 0 2.77556e-17 -0.46 0 0.05 -0.5 0 0.05 -0.46 0 + 0 -0.5 0 0 -0.46 0 0.05 -0.5 0 0.05 -0.46 0 0.1 -0.5 0 0.1 -0.46 0 0.15 -0.5 0 0.15 -0.46 0 0.2 -0.5 0 0.2 -0.46 0 0.25 -0.5 0 0.25 -0.46 0 0.3 -0.5 0 0.3 -0.46 0 0.35 -0.5 0 0.35 -0.46 0 @@ -1921,7 +1921,7 @@ 2 -0.5 0 2 -0.46 0 -0.5 -0.42 0 -0.45 -0.42 0 -0.4 -0.42 0 -0.35 -0.42 0 -0.3 -0.42 0 -0.25 -0.42 0 -0.2 -0.42 0 -0.15 -0.42 0 -0.1 -0.42 0 -0.05 -0.42 0 - 2.77556e-17 -0.42 0 0.05 -0.42 0 0.1 -0.42 0 0.15 -0.42 0 + 0 -0.42 0 0.05 -0.42 0 0.1 -0.42 0 0.15 -0.42 0 0.2 -0.42 0 0.25 -0.42 0 0.3 -0.42 0 0.35 -0.42 0 0.4 -0.42 0 0.45 -0.42 0 0.5 -0.42 0 0.55 -0.42 0 0.6 -0.42 0 0.65 -0.42 0 0.7 -0.42 0 0.75 -0.42 0 @@ -1933,7 +1933,7 @@ 1.8 -0.42 0 1.85 -0.42 0 1.9 -0.42 0 1.95 -0.42 0 2 -0.42 0 -0.5 -0.38 0 -0.45 -0.38 0 -0.4 -0.38 0 -0.35 -0.38 0 -0.3 -0.38 0 -0.25 -0.38 0 -0.2 -0.38 0 - -0.15 -0.38 0 -0.1 -0.38 0 -0.05 -0.38 0 2.77556e-17 -0.38 0 + -0.15 -0.38 0 -0.1 -0.38 0 -0.05 -0.38 0 0 -0.38 0 0.05 -0.38 0 0.1 -0.38 0 0.15 -0.38 0 0.2 -0.38 0 0.25 -0.38 0 0.3 -0.38 0 0.35 -0.38 0 0.4 -0.38 0 0.45 -0.38 0 0.5 -0.38 0 0.55 -0.38 0 0.6 -0.38 0 @@ -1946,7 +1946,7 @@ 1.85 -0.38 0 1.9 -0.38 0 1.95 -0.38 0 2 -0.38 0 -0.5 -0.34 0 -0.45 -0.34 0 -0.4 -0.34 0 -0.35 -0.34 0 -0.3 -0.34 0 -0.25 -0.34 0 -0.2 -0.34 0 -0.15 -0.34 0 - -0.1 -0.34 0 -0.05 -0.34 0 2.77556e-17 -0.34 0 0.05 -0.34 0 + -0.1 -0.34 0 -0.05 -0.34 0 0 -0.34 0 0.05 -0.34 0 0.1 -0.34 0 0.15 -0.34 0 0.2 -0.34 0 0.25 -0.34 0 0.3 -0.34 0 0.35 -0.34 0 0.4 -0.34 0 0.45 -0.34 0 0.5 -0.34 0 0.55 -0.34 0 0.6 -0.34 0 0.65 -0.34 0 @@ -1959,7 +1959,7 @@ 1.9 -0.34 0 1.95 -0.34 0 2 -0.34 0 -0.5 -0.3 0 -0.45 -0.3 0 -0.4 -0.3 0 -0.35 -0.3 0 -0.3 -0.3 0 -0.25 -0.3 0 -0.2 -0.3 0 -0.15 -0.3 0 -0.1 -0.3 0 - -0.05 -0.3 0 2.77556e-17 -0.3 0 0.05 -0.3 0 0.1 -0.3 0 + -0.05 -0.3 0 0 -0.3 0 0.05 -0.3 0 0.1 -0.3 0 0.15 -0.3 0 0.2 -0.3 0 0.25 -0.3 0 0.3 -0.3 0 0.35 -0.3 0 0.4 -0.3 0 0.45 -0.3 0 0.5 -0.3 0 0.55 -0.3 0 0.6 -0.3 0 0.65 -0.3 0 0.7 -0.3 0 @@ -1972,7 +1972,7 @@ 1.95 -0.3 0 2 -0.3 0 -0.5 -0.26 0 -0.45 -0.26 0 -0.4 -0.26 0 -0.35 -0.26 0 -0.3 -0.26 0 -0.25 -0.26 0 -0.2 -0.26 0 -0.15 -0.26 0 -0.1 -0.26 0 -0.05 -0.26 0 - 2.77556e-17 -0.26 0 0.05 -0.26 0 0.1 -0.26 0 0.15 -0.26 0 + 0 -0.26 0 0.05 -0.26 0 0.1 -0.26 0 0.15 -0.26 0 0.2 -0.26 0 0.25 -0.26 0 0.3 -0.26 0 0.35 -0.26 0 0.4 -0.26 0 0.45 -0.26 0 0.5 -0.26 0 0.55 -0.26 0 0.6 -0.26 0 0.65 -0.26 0 0.7 -0.26 0 0.75 -0.26 0 @@ -1984,7 +1984,7 @@ 1.8 -0.26 0 1.85 -0.26 0 1.9 -0.26 0 1.95 -0.26 0 2 -0.26 0 -0.5 -0.22 0 -0.45 -0.22 0 -0.4 -0.22 0 -0.35 -0.22 0 -0.3 -0.22 0 -0.25 -0.22 0 -0.2 -0.22 0 - -0.15 -0.22 0 -0.1 -0.22 0 -0.05 -0.22 0 2.77556e-17 -0.22 0 + -0.15 -0.22 0 -0.1 -0.22 0 -0.05 -0.22 0 0 -0.22 0 0.05 -0.22 0 0.1 -0.22 0 0.15 -0.22 0 0.2 -0.22 0 0.25 -0.22 0 0.3 -0.22 0 0.35 -0.22 0 0.4 -0.22 0 0.45 -0.22 0 0.5 -0.22 0 0.55 -0.22 0 0.6 -0.22 0 @@ -1997,7 +1997,7 @@ 1.85 -0.22 0 1.9 -0.22 0 1.95 -0.22 0 2 -0.22 0 -0.5 -0.18 0 -0.45 -0.18 0 -0.4 -0.18 0 -0.35 -0.18 0 -0.3 -0.18 0 -0.25 -0.18 0 -0.2 -0.18 0 -0.15 -0.18 0 - -0.1 -0.18 0 -0.05 -0.18 0 2.77556e-17 -0.18 0 0.05 -0.18 0 + -0.1 -0.18 0 -0.05 -0.18 0 0 -0.18 0 0.05 -0.18 0 0.1 -0.18 0 0.15 -0.18 0 0.2 -0.18 0 0.25 -0.18 0 0.3 -0.18 0 0.35 -0.18 0 0.4 -0.18 0 0.45 -0.18 0 0.5 -0.18 0 0.55 -0.18 0 0.6 -0.18 0 0.65 -0.18 0 @@ -2010,7 +2010,7 @@ 1.9 -0.18 0 1.95 -0.18 0 2 -0.18 0 -0.5 -0.14 0 -0.45 -0.14 0 -0.4 -0.14 0 -0.35 -0.14 0 -0.3 -0.14 0 -0.25 -0.14 0 -0.2 -0.14 0 -0.15 -0.14 0 -0.1 -0.14 0 - -0.05 -0.14 0 2.77556e-17 -0.14 0 0.05 -0.14 0 0.1 -0.14 0 + -0.05 -0.14 0 0 -0.14 0 0.05 -0.14 0 0.1 -0.14 0 0.15 -0.14 0 0.2 -0.14 0 0.25 -0.14 0 0.3 -0.14 0 0.35 -0.14 0 0.4 -0.14 0 0.45 -0.14 0 0.5 -0.14 0 0.55 -0.14 0 0.6 -0.14 0 0.65 -0.14 0 0.7 -0.14 0 @@ -2023,7 +2023,7 @@ 1.95 -0.14 0 2 -0.14 0 -0.5 -0.1 0 -0.45 -0.1 0 -0.4 -0.1 0 -0.35 -0.1 0 -0.3 -0.1 0 -0.25 -0.1 0 -0.2 -0.1 0 -0.15 -0.1 0 -0.1 -0.1 0 -0.05 -0.1 0 - 2.77556e-17 -0.1 0 0.05 -0.1 0 0.1 -0.1 0 0.15 -0.1 0 + 0 -0.1 0 0.05 -0.1 0 0.1 -0.1 0 0.15 -0.1 0 0.2 -0.1 0 0.25 -0.1 0 0.3 -0.1 0 0.35 -0.1 0 0.4 -0.1 0 0.45 -0.1 0 0.5 -0.1 0 0.55 -0.1 0 0.6 -0.1 0 0.65 -0.1 0 0.7 -0.1 0 0.75 -0.1 0 @@ -2035,7 +2035,7 @@ 1.8 -0.1 0 1.85 -0.1 0 1.9 -0.1 0 1.95 -0.1 0 2 -0.1 0 -0.5 -0.06 0 -0.45 -0.06 0 -0.4 -0.06 0 -0.35 -0.06 0 -0.3 -0.06 0 -0.25 -0.06 0 -0.2 -0.06 0 - -0.15 -0.06 0 -0.1 -0.06 0 -0.05 -0.06 0 2.77556e-17 -0.06 0 + -0.15 -0.06 0 -0.1 -0.06 0 -0.05 -0.06 0 0 -0.06 0 0.05 -0.06 0 0.1 -0.06 0 0.15 -0.06 0 0.2 -0.06 0 0.25 -0.06 0 0.3 -0.06 0 0.35 -0.06 0 0.4 -0.06 0 0.45 -0.06 0 0.5 -0.06 0 0.55 -0.06 0 0.6 -0.06 0 @@ -2048,7 +2048,7 @@ 1.85 -0.06 0 1.9 -0.06 0 1.95 -0.06 0 2 -0.06 0 -0.5 -0.02 0 -0.45 -0.02 0 -0.4 -0.02 0 -0.35 -0.02 0 -0.3 -0.02 0 -0.25 -0.02 0 -0.2 -0.02 0 -0.15 -0.02 0 - -0.1 -0.02 0 -0.05 -0.02 0 2.77556e-17 -0.02 0 0.05 -0.02 0 + -0.1 -0.02 0 -0.05 -0.02 0 0 -0.02 0 0.05 -0.02 0 0.1 -0.02 0 0.15 -0.02 0 0.2 -0.02 0 0.25 -0.02 0 0.3 -0.02 0 0.35 -0.02 0 0.4 -0.02 0 0.45 -0.02 0 0.5 -0.02 0 0.55 -0.02 0 0.6 -0.02 0 0.65 -0.02 0 @@ -2061,7 +2061,7 @@ 1.9 -0.02 0 1.95 -0.02 0 2 -0.02 0 -0.5 0.02 0 -0.45 0.02 0 -0.4 0.02 0 -0.35 0.02 0 -0.3 0.02 0 -0.25 0.02 0 -0.2 0.02 0 -0.15 0.02 0 -0.1 0.02 0 - -0.05 0.02 0 2.77556e-17 0.02 0 0.05 0.02 0 0.1 0.02 0 + -0.05 0.02 0 0 0.02 0 0.05 0.02 0 0.1 0.02 0 0.15 0.02 0 0.2 0.02 0 0.25 0.02 0 0.3 0.02 0 0.35 0.02 0 0.4 0.02 0 0.45 0.02 0 0.5 0.02 0 0.55 0.02 0 0.6 0.02 0 0.65 0.02 0 0.7 0.02 0 @@ -2074,7 +2074,7 @@ 1.95 0.02 0 2 0.02 0 -0.5 0.06 0 -0.45 0.06 0 -0.4 0.06 0 -0.35 0.06 0 -0.3 0.06 0 -0.25 0.06 0 -0.2 0.06 0 -0.15 0.06 0 -0.1 0.06 0 -0.05 0.06 0 - 2.77556e-17 0.06 0 0.05 0.06 0 0.1 0.06 0 0.15 0.06 0 + 0 0.06 0 0.05 0.06 0 0.1 0.06 0 0.15 0.06 0 0.2 0.06 0 0.25 0.06 0 0.3 0.06 0 0.35 0.06 0 0.4 0.06 0 0.45 0.06 0 0.5 0.06 0 0.55 0.06 0 0.6 0.06 0 0.65 0.06 0 0.7 0.06 0 0.75 0.06 0 @@ -2086,7 +2086,7 @@ 1.8 0.06 0 1.85 0.06 0 1.9 0.06 0 1.95 0.06 0 2 0.06 0 -0.5 0.1 0 -0.45 0.1 0 -0.4 0.1 0 -0.35 0.1 0 -0.3 0.1 0 -0.25 0.1 0 -0.2 0.1 0 - -0.15 0.1 0 -0.1 0.1 0 -0.05 0.1 0 2.77556e-17 0.1 0 + -0.15 0.1 0 -0.1 0.1 0 -0.05 0.1 0 0 0.1 0 0.05 0.1 0 0.1 0.1 0 0.15 0.1 0 0.2 0.1 0 0.25 0.1 0 0.3 0.1 0 0.35 0.1 0 0.4 0.1 0 0.45 0.1 0 0.5 0.1 0 0.55 0.1 0 0.6 0.1 0 @@ -2099,7 +2099,7 @@ 1.85 0.1 0 1.9 0.1 0 1.95 0.1 0 2 0.1 0 -0.5 0.14 0 -0.45 0.14 0 -0.4 0.14 0 -0.35 0.14 0 -0.3 0.14 0 -0.25 0.14 0 -0.2 0.14 0 -0.15 0.14 0 - -0.1 0.14 0 -0.05 0.14 0 2.77556e-17 0.14 0 0.05 0.14 0 + -0.1 0.14 0 -0.05 0.14 0 0 0.14 0 0.05 0.14 0 0.1 0.14 0 0.15 0.14 0 0.2 0.14 0 0.25 0.14 0 0.3 0.14 0 0.35 0.14 0 0.4 0.14 0 0.45 0.14 0 0.5 0.14 0 0.55 0.14 0 0.6 0.14 0 0.65 0.14 0 @@ -2112,7 +2112,7 @@ 1.9 0.14 0 1.95 0.14 0 2 0.14 0 -0.5 0.18 0 -0.45 0.18 0 -0.4 0.18 0 -0.35 0.18 0 -0.3 0.18 0 -0.25 0.18 0 -0.2 0.18 0 -0.15 0.18 0 -0.1 0.18 0 - -0.05 0.18 0 2.77556e-17 0.18 0 0.05 0.18 0 0.1 0.18 0 + -0.05 0.18 0 0 0.18 0 0.05 0.18 0 0.1 0.18 0 0.15 0.18 0 0.2 0.18 0 0.25 0.18 0 0.3 0.18 0 0.35 0.18 0 0.4 0.18 0 0.45 0.18 0 0.5 0.18 0 0.55 0.18 0 0.6 0.18 0 0.65 0.18 0 0.7 0.18 0 @@ -2125,7 +2125,7 @@ 1.95 0.18 0 2 0.18 0 -0.5 0.22 0 -0.45 0.22 0 -0.4 0.22 0 -0.35 0.22 0 -0.3 0.22 0 -0.25 0.22 0 -0.2 0.22 0 -0.15 0.22 0 -0.1 0.22 0 -0.05 0.22 0 - 2.77556e-17 0.22 0 0.05 0.22 0 0.1 0.22 0 0.15 0.22 0 + 0 0.22 0 0.05 0.22 0 0.1 0.22 0 0.15 0.22 0 0.2 0.22 0 0.25 0.22 0 0.3 0.22 0 0.35 0.22 0 0.4 0.22 0 0.45 0.22 0 0.5 0.22 0 0.55 0.22 0 0.6 0.22 0 0.65 0.22 0 0.7 0.22 0 0.75 0.22 0 @@ -2137,7 +2137,7 @@ 1.8 0.22 0 1.85 0.22 0 1.9 0.22 0 1.95 0.22 0 2 0.22 0 -0.5 0.26 0 -0.45 0.26 0 -0.4 0.26 0 -0.35 0.26 0 -0.3 0.26 0 -0.25 0.26 0 -0.2 0.26 0 - -0.15 0.26 0 -0.1 0.26 0 -0.05 0.26 0 2.77556e-17 0.26 0 + -0.15 0.26 0 -0.1 0.26 0 -0.05 0.26 0 0 0.26 0 0.05 0.26 0 0.1 0.26 0 0.15 0.26 0 0.2 0.26 0 0.25 0.26 0 0.3 0.26 0 0.35 0.26 0 0.4 0.26 0 0.45 0.26 0 0.5 0.26 0 0.55 0.26 0 0.6 0.26 0 @@ -2150,7 +2150,7 @@ 1.85 0.26 0 1.9 0.26 0 1.95 0.26 0 2 0.26 0 -0.5 0.3 0 -0.45 0.3 0 -0.4 0.3 0 -0.35 0.3 0 -0.3 0.3 0 -0.25 0.3 0 -0.2 0.3 0 -0.15 0.3 0 - -0.1 0.3 0 -0.05 0.3 0 2.77556e-17 0.3 0 0.05 0.3 0 + -0.1 0.3 0 -0.05 0.3 0 0 0.3 0 0.05 0.3 0 0.1 0.3 0 0.15 0.3 0 0.2 0.3 0 0.25 0.3 0 0.3 0.3 0 0.35 0.3 0 0.4 0.3 0 0.45 0.3 0 0.5 0.3 0 0.55 0.3 0 0.6 0.3 0 0.65 0.3 0 @@ -2163,7 +2163,7 @@ 1.9 0.3 0 1.95 0.3 0 2 0.3 0 -0.5 0.34 0 -0.45 0.34 0 -0.4 0.34 0 -0.35 0.34 0 -0.3 0.34 0 -0.25 0.34 0 -0.2 0.34 0 -0.15 0.34 0 -0.1 0.34 0 - -0.05 0.34 0 2.77556e-17 0.34 0 0.05 0.34 0 0.1 0.34 0 + -0.05 0.34 0 0 0.34 0 0.05 0.34 0 0.1 0.34 0 0.15 0.34 0 0.2 0.34 0 0.25 0.34 0 0.3 0.34 0 0.35 0.34 0 0.4 0.34 0 0.45 0.34 0 0.5 0.34 0 0.55 0.34 0 0.6 0.34 0 0.65 0.34 0 0.7 0.34 0 @@ -2176,7 +2176,7 @@ 1.95 0.34 0 2 0.34 0 -0.5 0.38 0 -0.45 0.38 0 -0.4 0.38 0 -0.35 0.38 0 -0.3 0.38 0 -0.25 0.38 0 -0.2 0.38 0 -0.15 0.38 0 -0.1 0.38 0 -0.05 0.38 0 - 2.77556e-17 0.38 0 0.05 0.38 0 0.1 0.38 0 0.15 0.38 0 + 0 0.38 0 0.05 0.38 0 0.1 0.38 0 0.15 0.38 0 0.2 0.38 0 0.25 0.38 0 0.3 0.38 0 0.35 0.38 0 0.4 0.38 0 0.45 0.38 0 0.5 0.38 0 0.55 0.38 0 0.6 0.38 0 0.65 0.38 0 0.7 0.38 0 0.75 0.38 0 @@ -2188,7 +2188,7 @@ 1.8 0.38 0 1.85 0.38 0 1.9 0.38 0 1.95 0.38 0 2 0.38 0 -0.5 0.42 0 -0.45 0.42 0 -0.4 0.42 0 -0.35 0.42 0 -0.3 0.42 0 -0.25 0.42 0 -0.2 0.42 0 - -0.15 0.42 0 -0.1 0.42 0 -0.05 0.42 0 2.77556e-17 0.42 0 + -0.15 0.42 0 -0.1 0.42 0 -0.05 0.42 0 0 0.42 0 0.05 0.42 0 0.1 0.42 0 0.15 0.42 0 0.2 0.42 0 0.25 0.42 0 0.3 0.42 0 0.35 0.42 0 0.4 0.42 0 0.45 0.42 0 0.5 0.42 0 0.55 0.42 0 0.6 0.42 0 @@ -2201,7 +2201,7 @@ 1.85 0.42 0 1.9 0.42 0 1.95 0.42 0 2 0.42 0 -0.5 0.46 0 -0.45 0.46 0 -0.4 0.46 0 -0.35 0.46 0 -0.3 0.46 0 -0.25 0.46 0 -0.2 0.46 0 -0.15 0.46 0 - -0.1 0.46 0 -0.05 0.46 0 2.77556e-17 0.46 0 0.05 0.46 0 + -0.1 0.46 0 -0.05 0.46 0 0 0.46 0 0.05 0.46 0 0.1 0.46 0 0.15 0.46 0 0.2 0.46 0 0.25 0.46 0 0.3 0.46 0 0.35 0.46 0 0.4 0.46 0 0.45 0.46 0 0.5 0.46 0 0.55 0.46 0 0.6 0.46 0 0.65 0.46 0 @@ -2214,7 +2214,7 @@ 1.9 0.46 0 1.95 0.46 0 2 0.46 0 -0.5 0.5 0 -0.45 0.5 0 -0.4 0.5 0 -0.35 0.5 0 -0.3 0.5 0 -0.25 0.5 0 -0.2 0.5 0 -0.15 0.5 0 -0.1 0.5 0 - -0.05 0.5 0 2.77556e-17 0.5 0 0.05 0.5 0 0.1 0.5 0 + -0.05 0.5 0 0 0.5 0 0.05 0.5 0 0.1 0.5 0 0.15 0.5 0 0.2 0.5 0 0.25 0.5 0 0.3 0.5 0 0.35 0.5 0 0.4 0.5 0 0.45 0.5 0 0.5 0.5 0 0.55 0.5 0 0.6 0.5 0 0.65 0.5 0 0.7 0.5 0 @@ -2227,7 +2227,7 @@ 1.95 0.5 0 2 0.5 0 -0.5 0.54 0 -0.45 0.54 0 -0.4 0.54 0 -0.35 0.54 0 -0.3 0.54 0 -0.25 0.54 0 -0.2 0.54 0 -0.15 0.54 0 -0.1 0.54 0 -0.05 0.54 0 - 2.77556e-17 0.54 0 0.05 0.54 0 0.1 0.54 0 0.15 0.54 0 + 0 0.54 0 0.05 0.54 0 0.1 0.54 0 0.15 0.54 0 0.2 0.54 0 0.25 0.54 0 0.3 0.54 0 0.35 0.54 0 0.4 0.54 0 0.45 0.54 0 0.5 0.54 0 0.55 0.54 0 0.6 0.54 0 0.65 0.54 0 0.7 0.54 0 0.75 0.54 0 @@ -2239,7 +2239,7 @@ 1.8 0.54 0 1.85 0.54 0 1.9 0.54 0 1.95 0.54 0 2 0.54 0 -0.5 0.58 0 -0.45 0.58 0 -0.4 0.58 0 -0.35 0.58 0 -0.3 0.58 0 -0.25 0.58 0 -0.2 0.58 0 - -0.15 0.58 0 -0.1 0.58 0 -0.05 0.58 0 2.77556e-17 0.58 0 + -0.15 0.58 0 -0.1 0.58 0 -0.05 0.58 0 0 0.58 0 0.05 0.58 0 0.1 0.58 0 0.15 0.58 0 0.2 0.58 0 0.25 0.58 0 0.3 0.58 0 0.35 0.58 0 0.4 0.58 0 0.45 0.58 0 0.5 0.58 0 0.55 0.58 0 0.6 0.58 0 @@ -2252,7 +2252,7 @@ 1.85 0.58 0 1.9 0.58 0 1.95 0.58 0 2 0.58 0 -0.5 0.62 0 -0.45 0.62 0 -0.4 0.62 0 -0.35 0.62 0 -0.3 0.62 0 -0.25 0.62 0 -0.2 0.62 0 -0.15 0.62 0 - -0.1 0.62 0 -0.05 0.62 0 2.77556e-17 0.62 0 0.05 0.62 0 + -0.1 0.62 0 -0.05 0.62 0 0 0.62 0 0.05 0.62 0 0.1 0.62 0 0.15 0.62 0 0.2 0.62 0 0.25 0.62 0 0.3 0.62 0 0.35 0.62 0 0.4 0.62 0 0.45 0.62 0 0.5 0.62 0 0.55 0.62 0 0.6 0.62 0 0.65 0.62 0 @@ -2265,7 +2265,7 @@ 1.9 0.62 0 1.95 0.62 0 2 0.62 0 -0.5 0.66 0 -0.45 0.66 0 -0.4 0.66 0 -0.35 0.66 0 -0.3 0.66 0 -0.25 0.66 0 -0.2 0.66 0 -0.15 0.66 0 -0.1 0.66 0 - -0.05 0.66 0 2.77556e-17 0.66 0 0.05 0.66 0 0.1 0.66 0 + -0.05 0.66 0 0 0.66 0 0.05 0.66 0 0.1 0.66 0 0.15 0.66 0 0.2 0.66 0 0.25 0.66 0 0.3 0.66 0 0.35 0.66 0 0.4 0.66 0 0.45 0.66 0 0.5 0.66 0 0.55 0.66 0 0.6 0.66 0 0.65 0.66 0 0.7 0.66 0 @@ -2278,7 +2278,7 @@ 1.95 0.66 0 2 0.66 0 -0.5 0.7 0 -0.45 0.7 0 -0.4 0.7 0 -0.35 0.7 0 -0.3 0.7 0 -0.25 0.7 0 -0.2 0.7 0 -0.15 0.7 0 -0.1 0.7 0 -0.05 0.7 0 - 2.77556e-17 0.7 0 0.05 0.7 0 0.1 0.7 0 0.15 0.7 0 + 0 0.7 0 0.05 0.7 0 0.1 0.7 0 0.15 0.7 0 0.2 0.7 0 0.25 0.7 0 0.3 0.7 0 0.35 0.7 0 0.4 0.7 0 0.45 0.7 0 0.5 0.7 0 0.55 0.7 0 0.6 0.7 0 0.65 0.7 0 0.7 0.7 0 0.75 0.7 0 @@ -2290,7 +2290,7 @@ 1.8 0.7 0 1.85 0.7 0 1.9 0.7 0 1.95 0.7 0 2 0.7 0 -0.5 0.74 0 -0.45 0.74 0 -0.4 0.74 0 -0.35 0.74 0 -0.3 0.74 0 -0.25 0.74 0 -0.2 0.74 0 - -0.15 0.74 0 -0.1 0.74 0 -0.05 0.74 0 2.77556e-17 0.74 0 + -0.15 0.74 0 -0.1 0.74 0 -0.05 0.74 0 0 0.74 0 0.05 0.74 0 0.1 0.74 0 0.15 0.74 0 0.2 0.74 0 0.25 0.74 0 0.3 0.74 0 0.35 0.74 0 0.4 0.74 0 0.45 0.74 0 0.5 0.74 0 0.55 0.74 0 0.6 0.74 0 @@ -2303,7 +2303,7 @@ 1.85 0.74 0 1.9 0.74 0 1.95 0.74 0 2 0.74 0 -0.5 0.78 0 -0.45 0.78 0 -0.4 0.78 0 -0.35 0.78 0 -0.3 0.78 0 -0.25 0.78 0 -0.2 0.78 0 -0.15 0.78 0 - -0.1 0.78 0 -0.05 0.78 0 2.77556e-17 0.78 0 0.05 0.78 0 + -0.1 0.78 0 -0.05 0.78 0 0 0.78 0 0.05 0.78 0 0.1 0.78 0 0.15 0.78 0 0.2 0.78 0 0.25 0.78 0 0.3 0.78 0 0.35 0.78 0 0.4 0.78 0 0.45 0.78 0 0.5 0.78 0 0.55 0.78 0 0.6 0.78 0 0.65 0.78 0 @@ -2316,7 +2316,7 @@ 1.9 0.78 0 1.95 0.78 0 2 0.78 0 -0.5 0.82 0 -0.45 0.82 0 -0.4 0.82 0 -0.35 0.82 0 -0.3 0.82 0 -0.25 0.82 0 -0.2 0.82 0 -0.15 0.82 0 -0.1 0.82 0 - -0.05 0.82 0 2.77556e-17 0.82 0 0.05 0.82 0 0.1 0.82 0 + -0.05 0.82 0 0 0.82 0 0.05 0.82 0 0.1 0.82 0 0.15 0.82 0 0.2 0.82 0 0.25 0.82 0 0.3 0.82 0 0.35 0.82 0 0.4 0.82 0 0.45 0.82 0 0.5 0.82 0 0.55 0.82 0 0.6 0.82 0 0.65 0.82 0 0.7 0.82 0 @@ -2329,7 +2329,7 @@ 1.95 0.82 0 2 0.82 0 -0.5 0.86 0 -0.45 0.86 0 -0.4 0.86 0 -0.35 0.86 0 -0.3 0.86 0 -0.25 0.86 0 -0.2 0.86 0 -0.15 0.86 0 -0.1 0.86 0 -0.05 0.86 0 - 2.77556e-17 0.86 0 0.05 0.86 0 0.1 0.86 0 0.15 0.86 0 + 0 0.86 0 0.05 0.86 0 0.1 0.86 0 0.15 0.86 0 0.2 0.86 0 0.25 0.86 0 0.3 0.86 0 0.35 0.86 0 0.4 0.86 0 0.45 0.86 0 0.5 0.86 0 0.55 0.86 0 0.6 0.86 0 0.65 0.86 0 0.7 0.86 0 0.75 0.86 0 @@ -2341,7 +2341,7 @@ 1.8 0.86 0 1.85 0.86 0 1.9 0.86 0 1.95 0.86 0 2 0.86 0 -0.5 0.9 0 -0.45 0.9 0 -0.4 0.9 0 -0.35 0.9 0 -0.3 0.9 0 -0.25 0.9 0 -0.2 0.9 0 - -0.15 0.9 0 -0.1 0.9 0 -0.05 0.9 0 2.77556e-17 0.9 0 + -0.15 0.9 0 -0.1 0.9 0 -0.05 0.9 0 0 0.9 0 0.05 0.9 0 0.1 0.9 0 0.15 0.9 0 0.2 0.9 0 0.25 0.9 0 0.3 0.9 0 0.35 0.9 0 0.4 0.9 0 0.45 0.9 0 0.5 0.9 0 0.55 0.9 0 0.6 0.9 0 @@ -2354,7 +2354,7 @@ 1.85 0.9 0 1.9 0.9 0 1.95 0.9 0 2 0.9 0 -0.5 0.94 0 -0.45 0.94 0 -0.4 0.94 0 -0.35 0.94 0 -0.3 0.94 0 -0.25 0.94 0 -0.2 0.94 0 -0.15 0.94 0 - -0.1 0.94 0 -0.05 0.94 0 2.77556e-17 0.94 0 0.05 0.94 0 + -0.1 0.94 0 -0.05 0.94 0 0 0.94 0 0.05 0.94 0 0.1 0.94 0 0.15 0.94 0 0.2 0.94 0 0.25 0.94 0 0.3 0.94 0 0.35 0.94 0 0.4 0.94 0 0.45 0.94 0 0.5 0.94 0 0.55 0.94 0 0.6 0.94 0 0.65 0.94 0 @@ -2367,7 +2367,7 @@ 1.9 0.94 0 1.95 0.94 0 2 0.94 0 -0.5 0.98 0 -0.45 0.98 0 -0.4 0.98 0 -0.35 0.98 0 -0.3 0.98 0 -0.25 0.98 0 -0.2 0.98 0 -0.15 0.98 0 -0.1 0.98 0 - -0.05 0.98 0 2.77556e-17 0.98 0 0.05 0.98 0 0.1 0.98 0 + -0.05 0.98 0 0 0.98 0 0.05 0.98 0 0.1 0.98 0 0.15 0.98 0 0.2 0.98 0 0.25 0.98 0 0.3 0.98 0 0.35 0.98 0 0.4 0.98 0 0.45 0.98 0 0.5 0.98 0 0.55 0.98 0 0.6 0.98 0 0.65 0.98 0 0.7 0.98 0 @@ -2380,7 +2380,7 @@ 1.95 0.98 0 2 0.98 0 -0.5 1.02 0 -0.45 1.02 0 -0.4 1.02 0 -0.35 1.02 0 -0.3 1.02 0 -0.25 1.02 0 -0.2 1.02 0 -0.15 1.02 0 -0.1 1.02 0 -0.05 1.02 0 - 2.77556e-17 1.02 0 0.05 1.02 0 0.1 1.02 0 0.15 1.02 0 + 0 1.02 0 0.05 1.02 0 0.1 1.02 0 0.15 1.02 0 0.2 1.02 0 0.25 1.02 0 0.3 1.02 0 0.35 1.02 0 0.4 1.02 0 0.45 1.02 0 0.5 1.02 0 0.55 1.02 0 0.6 1.02 0 0.65 1.02 0 0.7 1.02 0 0.75 1.02 0 @@ -2392,7 +2392,7 @@ 1.8 1.02 0 1.85 1.02 0 1.9 1.02 0 1.95 1.02 0 2 1.02 0 -0.5 1.06 0 -0.45 1.06 0 -0.4 1.06 0 -0.35 1.06 0 -0.3 1.06 0 -0.25 1.06 0 -0.2 1.06 0 - -0.15 1.06 0 -0.1 1.06 0 -0.05 1.06 0 2.77556e-17 1.06 0 + -0.15 1.06 0 -0.1 1.06 0 -0.05 1.06 0 0 1.06 0 0.05 1.06 0 0.1 1.06 0 0.15 1.06 0 0.2 1.06 0 0.25 1.06 0 0.3 1.06 0 0.35 1.06 0 0.4 1.06 0 0.45 1.06 0 0.5 1.06 0 0.55 1.06 0 0.6 1.06 0 @@ -2405,7 +2405,7 @@ 1.85 1.06 0 1.9 1.06 0 1.95 1.06 0 2 1.06 0 -0.5 1.1 0 -0.45 1.1 0 -0.4 1.1 0 -0.35 1.1 0 -0.3 1.1 0 -0.25 1.1 0 -0.2 1.1 0 -0.15 1.1 0 - -0.1 1.1 0 -0.05 1.1 0 2.77556e-17 1.1 0 0.05 1.1 0 + -0.1 1.1 0 -0.05 1.1 0 0 1.1 0 0.05 1.1 0 0.1 1.1 0 0.15 1.1 0 0.2 1.1 0 0.25 1.1 0 0.3 1.1 0 0.35 1.1 0 0.4 1.1 0 0.45 1.1 0 0.5 1.1 0 0.55 1.1 0 0.6 1.1 0 0.65 1.1 0 @@ -2418,7 +2418,7 @@ 1.9 1.1 0 1.95 1.1 0 2 1.1 0 -0.5 1.14 0 -0.45 1.14 0 -0.4 1.14 0 -0.35 1.14 0 -0.3 1.14 0 -0.25 1.14 0 -0.2 1.14 0 -0.15 1.14 0 -0.1 1.14 0 - -0.05 1.14 0 2.77556e-17 1.14 0 0.05 1.14 0 0.1 1.14 0 + -0.05 1.14 0 0 1.14 0 0.05 1.14 0 0.1 1.14 0 0.15 1.14 0 0.2 1.14 0 0.25 1.14 0 0.3 1.14 0 0.35 1.14 0 0.4 1.14 0 0.45 1.14 0 0.5 1.14 0 0.55 1.14 0 0.6 1.14 0 0.65 1.14 0 0.7 1.14 0 @@ -2431,7 +2431,7 @@ 1.95 1.14 0 2 1.14 0 -0.5 1.18 0 -0.45 1.18 0 -0.4 1.18 0 -0.35 1.18 0 -0.3 1.18 0 -0.25 1.18 0 -0.2 1.18 0 -0.15 1.18 0 -0.1 1.18 0 -0.05 1.18 0 - 2.77556e-17 1.18 0 0.05 1.18 0 0.1 1.18 0 0.15 1.18 0 + 0 1.18 0 0.05 1.18 0 0.1 1.18 0 0.15 1.18 0 0.2 1.18 0 0.25 1.18 0 0.3 1.18 0 0.35 1.18 0 0.4 1.18 0 0.45 1.18 0 0.5 1.18 0 0.55 1.18 0 0.6 1.18 0 0.65 1.18 0 0.7 1.18 0 0.75 1.18 0 @@ -2443,7 +2443,7 @@ 1.8 1.18 0 1.85 1.18 0 1.9 1.18 0 1.95 1.18 0 2 1.18 0 -0.5 1.22 0 -0.45 1.22 0 -0.4 1.22 0 -0.35 1.22 0 -0.3 1.22 0 -0.25 1.22 0 -0.2 1.22 0 - -0.15 1.22 0 -0.1 1.22 0 -0.05 1.22 0 2.77556e-17 1.22 0 + -0.15 1.22 0 -0.1 1.22 0 -0.05 1.22 0 0 1.22 0 0.05 1.22 0 0.1 1.22 0 0.15 1.22 0 0.2 1.22 0 0.25 1.22 0 0.3 1.22 0 0.35 1.22 0 0.4 1.22 0 0.45 1.22 0 0.5 1.22 0 0.55 1.22 0 0.6 1.22 0 @@ -2456,7 +2456,7 @@ 1.85 1.22 0 1.9 1.22 0 1.95 1.22 0 2 1.22 0 -0.5 1.26 0 -0.45 1.26 0 -0.4 1.26 0 -0.35 1.26 0 -0.3 1.26 0 -0.25 1.26 0 -0.2 1.26 0 -0.15 1.26 0 - -0.1 1.26 0 -0.05 1.26 0 2.77556e-17 1.26 0 0.05 1.26 0 + -0.1 1.26 0 -0.05 1.26 0 0 1.26 0 0.05 1.26 0 0.1 1.26 0 0.15 1.26 0 0.2 1.26 0 0.25 1.26 0 0.3 1.26 0 0.35 1.26 0 0.4 1.26 0 0.45 1.26 0 0.5 1.26 0 0.55 1.26 0 0.6 1.26 0 0.65 1.26 0 @@ -2469,7 +2469,7 @@ 1.9 1.26 0 1.95 1.26 0 2 1.26 0 -0.5 1.3 0 -0.45 1.3 0 -0.4 1.3 0 -0.35 1.3 0 -0.3 1.3 0 -0.25 1.3 0 -0.2 1.3 0 -0.15 1.3 0 -0.1 1.3 0 - -0.05 1.3 0 2.77556e-17 1.3 0 0.05 1.3 0 0.1 1.3 0 + -0.05 1.3 0 0 1.3 0 0.05 1.3 0 0.1 1.3 0 0.15 1.3 0 0.2 1.3 0 0.25 1.3 0 0.3 1.3 0 0.35 1.3 0 0.4 1.3 0 0.45 1.3 0 0.5 1.3 0 0.55 1.3 0 0.6 1.3 0 0.65 1.3 0 0.7 1.3 0 @@ -2482,7 +2482,7 @@ 1.95 1.3 0 2 1.3 0 -0.5 1.34 0 -0.45 1.34 0 -0.4 1.34 0 -0.35 1.34 0 -0.3 1.34 0 -0.25 1.34 0 -0.2 1.34 0 -0.15 1.34 0 -0.1 1.34 0 -0.05 1.34 0 - 2.77556e-17 1.34 0 0.05 1.34 0 0.1 1.34 0 0.15 1.34 0 + 0 1.34 0 0.05 1.34 0 0.1 1.34 0 0.15 1.34 0 0.2 1.34 0 0.25 1.34 0 0.3 1.34 0 0.35 1.34 0 0.4 1.34 0 0.45 1.34 0 0.5 1.34 0 0.55 1.34 0 0.6 1.34 0 0.65 1.34 0 0.7 1.34 0 0.75 1.34 0 @@ -2494,7 +2494,7 @@ 1.8 1.34 0 1.85 1.34 0 1.9 1.34 0 1.95 1.34 0 2 1.34 0 -0.5 1.38 0 -0.45 1.38 0 -0.4 1.38 0 -0.35 1.38 0 -0.3 1.38 0 -0.25 1.38 0 -0.2 1.38 0 - -0.15 1.38 0 -0.1 1.38 0 -0.05 1.38 0 2.77556e-17 1.38 0 + -0.15 1.38 0 -0.1 1.38 0 -0.05 1.38 0 0 1.38 0 0.05 1.38 0 0.1 1.38 0 0.15 1.38 0 0.2 1.38 0 0.25 1.38 0 0.3 1.38 0 0.35 1.38 0 0.4 1.38 0 0.45 1.38 0 0.5 1.38 0 0.55 1.38 0 0.6 1.38 0 @@ -2507,7 +2507,7 @@ 1.85 1.38 0 1.9 1.38 0 1.95 1.38 0 2 1.38 0 -0.5 1.42 0 -0.45 1.42 0 -0.4 1.42 0 -0.35 1.42 0 -0.3 1.42 0 -0.25 1.42 0 -0.2 1.42 0 -0.15 1.42 0 - -0.1 1.42 0 -0.05 1.42 0 2.77556e-17 1.42 0 0.05 1.42 0 + -0.1 1.42 0 -0.05 1.42 0 0 1.42 0 0.05 1.42 0 0.1 1.42 0 0.15 1.42 0 0.2 1.42 0 0.25 1.42 0 0.3 1.42 0 0.35 1.42 0 0.4 1.42 0 0.45 1.42 0 0.5 1.42 0 0.55 1.42 0 0.6 1.42 0 0.65 1.42 0 @@ -2520,7 +2520,7 @@ 1.9 1.42 0 1.95 1.42 0 2 1.42 0 -0.5 1.46 0 -0.45 1.46 0 -0.4 1.46 0 -0.35 1.46 0 -0.3 1.46 0 -0.25 1.46 0 -0.2 1.46 0 -0.15 1.46 0 -0.1 1.46 0 - -0.05 1.46 0 2.77556e-17 1.46 0 0.05 1.46 0 0.1 1.46 0 + -0.05 1.46 0 0 1.46 0 0.05 1.46 0 0.1 1.46 0 0.15 1.46 0 0.2 1.46 0 0.25 1.46 0 0.3 1.46 0 0.35 1.46 0 0.4 1.46 0 0.45 1.46 0 0.5 1.46 0 0.55 1.46 0 0.6 1.46 0 0.65 1.46 0 0.7 1.46 0 @@ -2533,7 +2533,7 @@ 1.95 1.46 0 2 1.46 0 -0.5 1.5 0 -0.45 1.5 0 -0.4 1.5 0 -0.35 1.5 0 -0.3 1.5 0 -0.25 1.5 0 -0.2 1.5 0 -0.15 1.5 0 -0.1 1.5 0 -0.05 1.5 0 - 2.77556e-17 1.5 0 0.05 1.5 0 0.1 1.5 0 0.15 1.5 0 + 0 1.5 0 0.05 1.5 0 0.1 1.5 0 0.15 1.5 0 0.2 1.5 0 0.25 1.5 0 0.3 1.5 0 0.35 1.5 0 0.4 1.5 0 0.45 1.5 0 0.5 1.5 0 0.55 1.5 0 0.6 1.5 0 0.65 1.5 0 0.7 1.5 0 0.75 1.5 0