Newer
Older
import numpy as np
from pystencils.session import *
from pystencilssfg import SourceFileGenerator
from pystencilssfg.source_concepts.cpp import std_mdspan
def field_t(field: ps.Field):
return std_mdspan(field.name,
field.dtype,
(std_mdspan.dynamic_extent, std_mdspan.dynamic_extent),
extents_type=np.uint32,
reference=True)
with SourceFileGenerator() as sfg:
src, dst = ps.fields("src, dst(1) : double[2D]")
@ps.kernel
def poisson_jacobi():
dst[0,0] @= (src[1, 0] + src[-1, 0] + src[0, 1] + src[0, -1]) / 4
poisson_kernel = sfg.kernels.create(poisson_jacobi)
sfg.function("jacobi_smooth")(
sfg.map_field(src, field_t(src)),
sfg.map_field(dst, field_t(dst)),
sfg.call(poisson_kernel)