Skip to content
Snippets Groups Projects
Commit 1391f560 authored by Carsten Gräser's avatar Carsten Gräser
Browse files

Add a dunesolvers lib and move implementation of Criterion into the latter

parent 3143e43d
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -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)
// -*- 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());
}
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment