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

Store local grid functions instead of global ones

After consulting Steffen
parent f7cb708e
No related branches found
No related tags found
No related merge requests found
......@@ -12,19 +12,6 @@ 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)
......@@ -42,7 +29,8 @@ def declare_grid_function_range(gridfunction):
def pymbolic_evaluate_gridfunction(name, coeff, restriction, grad):
diffOrder = 1 if grad else 0
gridfunction = local_gridfunction(coeff, restriction, diffOrder)
gridfunction = name_gridfunction_member(coeff, diffOrder)
bind_gridfunction_to_element(gridfunction, restriction)
temporary_variable(name,
shape=(1,) + (world_dimension(),) * diffOrder,
......
......@@ -158,7 +158,7 @@ def localoperator_basename(form_ident):
def name_gridfunction_member(coeff, diffOrder=0):
name = "gridfunction_coeff{}_diff{}".format(coeff.count(), diffOrder)
name = "local_gridfunction_coeff{}_diff{}".format(coeff.count(), diffOrder)
define_gridfunction_member(name, coeff, diffOrder)
return name
......@@ -175,14 +175,14 @@ def define_gridfunction_member(name, coeff, diffOrder):
_type = type_gridfunction_template_parameter(coeff)
param = name_gridfunction_constructor_argument(coeff)
if diffOrder > 0:
include_file("dune/pdelab/function/discretegridviewfunction.hh", filetag="operatorfile")
newtype = "Dune::PDELab::DiscreteGridViewFunction<typename {0}::GridFunctionSpace, typename {0}::Vector, {1}>".format(_type, diffOrder)
params = ["{}.gridFunctionSpace()".format(param), "{}.dofs()".format(param)]
initializer_list(name, params, classtag="operator")
return "{} {};".format(newtype, name)
other = name_gridfunction_member(coeff, diffOrder - 1)
init = "derivative({})".format(other)
initializer_list(name, [init], classtag="operator")
return "mutable decltype({}) {};".format(init, name)
else:
initializer_list(name, [param], classtag="operator")
return "const {}& {};".format(_type, name)
init = "localFunction({})".format(param)
initializer_list(name, [init], classtag="operator")
return "mutable typename {}::LocalFunction {};".format(_type, name)
@template_parameter(classtag="operator")
......
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