Skip to content
Snippets Groups Projects
PDE-reduction-symbolic.ipynb 3.66 KiB
Newer Older
  • Learn to ignore specific revisions
  • {
     "cells": [
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
    
        "from __future__ import annotations\n",
    
        "\n",
        "from sumpy.expansion.local import VolumeTaylorLocalExpansion\n",
    
        "from sumpy.expansion.multipole import (\n",
        "    LaplaceConformingVolumeTaylorMultipoleExpansion,\n",
        "    LinearPDEConformingVolumeTaylorMultipoleExpansion,\n",
        "    VolumeTaylorMultipoleExpansion,\n",
        ")\n",
        "from sumpy.kernel import HelmholtzKernel, LaplaceKernel, YukawaKernel  # noqa: F401\n",
    
        "from sumpy.symbolic import make_sym_vector\n",
        "\n",
    
        "\n",
    
        "order = 2\n",
        "dim = 2\n",
        "\n",
        "if 0:\n",
        "    knl = LaplaceKernel(dim)\n",
        "    extra_kernel_kwargs = {}\n",
        "    mpole_expn_reduced_class = LaplaceConformingVolumeTaylorMultipoleExpansion\n",
    
        "\n",
    
        "else:\n",
        "    helm_k = 1.2\n",
        "    knl = HelmholtzKernel(dim)\n",
    
        "    extra_kernel_kwargs = {\"k\": helm_k}\n",
    
        "    mpole_expn_reduced_class = LinearPDEConformingVolumeTaylorMultipoleExpansion\n",
    
        "\n",
        "mpole_expn_reduced = mpole_expn_reduced_class(knl, order)\n",
        "mpole_expn = VolumeTaylorMultipoleExpansion(knl, order)\n",
    
        "local_expn = VolumeTaylorLocalExpansion(knl, order)"
    
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
    
        "reduced_wrangler = mpole_expn_reduced.expansion_terms_wrangler\n",
        "full_wrangler = mpole_expn.expansion_terms_wrangler\n",
    
        "\n",
    
        "reduced_derivatives = list(\n",
        "    make_sym_vector(\"deriv\", len(reduced_wrangler.stored_identifiers))\n",
        ")\n",
        "full_derivatives = reduced_wrangler.get_full_kernel_derivatives_from_stored(\n",
        "    reduced_derivatives, 1\n",
        ")\n",
    
        "\n",
        "print(reduced_derivatives)\n",
        "print(full_derivatives)"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
    
        "full_coeffs = list(\n",
        "    make_sym_vector(\"coeff\", len(reduced_wrangler.get_full_coefficient_identifiers()))\n",
        ")\n",
    
        "\n",
    
        "reduced_coeffs = reduced_wrangler.get_stored_mpole_coefficients_from_full(\n",
        "    full_mpole_coefficients=full_coeffs, rscale=1\n",
        ")\n",
    
        "\n",
        "print(full_coeffs)\n",
        "print(reduced_coeffs)"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "dvec = make_sym_vector(\"d\", dim)\n",
    
        "translated_reduce_coeffs = mpole_expn_reduced.translate_from(\n",
        "    mpole_expn_reduced, reduced_coeffs, 1, dvec, 1\n",
        ")\n",
    
        "translated_full_coeffs = mpole_expn.translate_from(mpole_expn, full_coeffs, 1, dvec, 1)\n",
        "translated_full_coeffs"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
    
        "eval_reduced = sum(a * b for a, b in zip(translated_reduce_coeffs, reduced_derivatives,\n",
        "                                         strict=True))\n",
        "eval_full = sum(a * b for a, b in zip(translated_full_coeffs, full_derivatives,\n",
        "                                      strict=True))\n",
    
        "(eval_full - eval_reduced).simplify()"
    
       ]
      }
     ],
     "metadata": {
      "kernelspec": {
    
       "display_name": "Python 3 (ipykernel)",
    
       "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.12.7"
    
      }
     },
     "nbformat": 4,
    
     "nbformat_minor": 4