My Project
EvaluationFormat.hpp
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 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 2 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18
19 Consult the COPYING file in the top-level source directory of this
20 module for the precise wording of the license and the list of
21 copyright holders.
22*/
23
24#ifndef OPM_EVALUATION_FORMAT_HPP
25#define OPM_EVALUATION_FORMAT_HPP
26
28
29#include <fmt/format.h>
30#include <fmt/ranges.h>
31
32template<class ValueT, int numDerivs, unsigned staticSize>
33struct fmt::formatter<Opm::DenseAd::Evaluation<ValueT,numDerivs,staticSize>>
34{
35 std::string spec;
36 constexpr auto parse(fmt::format_parse_context& ctx)
37 {
38 auto it = ctx.begin();
39 spec = (it != ctx.end() && *it != '}') ? "{:" : "{";
40 while (it != ctx.end() && *it != '}')
41 spec += *it++;
42 spec += '}';
43 return it;
44 }
45
46 template<class FormatContext>
48 FormatContext& ctx)
49 {
50 std::array<ValueT,numDerivs> tmp;
51 for (int i = 0; i < numDerivs; ++i)
52 tmp[i] = e.derivative(i);
53 return fmt::format_to(ctx.out(), "v: "+ spec +" / d: [" + spec +"]", e.value(), fmt::join(tmp, ", "));
54 }
55};
56
57#endif // OPM_EVALUATION_FORMAT_HPP
Representation of an evaluation of a function and its derivatives w.r.t.
Represents a function evaluation and its derivatives w.r.t.
Definition: Evaluation.hpp:57
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30