From 724c9552e5814edca2e0bfffdd393e2ccfcb6279 Mon Sep 17 00:00:00 2001 From: Martin Bauer <martin.bauer@fau.de> Date: Thu, 5 Jul 2018 10:04:06 +0200 Subject: [PATCH] EsoTwist field accessor --- fieldaccess.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/fieldaccess.py b/fieldaccess.py index 95cbc1d5..093ade64 100644 --- a/fieldaccess.py +++ b/fieldaccess.py @@ -4,6 +4,12 @@ from lbmpy.stencils import inverse_direction from pystencils import Field +__all__ = ['PdfFieldAccessor', 'CollideOnlyInplaceAccessor', 'StreamPullTwoFieldsAccessor', + 'AAEvenTimeStepAccessor', 'AAOddTimeStepAccessor', + 'EsoTwistEvenTimeStepAccessor', 'EsoTwistOddTimeStepAccessor', + 'visualize_pdf_field_accessor', 'visualize_field_mapping'] + + # ------------------------------------------------ Interface ----------------------------------------------------------- from pystencils.astnodes import LoopOverCoordinate @@ -121,6 +127,44 @@ class AAOddTimeStepAccessor(PdfFieldAccessor): return [field[d](i) for i, d in enumerate(stencil)] +class EsoTwistOddTimeStepAccessor(PdfFieldAccessor): + @staticmethod + def read(field, stencil): + result = [] + for direction in stencil: + inv_dir = inverse_direction(direction) + spatial_offset = tuple(max(e, 0) for e in inv_dir) + result.append(field[spatial_offset](stencil.index(inv_dir))) + return result + + @staticmethod + def write(field, stencil): + result = [] + for i, direction in enumerate(stencil): + spatial_offset = tuple(max(e, 0) for e in direction) + result.append(field[spatial_offset](i)) + return result + + +class EsoTwistEvenTimeStepAccessor(PdfFieldAccessor): + @staticmethod + def read(field, stencil): + result = [] + for i, direction in enumerate(stencil): + spatial_offset = tuple(max(-e, 0) for e in direction) + result.append(field[spatial_offset](i)) + return result + + @staticmethod + def write(field, stencil): + result = [] + for direction in stencil: + inv_dir = inverse_direction(direction) + spatial_offset = tuple(max(e, 0) for e in direction) + result.append(field[spatial_offset](stencil.index(inv_dir))) + return result + + # -------------------------------------------- Visualization ----------------------------------------------------------- -- GitLab