Skip to content
Snippets Groups Projects
Commit d661f1e3 authored by Markus Holzer's avatar Markus Holzer
Browse files

Try to fix FreeSlip

parent 5ab99291
No related branches found
No related tags found
1 merge request!115Fix FreeSlip boundary condition
......@@ -88,10 +88,10 @@ class BetweenTimestepsIndexing:
if (f_dir, inverse) in self._trivial_offset_translations:
offsets = (0, ) * self._dim
elif f_dir == 'in':
offset_array_symbols = self._offset_array_symbols(f_dir, True)
offsets = tuple(sp.IndexedBase(s, shape=(1,))[self.dir_symbol] for s in offset_array_symbols)
self._required_offset_arrays.add((f_dir, True))
else:
offset_array_symbols = self._offset_array_symbols(f_dir, inverse)
offsets = tuple(sp.IndexedBase(s, shape=(1,))[index] for s in offset_array_symbols)
self._required_offset_arrays.add((f_dir, inverse))
return {'index': translated_index, 'offsets': offsets}
......
......@@ -208,24 +208,26 @@ class FreeSlip(LbBoundary):
def get_additional_code_nodes(self, lb_method):
if self.normal_direction:
return [MirroredStencilDirections(self.stencil, self.mirror_axis)]
return [MirroredStencilDirections(self.stencil, self.mirror_axis), NeighbourOffsetArrays(lb_method.stencil)]
else:
return []
return [NeighbourOffsetArrays(lb_method.stencil)]
def __call__(self, f_out, f_in, dir_symbol, inv_dir, lb_method, index_field):
neighbor_offset = NeighbourOffsetArrays.neighbour_offset(dir_symbol, lb_method.stencil)
if self.normal_direction:
normal_direction = self.normal_direction
tangential_offset = tuple(offset - normal for offset, normal in zip(neighbor_offset, self.normal_direction))
mirrored_stencil_symbol = MirroredStencilDirections._mirrored_symbol(self.mirror_axis)
mirrored_direction = inv_dir[sp.IndexedBase(mirrored_stencil_symbol, shape=(1,))[dir_symbol]]
mirrored_direction = sp.IndexedBase(mirrored_stencil_symbol, shape=(1,))[dir_symbol]
else:
normal_direction = list()
for i, cell_name in zip(range(self.dim), self.additional_data):
normal_direction.append(index_field[0](cell_name[0]))
normal_direction = tuple(normal_direction)
tangential_offset = tuple(offset - normal for offset, normal in zip(neighbor_offset, normal_direction))
mirrored_direction = index_field[0]('ref_dir')
return Assignment(f_in(inv_dir[dir_symbol]), f_in[normal_direction](mirrored_direction))
return Assignment(f_in.center(inv_dir[dir_symbol]), f_out[tangential_offset](mirrored_direction))
# end class FreeSlip
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment