Skip to content
Snippets Groups Projects
Commit 1a52b2d4 authored by Dominic Kempf's avatar Dominic Kempf
Browse files

Implement meshsize as an operator-wide quantity

parent 1886ef25
No related branches found
No related tags found
No related merge requests found
......@@ -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
......@@ -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]
......
......@@ -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():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment