From 1391f5606f5e0ccd6b1e3cc9c58800fda664f2c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20Gr=C3=A4ser?= <graeser@dune-project.org> Date: Wed, 16 Mar 2016 22:07:29 +0100 Subject: [PATCH] Add a dunesolvers lib and move implementation of Criterion into the latter --- dune/solvers/CMakeLists.txt | 5 +++ dune/solvers/solvers/criterion.cc | 57 +++++++++++++++++++++++++++++++ dune/solvers/solvers/criterion.hh | 42 +++-------------------- 3 files changed, 67 insertions(+), 37 deletions(-) create mode 100644 dune/solvers/solvers/criterion.cc diff --git a/dune/solvers/CMakeLists.txt b/dune/solvers/CMakeLists.txt index 40702b03..ea0ac135 100644 --- a/dune/solvers/CMakeLists.txt +++ b/dune/solvers/CMakeLists.txt @@ -6,6 +6,11 @@ add_subdirectory("solvers") add_subdirectory("test") add_subdirectory("transferoperators") +dune_add_library("dunesolvers" + solvers/criterion.cc) + +dune_register_package_flags(LIBRARIES) + install(FILES computeenergy.hh DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/solvers) diff --git a/dune/solvers/solvers/criterion.cc b/dune/solvers/solvers/criterion.cc new file mode 100644 index 00000000..ee361a82 --- /dev/null +++ b/dune/solvers/solvers/criterion.cc @@ -0,0 +1,57 @@ +// -*- tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- +// vi: set et ts=8 sw=2 sts=2: + +#include <config.h> + +#include <tuple> + +#include <dune/solvers/solvers/criterion.hh> + + +Dune::Solvers::Criterion::Result +Dune::Solvers::Criterion::operator()() const +{ + return f_(); +} + +std::string +Dune::Solvers::Criterion::header() const +{ + return header_; +} + +Dune::Solvers::Criterion +Dune::Solvers::operator| (const Criterion& c1, const Criterion& c2) +{ + return Criterion( + [=]() { + auto r1 = c1(); + auto r2 = c2(); + return std::make_tuple(std::get<0>(r1) or std::get<0>(r2), std::get<1>(r1).append(std::get<1>(r2))); + }, + c1.header().append(c2.header())); +} + +Dune::Solvers::Criterion +Dune::Solvers::operator& (const Criterion& c1, const Criterion& c2) +{ + return Criterion( + [=]() { + auto r1 = c1(); + auto r2 = c2(); + return std::make_tuple(std::get<0>(r1) and std::get<0>(r2), std::get<1>(r1).append(std::get<1>(r2))); + }, + c1.header().append(c2.header())); +} + +Dune::Solvers::Criterion +Dune::Solvers::operator~ (const Criterion& c) +{ + return Criterion( + [=]() { + auto r = c(); + return std::make_tuple(not(std::get<0>(r)), std::get<1>(r)); + }, + c.header()); +} + diff --git a/dune/solvers/solvers/criterion.hh b/dune/solvers/solvers/criterion.hh index cbdcb2f3..4efa7d79 100644 --- a/dune/solvers/solvers/criterion.hh +++ b/dune/solvers/solvers/criterion.hh @@ -110,18 +110,12 @@ namespace Dune { * * \returns A tuple<bool,string> */ - Result operator()() const - { - return f_(); - } + Result operator()() const; /** * \brief Obtain header string */ - std::string header() const - { - return header_; - } + std::string header() const; protected: std::function<Result()> f_; @@ -139,16 +133,7 @@ namespace Dune { * * Notice that this will store copies of both provided criteria. */ - Criterion operator| (const Criterion& c1, const Criterion& c2) - { - return Criterion( - [=]() { - auto r1 = c1(); - auto r2 = c2(); - return std::make_tuple(std::get<0>(r1) or std::get<0>(r2), std::get<1>(r1).append(std::get<1>(r2))); - }, - c1.header().append(c2.header())); - } + Criterion operator| (const Criterion& c1, const Criterion& c2); /** * \brief Create Criterion that combines two others using 'and' @@ -157,16 +142,7 @@ namespace Dune { * * Notice that this will store copies of both provided criteria. */ - Criterion operator& (const Criterion& c1, const Criterion& c2) - { - return Criterion( - [=]() { - auto r1 = c1(); - auto r2 = c2(); - return std::make_tuple(std::get<0>(r1) and std::get<0>(r2), std::get<1>(r1).append(std::get<1>(r2))); - }, - c1.header().append(c2.header())); - } + Criterion operator& (const Criterion& c1, const Criterion& c2); /** * \brief Create Criterion that negates another @@ -175,15 +151,7 @@ namespace Dune { * * Notice that this will store a copy of the provided criterion. */ - Criterion operator~ (const Criterion& c) - { - return Criterion( - [=]() { - auto r = c(); - return std::make_tuple(not(std::get<0>(r)), std::get<1>(r)); - }, - c.header()); - } + Criterion operator~ (const Criterion& c); -- GitLab