diff --git a/test/freeflow/navierstokes/channel/CMakeLists.txt b/test/freeflow/navierstokes/channel/CMakeLists.txt index 31ded5a8b05f292738b9a52b752060206f5ef518..642e957dc261af91658be8b75711c04aae476a0c 100644 --- a/test/freeflow/navierstokes/channel/CMakeLists.txt +++ b/test/freeflow/navierstokes/channel/CMakeLists.txt @@ -1,4 +1,3 @@ add_subdirectory(1d) add_subdirectory(2d) add_subdirectory(3d) -add_subdirectory(pipe) diff --git a/test/freeflow/navierstokes/channel/pipe/CMakeLists.txt b/test/freeflow/navierstokes/channel/pipe/CMakeLists.txt deleted file mode 100644 index 1a59c1c7e5b90841e276290863a78fa548dfbbec..0000000000000000000000000000000000000000 --- a/test/freeflow/navierstokes/channel/pipe/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -dune_symlink_to_source_files(FILES params.input) -dumux_add_test(NAME test_ff_stokes_channel_pipe - LABELS freeflow navierstokes - SOURCES main.cc - LABELS freeflow - CMAKE_GUARD HAVE_UMFPACK - COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py - CMD_ARGS --script fuzzy - --files ${CMAKE_CURRENT_BINARY_DIR}/test_ff_stokes_channel_pipe-00000.vtu - ${CMAKE_CURRENT_BINARY_DIR}/test_ff_stokes_channel_pipe-00001.vtu - --command "${CMAKE_CURRENT_BINARY_DIR}/test_ff_stokes_channel_pipe params.input" - --zeroThreshold {"velocity_liq \(m/s\)":1e-12}) diff --git a/test/freeflow/navierstokes/channel/pipe/main.cc b/test/freeflow/navierstokes/channel/pipe/main.cc deleted file mode 100644 index c2e225ecb8ccba448600a788cf710a5333d66310..0000000000000000000000000000000000000000 --- a/test/freeflow/navierstokes/channel/pipe/main.cc +++ /dev/null @@ -1,127 +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 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 <http://www.gnu.org/licenses/>. * - *****************************************************************************/ - -#include <config.h> - -#include <iostream> - -#include <dune/common/parallel/mpihelper.hh> - -#include <dumux/common/properties.hh> -#include <dumux/common/parameters.hh> -#include <dumux/common/partial.hh> -#include <dumux/linear/seqsolverbackend.hh> -#include <dumux/assembly/diffmethod.hh> -#include <dumux/io/vtkoutputmodule.hh> -#include <dumux/io/staggeredvtkoutputmodule.hh> -#include <dumux/io/grid/gridmanager_yasp.hh> - -#include <dumux/assembly/staggeredfvassembler.hh> -#include <dumux/nonlinear/newtonsolver.hh> - -#include "properties.hh" - -int main(int argc, char** argv) try -{ - using namespace Dumux; - - // 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); - - // Define the sub problem type tags - using TypeTag = Properties::TTag::PipeFlow; - - // try to create a grid (from the given grid file or the input file) - Dumux::GridManager<GetPropType<TypeTag, Properties::Grid>> gridManager; - gridManager.init(); - - // we compute on the leaf grid view - const auto& gridView = gridManager.grid().leafGridView(); - - // create the finite volume grid geometry - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - auto gridGeometry = std::make_shared<GridGeometry>(gridView); - gridGeometry->update(); - - // the problem (initial and boundary conditions) - using Problem = GetPropType<TypeTag, Properties::Problem>; - auto problem = std::make_shared<Problem>(gridGeometry); - - // the solution vector - using SolutionVector = GetPropType<TypeTag, Properties::SolutionVector>; - SolutionVector sol; - sol[GridGeometry::cellCenterIdx()].resize(gridGeometry->numCellCenterDofs()); - sol[GridGeometry::faceIdx()].resize(gridGeometry->numFaceDofs()); - problem->applyInitialSolution(sol); - - // the grid variables - using GridVariables = GetPropType<TypeTag, Properties::GridVariables>; - auto gridVariables = std::make_shared<GridVariables>(problem, gridGeometry); - gridVariables->init(sol); - - // intialize the vtk output module - using IOFields = GetPropType<TypeTag, Properties::IOFields>; - StaggeredVtkOutputModule<GridVariables, SolutionVector> vtkWriter(*gridVariables, sol, problem->name()); - IOFields::initOutputModule(vtkWriter); // Add model specific output fields - vtkWriter.write(0.0); - - // the assembler with time loop for instationary problem - using Assembler = StaggeredFVAssembler<TypeTag, DiffMethod::numeric>; - auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables); - - // the linear solver - using LinearSolver = Dumux::UMFPackBackend; - auto linearSolver = std::make_shared<LinearSolver>(); - - // the non-linear solver - using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>; - NewtonSolver nonLinearSolver(assembler, linearSolver); - - nonLinearSolver.solve(sol); - vtkWriter.write(1.0); - - // print dumux end message - if (mpiHelper.rank() == 0) - Parameters::print(); - - return 0; - -} // end main -catch (const Dumux::ParameterException &e) -{ - std::cerr << std::endl << e << " ---> Abort!" << std::endl; - return 1; -} -catch (const 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 (const Dune::Exception &e) -{ - std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; - return 3; -} diff --git a/test/freeflow/navierstokes/channel/pipe/params.input b/test/freeflow/navierstokes/channel/pipe/params.input deleted file mode 100644 index 763a510a17683efa5d9e2e43f66a42e7d2380d8b..0000000000000000000000000000000000000000 --- a/test/freeflow/navierstokes/channel/pipe/params.input +++ /dev/null @@ -1,21 +0,0 @@ -[Grid] -Positions0 = 0 0.1 # [m] -Positions1 = 0 1.0 # [m] -Cells0 = 10 # [-] -Cells1 = 100 # [-] -Grading0 = 1 -Grading1 = 1 - -[Problem] -Name = pipe -MeanInletVelocity = 0.1 # [m/s] - -[Vtk] -OutputName = test_ff_stokes_channel - -[Problem] -EnableGravity = false -EnableInertiaTerms = false - -[Vtk] -AddVelocity = 1 diff --git a/test/freeflow/navierstokes/channel/pipe/problem.hh b/test/freeflow/navierstokes/channel/pipe/problem.hh deleted file mode 100644 index 02b1992b9c8cc562753860fe72f7d93f53104465..0000000000000000000000000000000000000000 --- a/test/freeflow/navierstokes/channel/pipe/problem.hh +++ /dev/null @@ -1,146 +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 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 <http://www.gnu.org/licenses/>. * - *****************************************************************************/ - -#ifndef DUMUX_TEST_FREEFLOW_PIPE_PROBLEM_HH -#define DUMUX_TEST_FREEFLOW_PIPE_PROBLEM_HH - -#include <dumux/common/properties.hh> -#include <dumux/common/parameters.hh> -#include <dumux/freeflow/navierstokes/problem.hh> -#include <dumux/freeflow/navierstokes/boundarytypes.hh> - -namespace Dumux { - -/*! - * \brief Freeflow problem for pipe flow - * Simulation of a radially-symmetric pipe flow with circular cross-section - */ -template <class TypeTag> -class FreeFlowPipeProblem : public NavierStokesProblem<TypeTag> -{ - using ParentType = NavierStokesProblem<TypeTag>; - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using GridView = typename GridGeometry::GridView; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices; - using SubControlVolumeFace = typename GridGeometry::SubControlVolumeFace; - using Element = typename GridView::template Codim<0>::Entity; - using GlobalPosition = typename Element::Geometry::GlobalCoordinate; - using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>; - using BoundaryTypes = NavierStokesBoundaryTypes<PrimaryVariables::size()>; - -public: - FreeFlowPipeProblem(std::shared_ptr<const GridGeometry> gridGeometry) - : ParentType(gridGeometry) - - { - name_ = getParam<std::string>("Vtk.OutputName") + "_" + getParamFromGroup<std::string>(this->paramGroup(), "Problem.Name"); - meanInletVelocity_ = getParamFromGroup<Scalar>(this->paramGroup(), "Problem.MeanInletVelocity"); - } - - const std::string& name() const - { - return name_; - } - - Scalar temperature() const - { return 293.15; } - - /*! - * \brief Specifies which kind of boundary condition should be - * used for which equation on a given boundary segment. - */ - BoundaryTypes boundaryTypes(const Element& element, - const SubControlVolumeFace& scvf) const - { - BoundaryTypes values; - const auto& globalPos = scvf.dofPosition(); - - // inlet - if (onLowerBoundary_(globalPos)) - { - values.setDirichlet(Indices::velocityXIdx); - values.setDirichlet(Indices::velocityYIdx); - } - // outlet - else if (onUpperBoundary_(globalPos)) - { - values.setDirichlet(Indices::pressureIdx); - } - // pipe centerline - else if (onInnerBoundary_(globalPos)) - { - values.setAllSymmetry(); - } - // pipe wall - else if (onOuterBoundary_(globalPos)) - { - values.setDirichlet(Indices::velocityXIdx); - values.setDirichlet(Indices::velocityYIdx); - } - - return values; - } - - /*! - * \brief Evaluates the boundary conditions for a Dirichlet control volume. - */ - PrimaryVariables dirichletAtPos(const GlobalPosition& globalPos) const - { - return initialAtPos(globalPos); - } - - /*! - * \brief Evaluates the initial value for a control volume. - */ - PrimaryVariables initialAtPos(const GlobalPosition& globalPos) const - { - PrimaryVariables values(0.0); - - // paraboloid velocity profile - const auto pipeRadius = this->gridGeometry().bBoxMax()[0] - this->gridGeometry().bBoxMin()[0]; - const auto r = globalPos[0] - this->gridGeometry().bBoxMin()[0]; - values[Indices::velocityXIdx] = 0.0; - values[Indices::velocityYIdx] = 2.0*meanInletVelocity_*(1.0 - r*r/(pipeRadius*pipeRadius)); - values[Indices::pressureIdx] = 1e5; - - return values; - } - -private: - bool onInnerBoundary_(const GlobalPosition &globalPos) const - { return globalPos[0] < this->gridGeometry().bBoxMin()[0] + eps_; } - - bool onOuterBoundary_(const GlobalPosition &globalPos) const - { return globalPos[0] > this->gridGeometry().bBoxMax()[0] - eps_; } - - bool onLowerBoundary_(const GlobalPosition &globalPos) const - { return globalPos[1] < this->gridGeometry().bBoxMin()[1] + eps_; } - - bool onUpperBoundary_(const GlobalPosition &globalPos) const - { return globalPos[1] > this->gridGeometry().bBoxMax()[1] - eps_; } - - static constexpr Scalar eps_ = 1e-6; - std::string name_; - Scalar meanInletVelocity_; -}; - -} // end namespace Dumux - -#endif diff --git a/test/freeflow/navierstokes/channel/pipe/properties.hh b/test/freeflow/navierstokes/channel/pipe/properties.hh deleted file mode 100644 index 26e16c139e0019813540d5bc45aa443a8e4fced9..0000000000000000000000000000000000000000 --- a/test/freeflow/navierstokes/channel/pipe/properties.hh +++ /dev/null @@ -1,97 +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 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 <http://www.gnu.org/licenses/>. * - *****************************************************************************/ - -#ifndef DUMUX_TEST_FREEFLOW_PIPE_PROPERTIES_HH -#define DUMUX_TEST_FREEFLOW_PIPE_PROPERTIES_HH - -#include <dune/grid/yaspgrid.hh> - -#include <dumux/common/properties.hh> - -#include <dumux/discretization/staggered/freeflow/properties.hh> -#include <dumux/discretization/rotationsymmetricgridgeometrytraits.hh> -#include <dumux/freeflow/navierstokes/model.hh> -#include <dumux/material/fluidsystems/1pgas.hh> -#include <dumux/material/components/air.hh> - -#include "problem.hh" - -namespace Dumux::Properties { - -// Create new type tags -namespace TTag { -struct PipeFlow { using InheritsFrom = std::tuple<NavierStokes, StaggeredFreeFlowModel>; }; -} // end namespace TTag - -// the fluid system -template<class TypeTag> -struct FluidSystem<TypeTag, TTag::PipeFlow> -{ - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = FluidSystems::OnePGas<Scalar, Dumux::Components::Air<Scalar> > ; -}; - -// Set the grid type -template<class TypeTag> -struct Grid<TypeTag, TTag::PipeFlow> -{ using type = Dune::YaspGrid<2, Dune::TensorProductCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> >; }; - -// Set the problem property -template<class TypeTag> -struct Problem<TypeTag, TTag::PipeFlow> -{ using type = FreeFlowPipeProblem<TypeTag> ; }; - -template<class TypeTag> -struct EnableGridGeometryCache<TypeTag, TTag::PipeFlow> { static constexpr bool value = true; }; -template<class TypeTag> -struct EnableGridFluxVariablesCache<TypeTag, TTag::PipeFlow> { static constexpr bool value = true; }; -template<class TypeTag> -struct EnableGridVolumeVariablesCache<TypeTag, TTag::PipeFlow> { static constexpr bool value = true; }; - -// rotation-symmetric grid geometry forming a cylinder channel -template<class TypeTag> -struct GridGeometry<TypeTag, TTag::PipeFlow> -{ - static constexpr auto upwindSchemeOrder = getPropValue<TypeTag, Properties::UpwindSchemeOrder>(); - static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridGeometryCache>(); - using GridView = typename GetPropType<TypeTag, Properties::Grid>::LeafGridView; - - using DefaultTraits = StaggeredFreeFlowDefaultFVGridGeometryTraits<GridView, upwindSchemeOrder>; - - struct GGTraits : public DefaultTraits - { - using SubControlVolume = RotationSymmetricSubControlVolume<typename DefaultTraits::SubControlVolume, RotationPolicy::toroid>; - using SubControlVolumeFace = RotationSymmetricSubControlVolumeFace<typename DefaultTraits::SubControlVolumeFace, RotationPolicy::toroid>; - - struct PublicTraits - { - using CellSubControlVolume = SubControlVolume; - using CellSubControlVolumeFace = SubControlVolumeFace; - using FaceSubControlVolume = RotationSymmetricSubControlVolume<typename DefaultTraits::PublicTraits::FaceSubControlVolume, RotationPolicy::toroid>; - using FaceLateralSubControlVolumeFace = RotationSymmetricSubControlVolumeFace<typename DefaultTraits::PublicTraits::FaceLateralSubControlVolumeFace, RotationPolicy::toroid>; - using FaceFrontalSubControlVolumeFace = RotationSymmetricSubControlVolumeFace<typename DefaultTraits::PublicTraits::FaceFrontalSubControlVolumeFace, RotationPolicy::toroid>; - }; - }; - - using type = StaggeredFVGridGeometry<GridView, enableCache, GGTraits>; -}; - -} // end namespace Dumux::Properties - -#endif