Skip to content
Snippets Groups Projects
Commit dec8439d authored by Martin Bauer's avatar Martin Bauer
Browse files

Bugfix in waLBerla code generation: temporary fields were not freed

parent f7264864
No related merge requests found
...@@ -24,6 +24,15 @@ else ...@@ -24,6 +24,15 @@ else
}} }}
""" """
temporary_constructor = """
~{class_name}() {{ {contents} }}
"""
delete_loop = """
for(auto p: cache_{original_field_name}_) {{
delete p;
}}
"""
def make_field_type(dtype, f_size, is_gpu): def make_field_type(dtype, f_size, is_gpu):
if is_gpu: if is_gpu:
...@@ -318,6 +327,16 @@ def generate_members(ctx, kernel_info, parameters_to_ignore=(), only_fields=Fals ...@@ -318,6 +327,16 @@ def generate_members(ctx, kernel_info, parameters_to_ignore=(), only_fields=Fals
return "\n".join(result) return "\n".join(result)
def generate_destructor(kernel_info, class_name):
if not kernel_info.temporary_fields:
return ""
else:
contents = ""
for field_name in kernel_info.temporary_fields:
contents += delete_loop.format(original_field_name=field_name[:-len('_tmp')])
return temporary_constructor.format(contents=contents, class_name=class_name)
def add_pystencils_filters_to_jinja_env(jinja_env): def add_pystencils_filters_to_jinja_env(jinja_env):
jinja_env.filters['generate_definition'] = generate_definition jinja_env.filters['generate_definition'] = generate_definition
jinja_env.filters['generate_declaration'] = generate_declaration jinja_env.filters['generate_declaration'] = generate_declaration
...@@ -328,3 +347,4 @@ def add_pystencils_filters_to_jinja_env(jinja_env): ...@@ -328,3 +347,4 @@ def add_pystencils_filters_to_jinja_env(jinja_env):
jinja_env.filters['generate_block_data_to_field_extraction'] = generate_block_data_to_field_extraction jinja_env.filters['generate_block_data_to_field_extraction'] = generate_block_data_to_field_extraction
jinja_env.filters['generate_swaps'] = generate_swaps jinja_env.filters['generate_swaps'] = generate_swaps
jinja_env.filters['generate_refs_for_kernel_parameters'] = generate_refs_for_kernel_parameters jinja_env.filters['generate_refs_for_kernel_parameters'] = generate_refs_for_kernel_parameters
jinja_env.filters['generate_destructor'] = generate_destructor
...@@ -54,6 +54,8 @@ public: ...@@ -54,6 +54,8 @@ public:
: {{ kernel|generate_constructor_initializer_list }}, stream_(stream) : {{ kernel|generate_constructor_initializer_list }}, stream_(stream)
{}; {};
{{ kernel| generate_destructor(class_name) |indent(4) }}
void operator() ( IBlock * block ); void operator() ( IBlock * block );
private: private:
{{kernel|generate_members|indent(4)}} {{kernel|generate_members|indent(4)}}
......
...@@ -55,6 +55,9 @@ public: ...@@ -55,6 +55,9 @@ public:
: {{ kernel|generate_constructor_initializer_list }} : {{ kernel|generate_constructor_initializer_list }}
{}; {};
{{ kernel| generate_destructor(class_name) |indent(4) }}
void operator() ( IBlock * block{%if target is equalto 'gpu'%} , cudaStream_t stream = 0{% endif %} ); void operator() ( IBlock * block{%if target is equalto 'gpu'%} , cudaStream_t stream = 0{% endif %} );
void inner( IBlock * block{%if target is equalto 'gpu'%} , cudaStream_t stream = 0{% endif %} ); void inner( IBlock * block{%if target is equalto 'gpu'%} , cudaStream_t stream = 0{% endif %} );
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment