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

Add previously forgotten new module on parameter functions

parent 962d6cf2
No related branches found
No related tags found
No related merge requests found
""" Generators for parameter functions """
from dune.perftool.generation import (class_basename,
class_member,
constructor_parameter,
generator_factory,
initializer_list,
symbol,
temporary_variable
)
from dune.perftool.pdelab.geometry import name_entity
from dune.perftool.pdelab.quadrature import (name_quadrature_position,
quadrature_preamble,
)
from dune.perftool.cgen.clazz import AccessModifier
from dune.perftool.pdelab.localoperator import (class_type_from_cache,
localoperator_basename,
)
@class_basename("parameterclass")
def parameterclass_basename():
lopbase = localoperator_basename()
return "{}Params".format(lopbase)
@class_member("operator")
def define_parameterclass(name):
_, t = class_type_from_cache("parameterclass")
constructor_parameter("const {}&".format(t), name + "_", classtag="operator")
initializer_list(name, [name + "_"], classtag="operator")
return "const {}& {};".format(t, name)
@symbol
def name_paramclass():
define_parameterclass("param")
return "param"
@class_member("parameterclass", access=AccessModifier.PUBLIC)
def define_parameter_function_class_member(name, expr):
result = ["template<typename E, typename X>",
"double {}(const E& e, const X& x) const".format(name),
"{",
]
if expr.is_global:
result.append(" auto xg = e.geometry().global(x);")
e = expr.c_expr.replace('x', 'xg')
else:
e = expr.c_expr
result.append(" return {};".format(e))
result.append("}")
return result
def evaluate_parameter_function(name):
param = name_paramclass()
entity = name_entity()
pos = name_quadrature_position()
return quadrature_preamble('{} = {}.{}({}, {});'.format(name,
name_paramclass(),
name,
entity,
pos,
),
assignees=frozenset({name})
)
def parameter_function(name, expr):
temporary_variable(name, shape=())
define_parameter_function_class_member(name, expr)
evaluate_parameter_function(name)
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