27 #ifndef VTK_SCALAR_FUNCTION_HH
28 #define VTK_SCALAR_FUNCTION_HH
32 #include <dune/grid/io/file/vtk/function.hh>
33 #include <dune/istl/bvector.hh>
34 #include <dune/common/fvector.hh>
35 #include <dune/common/version.hh>
37 #include <opm/common/Unused.hpp>
39 #include <opm/common/Exceptions.hpp>
40 #include <opm/common/ErrorMacros.hpp>
52 template <
class Gr
idView,
class Mapper>
55 enum { dim = GridView::dimension };
56 typedef typename GridView::ctype ctype;
57 typedef typename GridView::template Codim<0>::Entity Element;
59 typedef BaseOutputWriter::ScalarBuffer ScalarBuffer;
63 const GridView& gridView,
65 const ScalarBuffer& buf,
72 { assert(
int(buf_.size()) == mapper_.size()); }
74 virtual std::string name()
const
77 virtual int ncomps()
const
80 virtual double evaluate(
int mycomp OPM_UNUSED,
82 const Dune::FieldVector<ctype, dim>& xi)
const
87 idx =
static_cast<unsigned>(mapper_.index(e));
89 else if (codim_ == dim) {
94 Dune::GeometryType gt = e.type();
95 int n =
static_cast<int>(e.subEntities(dim));
96 for (
int i = 0; i < n; ++i) {
97 Dune::FieldVector<ctype, dim> local =
98 Dune::ReferenceElements<ctype, dim>::general(gt).position(i, dim);
101 if (local.infinity_norm() < min) {
102 min = local.infinity_norm();
103 imin =
static_cast<int>(i);
108 idx =
static_cast<unsigned>(mapper_.subIndex(e, imin, codim_));
111 OPM_THROW(std::logic_error,
"Only element and vertex based vector "
112 " fields are supported so far.");
114 return static_cast<double>(
static_cast<float>(buf_[idx]));
118 const std::string name_;
119 const GridView gridView_;
120 const Mapper& mapper_;
121 const ScalarBuffer& buf_;
Provides a vector-valued function using Dune::FieldVectors as elements.
Definition: vtkscalarfunction.hh:53
The base class for all output writers.