version 3.11-dev
Loading...
Searching...
No Matches
cvfegridfunction.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3//
4// SPDX-FileCopyrightText: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
23#ifndef DUMUX_IO_CVFE_GRID_FUNCTION_HH
24#define DUMUX_IO_CVFE_GRID_FUNCTION_HH
25
26#include <optional>
27
30
31namespace Dumux::IO {
32
44template<class GridGeometry, class SolutionVector>
46{
47 using GridView = typename GridGeometry::GridView;
48 using Element = typename GridView::template Codim<0>::Entity;
49
50public:
55 {
56 public:
57 LocalFunction(const GridGeometry& gg, const SolutionVector& sol)
58 : gridGeometry_(&gg), sol_(&sol)
59 {}
60
61 void bind(const Element& element)
62 { element_.emplace(element); }
63
64 void unbind()
65 { element_.reset(); }
66
68 auto operator()(const typename Element::Geometry::LocalCoordinate& localPos) const
69 {
70 const auto elemSol = elementSolution(*element_, *sol_, *gridGeometry_);
72 *element_, element_->geometry(),
73 *gridGeometry_, elemSol, localPos
74 );
75 }
76
77 private:
78 const GridGeometry* gridGeometry_;
79 const SolutionVector* sol_;
80 std::optional<Element> element_;
81 };
82
83 CVFEGridFunction(const GridGeometry& gg, const SolutionVector& sol)
84 : gridGeometry_(&gg), sol_(&sol)
85 {}
86
89 { return LocalFunction(*f.gridGeometry_, *f.sol_); }
90
91private:
92 const GridGeometry* gridGeometry_;
93 const SolutionVector* sol_;
94};
95
102template<class GridGeometry, class SolutionVector>
103auto cvfeGridFunction(const GridGeometry& gg, const SolutionVector& sol)
105
106} // namespace Dumux::IO
107
108#endif
The local function type satisfying the dune-functions local function concept.
Definition cvfegridfunction.hh:55
LocalFunction(const GridGeometry &gg, const SolutionVector &sol)
Definition cvfegridfunction.hh:57
void bind(const Element &element)
Definition cvfegridfunction.hh:61
void unbind()
Definition cvfegridfunction.hh:64
auto operator()(const typename Element::Geometry::LocalCoordinate &localPos) const
Evaluate FE solution at local coordinate localPos in the bound element.
Definition cvfegridfunction.hh:68
Thin dune-functions-compatible wrapper for a CVFE grid function.
Definition cvfegridfunction.hh:46
friend LocalFunction localFunction(const CVFEGridFunction &f)
Returns a local function. Found via ADL as required by gridformat.
Definition cvfegridfunction.hh:88
CVFEGridFunction(const GridGeometry &gg, const SolutionVector &sol)
Definition cvfegridfunction.hh:83
Element solution classes and factory functions.
free functions for the evaluation of primary variables inside elements.
auto elementSolution(const Element &element, const SolutionVector &sol, const GridGeometry &gg) -> std::enable_if_t< GridGeometry::discMethod==DiscretizationMethods::cctpfa||GridGeometry::discMethod==DiscretizationMethods::ccmpfa, CCElementSolution< typename GridGeometry::LocalView, std::decay_t< decltype(std::declval< SolutionVector >()[0])> > >
Make an element solution for cell-centered schemes.
Definition cellcentered/elementsolution.hh:101
PrimaryVariables evalSolutionAtLocalPos(const Element &element, const typename Element::Geometry &geometry, const typename FVElementGeometry::GridGeometry &gridGeometry, const CVFEElementSolution< FVElementGeometry, PrimaryVariables > &elemSol, const typename Element::Geometry::LocalCoordinate &localPos, bool ignoreState=false)
Interpolates a given cvfe element solution at a given local position. Uses the finite element cache o...
Definition evalsolution.hh:173
Definition cvfegridfunction.hh:31
auto cvfeGridFunction(const GridGeometry &gg, const SolutionVector &sol)
Convenience factory function for CVFEGridFunction.
Definition cvfegridfunction.hh:103