Skip to content
Snippets Groups Projects
Commit 9ff72ac0 authored by Dr. Felix Tobias Schindler's avatar Dr. Felix Tobias Schindler
Browse files

[norms] update to use new operator API/products

parent 159e19bd
No related branches found
No related tags found
3 merge requests!10Draft: consolidate refactoring work,!5Work on refactor operators bindings,!1Refactor operators
......@@ -10,100 +10,104 @@
#ifndef DUNE_GDT_NORMS_HH
#define DUNE_GDT_NORMS_HH
#include <dune/xt/grid/type_traits.hh>
#include <dune/gdt/local/bilinear-forms/integrals.hh>
#include <dune/gdt/local/integrands/laplace.hh>
#include <dune/gdt/local/integrands/product.hh>
#include <dune/gdt/operators/bilinear-form.hh>
#include <dune/gdt/products.hh>
namespace Dune {
namespace GDT {
template <class GridViewType, size_t r, class SF, class RF, class F = double>
std::enable_if_t<XT::Grid::is_view<GridViewType>::value, BilinearForm<GridViewType, r, 1, SF, F, r, 1, RF>>
make_l2_product(const GridViewType& grid_view,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r, 1, SF>& left,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r, 1, RF>& right,
const int over_integrate = 0)
template <class GridViewType, size_t r>
double l2_norm(const GridViewType& grid_view,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r>& function,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>, r, r> weight = 1.,
const int over_integrate = 0)
{
using E = XT::Grid::extract_entity_t<GridViewType>;
auto product = make_bilinear_form(grid_view, left, right);
product += LocalElementIntegralBilinearForm<E, r, 1, RF, F, r, 1, SF>(LocalProductIntegrand<E, r, RF, F, SF>(),
over_integrate);
return product;
return L2Product<r>(grid_view, weight, over_integrate).norm(function);
}
template <class GridViewType, size_t r, class SF, class RF, class F = double>
std::enable_if_t<XT::Grid::is_view<GridViewType>::value, F>
l2_product(const GridViewType& grid_view,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r, 1, SF>& left,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r, 1, RF>& right,
const int over_integrate = 0)
template <class GridViewType>
double l2_norm(const GridViewType& grid_view,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>> function,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>> weight = 1.,
const int over_integrate = 0)
{
return make_l2_product(grid_view, left, right, over_integrate).apply2();
return L2Product(grid_view, weight, over_integrate).norm(function);
}
template <class GridViewType, size_t r, class R, class F = double>
std::enable_if_t<XT::Grid::is_view<GridViewType>::value, F>
l2_norm(const GridViewType& grid_view,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r, 1, R>& func,
const int over_integrate = 0)
template <class GridViewType, size_t r>
double h1_semi_norm(const GridViewType& grid_view,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r>& function,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>,
GridViewType::dimension,
GridViewType::dimension> weight = 1.,
const int over_integrate = 0)
{
return H1SemiProduct<r>(grid_view, weight, over_integrate).norm(function);
}
template <class GridViewType>
double h1_semi_norm(const GridViewType& grid_view,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>> function,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>,
GridViewType::dimension,
GridViewType::dimension> weight = 1.,
const int over_integrate = 0)
{
return std::sqrt(l2_product(grid_view, func, func, over_integrate));
return H1SemiProduct<1>(grid_view, weight, over_integrate).norm(function);
}
template <class GridViewType, class F, size_t r>
std::enable_if_t<XT::Grid::is_view<GridViewType>::value, BilinearForm<GridViewType, r, 1, F, F, 1, 1, F>>
make_laplace_product(
const GridViewType& grid_view,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>,
GridViewType::dimension,
GridViewType::dimension,
F>& weight,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r, 1, F>& left,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r, 1, F>& right,
const int over_integrate = 0)
template <class GridViewType, size_t r>
std::enable_if_t<r == GridViewType::dimension, double>
h1_norm(const GridViewType& grid_view,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r>& function,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>, r, r> weight = 1.,
const int over_integrate = 0)
{
using E = XT::Grid::extract_entity_t<GridViewType>;
auto product = make_bilinear_form(grid_view, left, right);
product +=
LocalElementIntegralBilinearForm<E, r, 1, F, F, r, 1, F>(LocalLaplaceIntegrand<E, r, F>(weight), over_integrate);
return product;
return H1Product<r>(grid_view, weight, over_integrate).norm(function);
}
template <class GridViewType, size_t r>
std::enable_if_t<r != GridViewType::dimension, double>
h1_norm(const GridViewType& grid_view,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r>& function,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>> weight = 1.,
const int over_integrate = 0)
{
return H1Product<r>(grid_view, weight, over_integrate).norm(function);
}
template <class GridViewType, class F, size_t r>
std::enable_if_t<XT::Grid::is_view<GridViewType>::value, F>
laplace_product(const GridViewType& grid_view,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>,
GridViewType::dimension,
GridViewType::dimension,
F>& weight,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r, 1, F>& left,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r, 1, F>& right,
const int over_integrate = 0)
template <class GridViewType, size_t r>
double h1_norm(const GridViewType& grid_view,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r>& function,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>, r, r> l2_weight,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>,
GridViewType::dimension,
GridViewType::dimension> h1_semi_weight,
const int over_integrate = 0)
{
return make_laplace_product(grid_view, weight, left, right, over_integrate).apply2();
return H1Product<r>(grid_view, l2_weight, h1_semi_weight, over_integrate).norm(function);
}
template <class GridViewType>
double h1_norm(const GridViewType& grid_view,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>> function,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>> weight = 1.,
const int over_integrate = 0)
{
return H1Product(grid_view, weight, over_integrate).norm(function);
}
template <class GridViewType, class F, size_t r>
std::enable_if_t<XT::Grid::is_view<GridViewType>::value, F>
laplace_norm(const GridViewType& grid_view,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>,
GridViewType::dimension,
GridViewType::dimension,
F>& weight,
const XT::Functions::GridFunctionInterface<XT::Grid::extract_entity_t<GridViewType>, r, 1, F>& func,
const int over_integrate = 0)
template <class GridViewType>
double h1_norm(const GridViewType& grid_view,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>> function,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>> l2_weight,
XT::Functions::GridFunction<XT::Grid::extract_entity_t<GridViewType>> h1_semi_weight,
const int over_integrate = 0)
{
return std::sqrt(laplace_product(grid_view, weight, func, func, over_integrate));
return H1Product(grid_view, l2_weight, h1_semi_weight, over_integrate).norm(function);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment