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