Skip to content
Snippets Groups Projects
kernels.py 850 B
Newer Older
# type: ignore

import sympy as sp

from pystencils import fields, kernel
from pystencilssfg import SourceFileGenerator, SfgConfiguration
from pystencilssfg.source_concepts.cpp import mdspan_ref
sfg_config = SfgConfiguration(
    outer_namespace="make_demo"
)

with SourceFileGenerator(sfg_config) as sfg:
    sfg.namespace("jacobi")

    u_src, u_dst, f = fields("u_src, u_dst, f(1) : double[2D]", layout="fzyx")
    h = sp.Symbol("h")
    def poisson_jacobi():
        u_dst[0,0] @= (h**2 * f[0, 0] * u_src[1, 0] + u_src[-1, 0] + u_src[0, 1] + u_src[0, -1]) / 4
    poisson_kernel = sfg.kernels.create(poisson_jacobi)
    sfg.function("jacobi_smooth")(
        sfg.map_field(u_src, mdspan_ref(u_src)),
        sfg.map_field(u_dst, mdspan_ref(u_dst)),
        sfg.map_field(f, mdspan_ref(f)),