Skip to content
Snippets Groups Projects
Commit 5cd4ac44 authored by Marcel Koch's avatar Marcel Koch
Browse files

[!339] fix blockstructured alias

Merge branch 'feature/fix-blockstructured-alias' into 'master'

See merge request [extensions/dune-codegen!339]

  [extensions/dune-codegen!339]: Noneextensions/dune-codegen/merge_requests/339
parents 2202135d 4eb8b362
No related branches found
No related tags found
No related merge requests found
......@@ -38,21 +38,24 @@ class BlockStructuredBasisMixin(GenericBasisMixin):
assert not isinstance(element, MixedElement)
name = "phi_{}".format(FEM_name_mangling(element))
name = restricted_name(name, restriction)
self.init_basis_cache(element)
self.init_basis_cache(element, restriction)
self.evaluate_basis(element, name, restriction)
inames = self.lfs_inames(element, restriction, number, context=context)
return prim.Subscript(prim.Variable(name), (tensor_index_to_sequential_index(inames, element.degree() + 1), 0))
@preamble(kernel='operator')
def init_basis_cache(self, element):
cache = name_localbasis_cache(element)
localbasis = name_localbasis(element)
qp_name = get_pymbolic_basename(self.quadrature_position_in_micro())
return ["for (int i=0; i < {}.size(); ++i)".format(qp_name),
"{",
" {}.evaluateFunction({}[i], {});".format(cache, qp_name, localbasis),
"}"]
def init_basis_cache(self, element, restriction):
if not restriction:
cache = name_localbasis_cache(element)
localbasis = name_localbasis(element)
qp_name = get_pymbolic_basename(self.quadrature_position_in_micro())
return ["for (int i=0; i < {}.size(); ++i)".format(qp_name),
"{",
" {}.evaluateFunction({}[i], {});".format(cache, qp_name, localbasis),
"}"]
else:
return []
@kernel_cached
def evaluate_basis(self, element, name, restriction):
......@@ -71,21 +74,24 @@ class BlockStructuredBasisMixin(GenericBasisMixin):
assert not isinstance(element, MixedElement)
name = "js_{}".format(FEM_name_mangling(element))
name = restricted_name(name, restriction)
self.init_gradient_cache(element)
self.init_gradient_cache(element, restriction)
self.evaluate_reference_gradient(element, name, restriction)
inames = self.lfs_inames(element, restriction, number, context=context)
return prim.Subscript(prim.Variable(name), (tensor_index_to_sequential_index(inames, element.degree() + 1), 0))
@preamble(kernel='operator')
def init_gradient_cache(self, element):
cache = name_localbasis_cache(element)
localbasis = name_localbasis(element)
qp_name = get_pymbolic_basename(self.quadrature_position_in_micro())
return ["for (int i=0; i < {}.size(); ++i)".format(qp_name),
"{",
" {}.evaluateJacobian({}[i], {});".format(cache, qp_name, localbasis),
"}"]
def init_gradient_cache(self, element, restriction):
if not restriction:
cache = name_localbasis_cache(element)
localbasis = name_localbasis(element)
qp_name = get_pymbolic_basename(self.quadrature_position_in_micro())
return ["for (int i=0; i < {}.size(); ++i)".format(qp_name),
"{",
" {}.evaluateJacobian({}[i], {});".format(cache, qp_name, localbasis),
"}"]
else:
return []
@kernel_cached
def evaluate_reference_gradient(self, element, name, restriction):
......
......@@ -284,7 +284,7 @@ def determine_accumulation_space(info, number):
return AccumulationSpace(lfs=lfs,
index=lfsi,
restriction=info.restriction,
element=element
element=subel
)
......
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