diff --git a/python/dune/perftool/generation/loopy.py b/python/dune/perftool/generation/loopy.py index 10620a1ef073c181774a21aff8073eb1fc8fad9a..f13f89cd24288fd412ec7528aedb4edddef4cf31 100644 --- a/python/dune/perftool/generation/loopy.py +++ b/python/dune/perftool/generation/loopy.py @@ -80,6 +80,11 @@ def default_declaration(name, shape=(), shape_impl=()): return '{} {}(0.0);'.format(t, name) +@preamble +def declaration_with_base_storage(name, base_storage): + return 'double* {} = {};'.format(name, base_storage) + + class _TemporaryCounter: counter = 0 @@ -99,6 +104,13 @@ def temporary_variable(name, **kwargs): shape_impl = kwargs.pop('shape_impl', ('arr',) * len(shape)) decl_method = kwargs.pop('decl_method', default_declaration) + + # Check if a specified base_storage has already been initialized + if kwargs.get('base_storage', None): + assert(kwargs['base_storage'] in [tv.name for tv in temporary_variable._memoize_cache.values()]) + assert(decl_method is None) + declaration_with_base_storage(name, kwargs['base_storage']) + if decl_method is not None: decl_method(name, shape, shape_impl)