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

Move grid function evaluation to its own module

parent 9d7bc9da
No related branches found
No related tags found
No related merge requests found
...@@ -12,8 +12,8 @@ from dune.perftool.pdelab.argument import (pymbolic_apply_function, ...@@ -12,8 +12,8 @@ from dune.perftool.pdelab.argument import (pymbolic_apply_function,
) )
from dune.perftool.pdelab.basis import (pymbolic_basis, from dune.perftool.pdelab.basis import (pymbolic_basis,
pymbolic_reference_gradient, pymbolic_reference_gradient,
pymbolic_gridfunction,
) )
from dune.perftool.pdelab.function import pymbolic_gridfunction
from dune.perftool.pdelab.geometry import (component_iname, from dune.perftool.pdelab.geometry import (component_iname,
pymbolic_cell_volume, pymbolic_cell_volume,
pymbolic_facet_area, pymbolic_facet_area,
......
...@@ -229,55 +229,3 @@ def evaluate_coefficient_gradient(visitor, element, name, container, restriction ...@@ -229,55 +229,3 @@ def evaluate_coefficient_gradient(visitor, element, name, container, restriction
forced_iname_deps=frozenset(get_backend("quad_inames")()).union(frozenset({dimindex})), forced_iname_deps=frozenset(get_backend("quad_inames")()).union(frozenset({dimindex})),
forced_iname_deps_is_final=True, forced_iname_deps_is_final=True,
) )
def local_gridfunction(coeff, restriction, diffOrder):
from dune.perftool.pdelab.localoperator import name_gridfunction_member
gf = name_gridfunction_member(coeff, diffOrder)
name = "{}_local".format(gf)
define_local_gridfunction(name, gf)
bind_gridfunction_to_element(name, restriction)
return name
@preamble
def define_local_gridfunction(name, gf):
return "auto {} = localFunction({});".format(name, gf)
@preamble
def bind_gridfunction_to_element(gf, restriction):
element = name_cell(restriction)
return "{}.bind({});".format(gf, element)
def declare_grid_function_range(gridfunction):
def _decl(name, *args):
return "typename decltype({})::Range {};".format(gridfunction, name)
return _decl
@kernel_cached
def pymbolic_evaluate_gridfunction(name, coeff, restriction, grad):
diffOrder = 1 if grad else 0
gridfunction = local_gridfunction(coeff, restriction, diffOrder)
temporary_variable(name,
shape=(1,) + (world_dimension(),) * diffOrder,
decl_method=declare_grid_function_range(gridfunction),
managed=False,
)
quadpos = get_backend(interface="qp_in_cell")(restriction)
instruction(code="{} = {}({});".format(name, gridfunction, quadpos),
assignees=frozenset({name}),
within_inames=frozenset(get_backend(interface="quad_inames")()),
within_inames_is_final=True,
)
def pymbolic_gridfunction(coeff, restriction, grad):
name = "coeff{}{}".format(coeff.count(), "_grad" if grad else "")
pymbolic_evaluate_gridfunction(name, coeff, restriction, grad)
return Subscript(Variable(name), (0,))
from dune.perftool.generation import (get_backend,
instruction,
kernel_cached,
preamble,
temporary_variable,
)
from dune.perftool.pdelab.geometry import (name_cell,
world_dimension,
)
from dune.perftool.pdelab.localoperator import name_gridfunction_member
import pymbolic.primitives as prim
def local_gridfunction(coeff, restriction, diffOrder):
gf = name_gridfunction_member(coeff, diffOrder)
name = "{}_local".format(gf)
define_local_gridfunction(name, gf)
bind_gridfunction_to_element(name, restriction)
return name
@preamble
def define_local_gridfunction(name, gf):
return "auto {} = localFunction({});".format(name, gf)
@preamble
def bind_gridfunction_to_element(gf, restriction):
element = name_cell(restriction)
return "{}.bind({});".format(gf, element)
def declare_grid_function_range(gridfunction):
def _decl(name, *args):
return "typename decltype({})::Range {};".format(gridfunction, name)
return _decl
@kernel_cached
def pymbolic_evaluate_gridfunction(name, coeff, restriction, grad):
diffOrder = 1 if grad else 0
gridfunction = local_gridfunction(coeff, restriction, diffOrder)
temporary_variable(name,
shape=(1,) + (world_dimension(),) * diffOrder,
decl_method=declare_grid_function_range(gridfunction),
managed=False,
)
quadpos = get_backend(interface="qp_in_cell")(restriction)
instruction(code="{} = {}({});".format(name, gridfunction, quadpos),
assignees=frozenset({name}),
within_inames=frozenset(get_backend(interface="quad_inames")()),
within_inames_is_final=True,
)
def pymbolic_gridfunction(coeff, restriction, grad):
name = "coeff{}{}".format(coeff.count(), "_grad" if grad else "")
pymbolic_evaluate_gridfunction(name, coeff, restriction, grad)
return prim.Subscript(prim.Variable(name), (0,))
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