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

Fix coefficient evaluation for facet integrals

In that case you need two GridFunctions, which can be
bound to the two cells.
parent ec61db54
No related branches found
No related tags found
No related merge requests found
......@@ -29,7 +29,7 @@ def declare_grid_function_range(gridfunction):
def pymbolic_evaluate_gridfunction(name, coeff, restriction, grad):
diffOrder = 1 if grad else 0
gridfunction = name_gridfunction_member(coeff, diffOrder)
gridfunction = name_gridfunction_member(coeff, restriction, diffOrder)
bind_gridfunction_to_element(gridfunction, restriction)
temporary_variable(name,
......
......@@ -157,9 +157,10 @@ def localoperator_basename(form_ident):
return get_form_option("classname", form_ident)
def name_gridfunction_member(coeff, diffOrder=0):
name = "local_gridfunction_coeff{}_diff{}".format(coeff.count(), diffOrder)
define_gridfunction_member(name, coeff, diffOrder)
def name_gridfunction_member(coeff, restriction, diffOrder=0):
restr = "_n" if restriction == Restriction.POSITIVE else ""
name = "local_gridfunction_coeff{}_diff{}{}".format(coeff.count(), diffOrder, restr)
define_gridfunction_member(name, coeff, restriction, diffOrder)
return name
......@@ -171,11 +172,11 @@ def name_gridfunction_constructor_argument(coeff):
@class_member(classtag="operator")
def define_gridfunction_member(name, coeff, diffOrder):
def define_gridfunction_member(name, coeff, restriction, diffOrder):
_type = type_gridfunction_template_parameter(coeff)
param = name_gridfunction_constructor_argument(coeff)
if diffOrder > 0:
other = name_gridfunction_member(coeff, diffOrder - 1)
other = name_gridfunction_member(coeff, restriction, diffOrder - 1)
init = "derivative({})".format(other)
initializer_list(name, [init], classtag="operator")
return "mutable decltype({}) {};".format(init, name)
......@@ -741,7 +742,7 @@ def generate_localoperator_kernels(operator):
# Iterate over the needed grid functions in correct order
for c in sorted(filter(lambda c: c.count() > 2, form.coefficients()), key=lambda c: c.count()):
name_gridfunction_member(c)
name_gridfunction_constructor_argument(c)
# Set some options!
from dune.perftool.pdelab.driver import isQuadrilateral
......
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