Newer
Older
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\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",
"order = 2\n",
"dim = 2\n",
"\n",
"if 0:\n",
" knl = LaplaceKernel(dim)\n",
" extra_kernel_kwargs = {}\n",
" mpole_expn_reduced_class = LaplaceConformingVolumeTaylorMultipoleExpansion\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",
"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",
"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",
]
}
],
"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",