27#ifndef VTK_TENSOR_FUNCTION_HH
28#define VTK_TENSOR_FUNCTION_HH
30#include <dune/common/fvector.hh>
31#include <dune/common/version.hh>
33#include <dune/grid/io/file/vtk/function.hh>
47template <
class Gr
idView,
class Mapper>
50 enum { dim = GridView::dimension };
51 using ctype =
typename GridView::ctype;
52 using Element =
typename GridView::template Codim<0>::Entity;
58 const GridView& gridView,
60 const TensorBuffer& buf,
62 unsigned matrixColumnIdx)
68 , matrixColumnIdx_(matrixColumnIdx)
69 { assert(
int(buf_.size()) ==
int(mapper_.size())); }
71 std::string
name()
const override
75 {
return static_cast<int>(buf_[0].M()); }
79 const Dune::FieldVector<ctype, dim>& xi)
const override
84 idx =
static_cast<std::size_t
>(mapper_.index(e));
86 else if (codim_ == dim) {
91 Dune::GeometryType gt = e.type();
92 int n =
static_cast<int>(e.subEntities(dim));
93 for (
int i = 0; i < n; ++i) {
94 Dune::FieldVector<ctype, dim> local =
95 Dune::ReferenceElements<ctype, dim>::general(gt).position(i, dim);
98 if (local.infinity_norm() < min) {
99 min = local.infinity_norm();
105 idx =
static_cast<std::size_t
>(mapper_.subIndex(e, imin, codim_));
108 throw std::logic_error(
"Only element and vertex based tensor fields are supported so far.");
111 const unsigned i =
static_cast<unsigned>(mycomp);
112 const unsigned j =
static_cast<unsigned>(matrixColumnIdx_);
114 return static_cast<double>(
static_cast<float>(buf_[idx][i][j]));
118 const std::string name_;
119 const GridView gridView_;
120 const Mapper& mapper_;
121 const TensorBuffer& buf_;
122 const unsigned codim_;
123 const unsigned matrixColumnIdx_;
std::vector< Tensor > TensorBuffer
Definition: baseoutputwriter.hh:52
Provides a tensor-valued function using Dune::FieldMatrix objects as elements.
Definition: vtktensorfunction.hh:49
VtkTensorFunction(std::string_view name, const GridView &gridView, const Mapper &mapper, const TensorBuffer &buf, unsigned codim, unsigned matrixColumnIdx)
Definition: vtktensorfunction.hh:57
std::string name() const override
Definition: vtktensorfunction.hh:71
double evaluate(int mycomp, const Element &e, const Dune::FieldVector< ctype, dim > &xi) const override
Definition: vtktensorfunction.hh:77
int ncomps() const override
Definition: vtktensorfunction.hh:74
Definition: blackoilboundaryratevector.hh:39