diff --git a/dumux/assembly/boxlocalresidual.hh b/dumux/assembly/boxlocalresidual.hh index 5b8853c4c75cd01101537354948cffaf63828de7..6cd2f15013220b8c57d4fea3c2b0206d19b5a678 100644 --- a/dumux/assembly/boxlocalresidual.hh +++ b/dumux/assembly/boxlocalresidual.hh @@ -54,9 +54,11 @@ class BoxLocalResidual : public FVLocalResidual using FVElementGeometry = typename GridGeometry::LocalView; using Extrusion = Extrusion_t; using ElementVolumeVariables = typename GetPropType::LocalView; + using SubControlVolume = typename FVElementGeometry::SubControlVolume; using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; using ElementFluxVariablesCache = typename GetPropType::LocalView; using NumEqVector = Dumux::NumEqVector>; + using EnergyLocalResidual = GetPropType; public: using ElementResidualVector = typename ParentType::ElementResidualVector; @@ -129,6 +131,42 @@ public: return flux; } + + /*! + * \brief Calculate the source term of the equation + * + * \param problem The problem to solve + * \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 elemVolVars The volume variables associated with the element stencil + * \param elemFluxVarsCache The cache related to flux computation + * \param scv The sub-control volume over which we integrate the source term + * \note This is the default implementation for all models as sources are computed + * in the user interface of the problem + * + */ + NumEqVector computeSource(const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, + const SubControlVolume &scv) const + { + NumEqVector source(0.0); + + // add contributions from volume flux sources + source += problem.source(element, fvGeometry, elemVolVars, scv); + + // add contribution from possible point sources + source += problem.scvPointSources(element, fvGeometry, elemVolVars, scv); + + // add the contribution from p.div(v) + // for cell-centered, this is part of EnergyLocalResidual::heatConvectionFlux + EnergyLocalResidual::computeVolumeWork(source, problem, element, fvGeometry, elemVolVars, elemFluxVarsCache, scv); + + return source; + } }; } // end namespace Dumux diff --git a/dumux/assembly/fvlocalresidual.hh b/dumux/assembly/fvlocalresidual.hh index 01713a4ee693540c8ea55919067810b5983671ac..0dedd666d6fd33a13761664530ee7435a849f1df 100644 --- a/dumux/assembly/fvlocalresidual.hh +++ b/dumux/assembly/fvlocalresidual.hh @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -36,6 +37,26 @@ namespace Dumux { +namespace Detail { +template +struct evalSourceNeedsCache +{ + template + auto operator()(const LocalResidual& r) + -> decltype(r.evalSource(std::declval(), std::declval

(), std::declval(), std::declval(), std::declval(), std::declval(), std::declval())) + {} +}; + +template +struct computeSourceNeedsCache +{ + template + auto operator()(const LocalResidual& r) + -> decltype(r.computeSource(std::declval

(), std::declval(), std::declval(), std::declval(), std::declval(), std::declval())) + {} +}; +} + /*! * \ingroup Assembly * \brief The element-wise residual for finite volume schemes @@ -173,7 +194,14 @@ public: // evaluate the volume terms (storage + source terms) // forward to the local residual specialized for the discretization methods for (auto&& scv : scvs(fvGeometry)) - asImp().evalSource(residual, this->problem(), element, fvGeometry, elemVolVars, scv); + { + static constexpr auto needsCache = decltype(isValid(Detail::evalSourceNeedsCache())(asImp()))::value; + + if constexpr (needsCache) + asImp().evalSource(residual, this->problem(), element, fvGeometry, elemVolVars, elemFluxVarsCache, scv); + else + asImp().evalSource(residual, this->problem(), element, fvGeometry, elemVolVars, scv); + } // forward to the local residual specialized for the discretization methods for (auto&& scvf : scvfs(fvGeometry)) @@ -327,6 +355,7 @@ public: * \param fvGeometry The finite-volume geometry of the element * \param curElemVolVars The volume averaged variables for all * sub-control volumes of the element at the current time level + * \param elemFluxVarsCache The cache related to flux computation * \param scv The sub control volume the source term is integrated over */ void evalSource(ElementResidualVector& residual, @@ -334,11 +363,20 @@ public: const Element& element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& curElemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, const SubControlVolume& scv) const { //! Compute source with the model specific storage residual const auto& curVolVars = curElemVolVars[scv]; - NumEqVector source = asImp().computeSource(problem, element, fvGeometry, curElemVolVars, scv); + + static constexpr auto needsCache = decltype(isValid(Detail::computeSourceNeedsCache())(asImp()))::value; + + NumEqVector source; + if constexpr (needsCache) + source = asImp().computeSource(problem, element, fvGeometry, curElemVolVars, elemFluxVarsCache, scv); + else + source = asImp().computeSource(problem, element, fvGeometry, curElemVolVars, scv); + source *= Extrusion::volume(scv)*curVolVars.extrusionFactor(); //! subtract source from local rate (sign convention in user interface) diff --git a/dumux/porousmediumflow/nonisothermal/localresidual.hh b/dumux/porousmediumflow/nonisothermal/localresidual.hh index e0490095824b3992e222d22d9950fed5d98e2201..3f098b4689d9a257148401c754ee3d5f146d7358 100644 --- a/dumux/porousmediumflow/nonisothermal/localresidual.hh +++ b/dumux/porousmediumflow/nonisothermal/localresidual.hh @@ -28,6 +28,7 @@ #include #include +#include namespace Dumux { @@ -51,6 +52,11 @@ class EnergyLocalResidualImplementation using FVElementGeometry = typename GetPropType::LocalView; using SubControlVolume = typename FVElementGeometry::SubControlVolume; using FluxVariables = GetPropType; + using Problem = GetPropType; + using GridView = typename GetPropType::GridView; + using Element = typename GridView::template Codim<0>::Entity; + using ElementVolumeVariables = typename GetPropType::LocalView; + using ElementFluxVariablesCache = typename GetPropType::LocalView; public: /*! @@ -100,6 +106,26 @@ public: static void heatConductionFlux(NumEqVector& flux, FluxVariables& fluxVars) {} + + /*! + * \brief compute the contribution of p.div(v) for the box method + * + * \param source The source which ought to be simulated + * \param problem The problem to solve + * \param element An element which contains part of the control volume + * \param fvGeometry The finite-volume geometry + * \param elemVolVars The volume variables of the current element + * \param elemFluxVarsCache The cache related to flux computation + * \param scv The sub-control volume over which we integrate the source term + */ + static void computeVolumeWork(NumEqVector& source, + const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, + const SubControlVolume &scv) + {} }; /*! @@ -118,9 +144,17 @@ class EnergyLocalResidualImplementation using GridView = typename GetPropType::GridView; using Element = typename GridView::template Codim<0>::Entity; using ElementVolumeVariables = typename GetPropType::LocalView; + using ElementFluxVariablesCache = typename GetPropType::LocalView; using Indices = typename GetPropType::Indices; + using ModelTraits = GetPropType; + using Problem = GetPropType; + using BoundaryTypes = Dumux::BoundaryTypes; + using GridGeometry = GetPropType; + using Extrusion = Extrusion_t; - enum { energyEqIdx = Indices::energyEqIdx }; + static constexpr int numPhases = ModelTraits::numFluidPhases(); + static constexpr int energyEqIdx = Indices::energyEqIdx; + static constexpr bool isBox = GridGeometry::discMethod == DiscretizationMethod::box; public: @@ -171,10 +205,21 @@ public: FluxVariables& fluxVars, int phaseIdx) { - auto upwindTerm = [phaseIdx](const auto& volVars) - { return volVars.density(phaseIdx)*volVars.mobility(phaseIdx)*volVars.enthalpy(phaseIdx); }; + const auto upwindTerm = [phaseIdx](const auto& volVars) + { return volVars.density(phaseIdx)*volVars.mobility(phaseIdx)*volVars.internalEnergy(phaseIdx); }; flux[energyEqIdx] += fluxVars.advectiveFlux(phaseIdx, upwindTerm); + + // by default, add the contribution from p.div(v) + // for box, this is done in computeVolumeWork as part of evalSource + if constexpr (!isBox) + { + const auto insidePressure = fluxVars.elemVolVars()[fluxVars.scvFace().insideScvIdx()].pressure(phaseIdx); + const auto velUpwindTerm = [phaseIdx](const auto& volVars) + { return volVars.mobility(phaseIdx); }; + + flux[energyEqIdx] += -insidePressure*fluxVars.advectiveFlux(phaseIdx, velUpwindTerm); + } } /*! @@ -190,14 +235,68 @@ public: } /*! - * \brief heat transfer between the phases for nonequilibrium models + * \brief compute the contribution of p.div(v) for the box method * * \param source The source which ought to be simulated + * \param problem The problem to solve * \param element An element which contains part of the control volume * \param fvGeometry The finite-volume geometry * \param elemVolVars The volume variables of the current element + * \param elemFluxVarsCache The cache related to flux computation * \param scv The sub-control volume over which we integrate the source term */ + static void computeVolumeWork(NumEqVector& source, + const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, + const SubControlVolume &scv) + { + static_assert(isBox, "This function should only be called for the box discretization.\n" + "Other discretizations are treated by means of heatConvectionFlux."); + + Scalar volumeWork = 0.0; + + for (auto&& scvf : scvfs(fvGeometry)) + { + // only treat scvfs that are faces of the scv + if (scvf.insideScvIdx() != scv.localDofIndex() + && scvf.outsideScvIdx() != scv.localDofIndex()) + continue; + + // determine boundary types and if the scv is inside relative to the scvf + BoundaryTypes bcTypes = problem.boundaryTypes(element, scv); + bool isInsideScv = scvf.insideScvIdx() == scv.localDofIndex(); + + // \todo: treat general Neumann boundary faces + if (!scvf.boundary() || bcTypes.hasDirichlet()) + { + FluxVariables fluxVars; + fluxVars.init(problem, element, fvGeometry, elemVolVars, scvf, elemFluxVarsCache); + + for (int phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) + { + const auto scvPressure = elemVolVars[scv].pressure(phaseIdx); + const auto velUpwindTerm = [phaseIdx](const auto& volVars) + { return volVars.mobility(phaseIdx); }; + + // add or subtract depending on the orientation of scv and scvf + if (isInsideScv) + volumeWork -= scvPressure*fluxVars.advectiveFlux(phaseIdx, velUpwindTerm); + else + volumeWork += scvPressure*fluxVars.advectiveFlux(phaseIdx, velUpwindTerm); + } + } + } + + // divide by the volume and the extrusion factor as this term is + // multiplied with in the general evalSource function + volumeWork /= Extrusion::volume(scv)*elemVolVars[scv].extrusionFactor(); + + source[energyEqIdx] += volumeWork; + } + static void computeSourceEnergy(NumEqVector& source, const Element& element, const FVElementGeometry& fvGeometry, diff --git a/test/porousmediumflow/1p/nonisothermal/CMakeLists.txt b/test/porousmediumflow/1p/nonisothermal/CMakeLists.txt index 9b2594e883040fe3de10ff0f124eea04a6e8301c..527d15c132c6ec5cdf2c1acb79b0b8e8bb95af64 100644 --- a/test/porousmediumflow/1p/nonisothermal/CMakeLists.txt +++ b/test/porousmediumflow/1p/nonisothermal/CMakeLists.txt @@ -1,3 +1,4 @@ +add_subdirectory(simple) add_input_file_links() # non-isothermal tests diff --git a/test/porousmediumflow/1p/nonisothermal/simple/CMakeLists.txt b/test/porousmediumflow/1p/nonisothermal/simple/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..2e7a95c49fa1c9c02ba1727b4cdd6b183ac8b5f9 --- /dev/null +++ b/test/porousmediumflow/1p/nonisothermal/simple/CMakeLists.txt @@ -0,0 +1,43 @@ +add_input_file_links() + +add_executable(test_1pni_simple_tpfa EXCLUDE_FROM_ALL main.cc) +target_compile_definitions(test_1pni_simple_tpfa PUBLIC TYPETAG=OnePNISimpleTpfa) + +add_executable(test_1pni_simple_box EXCLUDE_FROM_ALL main.cc) +target_compile_definitions(test_1pni_simple_box PUBLIC TYPETAG=OnePNISimpleBox) + +dumux_add_test(NAME test_1pni_simple_linear_tpfa + TARGET test_1pni_simple_tpfa + LABELS porousmediumflow 1p 1pni + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/1pni_simple_linear_tpfa-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/1pni_simple_linear_tpfa-00001.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_1pni_simple_tpfa params.input -Problem.Name 1pni_simple_linear_tpfa") + +dumux_add_test(NAME test_1pni_simple_linear_box + TARGET test_1pni_simple_box + LABELS porousmediumflow 1p 1pni + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/1pni_simple_linear_box-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/1pni_simple_linear_box-00001.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_1pni_simple_box params.input -Problem.Name 1pni_simple_linear_box") + +dumux_add_test(NAME test_1pni_simple_source_tpfa + TARGET test_1pni_simple_tpfa + LABELS porousmediumflow 1p 1pni + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/1pni_simple_source_tpfa-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/1pni_simple_source_tpfa-00001.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_1pni_simple_tpfa params.input -Problem.Name 1pni_simple_source_tpfa") + +dumux_add_test(NAME test_1pni_simple_source_box + TARGET test_1pni_simple_box + LABELS porousmediumflow 1p 1pni + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/1pni_simple_source_box-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/1pni_simple_source_box-00001.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_1pni_simple_box params.input -Problem.Name 1pni_simple_source_box") diff --git a/test/porousmediumflow/1p/nonisothermal/simple/main.cc b/test/porousmediumflow/1p/nonisothermal/simple/main.cc new file mode 100644 index 0000000000000000000000000000000000000000..bcf28fda9cbb3090efada16e88ee7166c0b13f10 --- /dev/null +++ b/test/porousmediumflow/1p/nonisothermal/simple/main.cc @@ -0,0 +1,104 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief Test for the 1pni CC model + */ + +#include + +#include + +#include + +#include +#include + +#include +#include +#include + +#include + +#include +#include + +#include "properties.hh" + +int main(int argc, char** argv) +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = Properties::TTag::TYPETAG; + + // initialize MPI, finalize is done automatically on exit + const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); + + // parse command line arguments and input file + Parameters::init(argc, argv); + + // try to create a grid (from the given grid file or the input file) + GridManager> gridManager; + gridManager.init(); + + // we compute on the leaf grid view + const auto& leafGridView = gridManager.grid().leafGridView(); + + // create the finite volume grid geometry + using GridGeometry = GetPropType; + auto gridGeometry = std::make_shared(leafGridView); + gridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = GetPropType; + auto problem = std::make_shared(gridGeometry); + + using SolutionVector = GetPropType; + SolutionVector x; + problem->applyInitialSolution(x); + + // the grid variables + using GridVariables = GetPropType; + auto gridVariables = std::make_shared(problem, gridGeometry); + gridVariables->init(x); + + // intialize the vtk output module + using IOFields = GetPropType; + VtkOutputModule vtkWriter(*gridVariables, x, problem->name()); + IOFields::initOutputModule(vtkWriter); // Add model specific output fields + vtkWriter.write(0.0); + + using Assembler = FVAssembler; + auto assembler = std::make_shared(problem, gridGeometry, gridVariables); + + using LinearSolver = ILU0BiCGSTABBackend; + auto linearSolver = std::make_shared(); + + using NewtonSolver = Dumux::NewtonSolver; + NewtonSolver nonLinearSolver(assembler, linearSolver); + nonLinearSolver.solve(x); + vtkWriter.write(1.0); + + if (mpiHelper.rank() == 0) + Parameters::print(); + + return 0; +} // end main diff --git a/test/porousmediumflow/1p/nonisothermal/simple/params.input b/test/porousmediumflow/1p/nonisothermal/simple/params.input new file mode 100644 index 0000000000000000000000000000000000000000..36017c98fdf83a711844f9bfa32e463b978d3014 --- /dev/null +++ b/test/porousmediumflow/1p/nonisothermal/simple/params.input @@ -0,0 +1,15 @@ +[Grid] +UpperRight = 1 1 +Cells = 20 20 + +[Problem] +Name = simple_1pni +EnableGravity = false # disable gravity + +[SimpleH2O] +ReferenceTemperature = 0 + +[Component] +SolidDensity = 2700 +SolidThermalConductivity = 0.0 +SolidHeatCapacity = 790 diff --git a/test/porousmediumflow/1p/nonisothermal/simple/problem.hh b/test/porousmediumflow/1p/nonisothermal/simple/problem.hh new file mode 100644 index 0000000000000000000000000000000000000000..72cd10ad2cee518f9fc96c5a6efe9e5029910e4b --- /dev/null +++ b/test/porousmediumflow/1p/nonisothermal/simple/problem.hh @@ -0,0 +1,120 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief Test for the OnePModel in combination with the NI model for a simple problem. + * + * The simulation domain is the unit square. While a pressure gradient from left + * to right is imposed by corresponding Dirichlet conditions, the prescribed + * temperature is the same on both sides. Therefore, a uniform constant temperature + * distribution should be expected. + */ + +#ifndef DUMUX_TEST_1PNI_SIMPLE_PROBLEM_HH +#define DUMUX_TEST_1PNI_SIMPLE_PROBLEM_HH + +#include +#include +#include +#include + +#include + +namespace Dumux { + +/*! + * \ingroup OnePTests + * \brief Test for the OnePModel in combination with the NI model + */ +template +class OnePNISimpleProblem : public PorousMediumFlowProblem +{ + using ParentType = PorousMediumFlowProblem; + using GridView = typename GetPropType::GridView; + using Scalar = GetPropType; + using PrimaryVariables = GetPropType; + using BoundaryTypes = Dumux::BoundaryTypes::numEq()>; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + using GridGeometry = GetPropType; + using Indices = typename GetPropType::Indices; + using NumEqVector = Dumux::NumEqVector; + +public: + OnePNISimpleProblem(std::shared_ptr gridGeometry) + : ParentType(gridGeometry) + { + name_ = getParam("Problem.Name"); + rightPressure_ = getParam("Problem.RightPressure", 1e5); + injectionRate_ = getParam("Problem.InjectionRate", 0.0); + multiplier_ = getParam("Problem.Multiplier", 1.0); + } + + const std::string& name() const + { return name_; } + + + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes bcTypes; + + if (globalPos[0] < this->gridGeometry().bBoxMin()[0] + eps_ || globalPos[0] > this->gridGeometry().bBoxMax()[0] - eps_) + bcTypes.setAllDirichlet(); + else + bcTypes.setAllNeumann(); + + return bcTypes; + } + + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + if (globalPos[0] < this->gridGeometry().bBoxMin()[0] + eps_) + return {1e5, 300.0}; + else + return {rightPressure_, 300.0}; + } + + NumEqVector sourceAtPos(const GlobalPosition& globalPos) const + { + NumEqVector values(0.0); + + if (globalPos[0] < 0.6 && globalPos[0] > 0.4 && globalPos[1] < 0.6 && globalPos[1] > 0.4) + { + values[Indices::conti0EqIdx] = injectionRate_; + values[Indices::conti0EqIdx] = injectionRate_*multiplier_; + } + + return values; + } + + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + { return dirichletAtPos(globalPos); } + +private: + static constexpr Scalar eps_ = 1e-6; + std::string name_; + Scalar rightPressure_; + Scalar injectionRate_; + Scalar multiplier_; +}; + +} // end namespace Dumux + +#endif diff --git a/test/porousmediumflow/1p/nonisothermal/simple/properties.hh b/test/porousmediumflow/1p/nonisothermal/simple/properties.hh new file mode 100644 index 0000000000000000000000000000000000000000..4bcaadec8ec767d103aad839e0c1b86668a5e187 --- /dev/null +++ b/test/porousmediumflow/1p/nonisothermal/simple/properties.hh @@ -0,0 +1,73 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief Test for the OnePModel in combination with the NI model for a simple problem. + */ + +#ifndef DUMUX_TEST_1PNI_SIMPLE_PROPERTIES_HH +#define DUMUX_TEST_1PNI_SIMPLE_PROPERTIES_HH + +#include + +#include +#include +#include +#include +#include + +#include "problem.hh" +#include "spatialparams.hh" + +namespace Dumux::Properties { +// Create new type tags +namespace TTag { +struct OnePNISimple { using InheritsFrom = std::tuple; }; +struct OnePNISimpleTpfa { using InheritsFrom = std::tuple; }; +struct OnePNISimpleBox { using InheritsFrom = std::tuple; }; +} // end namespace TTag + +// Set the grid type +template +struct Grid { using type = Dune::YaspGrid<2>; }; + +// Set the problem property +template +struct Problem { using type = OnePNISimpleProblem; }; + +// Set the fluid system +template +struct FluidSystem +{ + using type = FluidSystems::OnePLiquid, + Components::SimpleH2O> >; +}; + +// Set the spatial parameters +template +struct SpatialParams +{ + using GridGeometry = GetPropType; + using Scalar = GetPropType; + using type = OnePNISpatialParams; +}; +} // end namespace Dumux + +#endif diff --git a/test/porousmediumflow/1p/nonisothermal/simple/spatialparams.hh b/test/porousmediumflow/1p/nonisothermal/simple/spatialparams.hh new file mode 100644 index 0000000000000000000000000000000000000000..d12685adcb987cb9f36a7f6a470aa2980e540526 --- /dev/null +++ b/test/porousmediumflow/1p/nonisothermal/simple/spatialparams.hh @@ -0,0 +1,74 @@ +// -*- 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 3 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 + * \ingroup OnePTests + * \brief Definition of the spatial parameters for the simple 1pni problem. + */ + +#ifndef DUMUX_TEST_1PNI_SIMPLE_SPATIAL_PARAMS_HH +#define DUMUX_TEST_1PNI_SIMPLE_SPATIAL_PARAMS_HH + +#include + +namespace Dumux { + +/*! + * \ingroup OnePTests + * \brief Definition of the spatial parameters for the 1pni problems. + */ +template +class OnePNISpatialParams +: public FVSpatialParamsOneP> +{ + using GridView = typename GridGeometry::GridView; + using ParentType = FVSpatialParamsOneP>; + + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + // export permeability type + using PermeabilityType = Scalar; + + OnePNISpatialParams(std::shared_ptr gridGeometry) + : ParentType(gridGeometry) {} + + /*! + * \brief Defines the intrinsic permeability \f$\mathrm{[m^2]}\f$. + * + * \param globalPos The global position + */ + PermeabilityType permeabilityAtPos(const GlobalPosition& globalPos) const + { return 1e-10; } + + /*! + * \brief Defines the porosity \f$\mathrm{[-]}\f$. + * + * \param globalPos The global position + */ + Scalar porosityAtPos(const GlobalPosition& globalPos) const + { return 0.4; } +}; + +} // end namespace Dumux + +#endif diff --git a/test/references/1pni_simple_linear_box-reference.vtu b/test/references/1pni_simple_linear_box-reference.vtu new file mode 100644 index 0000000000000000000000000000000000000000..bf8ea7968add1d38db4a28ea1189016204b0b639 --- /dev/null +++ b/test/references/1pni_simple_linear_box-reference.vtu @@ -0,0 +1,450 @@ + + + + + + + 100000 145000 100000 145000 190000 190000 235000 235000 280000 280000 325000 325000 + 370000 370000 415000 415000 460000 460000 505000 505000 550000 550000 595000 595000 + 640000 640000 685000 685000 730000 730000 775000 775000 820000 820000 865000 865000 + 910000 910000 955000 955000 1e+06 1e+06 100000 145000 190000 235000 280000 325000 + 370000 415000 460000 505000 550000 595000 640000 685000 730000 775000 820000 865000 + 910000 955000 1e+06 100000 145000 190000 235000 280000 325000 370000 415000 460000 + 505000 550000 595000 640000 685000 730000 775000 820000 865000 910000 955000 1e+06 + 100000 145000 190000 235000 280000 325000 370000 415000 460000 505000 550000 595000 + 640000 685000 730000 775000 820000 865000 910000 955000 1e+06 100000 145000 190000 + 235000 280000 325000 370000 415000 460000 505000 550000 595000 640000 685000 730000 + 775000 820000 865000 910000 955000 1e+06 100000 145000 190000 235000 280000 325000 + 370000 415000 460000 505000 550000 595000 640000 685000 730000 775000 820000 865000 + 910000 955000 1e+06 100000 145000 190000 235000 280000 325000 370000 415000 460000 + 505000 550000 595000 640000 685000 730000 775000 820000 865000 910000 955000 1e+06 + 100000 145000 190000 235000 280000 325000 370000 415000 460000 505000 550000 595000 + 640000 685000 730000 775000 820000 865000 910000 955000 1e+06 100000 145000 190000 + 235000 280000 325000 370000 415000 460000 505000 550000 595000 640000 685000 730000 + 775000 820000 865000 910000 955000 1e+06 100000 145000 190000 235000 280000 325000 + 370000 415000 460000 505000 550000 595000 640000 685000 730000 775000 820000 865000 + 910000 955000 1e+06 100000 145000 190000 235000 280000 325000 370000 415000 460000 + 505000 550000 595000 640000 685000 730000 775000 820000 865000 910000 955000 1e+06 + 100000 145000 190000 235000 280000 325000 370000 415000 460000 505000 550000 595000 + 640000 685000 730000 775000 820000 865000 910000 955000 1e+06 100000 145000 190000 + 235000 280000 325000 370000 415000 460000 505000 550000 595000 640000 685000 730000 + 775000 820000 865000 910000 955000 1e+06 100000 145000 190000 235000 280000 325000 + 370000 415000 460000 505000 550000 595000 640000 685000 730000 775000 820000 865000 + 910000 955000 1e+06 100000 145000 190000 235000 280000 325000 370000 415000 460000 + 505000 550000 595000 640000 685000 730000 775000 820000 865000 910000 955000 1e+06 + 100000 145000 190000 235000 280000 325000 370000 415000 460000 505000 550000 595000 + 640000 685000 730000 775000 820000 865000 910000 955000 1e+06 100000 145000 190000 + 235000 280000 325000 370000 415000 460000 505000 550000 595000 640000 685000 730000 + 775000 820000 865000 910000 955000 1e+06 100000 145000 190000 235000 280000 325000 + 370000 415000 460000 505000 550000 595000 640000 685000 730000 775000 820000 865000 + 910000 955000 1e+06 100000 145000 190000 235000 280000 325000 370000 415000 460000 + 505000 550000 595000 640000 685000 730000 775000 820000 865000 910000 955000 1e+06 + 100000 145000 190000 235000 280000 325000 370000 415000 460000 505000 550000 595000 + 640000 685000 730000 775000 820000 865000 910000 955000 1e+06 + + + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 + + + + + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 + + + + + 0 0 0 0.05 0 0 0 0.05 0 0.05 0.05 0 + 0.1 0 0 0.1 0.05 0 0.15 0 0 0.15 0.05 0 + 0.2 0 0 0.2 0.05 0 0.25 0 0 0.25 0.05 0 + 0.3 0 0 0.3 0.05 0 0.35 0 0 0.35 0.05 0 + 0.4 0 0 0.4 0.05 0 0.45 0 0 0.45 0.05 0 + 0.5 0 0 0.5 0.05 0 0.55 0 0 0.55 0.05 0 + 0.6 0 0 0.6 0.05 0 0.65 0 0 0.65 0.05 0 + 0.7 0 0 0.7 0.05 0 0.75 0 0 0.75 0.05 0 + 0.8 0 0 0.8 0.05 0 0.85 0 0 0.85 0.05 0 + 0.9 0 0 0.9 0.05 0 0.95 0 0 0.95 0.05 0 + 1 0 0 1 0.05 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 0.8 0.1 0 0.85 0.1 0 + 0.9 0.1 0 0.95 0.1 0 1 0.1 0 0 0.15 0 + 0.05 0.15 0 0.1 0.15 0 0.15 0.15 0 0.2 0.15 0 + 0.25 0.15 0 0.3 0.15 0 0.35 0.15 0 0.4 0.15 0 + 0.45 0.15 0 0.5 0.15 0 0.55 0.15 0 0.6 0.15 0 + 0.65 0.15 0 0.7 0.15 0 0.75 0.15 0 0.8 0.15 0 + 0.85 0.15 0 0.9 0.15 0 0.95 0.15 0 1 0.15 0 + 0 0.2 0 0.05 0.2 0 0.1 0.2 0 0.15 0.2 0 + 0.2 0.2 0 0.25 0.2 0 0.3 0.2 0 0.35 0.2 0 + 0.4 0.2 0 0.45 0.2 0 0.5 0.2 0 0.55 0.2 0 + 0.6 0.2 0 0.65 0.2 0 0.7 0.2 0 0.75 0.2 0 + 0.8 0.2 0 0.85 0.2 0 0.9 0.2 0 0.95 0.2 0 + 1 0.2 0 0 0.25 0 0.05 0.25 0 0.1 0.25 0 + 0.15 0.25 0 0.2 0.25 0 0.25 0.25 0 0.3 0.25 0 + 0.35 0.25 0 0.4 0.25 0 0.45 0.25 0 0.5 0.25 0 + 0.55 0.25 0 0.6 0.25 0 0.65 0.25 0 0.7 0.25 0 + 0.75 0.25 0 0.8 0.25 0 0.85 0.25 0 0.9 0.25 0 + 0.95 0.25 0 1 0.25 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 0.75 0.3 0 0.8 0.3 0 0.85 0.3 0 + 0.9 0.3 0 0.95 0.3 0 1 0.3 0 0 0.35 0 + 0.05 0.35 0 0.1 0.35 0 0.15 0.35 0 0.2 0.35 0 + 0.25 0.35 0 0.3 0.35 0 0.35 0.35 0 0.4 0.35 0 + 0.45 0.35 0 0.5 0.35 0 0.55 0.35 0 0.6 0.35 0 + 0.65 0.35 0 0.7 0.35 0 0.75 0.35 0 0.8 0.35 0 + 0.85 0.35 0 0.9 0.35 0 0.95 0.35 0 1 0.35 0 + 0 0.4 0 0.05 0.4 0 0.1 0.4 0 0.15 0.4 0 + 0.2 0.4 0 0.25 0.4 0 0.3 0.4 0 0.35 0.4 0 + 0.4 0.4 0 0.45 0.4 0 0.5 0.4 0 0.55 0.4 0 + 0.6 0.4 0 0.65 0.4 0 0.7 0.4 0 0.75 0.4 0 + 0.8 0.4 0 0.85 0.4 0 0.9 0.4 0 0.95 0.4 0 + 1 0.4 0 0 0.45 0 0.05 0.45 0 0.1 0.45 0 + 0.15 0.45 0 0.2 0.45 0 0.25 0.45 0 0.3 0.45 0 + 0.35 0.45 0 0.4 0.45 0 0.45 0.45 0 0.5 0.45 0 + 0.55 0.45 0 0.6 0.45 0 0.65 0.45 0 0.7 0.45 0 + 0.75 0.45 0 0.8 0.45 0 0.85 0.45 0 0.9 0.45 0 + 0.95 0.45 0 1 0.45 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 0.75 0.5 0 0.8 0.5 0 0.85 0.5 0 + 0.9 0.5 0 0.95 0.5 0 1 0.5 0 0 0.55 0 + 0.05 0.55 0 0.1 0.55 0 0.15 0.55 0 0.2 0.55 0 + 0.25 0.55 0 0.3 0.55 0 0.35 0.55 0 0.4 0.55 0 + 0.45 0.55 0 0.5 0.55 0 0.55 0.55 0 0.6 0.55 0 + 0.65 0.55 0 0.7 0.55 0 0.75 0.55 0 0.8 0.55 0 + 0.85 0.55 0 0.9 0.55 0 0.95 0.55 0 1 0.55 0 + 0 0.6 0 0.05 0.6 0 0.1 0.6 0 0.15 0.6 0 + 0.2 0.6 0 0.25 0.6 0 0.3 0.6 0 0.35 0.6 0 + 0.4 0.6 0 0.45 0.6 0 0.5 0.6 0 0.55 0.6 0 + 0.6 0.6 0 0.65 0.6 0 0.7 0.6 0 0.75 0.6 0 + 0.8 0.6 0 0.85 0.6 0 0.9 0.6 0 0.95 0.6 0 + 1 0.6 0 0 0.65 0 0.05 0.65 0 0.1 0.65 0 + 0.15 0.65 0 0.2 0.65 0 0.25 0.65 0 0.3 0.65 0 + 0.35 0.65 0 0.4 0.65 0 0.45 0.65 0 0.5 0.65 0 + 0.55 0.65 0 0.6 0.65 0 0.65 0.65 0 0.7 0.65 0 + 0.75 0.65 0 0.8 0.65 0 0.85 0.65 0 0.9 0.65 0 + 0.95 0.65 0 1 0.65 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 0.8 0.7 0 0.85 0.7 0 + 0.9 0.7 0 0.95 0.7 0 1 0.7 0 0 0.75 0 + 0.05 0.75 0 0.1 0.75 0 0.15 0.75 0 0.2 0.75 0 + 0.25 0.75 0 0.3 0.75 0 0.35 0.75 0 0.4 0.75 0 + 0.45 0.75 0 0.5 0.75 0 0.55 0.75 0 0.6 0.75 0 + 0.65 0.75 0 0.7 0.75 0 0.75 0.75 0 0.8 0.75 0 + 0.85 0.75 0 0.9 0.75 0 0.95 0.75 0 1 0.75 0 + 0 0.8 0 0.05 0.8 0 0.1 0.8 0 0.15 0.8 0 + 0.2 0.8 0 0.25 0.8 0 0.3 0.8 0 0.35 0.8 0 + 0.4 0.8 0 0.45 0.8 0 0.5 0.8 0 0.55 0.8 0 + 0.6 0.8 0 0.65 0.8 0 0.7 0.8 0 0.75 0.8 0 + 0.8 0.8 0 0.85 0.8 0 0.9 0.8 0 0.95 0.8 0 + 1 0.8 0 0 0.85 0 0.05 0.85 0 0.1 0.85 0 + 0.15 0.85 0 0.2 0.85 0 0.25 0.85 0 0.3 0.85 0 + 0.35 0.85 0 0.4 0.85 0 0.45 0.85 0 0.5 0.85 0 + 0.55 0.85 0 0.6 0.85 0 0.65 0.85 0 0.7 0.85 0 + 0.75 0.85 0 0.8 0.85 0 0.85 0.85 0 0.9 0.85 0 + 0.95 0.85 0 1 0.85 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 0.65 0.9 0 + 0.7 0.9 0 0.75 0.9 0 0.8 0.9 0 0.85 0.9 0 + 0.9 0.9 0 0.95 0.9 0 1 0.9 0 0 0.95 0 + 0.05 0.95 0 0.1 0.95 0 0.15 0.95 0 0.2 0.95 0 + 0.25 0.95 0 0.3 0.95 0 0.35 0.95 0 0.4 0.95 0 + 0.45 0.95 0 0.5 0.95 0 0.55 0.95 0 0.6 0.95 0 + 0.65 0.95 0 0.7 0.95 0 0.75 0.95 0 0.8 0.95 0 + 0.85 0.95 0 0.9 0.95 0 0.95 0.95 0 1 0.95 0 + 0 1 0 0.05 1 0 0.1 1 0 0.15 1 0 + 0.2 1 0 0.25 1 0 0.3 1 0 0.35 1 0 + 0.4 1 0 0.45 1 0 0.5 1 0 0.55 1 0 + 0.6 1 0 0.65 1 0 0.7 1 0 0.75 1 0 + 0.8 1 0 0.85 1 0 0.9 1 0 0.95 1 0 + 1 1 0 + + + + + 0 1 3 2 1 4 5 3 4 6 7 5 + 6 8 9 7 8 10 11 9 10 12 13 11 + 12 14 15 13 14 16 17 15 16 18 19 17 + 18 20 21 19 20 22 23 21 22 24 25 23 + 24 26 27 25 26 28 29 27 28 30 31 29 + 30 32 33 31 32 34 35 33 34 36 37 35 + 36 38 39 37 38 40 41 39 2 3 43 42 + 3 5 44 43 5 7 45 44 7 9 46 45 + 9 11 47 46 11 13 48 47 13 15 49 48 + 15 17 50 49 17 19 51 50 19 21 52 51 + 21 23 53 52 23 25 54 53 25 27 55 54 + 27 29 56 55 29 31 57 56 31 33 58 57 + 33 35 59 58 35 37 60 59 37 39 61 60 + 39 41 62 61 42 43 64 63 43 44 65 64 + 44 45 66 65 45 46 67 66 46 47 68 67 + 47 48 69 68 48 49 70 69 49 50 71 70 + 50 51 72 71 51 52 73 72 52 53 74 73 + 53 54 75 74 54 55 76 75 55 56 77 76 + 56 57 78 77 57 58 79 78 58 59 80 79 + 59 60 81 80 60 61 82 81 61 62 83 82 + 63 64 85 84 64 65 86 85 65 66 87 86 + 66 67 88 87 67 68 89 88 68 69 90 89 + 69 70 91 90 70 71 92 91 71 72 93 92 + 72 73 94 93 73 74 95 94 74 75 96 95 + 75 76 97 96 76 77 98 97 77 78 99 98 + 78 79 100 99 79 80 101 100 80 81 102 101 + 81 82 103 102 82 83 104 103 84 85 106 105 + 85 86 107 106 86 87 108 107 87 88 109 108 + 88 89 110 109 89 90 111 110 90 91 112 111 + 91 92 113 112 92 93 114 113 93 94 115 114 + 94 95 116 115 95 96 117 116 96 97 118 117 + 97 98 119 118 98 99 120 119 99 100 121 120 + 100 101 122 121 101 102 123 122 102 103 124 123 + 103 104 125 124 105 106 127 126 106 107 128 127 + 107 108 129 128 108 109 130 129 109 110 131 130 + 110 111 132 131 111 112 133 132 112 113 134 133 + 113 114 135 134 114 115 136 135 115 116 137 136 + 116 117 138 137 117 118 139 138 118 119 140 139 + 119 120 141 140 120 121 142 141 121 122 143 142 + 122 123 144 143 123 124 145 144 124 125 146 145 + 126 127 148 147 127 128 149 148 128 129 150 149 + 129 130 151 150 130 131 152 151 131 132 153 152 + 132 133 154 153 133 134 155 154 134 135 156 155 + 135 136 157 156 136 137 158 157 137 138 159 158 + 138 139 160 159 139 140 161 160 140 141 162 161 + 141 142 163 162 142 143 164 163 143 144 165 164 + 144 145 166 165 145 146 167 166 147 148 169 168 + 148 149 170 169 149 150 171 170 150 151 172 171 + 151 152 173 172 152 153 174 173 153 154 175 174 + 154 155 176 175 155 156 177 176 156 157 178 177 + 157 158 179 178 158 159 180 179 159 160 181 180 + 160 161 182 181 161 162 183 182 162 163 184 183 + 163 164 185 184 164 165 186 185 165 166 187 186 + 166 167 188 187 168 169 190 189 169 170 191 190 + 170 171 192 191 171 172 193 192 172 173 194 193 + 173 174 195 194 174 175 196 195 175 176 197 196 + 176 177 198 197 177 178 199 198 178 179 200 199 + 179 180 201 200 180 181 202 201 181 182 203 202 + 182 183 204 203 183 184 205 204 184 185 206 205 + 185 186 207 206 186 187 208 207 187 188 209 208 + 189 190 211 210 190 191 212 211 191 192 213 212 + 192 193 214 213 193 194 215 214 194 195 216 215 + 195 196 217 216 196 197 218 217 197 198 219 218 + 198 199 220 219 199 200 221 220 200 201 222 221 + 201 202 223 222 202 203 224 223 203 204 225 224 + 204 205 226 225 205 206 227 226 206 207 228 227 + 207 208 229 228 208 209 230 229 210 211 232 231 + 211 212 233 232 212 213 234 233 213 214 235 234 + 214 215 236 235 215 216 237 236 216 217 238 237 + 217 218 239 238 218 219 240 239 219 220 241 240 + 220 221 242 241 221 222 243 242 222 223 244 243 + 223 224 245 244 224 225 246 245 225 226 247 246 + 226 227 248 247 227 228 249 248 228 229 250 249 + 229 230 251 250 231 232 253 252 232 233 254 253 + 233 234 255 254 234 235 256 255 235 236 257 256 + 236 237 258 257 237 238 259 258 238 239 260 259 + 239 240 261 260 240 241 262 261 241 242 263 262 + 242 243 264 263 243 244 265 264 244 245 266 265 + 245 246 267 266 246 247 268 267 247 248 269 268 + 248 249 270 269 249 250 271 270 250 251 272 271 + 252 253 274 273 253 254 275 274 254 255 276 275 + 255 256 277 276 256 257 278 277 257 258 279 278 + 258 259 280 279 259 260 281 280 260 261 282 281 + 261 262 283 282 262 263 284 283 263 264 285 284 + 264 265 286 285 265 266 287 286 266 267 288 287 + 267 268 289 288 268 269 290 289 269 270 291 290 + 270 271 292 291 271 272 293 292 273 274 295 294 + 274 275 296 295 275 276 297 296 276 277 298 297 + 277 278 299 298 278 279 300 299 279 280 301 300 + 280 281 302 301 281 282 303 302 282 283 304 303 + 283 284 305 304 284 285 306 305 285 286 307 306 + 286 287 308 307 287 288 309 308 288 289 310 309 + 289 290 311 310 290 291 312 311 291 292 313 312 + 292 293 314 313 294 295 316 315 295 296 317 316 + 296 297 318 317 297 298 319 318 298 299 320 319 + 299 300 321 320 300 301 322 321 301 302 323 322 + 302 303 324 323 303 304 325 324 304 305 326 325 + 305 306 327 326 306 307 328 327 307 308 329 328 + 308 309 330 329 309 310 331 330 310 311 332 331 + 311 312 333 332 312 313 334 333 313 314 335 334 + 315 316 337 336 316 317 338 337 317 318 339 338 + 318 319 340 339 319 320 341 340 320 321 342 341 + 321 322 343 342 322 323 344 343 323 324 345 344 + 324 325 346 345 325 326 347 346 326 327 348 347 + 327 328 349 348 328 329 350 349 329 330 351 350 + 330 331 352 351 331 332 353 352 332 333 354 353 + 333 334 355 354 334 335 356 355 336 337 358 357 + 337 338 359 358 338 339 360 359 339 340 361 360 + 340 341 362 361 341 342 363 362 342 343 364 363 + 343 344 365 364 344 345 366 365 345 346 367 366 + 346 347 368 367 347 348 369 368 348 349 370 369 + 349 350 371 370 350 351 372 371 351 352 373 372 + 352 353 374 373 353 354 375 374 354 355 376 375 + 355 356 377 376 357 358 379 378 358 359 380 379 + 359 360 381 380 360 361 382 381 361 362 383 382 + 362 363 384 383 363 364 385 384 364 365 386 385 + 365 366 387 386 366 367 388 387 367 368 389 388 + 368 369 390 389 369 370 391 390 370 371 392 391 + 371 372 393 392 372 373 394 393 373 374 395 394 + 374 375 396 395 375 376 397 396 376 377 398 397 + 378 379 400 399 379 380 401 400 380 381 402 401 + 381 382 403 402 382 383 404 403 383 384 405 404 + 384 385 406 405 385 386 407 406 386 387 408 407 + 387 388 409 408 388 389 410 409 389 390 411 410 + 390 391 412 411 391 392 413 412 392 393 414 413 + 393 394 415 414 394 395 416 415 395 396 417 416 + 396 397 418 417 397 398 419 418 399 400 421 420 + 400 401 422 421 401 402 423 422 402 403 424 423 + 403 404 425 424 404 405 426 425 405 406 427 426 + 406 407 428 427 407 408 429 428 408 409 430 429 + 409 410 431 430 410 411 432 431 411 412 433 432 + 412 413 434 433 413 414 435 434 414 415 436 435 + 415 416 437 436 416 417 438 437 417 418 439 438 + 418 419 440 439 + + + 4 8 12 16 20 24 28 32 36 40 44 48 + 52 56 60 64 68 72 76 80 84 88 92 96 + 100 104 108 112 116 120 124 128 132 136 140 144 + 148 152 156 160 164 168 172 176 180 184 188 192 + 196 200 204 208 212 216 220 224 228 232 236 240 + 244 248 252 256 260 264 268 272 276 280 284 288 + 292 296 300 304 308 312 316 320 324 328 332 336 + 340 344 348 352 356 360 364 368 372 376 380 384 + 388 392 396 400 404 408 412 416 420 424 428 432 + 436 440 444 448 452 456 460 464 468 472 476 480 + 484 488 492 496 500 504 508 512 516 520 524 528 + 532 536 540 544 548 552 556 560 564 568 572 576 + 580 584 588 592 596 600 604 608 612 616 620 624 + 628 632 636 640 644 648 652 656 660 664 668 672 + 676 680 684 688 692 696 700 704 708 712 716 720 + 724 728 732 736 740 744 748 752 756 760 764 768 + 772 776 780 784 788 792 796 800 804 808 812 816 + 820 824 828 832 836 840 844 848 852 856 860 864 + 868 872 876 880 884 888 892 896 900 904 908 912 + 916 920 924 928 932 936 940 944 948 952 956 960 + 964 968 972 976 980 984 988 992 996 1000 1004 1008 + 1012 1016 1020 1024 1028 1032 1036 1040 1044 1048 1052 1056 + 1060 1064 1068 1072 1076 1080 1084 1088 1092 1096 1100 1104 + 1108 1112 1116 1120 1124 1128 1132 1136 1140 1144 1148 1152 + 1156 1160 1164 1168 1172 1176 1180 1184 1188 1192 1196 1200 + 1204 1208 1212 1216 1220 1224 1228 1232 1236 1240 1244 1248 + 1252 1256 1260 1264 1268 1272 1276 1280 1284 1288 1292 1296 + 1300 1304 1308 1312 1316 1320 1324 1328 1332 1336 1340 1344 + 1348 1352 1356 1360 1364 1368 1372 1376 1380 1384 1388 1392 + 1396 1400 1404 1408 1412 1416 1420 1424 1428 1432 1436 1440 + 1444 1448 1452 1456 1460 1464 1468 1472 1476 1480 1484 1488 + 1492 1496 1500 1504 1508 1512 1516 1520 1524 1528 1532 1536 + 1540 1544 1548 1552 1556 1560 1564 1568 1572 1576 1580 1584 + 1588 1592 1596 1600 + + + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 + + + + + diff --git a/test/references/1pni_simple_linear_tpfa-reference.vtu b/test/references/1pni_simple_linear_tpfa-reference.vtu new file mode 100644 index 0000000000000000000000000000000000000000..67e06bde63bf1768a825cab855a67b78cf82fa87 --- /dev/null +++ b/test/references/1pni_simple_linear_tpfa-reference.vtu @@ -0,0 +1,442 @@ + + + + + + + 122500 167500 212500 257500 302500 347500 392500 437500 482500 527500 572500 617500 + 662500 707500 752500 797500 842500 887500 932500 977500 122500 167500 212500 257500 + 302500 347500 392500 437500 482500 527500 572500 617500 662500 707500 752500 797500 + 842500 887500 932500 977500 122500 167500 212500 257500 302500 347500 392500 437500 + 482500 527500 572500 617500 662500 707500 752500 797500 842500 887500 932500 977500 + 122500 167500 212500 257500 302500 347500 392500 437500 482500 527500 572500 617500 + 662500 707500 752500 797500 842500 887500 932500 977500 122500 167500 212500 257500 + 302500 347500 392500 437500 482500 527500 572500 617500 662500 707500 752500 797500 + 842500 887500 932500 977500 122500 167500 212500 257500 302500 347500 392500 437500 + 482500 527500 572500 617500 662500 707500 752500 797500 842500 887500 932500 977500 + 122500 167500 212500 257500 302500 347500 392500 437500 482500 527500 572500 617500 + 662500 707500 752500 797500 842500 887500 932500 977500 122500 167500 212500 257500 + 302500 347500 392500 437500 482500 527500 572500 617500 662500 707500 752500 797500 + 842500 887500 932500 977500 122500 167500 212500 257500 302500 347500 392500 437500 + 482500 527500 572500 617500 662500 707500 752500 797500 842500 887500 932500 977500 + 122500 167500 212500 257500 302500 347500 392500 437500 482500 527500 572500 617500 + 662500 707500 752500 797500 842500 887500 932500 977500 122500 167500 212500 257500 + 302500 347500 392500 437500 482500 527500 572500 617500 662500 707500 752500 797500 + 842500 887500 932500 977500 122500 167500 212500 257500 302500 347500 392500 437500 + 482500 527500 572500 617500 662500 707500 752500 797500 842500 887500 932500 977500 + 122500 167500 212500 257500 302500 347500 392500 437500 482500 527500 572500 617500 + 662500 707500 752500 797500 842500 887500 932500 977500 122500 167500 212500 257500 + 302500 347500 392500 437500 482500 527500 572500 617500 662500 707500 752500 797500 + 842500 887500 932500 977500 122500 167500 212500 257500 302500 347500 392500 437500 + 482500 527500 572500 617500 662500 707500 752500 797500 842500 887500 932500 977500 + 122500 167500 212500 257500 302500 347500 392500 437500 482500 527500 572500 617500 + 662500 707500 752500 797500 842500 887500 932500 977500 122500 167500 212500 257500 + 302500 347500 392500 437500 482500 527500 572500 617500 662500 707500 752500 797500 + 842500 887500 932500 977500 122500 167500 212500 257500 302500 347500 392500 437500 + 482500 527500 572500 617500 662500 707500 752500 797500 842500 887500 932500 977500 + 122500 167500 212500 257500 302500 347500 392500 437500 482500 527500 572500 617500 + 662500 707500 752500 797500 842500 887500 932500 977500 122500 167500 212500 257500 + 302500 347500 392500 437500 482500 527500 572500 617500 662500 707500 752500 797500 + 842500 887500 932500 977500 + + + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 300 300 300 300 300 300 300 300 + 300 300 300 300 + + + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 + + + + + 0 0 0 0.05 0 0 0 0.05 0 0.05 0.05 0 + 0.1 0 0 0.1 0.05 0 0.15 0 0 0.15 0.05 0 + 0.2 0 0 0.2 0.05 0 0.25 0 0 0.25 0.05 0 + 0.3 0 0 0.3 0.05 0 0.35 0 0 0.35 0.05 0 + 0.4 0 0 0.4 0.05 0 0.45 0 0 0.45 0.05 0 + 0.5 0 0 0.5 0.05 0 0.55 0 0 0.55 0.05 0 + 0.6 0 0 0.6 0.05 0 0.65 0 0 0.65 0.05 0 + 0.7 0 0 0.7 0.05 0 0.75 0 0 0.75 0.05 0 + 0.8 0 0 0.8 0.05 0 0.85 0 0 0.85 0.05 0 + 0.9 0 0 0.9 0.05 0 0.95 0 0 0.95 0.05 0 + 1 0 0 1 0.05 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 0.8 0.1 0 0.85 0.1 0 + 0.9 0.1 0 0.95 0.1 0 1 0.1 0 0 0.15 0 + 0.05 0.15 0 0.1 0.15 0 0.15 0.15 0 0.2 0.15 0 + 0.25 0.15 0 0.3 0.15 0 0.35 0.15 0 0.4 0.15 0 + 0.45 0.15 0 0.5 0.15 0 0.55 0.15 0 0.6 0.15 0 + 0.65 0.15 0 0.7 0.15 0 0.75 0.15 0 0.8 0.15 0 + 0.85 0.15 0 0.9 0.15 0 0.95 0.15 0 1 0.15 0 + 0 0.2 0 0.05 0.2 0 0.1 0.2 0 0.15 0.2 0 + 0.2 0.2 0 0.25 0.2 0 0.3 0.2 0 0.35 0.2 0 + 0.4 0.2 0 0.45 0.2 0 0.5 0.2 0 0.55 0.2 0 + 0.6 0.2 0 0.65 0.2 0 0.7 0.2 0 0.75 0.2 0 + 0.8 0.2 0 0.85 0.2 0 0.9 0.2 0 0.95 0.2 0 + 1 0.2 0 0 0.25 0 0.05 0.25 0 0.1 0.25 0 + 0.15 0.25 0 0.2 0.25 0 0.25 0.25 0 0.3 0.25 0 + 0.35 0.25 0 0.4 0.25 0 0.45 0.25 0 0.5 0.25 0 + 0.55 0.25 0 0.6 0.25 0 0.65 0.25 0 0.7 0.25 0 + 0.75 0.25 0 0.8 0.25 0 0.85 0.25 0 0.9 0.25 0 + 0.95 0.25 0 1 0.25 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 0.75 0.3 0 0.8 0.3 0 0.85 0.3 0 + 0.9 0.3 0 0.95 0.3 0 1 0.3 0 0 0.35 0 + 0.05 0.35 0 0.1 0.35 0 0.15 0.35 0 0.2 0.35 0 + 0.25 0.35 0 0.3 0.35 0 0.35 0.35 0 0.4 0.35 0 + 0.45 0.35 0 0.5 0.35 0 0.55 0.35 0 0.6 0.35 0 + 0.65 0.35 0 0.7 0.35 0 0.75 0.35 0 0.8 0.35 0 + 0.85 0.35 0 0.9 0.35 0 0.95 0.35 0 1 0.35 0 + 0 0.4 0 0.05 0.4 0 0.1 0.4 0 0.15 0.4 0 + 0.2 0.4 0 0.25 0.4 0 0.3 0.4 0 0.35 0.4 0 + 0.4 0.4 0 0.45 0.4 0 0.5 0.4 0 0.55 0.4 0 + 0.6 0.4 0 0.65 0.4 0 0.7 0.4 0 0.75 0.4 0 + 0.8 0.4 0 0.85 0.4 0 0.9 0.4 0 0.95 0.4 0 + 1 0.4 0 0 0.45 0 0.05 0.45 0 0.1 0.45 0 + 0.15 0.45 0 0.2 0.45 0 0.25 0.45 0 0.3 0.45 0 + 0.35 0.45 0 0.4 0.45 0 0.45 0.45 0 0.5 0.45 0 + 0.55 0.45 0 0.6 0.45 0 0.65 0.45 0 0.7 0.45 0 + 0.75 0.45 0 0.8 0.45 0 0.85 0.45 0 0.9 0.45 0 + 0.95 0.45 0 1 0.45 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 0.75 0.5 0 0.8 0.5 0 0.85 0.5 0 + 0.9 0.5 0 0.95 0.5 0 1 0.5 0 0 0.55 0 + 0.05 0.55 0 0.1 0.55 0 0.15 0.55 0 0.2 0.55 0 + 0.25 0.55 0 0.3 0.55 0 0.35 0.55 0 0.4 0.55 0 + 0.45 0.55 0 0.5 0.55 0 0.55 0.55 0 0.6 0.55 0 + 0.65 0.55 0 0.7 0.55 0 0.75 0.55 0 0.8 0.55 0 + 0.85 0.55 0 0.9 0.55 0 0.95 0.55 0 1 0.55 0 + 0 0.6 0 0.05 0.6 0 0.1 0.6 0 0.15 0.6 0 + 0.2 0.6 0 0.25 0.6 0 0.3 0.6 0 0.35 0.6 0 + 0.4 0.6 0 0.45 0.6 0 0.5 0.6 0 0.55 0.6 0 + 0.6 0.6 0 0.65 0.6 0 0.7 0.6 0 0.75 0.6 0 + 0.8 0.6 0 0.85 0.6 0 0.9 0.6 0 0.95 0.6 0 + 1 0.6 0 0 0.65 0 0.05 0.65 0 0.1 0.65 0 + 0.15 0.65 0 0.2 0.65 0 0.25 0.65 0 0.3 0.65 0 + 0.35 0.65 0 0.4 0.65 0 0.45 0.65 0 0.5 0.65 0 + 0.55 0.65 0 0.6 0.65 0 0.65 0.65 0 0.7 0.65 0 + 0.75 0.65 0 0.8 0.65 0 0.85 0.65 0 0.9 0.65 0 + 0.95 0.65 0 1 0.65 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 0.8 0.7 0 0.85 0.7 0 + 0.9 0.7 0 0.95 0.7 0 1 0.7 0 0 0.75 0 + 0.05 0.75 0 0.1 0.75 0 0.15 0.75 0 0.2 0.75 0 + 0.25 0.75 0 0.3 0.75 0 0.35 0.75 0 0.4 0.75 0 + 0.45 0.75 0 0.5 0.75 0 0.55 0.75 0 0.6 0.75 0 + 0.65 0.75 0 0.7 0.75 0 0.75 0.75 0 0.8 0.75 0 + 0.85 0.75 0 0.9 0.75 0 0.95 0.75 0 1 0.75 0 + 0 0.8 0 0.05 0.8 0 0.1 0.8 0 0.15 0.8 0 + 0.2 0.8 0 0.25 0.8 0 0.3 0.8 0 0.35 0.8 0 + 0.4 0.8 0 0.45 0.8 0 0.5 0.8 0 0.55 0.8 0 + 0.6 0.8 0 0.65 0.8 0 0.7 0.8 0 0.75 0.8 0 + 0.8 0.8 0 0.85 0.8 0 0.9 0.8 0 0.95 0.8 0 + 1 0.8 0 0 0.85 0 0.05 0.85 0 0.1 0.85 0 + 0.15 0.85 0 0.2 0.85 0 0.25 0.85 0 0.3 0.85 0 + 0.35 0.85 0 0.4 0.85 0 0.45 0.85 0 0.5 0.85 0 + 0.55 0.85 0 0.6 0.85 0 0.65 0.85 0 0.7 0.85 0 + 0.75 0.85 0 0.8 0.85 0 0.85 0.85 0 0.9 0.85 0 + 0.95 0.85 0 1 0.85 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 0.65 0.9 0 + 0.7 0.9 0 0.75 0.9 0 0.8 0.9 0 0.85 0.9 0 + 0.9 0.9 0 0.95 0.9 0 1 0.9 0 0 0.95 0 + 0.05 0.95 0 0.1 0.95 0 0.15 0.95 0 0.2 0.95 0 + 0.25 0.95 0 0.3 0.95 0 0.35 0.95 0 0.4 0.95 0 + 0.45 0.95 0 0.5 0.95 0 0.55 0.95 0 0.6 0.95 0 + 0.65 0.95 0 0.7 0.95 0 0.75 0.95 0 0.8 0.95 0 + 0.85 0.95 0 0.9 0.95 0 0.95 0.95 0 1 0.95 0 + 0 1 0 0.05 1 0 0.1 1 0 0.15 1 0 + 0.2 1 0 0.25 1 0 0.3 1 0 0.35 1 0 + 0.4 1 0 0.45 1 0 0.5 1 0 0.55 1 0 + 0.6 1 0 0.65 1 0 0.7 1 0 0.75 1 0 + 0.8 1 0 0.85 1 0 0.9 1 0 0.95 1 0 + 1 1 0 + + + + + 0 1 3 2 1 4 5 3 4 6 7 5 + 6 8 9 7 8 10 11 9 10 12 13 11 + 12 14 15 13 14 16 17 15 16 18 19 17 + 18 20 21 19 20 22 23 21 22 24 25 23 + 24 26 27 25 26 28 29 27 28 30 31 29 + 30 32 33 31 32 34 35 33 34 36 37 35 + 36 38 39 37 38 40 41 39 2 3 43 42 + 3 5 44 43 5 7 45 44 7 9 46 45 + 9 11 47 46 11 13 48 47 13 15 49 48 + 15 17 50 49 17 19 51 50 19 21 52 51 + 21 23 53 52 23 25 54 53 25 27 55 54 + 27 29 56 55 29 31 57 56 31 33 58 57 + 33 35 59 58 35 37 60 59 37 39 61 60 + 39 41 62 61 42 43 64 63 43 44 65 64 + 44 45 66 65 45 46 67 66 46 47 68 67 + 47 48 69 68 48 49 70 69 49 50 71 70 + 50 51 72 71 51 52 73 72 52 53 74 73 + 53 54 75 74 54 55 76 75 55 56 77 76 + 56 57 78 77 57 58 79 78 58 59 80 79 + 59 60 81 80 60 61 82 81 61 62 83 82 + 63 64 85 84 64 65 86 85 65 66 87 86 + 66 67 88 87 67 68 89 88 68 69 90 89 + 69 70 91 90 70 71 92 91 71 72 93 92 + 72 73 94 93 73 74 95 94 74 75 96 95 + 75 76 97 96 76 77 98 97 77 78 99 98 + 78 79 100 99 79 80 101 100 80 81 102 101 + 81 82 103 102 82 83 104 103 84 85 106 105 + 85 86 107 106 86 87 108 107 87 88 109 108 + 88 89 110 109 89 90 111 110 90 91 112 111 + 91 92 113 112 92 93 114 113 93 94 115 114 + 94 95 116 115 95 96 117 116 96 97 118 117 + 97 98 119 118 98 99 120 119 99 100 121 120 + 100 101 122 121 101 102 123 122 102 103 124 123 + 103 104 125 124 105 106 127 126 106 107 128 127 + 107 108 129 128 108 109 130 129 109 110 131 130 + 110 111 132 131 111 112 133 132 112 113 134 133 + 113 114 135 134 114 115 136 135 115 116 137 136 + 116 117 138 137 117 118 139 138 118 119 140 139 + 119 120 141 140 120 121 142 141 121 122 143 142 + 122 123 144 143 123 124 145 144 124 125 146 145 + 126 127 148 147 127 128 149 148 128 129 150 149 + 129 130 151 150 130 131 152 151 131 132 153 152 + 132 133 154 153 133 134 155 154 134 135 156 155 + 135 136 157 156 136 137 158 157 137 138 159 158 + 138 139 160 159 139 140 161 160 140 141 162 161 + 141 142 163 162 142 143 164 163 143 144 165 164 + 144 145 166 165 145 146 167 166 147 148 169 168 + 148 149 170 169 149 150 171 170 150 151 172 171 + 151 152 173 172 152 153 174 173 153 154 175 174 + 154 155 176 175 155 156 177 176 156 157 178 177 + 157 158 179 178 158 159 180 179 159 160 181 180 + 160 161 182 181 161 162 183 182 162 163 184 183 + 163 164 185 184 164 165 186 185 165 166 187 186 + 166 167 188 187 168 169 190 189 169 170 191 190 + 170 171 192 191 171 172 193 192 172 173 194 193 + 173 174 195 194 174 175 196 195 175 176 197 196 + 176 177 198 197 177 178 199 198 178 179 200 199 + 179 180 201 200 180 181 202 201 181 182 203 202 + 182 183 204 203 183 184 205 204 184 185 206 205 + 185 186 207 206 186 187 208 207 187 188 209 208 + 189 190 211 210 190 191 212 211 191 192 213 212 + 192 193 214 213 193 194 215 214 194 195 216 215 + 195 196 217 216 196 197 218 217 197 198 219 218 + 198 199 220 219 199 200 221 220 200 201 222 221 + 201 202 223 222 202 203 224 223 203 204 225 224 + 204 205 226 225 205 206 227 226 206 207 228 227 + 207 208 229 228 208 209 230 229 210 211 232 231 + 211 212 233 232 212 213 234 233 213 214 235 234 + 214 215 236 235 215 216 237 236 216 217 238 237 + 217 218 239 238 218 219 240 239 219 220 241 240 + 220 221 242 241 221 222 243 242 222 223 244 243 + 223 224 245 244 224 225 246 245 225 226 247 246 + 226 227 248 247 227 228 249 248 228 229 250 249 + 229 230 251 250 231 232 253 252 232 233 254 253 + 233 234 255 254 234 235 256 255 235 236 257 256 + 236 237 258 257 237 238 259 258 238 239 260 259 + 239 240 261 260 240 241 262 261 241 242 263 262 + 242 243 264 263 243 244 265 264 244 245 266 265 + 245 246 267 266 246 247 268 267 247 248 269 268 + 248 249 270 269 249 250 271 270 250 251 272 271 + 252 253 274 273 253 254 275 274 254 255 276 275 + 255 256 277 276 256 257 278 277 257 258 279 278 + 258 259 280 279 259 260 281 280 260 261 282 281 + 261 262 283 282 262 263 284 283 263 264 285 284 + 264 265 286 285 265 266 287 286 266 267 288 287 + 267 268 289 288 268 269 290 289 269 270 291 290 + 270 271 292 291 271 272 293 292 273 274 295 294 + 274 275 296 295 275 276 297 296 276 277 298 297 + 277 278 299 298 278 279 300 299 279 280 301 300 + 280 281 302 301 281 282 303 302 282 283 304 303 + 283 284 305 304 284 285 306 305 285 286 307 306 + 286 287 308 307 287 288 309 308 288 289 310 309 + 289 290 311 310 290 291 312 311 291 292 313 312 + 292 293 314 313 294 295 316 315 295 296 317 316 + 296 297 318 317 297 298 319 318 298 299 320 319 + 299 300 321 320 300 301 322 321 301 302 323 322 + 302 303 324 323 303 304 325 324 304 305 326 325 + 305 306 327 326 306 307 328 327 307 308 329 328 + 308 309 330 329 309 310 331 330 310 311 332 331 + 311 312 333 332 312 313 334 333 313 314 335 334 + 315 316 337 336 316 317 338 337 317 318 339 338 + 318 319 340 339 319 320 341 340 320 321 342 341 + 321 322 343 342 322 323 344 343 323 324 345 344 + 324 325 346 345 325 326 347 346 326 327 348 347 + 327 328 349 348 328 329 350 349 329 330 351 350 + 330 331 352 351 331 332 353 352 332 333 354 353 + 333 334 355 354 334 335 356 355 336 337 358 357 + 337 338 359 358 338 339 360 359 339 340 361 360 + 340 341 362 361 341 342 363 362 342 343 364 363 + 343 344 365 364 344 345 366 365 345 346 367 366 + 346 347 368 367 347 348 369 368 348 349 370 369 + 349 350 371 370 350 351 372 371 351 352 373 372 + 352 353 374 373 353 354 375 374 354 355 376 375 + 355 356 377 376 357 358 379 378 358 359 380 379 + 359 360 381 380 360 361 382 381 361 362 383 382 + 362 363 384 383 363 364 385 384 364 365 386 385 + 365 366 387 386 366 367 388 387 367 368 389 388 + 368 369 390 389 369 370 391 390 370 371 392 391 + 371 372 393 392 372 373 394 393 373 374 395 394 + 374 375 396 395 375 376 397 396 376 377 398 397 + 378 379 400 399 379 380 401 400 380 381 402 401 + 381 382 403 402 382 383 404 403 383 384 405 404 + 384 385 406 405 385 386 407 406 386 387 408 407 + 387 388 409 408 388 389 410 409 389 390 411 410 + 390 391 412 411 391 392 413 412 392 393 414 413 + 393 394 415 414 394 395 416 415 395 396 417 416 + 396 397 418 417 397 398 419 418 399 400 421 420 + 400 401 422 421 401 402 423 422 402 403 424 423 + 403 404 425 424 404 405 426 425 405 406 427 426 + 406 407 428 427 407 408 429 428 408 409 430 429 + 409 410 431 430 410 411 432 431 411 412 433 432 + 412 413 434 433 413 414 435 434 414 415 436 435 + 415 416 437 436 416 417 438 437 417 418 439 438 + 418 419 440 439 + + + 4 8 12 16 20 24 28 32 36 40 44 48 + 52 56 60 64 68 72 76 80 84 88 92 96 + 100 104 108 112 116 120 124 128 132 136 140 144 + 148 152 156 160 164 168 172 176 180 184 188 192 + 196 200 204 208 212 216 220 224 228 232 236 240 + 244 248 252 256 260 264 268 272 276 280 284 288 + 292 296 300 304 308 312 316 320 324 328 332 336 + 340 344 348 352 356 360 364 368 372 376 380 384 + 388 392 396 400 404 408 412 416 420 424 428 432 + 436 440 444 448 452 456 460 464 468 472 476 480 + 484 488 492 496 500 504 508 512 516 520 524 528 + 532 536 540 544 548 552 556 560 564 568 572 576 + 580 584 588 592 596 600 604 608 612 616 620 624 + 628 632 636 640 644 648 652 656 660 664 668 672 + 676 680 684 688 692 696 700 704 708 712 716 720 + 724 728 732 736 740 744 748 752 756 760 764 768 + 772 776 780 784 788 792 796 800 804 808 812 816 + 820 824 828 832 836 840 844 848 852 856 860 864 + 868 872 876 880 884 888 892 896 900 904 908 912 + 916 920 924 928 932 936 940 944 948 952 956 960 + 964 968 972 976 980 984 988 992 996 1000 1004 1008 + 1012 1016 1020 1024 1028 1032 1036 1040 1044 1048 1052 1056 + 1060 1064 1068 1072 1076 1080 1084 1088 1092 1096 1100 1104 + 1108 1112 1116 1120 1124 1128 1132 1136 1140 1144 1148 1152 + 1156 1160 1164 1168 1172 1176 1180 1184 1188 1192 1196 1200 + 1204 1208 1212 1216 1220 1224 1228 1232 1236 1240 1244 1248 + 1252 1256 1260 1264 1268 1272 1276 1280 1284 1288 1292 1296 + 1300 1304 1308 1312 1316 1320 1324 1328 1332 1336 1340 1344 + 1348 1352 1356 1360 1364 1368 1372 1376 1380 1384 1388 1392 + 1396 1400 1404 1408 1412 1416 1420 1424 1428 1432 1436 1440 + 1444 1448 1452 1456 1460 1464 1468 1472 1476 1480 1484 1488 + 1492 1496 1500 1504 1508 1512 1516 1520 1524 1528 1532 1536 + 1540 1544 1548 1552 1556 1560 1564 1568 1572 1576 1580 1584 + 1588 1592 1596 1600 + + + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 + + + + +