opm-common
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 
32 template<class ValueT, int numDerivs, unsigned staticSize>
33 struct 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) const
49  {
50  std::vector<ValueT> tmp(e.size());
51  for (int i = 0; i < e.size(); ++i)
52  tmp[i] = e.derivative(i);
53  return fmt::format_to(ctx.out(), fmt::runtime("v: "+ spec +" / d: [" + spec +"]"),
54  e.value(), fmt::join(tmp, ", "));
55  }
56 };
57 
58 #endif // OPM_EVALUATION_FORMAT_HPP
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30
OPM_HOST_DEVICE constexpr int size() const
number of derivatives
Definition: Evaluation.hpp:73
Represents a function evaluation and its derivatives w.r.t.
Definition: Evaluation.hpp:62
Representation of an evaluation of a function and its derivatives w.r.t.