diff --git a/applications/poisson_dg_tensor/poisson_dg_tensor.ufl b/applications/poisson_dg_tensor/poisson_dg_tensor.ufl index d3c95a5226e26981cf78e5d8b78a686150a9310d..2b1a7b9803016a50b609a9d5379461c20252310c 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 de6607fd853bde3d0f69235100abefbd428afe5b..b1f4672e5ca10c6f1873392a6b5033eaff0a52b4 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 8df024fee40ed4b0d48885de25f3e9cf20f1c685..e0f4a85b1048e5d743e524fb38155319a32e67ef 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():