From f334d2ef4a0dede3555790c73a4877fe591616b4 Mon Sep 17 00:00:00 2001 From: Timo Koch <timokoch@math.uio.no> Date: Tue, 21 Mar 2023 03:59:55 +0100 Subject: [PATCH] [common] Add BasicVolumeVariables for reuse in simple models --- dumux/common/volumevariables.hh | 67 +++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 dumux/common/volumevariables.hh diff --git a/dumux/common/volumevariables.hh b/dumux/common/volumevariables.hh new file mode 100644 index 0000000000..2b74ee8f01 --- /dev/null +++ b/dumux/common/volumevariables.hh @@ -0,0 +1,67 @@ +// -*- 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/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup Common + * \brief Basic volume variables for finite volume methods + */ +#ifndef DUMUX_COMMON_BASIC_VOLUME_VARIABLES_HH +#define DUMUX_COMMON_BASIC_VOLUME_VARIABLES_HH + +#include <memory> + +namespace Dumux { + +template <class Traits> +class BasicVolumeVariables +{ + using Scalar = typename Traits::PrimaryVariables::value_type; +public: + //! export the type used for the primary variables + using PrimaryVariables = typename Traits::PrimaryVariables; + + /*! + * \brief Update all quantities for a given control volume + */ + template<class ElementSolution, class Problem, class Element, class SubControlVolume> + void update(const ElementSolution& elemSol, + const Problem& problem, + const Element& element, + const SubControlVolume& scv) + { + priVars_ = elemSol[scv.indexInElement()]; + } + + Scalar priVar(const int pvIdx) const + { return priVars_[pvIdx]; } + + const PrimaryVariables& priVars() const + { return priVars_; } + + // for compatibility with more general models + Scalar extrusionFactor() const + { return 1.0; } + +private: + PrimaryVariables priVars_; +}; + +} // end namespace Dumux + +#endif -- GitLab