From 1a52b2d48242c974ad29380baf29682b28ab7c17 Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Fri, 6 Oct 2017 17:35:51 +0200 Subject: [PATCH] Implement meshsize as an operator-wide quantity --- .../poisson_dg_tensor/poisson_dg_tensor.ufl | 1 + applications/poisson_dg_tensor/verify.mini | 1 - python/dune/perftool/sumfact/geometry.py | 22 +++++++++++++++---- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/applications/poisson_dg_tensor/poisson_dg_tensor.ufl b/applications/poisson_dg_tensor/poisson_dg_tensor.ufl index d3c95a52..2b1a7b98 100644 --- a/applications/poisson_dg_tensor/poisson_dg_tensor.ufl +++ b/applications/poisson_dg_tensor/poisson_dg_tensor.ufl @@ -33,3 +33,4 @@ r = (inner(A*grad(u), grad(v)) + (c*u-f)*v)*dx \ - gamma_ext*g*v*ds forms = [r] +exact_solution = g diff --git a/applications/poisson_dg_tensor/verify.mini b/applications/poisson_dg_tensor/verify.mini index de6607fd..b1f4672e 100644 --- a/applications/poisson_dg_tensor/verify.mini +++ b/applications/poisson_dg_tensor/verify.mini @@ -13,7 +13,6 @@ fastdg = 1 sumfact = 1 vectorize_quad = 1 vectorize_grads = 1 -exact_solution_expression = g compare_l2errorsquared = 1e-6 [formcompiler.ufl_variants] diff --git a/python/dune/perftool/sumfact/geometry.py b/python/dune/perftool/sumfact/geometry.py index 8df024fe..e0f4a85b 100644 --- a/python/dune/perftool/sumfact/geometry.py +++ b/python/dune/perftool/sumfact/geometry.py @@ -107,11 +107,25 @@ def define_corner(name, low): 0 if low else 2 ** local_dimension() - 1) -@preamble +@class_member(classtag="operator") def define_mesh_width(name): - define_corner(name, False) - lower = name_lowerleft_corner() - return "{} -= {};".format(name, lower) + from dune.perftool.pdelab.localoperator import lop_template_range_field + rft = lop_template_range_field() + define_mesh_width_eval(name) + return "Dune::FieldVector<{}, {}> {};".format(rft, world_dimension(), name) + + +def define_mesh_width_eval(name): + from dune.perftool.pdelab.localoperator import name_ansatz_gfs_constructor_param + gfs = name_ansatz_gfs_constructor_param() + code = ["{", + " auto e = *({}.gridView().template begin<0>());".format(gfs), + " {} = e.geometry().corner((1<<{}) - 1);".format(name, world_dimension()), + " {} -= e.geometry().corner(0);".format(name), + "}", + ] + instruction(code="\n".join(code), + kernel="operator") def name_lowerleft_corner(): -- GitLab