From 65b69e51d978c45d2e94e74c67c0f3cc1ce56688 Mon Sep 17 00:00:00 2001 From: Edward Caunt Date: Mon, 9 Sep 2024 15:15:12 +0100 Subject: [PATCH] examples: Update custom coefficients notebook text to reflect API changes --- .../seismic/tutorials/07_DRP_schemes.ipynb | 111 +++++++++--------- 1 file changed, 55 insertions(+), 56 deletions(-) diff --git a/examples/seismic/tutorials/07_DRP_schemes.ipynb b/examples/seismic/tutorials/07_DRP_schemes.ipynb index 917b568a99..e1f9b1f4d9 100644 --- a/examples/seismic/tutorials/07_DRP_schemes.ipynb +++ b/examples/seismic/tutorials/07_DRP_schemes.ipynb @@ -71,44 +71,13 @@ "\n", "[1] Christopher K.W. Tam, Jay C. Webb (1993). ”Dispersion-Relation-Preserving Finite Difference Schemes for Computational Acoustics.” **J. Comput. Phys.**, 107(2), 262--281. https://doi.org/10.1006/jcph.1993.1142\n", "\n", - "for further details. The use of such modified weights is facilitated in Devito via the 'symbolic' finite difference coefficents functionality. Let us start by re-defining the function $u(\\mathbf{x},t)$ in the following manner:" + "for further details. The use of such modified weights is facilitated in Devito via the custom finite difference coefficents functionality. Lets form a Devito equation featuring a derivative with custom coefficients:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, - "outputs": [], - "source": [ - "from devito import Coefficient, Substitutions # Import the Devito Coefficient and Substitutions objects\n", - "# Grab the grid spatial dimensions: Note x[0] will correspond to the x-direction and x[1] to y-direction\n", - "x = grid.dimensions \n", - "# Form a Coefficient object and then a replacement rules object (to pass to a Devito equation):\n", - "weights = np.array([-0.6, 0.1, 0.6])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Devito Coefficient ojects take arguments in the following order:\n", - "1. Derivative order (in the above example this is the first derivative)\n", - "2. Function to which the coefficients 'belong' (in the above example this is the time function `u`)\n", - "3. Dimension on which coefficients will be applied (in the above example this is the x-direction)\n", - "4. Coefficient data. Since, in the above example, the coefficients have been applied as a 1-d numpy array replacement will occur at the equation level. (Note that other options are in development and will be the subject of future notebooks)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, lets form a Devito equation, pass it the Substitutions object, and take a look at the output:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, "outputs": [ { "name": "stdout", @@ -120,6 +89,7 @@ ], "source": [ "from devito import Eq\n", + "weights = np.array([-0.6, 0.1, 0.6])\n", "eq = Eq(u.dt+u.dx(weights=weights))\n", "print(eq.evaluate)" ] @@ -128,7 +98,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We see that in the above equation the standard weights for the first derivative of `u` in the $x$-direction have now been replaced with our user defined weights. Note that since no replacement rules were defined for the time derivative (`u.dt`) standard weights have replaced the symbolic weights.\n", + "We see that in the above equation the standard weights for the first derivative of `u` in the $x$-direction have now been replaced with our user defined weights. Note that since custom weights were not specified for the time derivative (`u.dt`), standard weights are retained.\n", "\n", "Now, let us consider a more complete example." ] @@ -149,13 +119,20 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Operator `initdamp` ran in 0.01 s\n" + ] + }, { "data": { "image/png": "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r7/+QkBAQI3lmjZtipMnT+rcj06f4KFDh5R/FgQB9+7dU7vA5/jx45XOPY19mYiIiOjZUW6AJ/7U5YU/NjY2yM3NrbFcbm5utdnOmugUZP7yyy86d0hEREREtadt27Y4duwY8vLy4OTkpLZMXl4ejh49inbt2uncj05B5iuvvKJzh0RERERiKoeZATKZOi1bMQmhoaE4duwYhg8fjh07dsDGxkbl+sOHDzFixAg8fPhQrwXcdXfCARERERFVMnbsWHz99df4+eef0bp1awwbNgze3t4AgEuXLuH777/HzZs30aZNG4wfP17nfvQKMgVBwE8//YTjx4/j7t27eOmllzBq1CgAwN27d3Hv3j20bNkS5uZ1d14DERER1a7H2w2JG2vU5S2MrK2t8fPPP2PAgAE4ffo0Fi1apHJdEAT4+voiNja2UpZTGzoHmWfPnsWQIUNw+fJlCIIAiUSC0tJSZZCZkJCAESNGYNeuXejXr5/OAyQiIiIicbm5ueHkyZOIi4vD/v378eeffwIAPDw80LNnT4SEhOi9WFunIDM7Oxvdu3dHbm4uevfujVdffRUffvihSpn+/fvD0tISP/74I4NMIiIiMphyWEAi8gxAsbdEMkYSiQQhISEICQkxSPs6zWqNiopCbm4u/vOf/2DPnj344IMPKpWxsbFB+/btcerUKb0HSURERESmRacgc//+/fD29sakSZOqLdesWTPcunVLp4ERERERaaIC5igX+ajQck5maWkpDhw4gBkzZqBjx45wdHSEpaUlXF1dERISgr1792r9vubOnQuJRFLtcenSJa3bVSgrK8OWLVswduxY9O3bF3379sXYsWOxZcsWlJWV6dyugk654Js3b+KNN96osZxEIkF+fr4uXRARERFppNwAC3+03Yz98OHDeO211wAArq6uCAwMhK2tLS5cuIC4uDjExcXh3XffxerVq7We69i+fXt06NBB7TWZTKZVWwpnzpzBm2++iYyMDAiCoHLtv//9L2bPno3t27dX2a8mdAoybW1tcffu3RrLZWRkVLnJJxEREVFdYWZmhtDQUEyePBldu3ZVubZ161a8/fbb+OqrrxAQEICwsDCt2u7fvz/mzp0r2lhv3ryJHj16ICcnBy4uLhg6dChatmwJALh27Rq2bNmCq1ev4vXXX8eZM2fQuHFjnfrR6Xa5j48PTp8+jZyc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bq4ya9m1a1eMHj0agwYNgrW1td79MMgkIiIiquPkcjk2bdqEdevWISUlBQAgCAJcXV0xcuRIjBo1Cl5eXqL2ySCTiIiITFsZgFIDtFlHDBs2DLt27UJxcTEEQYC5uTl69+6N0aNHo0+fPjA3N8zG8wwyiYiIiOqwLVu2AABatWqFUaNGITw8HK6urgbvl0EmERERmbby/x1it1lHjBgxAqNHj8bLL7/8VPtlkElERERUh23YsKFW+mWQSURERKaNq8uNEoNMIiIiMm0MMo0SHytJRERERKJjJpOIiIhMGzOZRomZTCIiIiISHTOZREREZNrKIX7msQ5tYVRbmMkkIiIiItExk0lERESmjXMyjRIzmUREREQkOmYyiYiIyLQxk2mUGGQSERGRaSv93yF2m6QX3i4nIiIiItExk0lERESmrRzibznELYz0xkwmEREREYmOmUwiIiIybdyM3Sgxk0lEREREomMmk4iIiEwbtzAySsxkEhEREZHomMkkIiIi08ZMplFikElERESmjUGmUeLtciIiIiISHTOZREREZNq4hZFRMtpMZlpaGpYtW4bw8HD4+PjAwsICEokE8+bN06m9uXPnQiKRVHtcunSpyvpXrlxBeHg43NzcIJVK4ebmhvDwcFy7dk3Xt0hERERUZxltJnPVqlWIiYkRvd327dujQ4cOaq/JZDK1548dO4YePXqgqKgIbdu2RWBgIM6dO4cNGzZgx44dSExMROfOnUUfKxEREWmAczKNktEGme3atcMHH3wAX19f+Pn5ISoqCt9++63e7fbv3x9z587VuHxRUREGDx6MoqIiREZGIioqSnnto48+QnR0NAYPHoy0tDRYW1vrPT4iIiKiusBog8wxY8aovDYzq507++vXr8fNmzfRunXrSrfq582bh507dyI9PR0bN27E2LFja2WMREREz7RSAOYGaJP0YrRzMo1FbGwsAGDo0KGVAl0zMzMMGTIEAPDDDz889bERERERGSujzWQaSkpKCiIiIpCXlweZTAZfX1/069cP9vb2asunpqYCAPz9/dVeV5xXlCMiIqKnrBzirwbn6nK9PXNBZlxcHOLi4lTOyWQyLF26FGFhYSrnCwoKkJubCwDw8PBQ2567uzsA4O7duygsLIStra0BRk1ERERV4sIfo/TM3C5v2bIloqKikJqairy8POTl5eHo0aPo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IxEZGVnlRu3GQCIIglDbg3gW5efnQyaTIQKAdjtuERERPXuKAcwHIJfLlVv2KH6XoqMcsBB5G5+yfOCUTKU/0g4zmURERGTaygCInTLTY3U5PcaFP0REREQkOmYyiYiIyLQZIuvITKbeGGQSERGRaePtcqPE2+VEREREJDpmMomIiMi0MZNplJjJJCIiIiLRMZNJREREpq0MQIXIbYrd3jOImUwiIiIiEh0zmURERGTayiH+nExmMvXGTCYRERERiY6ZTCIiIjJtZRA/bcZMpt4YZBIREZFpY5BplHi7nIiIiIhEx0wmERERmbZSMJNphJjJJCIiIiLRMZNJREREpq0C4m9hJHZ7zyCjzWSmpaVh2bJlCA8Ph4+PDywsLCCRSDBv3jyd2pNIJBodGzduVKm3fv36Guvs379fjLdMREREVGcYbSZz1apViImJEa29kSNHVnktMzMTv/zyCyQSCV555RW1ZVq2bInAwEC115o2bSrKGImIiEgHZQAkIrfJTKbejDbIbNeuHT744AP4+vrCz88PUVFR+Pbbb3Vub/369VVeGz9+PH755Rd0794dnp6eassEBgZW2wYRERER/c1og8wxY8aovDYzM8yd/UePHuH7778HAIwePdogfRAREZEBMZNplIw2yHxadu7cifv378PJyQn9+/ev7eEQERGRtkrBINMIPfNB5jfffAMAGD58OKRSaZXlrly5go8//hh37tyBnZ0d2rVrh5CQEDg7Oz+toRIRERGZjGc6yLx+/Tp++eUXADXfKj927BiOHTumcq5evXqYO3cuZs6cabAxEhERUQ3KwUymETLaLYyehnXr1kEQBPj7++OFF15QW8bV1RWzZs3CiRMncPfuXeTn5+PUqVMICwtDcXExIiIiEBUVVWNfxcXFyM/PVzmIiIiI6qpnNsisqKhQrhYfNWpUleV69uyJefPmoVOnTnB2doa9vT38/f2xYcMGLFy4EADw2Wef4fbt29X2Fx0dDZlMpjzc3d1Fey9ERETPPEHkg/T2zAaZiYmJyMzMhLW1NYYNG6ZTG5MnT4azszOKi4sRHx9fbdnIyEjI5XLlkZWVpVOfRERERKbgmZ2TqVjwExoaCplMplMb5ubm8PLyQk5ODrKzs6stK5VKq11YRERERFSXPJOZzLy8POzatQuA/ntj5ubmAgDs7e31HRYRERFRnfFM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p05qV9kT0bODQSaRibtz5w7GjRsHAIiJialynqCFhQU2bNgAKysrLFq0CL/99ptW/bz00ks4fvw42rVrh4SEBBw6dAheXl5YvHgxtm3bVmkrHIlEgo0bN2Lz5s0IDAzE6dOnsWPHDhQVFSE8PBypqano1auXSp3p06djypQpcHNzQ0pKCrZv346UlBQ8//zzWLZsGX777TflyuaavPfee4iOjoanpyf27duHtWvXYu3atbh161aNdTt27IgzZ87g/fffh7m5OWJjY5GUlARfX1+sWrUKe/bsUd6ON7SQkBB4eHhg9+7dWq3WbtSoEQ4dOoQuXbpg165d6NevH4qKigw40scU0yDef/99g/dFRMZNIui7HJSI6rTw8HBs2LAB69atUz6Xmp6uhQsXYsaMGVi6dCkmTpxY28Op0qNHj+Du7g5LS0tkZGSo3WeUiJ4dzGQSERm5iRMnokWLFliwYIFO82mflmXLliEnJwfR0dEMMImIQSYRkbGTSqVYvHgxsrOzsXz58toejlpyuRzz589Hp06dEBYWVtvDISIjYFHbAyAiopq98cYbem92b0gymazKx0wS0bOJczKJiIiISHS8XU5EREREomOQSURERESiY5BJRERERKJjkElEREREomOQSURERESiY5BJRERERKJjkElEREREomOQSURERESiY5BJRERERKL7f4Ks0L+pNUh1AAAAAElFTkSuQmCC", @@ -209,7 +186,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -256,7 +233,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -276,7 +253,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -293,7 +270,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -304,19 +281,26 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Operator `Kernel` ran in 0.08 s\n" + ] + }, { "data": { "text/plain": [ "PerformanceSummary([(PerfKey(name='section0', rank=None),\n", - " PerfEntry(time=0.020340999999999977, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[])),\n", + " PerfEntry(time=0.04261199999999994, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[])),\n", " (PerfKey(name='section1', rank=None),\n", - " PerfEntry(time=0.005057999999999999, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[]))])" + " PerfEntry(time=0.033709000000000044, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[]))])" ] }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -335,7 +319,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -390,7 +374,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -428,13 +412,21 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": { "tags": [ "nbval-ignore-output" ] }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Operator `initdamp` ran in 0.01 s\n" + ] + } + ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", "\n", @@ -452,7 +444,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -477,12 +469,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We now create a stencil for each of our 'Upper' and 'Lower' subdomains defining different custom FD weights within each of these subdomains." + "We now create a stencil for each of our 'Upper' and 'Lower' subdomains defining different custom FD weights within each of these subdomains. Note that one could shorten the stencil rather than using zero coefficients in the lower layer by providing `space_order=order-4` alongside a shorter array of weights." ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -532,19 +524,26 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Operator `Kernel` ran in 0.08 s\n" + ] + }, { "data": { "text/plain": [ "PerformanceSummary([(PerfKey(name='section0', rank=None),\n", - " PerfEntry(time=0.037268000000000044, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[])),\n", + " PerfEntry(time=0.04203599999999992, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[])),\n", " (PerfKey(name='section1', rank=None),\n", - " PerfEntry(time=0.009709000000000018, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[]))])" + " PerfEntry(time=0.033913000000000026, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[]))])" ] }, - "execution_count": 16, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -563,7 +562,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -601,7 +600,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -630,7 +629,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [