From ce39e21f821a68c4f0653b989eeb16d43e427595 Mon Sep 17 00:00:00 2001
From: Stephan Seitz <stephan.seitz@fau.de>
Date: Thu, 22 Nov 2018 11:19:35 +0100
Subject: [PATCH] Add assignment.assignmetn_from_stencil

---
 assignment.py | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/assignment.py b/assignment.py
index dd9f09ba0..a722a7eb2 100644
--- a/assignment.py
+++ b/assignment.py
@@ -6,8 +6,9 @@ try:
     from sympy.codegen.ast import Assignment
 except ImportError:
     Assignment = None
+import numpy as np
 
-__all__ = ['Assignment']
+__all__ = ['Assignment', 'assignment_from_stencil']
 
 
 def print_assignment_latex(printer, expr):
@@ -48,3 +49,17 @@ else:
 
         __str__ = assignment_str
         _print_Assignment = print_assignment_latex
+
+
+def assignment_from_stencil(stencil_array, input_field, output_field, normalization_factor=None):
+    stencil_array = np.array(stencil_array)
+    rhs = 0
+    offset = tuple(s // 2 for s in stencil_array.shape)
+
+    for index, factor in np.ndenumerate(stencil_array):
+        rhs += factor * input_field[tuple(i - o for i, o in zip(index, offset))]
+
+    if normalization_factor:
+        rhs *= normalization_factor
+
+    return Assignment(output_field.center(), rhs)
-- 
GitLab