Skip to content
Snippets Groups Projects
Commit 5955f84b authored by Stephan Seitz's avatar Stephan Seitz
Browse files

Apply dirty hack when adjoint calculation depends on size of forward

fields but not on the forward fields them selves (just take size of
corresponding adjoint fields)
parent 3e5b4877
Branches master
Tags 0.3.3
No related merge requests found
Pipeline #28021 failed with stage
in 2 minutes and 28 seconds
...@@ -151,12 +151,11 @@ class DestructuringBindingsForFieldClass(Node): ...@@ -151,12 +151,11 @@ class DestructuringBindingsForFieldClass(Node):
undefined_field_symbols = self.symbols_defined undefined_field_symbols = self.symbols_defined
corresponding_field_names = {s.field_name for s in undefined_field_symbols if hasattr(s, 'field_name')} corresponding_field_names = {s.field_name for s in undefined_field_symbols if hasattr(s, 'field_name')}
corresponding_field_names |= {s.field_names[0] for s in undefined_field_symbols if hasattr(s, 'field_names')} corresponding_field_names |= {s.field_names[0] for s in undefined_field_symbols if hasattr(s, 'field_names')}
return {TypedSymbol(f, return {TypedSymbol(f, self.CLASS_NAME_TEMPLATE.format(dtype=(field_map.get(f) or field_map.get('diff' + f)).dtype,
self.CLASS_NAME_TEMPLATE.format(dtype=field_map[f].dtype, ndim=(field_map.get(f) or field_map.get('diff' + f)).ndim) + ('&'
ndim=field_map[f].ndim) + ('&' if self.ARGS_AS_REFERENCE
if self.ARGS_AS_REFERENCE else ''))
else '')) for f in corresponding_field_names} | (self.body.undefined_symbols - undefined_field_symbols)
for f in corresponding_field_names} | (self.body.undefined_symbols - undefined_field_symbols)
def subs(self, subs_dict) -> None: def subs(self, subs_dict) -> None:
"""Inplace! substitute, similar to sympy's but modifies the AST inplace.""" """Inplace! substitute, similar to sympy's but modifies the AST inplace."""
......
...@@ -123,9 +123,12 @@ class FrameworkIntegrationPrinter(pystencils.backends.cbackend.CBackend): ...@@ -123,9 +123,12 @@ class FrameworkIntegrationPrinter(pystencils.backends.cbackend.CBackend):
+ (node.field_suffix if hasattr(node, 'field_suffix') else ''), + (node.field_suffix if hasattr(node, 'field_suffix') else ''),
node.CLASS_TO_MEMBER_DICT[u.__class__].format( node.CLASS_TO_MEMBER_DICT[u.__class__].format(
dtype=(u.dtype.base_type if type(u) == FieldPointerSymbol dtype=(u.dtype.base_type if type(u) == FieldPointerSymbol
else fields_dtype[u.field_name else ((fields_dtype.get(u.field_name
if hasattr(u, 'field_name') if hasattr(u, 'field_name')
else u.field_names[0]]), else u.field_names[0]))
or (fields_dtype.get('diff' + u.field_name
if hasattr(u, 'field_name')
else 'diff' + u.field_names[0])))),
field_name=(u.field_name if hasattr(u, "field_name") else ""), field_name=(u.field_name if hasattr(u, "field_name") else ""),
dim=("" if type(u) == FieldPointerSymbol else u.coordinate), dim=("" if type(u) == FieldPointerSymbol else u.coordinate),
dim_letter=("" if type(u) == FieldPointerSymbol else 'xyz'[u.coordinate]) dim_letter=("" if type(u) == FieldPointerSymbol else 'xyz'[u.coordinate])
......
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