diff --git a/pystencils/field.py b/pystencils/field.py index 2cd7096b7fa171ab1cb8d9b83bec66ffc339ca5d..507be0c2cad932eed64419b70e1b55783cff4273 100644 --- a/pystencils/field.py +++ b/pystencils/field.py @@ -845,7 +845,7 @@ class Field(AbstractField): assert FieldType.is_staggered(self._field) neighbor = self._field.staggered_stencil[index] neighbor = direction_string_to_offset(neighbor, self._field.spatial_dimensions) - return [(o - sp.Rational(int(neighbor[i]), 2)) for i, o in enumerate(offsets)] + return [(o + sp.Rational(int(neighbor[i]), 2)) for i, o in enumerate(offsets)] def _latex(self, _): n = self._field.latex_name if self._field.latex_name else self._field.name diff --git a/pystencils_tests/test_field.py b/pystencils_tests/test_field.py index ad23682a71b0286446dd13b29e5216cc11d2aeef..a2813e34f9c72c8bbcd848d21993c181cf31fc43 100644 --- a/pystencils_tests/test_field.py +++ b/pystencils_tests/test_field.py @@ -154,12 +154,18 @@ def test_staggered(): for j in range(2)] for i in range(2)]) # D2Q9 - k = ps.fields('k(4) : double[2D]', field_type=FieldType.STAGGERED) - - assert k[1, 1](2) == k.staggered_access("NE") - assert k[0, 0](2) == k.staggered_access("SW") - - assert k[0, 0](3) == k.staggered_access("NW") + k1, k2 = ps.fields('k1(4), k2(2) : double[2D]', field_type=FieldType.STAGGERED) + + assert k1[1, 1](2) == k1.staggered_access("NE") + assert k1[0, 0](2) == k1.staggered_access("SW") + assert k1[0, 0](3) == k1.staggered_access("NW") + + a = k1.staggered_access("NE") + assert a._staggered_offset(a.offsets, a.index[0]) == [sp.Rational(1, 2), sp.Rational(1, 2)] + a = k1.staggered_access("SW") + assert a._staggered_offset(a.offsets, a.index[0]) == [sp.Rational(-1, 2), sp.Rational(-1, 2)] + a = k1.staggered_access("NW") + assert a._staggered_offset(a.offsets, a.index[0]) == [sp.Rational(-1, 2), sp.Rational(1, 2)] # sign reversed when using as flux field r = ps.fields('r(2) : double[2D]', field_type=FieldType.STAGGERED_FLUX)