diff --git a/dune/solvers/CMakeLists.txt b/dune/solvers/CMakeLists.txt index 40702b0301091692ead4c61160aa645898c7c273..ea0ac135d5a20394f1d9fa8cd9ddf89ea797ae08 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 0000000000000000000000000000000000000000..ee361a826d711b2e4f7e1dab15b02941e1556907 --- /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 cbdcb2f3b4d3ccd966749ca6e91d05a054f6575c..4efa7d79dc780e1e28952ddcf14b01ed7cfbc89d 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);