{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from pystencils.session import *\n", "from pystencils.fd.derivation import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2D isotropic stencils\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "stencil_2D = ((0, 0),\n", " (0, 1), (0, -1), (-1, 0), (1, 0),\n", " (-1, 1), (1, 1), (-1, -1), (1, -1))\n", "f = ps.fields(\"f: [2D]\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "Isotropic_Gradient = list()\n", "deriv_x = FiniteDifferenceStencilDerivation((0, ), stencil_2D)\n", "\n", "deriv_x.assume_symmetric(0, anti_symmetric=True)\n", "deriv_x.assume_symmetric(1, anti_symmetric=False)\n", "\n", "deriv_x.set_weight((0, 0), sp.Integer(0))\n", "deriv_x.set_weight((1, 0), sp.Rational(1, 3))\n", "deriv_x.set_weight((1, 1), sp.Rational(1, 12))\n", "\n", "res_x = deriv_x.get_stencil(isotropic=True)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "Isotropic_Gradient = list()\n", "deriv_y = FiniteDifferenceStencilDerivation((1, ), stencil_2D)\n", "\n", "deriv_y.assume_symmetric(0, anti_symmetric=False)\n", "deriv_y.assume_symmetric(1, anti_symmetric=True)\n", "\n", "deriv_y.set_weight((0, 0), sp.Integer(0))\n", "deriv_y.set_weight((0, 1), sp.Rational(1, 3))\n", "deriv_y.set_weight((1, 1), sp.Rational(1, 12))\n", "\n", "res_y = deriv_y.get_stencil(isotropic=True)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "assert res_x.apply(f.center) - res_y.rotate_weights_and_apply(f.center, (1, 0)) == 0\n", "assert res_y.apply(f.center) - res_x.rotate_weights_and_apply(f.center, (0, 1)) == 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3D isotropic stencils" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "stencil_3D = ((0, 0, 0),\n", " (0, 1, 0), (0, -1, 0), (-1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, -1),\n", " (-1, 1, 0), (1, 1, 0), (-1, -1, 0), (1, -1, 0),\n", " (0, 1, 1), (0, -1, 1), (-1, 0, 1), (1, 0, 1),\n", " (0, 1, -1), (0, -1, -1), (-1, 0, -1), (1, 0, -1),\n", " (1, 1, 1), (-1, 1, 1), (1, -1, 1), (-1, -1, 1), (1, 1, -1), (-1, 1, -1), (1, -1, -1),\n", " (-1, -1, -1))\n", "f = ps.fields(\"f: [3D]\")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "deriv_x = FiniteDifferenceStencilDerivation((0, ), stencil_3D)\n", "\n", "deriv_x.assume_symmetric(0, anti_symmetric=True)\n", "deriv_x.assume_symmetric(1, anti_symmetric=False)\n", "deriv_x.assume_symmetric(2, anti_symmetric=False)\n", "\n", "deriv_x.set_weight((0, 0, 0), sp.Integer(0))\n", "deriv_x.set_weight((1, 1, 1), sp.Rational(1, 3360))\n", "\n", "res_x = deriv_x.get_stencil(isotropic=True)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "deriv_y = FiniteDifferenceStencilDerivation((1, ), stencil_3D)\n", "\n", "deriv_y.assume_symmetric(0, anti_symmetric=False)\n", "deriv_y.assume_symmetric(1, anti_symmetric=True)\n", "deriv_y.assume_symmetric(2, anti_symmetric=False)\n", "\n", "deriv_y.set_weight((0, 0, 0), sp.Integer(0))\n", "deriv_y.set_weight((1, 1, 1), sp.Rational(1, 3360))\n", "\n", "res_y = deriv_y.get_stencil(isotropic=True)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "deriv_z = FiniteDifferenceStencilDerivation((2, ), stencil_3D)\n", "\n", "deriv_z.assume_symmetric(0, anti_symmetric=False)\n", "deriv_z.assume_symmetric(1, anti_symmetric=False)\n", "deriv_z.assume_symmetric(2, anti_symmetric=True)\n", "\n", "deriv_z.set_weight((0, 0, 0), sp.Integer(0))\n", "deriv_z.set_weight((1, 1, 1), sp.Rational(1, 3360))\n", "\n", "res_z = deriv_z.get_stencil(isotropic=True)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "assert res_x.apply(f.center) - res_y.rotate_weights_and_apply(f.center, (1, 0)) == 0\n", "assert res_x.apply(f.center) - res_z.rotate_weights_and_apply(f.center, (2, 1)) == 0\n", "\n", "assert res_y.apply(f.center) - res_x.rotate_weights_and_apply(f.center, (0, 1)) == 0\n", "assert res_y.apply(f.center) - res_z.rotate_weights_and_apply(f.center, (0, 2)) == 0\n", "\n", "assert res_z.apply(f.center) - res_x.rotate_weights_and_apply(f.center, (1, 2)) == 0\n", "assert res_z.apply(f.center) - res_y.rotate_weights_and_apply(f.center, (2, 0)) == 0" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }