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

initialize cache only for cell evaluation, do nothing otherwise

parent e7122e78
No related branches found
No related tags found
No related merge requests found
...@@ -38,21 +38,24 @@ class BlockStructuredBasisMixin(GenericBasisMixin): ...@@ -38,21 +38,24 @@ class BlockStructuredBasisMixin(GenericBasisMixin):
assert not isinstance(element, MixedElement) assert not isinstance(element, MixedElement)
name = "phi_{}".format(FEM_name_mangling(element)) name = "phi_{}".format(FEM_name_mangling(element))
name = restricted_name(name, restriction) name = restricted_name(name, restriction)
self.init_basis_cache(element) self.init_basis_cache(element, restriction)
self.evaluate_basis(element, name, restriction) self.evaluate_basis(element, name, restriction)
inames = self.lfs_inames(element, restriction, number, context=context) 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)) return prim.Subscript(prim.Variable(name), (tensor_index_to_sequential_index(inames, element.degree() + 1), 0))
@preamble(kernel='operator') @preamble(kernel='operator')
def init_basis_cache(self, element): def init_basis_cache(self, element, restriction):
cache = name_localbasis_cache(element) if not restriction:
localbasis = name_localbasis(element) cache = name_localbasis_cache(element)
qp_name = get_pymbolic_basename(self.quadrature_position_in_micro()) localbasis = name_localbasis(element)
return ["for (int i=0; i < {}.size(); ++i)".format(qp_name), 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), "{",
"}"] " {}.evaluateFunction({}[i], {});".format(cache, qp_name, localbasis),
"}"]
else:
return []
@kernel_cached @kernel_cached
def evaluate_basis(self, element, name, restriction): def evaluate_basis(self, element, name, restriction):
...@@ -71,21 +74,24 @@ class BlockStructuredBasisMixin(GenericBasisMixin): ...@@ -71,21 +74,24 @@ class BlockStructuredBasisMixin(GenericBasisMixin):
assert not isinstance(element, MixedElement) assert not isinstance(element, MixedElement)
name = "js_{}".format(FEM_name_mangling(element)) name = "js_{}".format(FEM_name_mangling(element))
name = restricted_name(name, restriction) name = restricted_name(name, restriction)
self.init_gradient_cache(element) self.init_gradient_cache(element, restriction)
self.evaluate_reference_gradient(element, name, restriction) self.evaluate_reference_gradient(element, name, restriction)
inames = self.lfs_inames(element, restriction, number, context=context) 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)) return prim.Subscript(prim.Variable(name), (tensor_index_to_sequential_index(inames, element.degree() + 1), 0))
@preamble(kernel='operator') @preamble(kernel='operator')
def init_gradient_cache(self, element): def init_gradient_cache(self, element, restriction):
cache = name_localbasis_cache(element) if not restriction:
localbasis = name_localbasis(element) cache = name_localbasis_cache(element)
qp_name = get_pymbolic_basename(self.quadrature_position_in_micro()) localbasis = name_localbasis(element)
return ["for (int i=0; i < {}.size(); ++i)".format(qp_name), 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), "{",
"}"] " {}.evaluateJacobian({}[i], {});".format(cache, qp_name, localbasis),
"}"]
else:
return []
@kernel_cached @kernel_cached
def evaluate_reference_gradient(self, element, name, restriction): def evaluate_reference_gradient(self, element, name, restriction):
......
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