update burgers notebooks

This commit is contained in:
Nils committed 2021-01-10 10:35:04 +01:00
1 parent d1bdc36622
commit fd8438dd10
5 files changed
+1073 -542

No files matched your search

+531 -93
View File
@@ -1,17 +1,4 @@
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Differentiable Physics with Fluid Simulations.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
@@ -21,34 +8,34 @@
"source": [
"# Differentiable Fluid Simulations with Φ<sub>Flow</sub>\n",
"\n",
"... now a more complex example with fluid simulations (Navier-Stokes) ...\n",
"\n",
"Only for colab: \n",
"Execute the cell below to install the [Φ<sub>Flow</sub> Python package from GitHub](https://github.com/tum-pbs/PhiFlow)."
"... now a more complex example with fluid simulations (Navier-Stokes) ...\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Z6YoAVKebfNV"
},
"source": [
"!pip install --upgrade --quiet phiflow"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "da1uZcDXdVcF"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/_collections_abc.py:743: MatplotlibDeprecationWarning: The global colormaps dictionary is no longer considered public API.\n",
" for key in self._mapping:\n",
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/_collections_abc.py:744: MatplotlibDeprecationWarning: The global colormaps dictionary is no longer considered public API.\n",
" yield (key, self._mapping[key])\n",
"/home/thuerey/phiflow/phi/viz/display.py:80: UserWarning: GUI is disabled because of missing dependencies: No module named 'imageio'. To install all dependencies, run $ pip install phiflow[gui]\n",
" warnings.warn('GUI is disabled because of missing dependencies: %s. To install all dependencies, run $ pip install phiflow[gui]' % import_error)\n"
]
}
],
"source": [
"!pip install --upgrade --quiet phiflow\n",
"from phi.flow import * # The Dash GUI is not supported on Google Colab, ignore the warning\n",
"import pylab"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
@@ -66,9 +53,34 @@
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "WrA3IXDxv31P"
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f17734d0ee0>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"world = World()\n",
"fluid = world.add(Fluid(Domain([40, 32], boundaries=CLOSED), buoyancy_factor=0.05, batch_size=4), physics=IncompressibleFlow())\n",
@@ -79,9 +91,14 @@
" world.step(dt=1.5)\n",
"\n",
"pylab.imshow(np.concatenate(fluid.density.data[...,0], axis=1), origin='lower', cmap='magma')"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we see four simulations, 0 .. 3. Simulation `0`, with the curved plume on the far left, will be our reference, while the other three will be modified in the optimization procedure below."
]
},
{
"cell_type": "markdown",
@@ -92,22 +109,44 @@
"## Differentiation\n",
"\n",
"The simulation we just computed was using purely NumPy (non-differentiable) operations.\n",
"To enable differentiability, we need to build a TensorFlow graph that computes this result."
"To enable differentiability, we need to build a TensorFlow graph that computes this result.\n",
"\n",
"(Note, the first line is only necessary when running in environments that by default have newer tensorflow versions installed, e.g., `colab`. Uncomment if you're running this notebook there.)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"id": "mphMP0sYIOz-"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Could not load resample cuda libraries: CUDA binaries not found at /home/thuerey/phiflow/phi/tf/cuda/build/resample.so. Run \"python setup.py cuda\" to compile them\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/thuerey/phiflow/phi/tf/__init__.py:7: UserWarning: TensorFlow 2 is not fully supported by PhiFlow.\n",
" warnings.warn('TensorFlow 2 is not fully supported by PhiFlow.')\n",
"/home/thuerey/phiflow/phi/tf/flow.py:15: UserWarning: TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\n",
"$ python setup.py tf_cuda\n",
"before reinstalling phiflow.\n",
" warnings.warn(\"TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\\n$ python setup.py tf_cuda\\nbefore reinstalling phiflow.\")\n"
]
}
],
"source": [
"%tensorflow_version 1.x\n",
"# %tensorflow_version 1.x\n",
"from phi.tf.flow import * # Causes deprecation warnings with TF 1.15\n",
"import pylab\n",
"session = Session(None) # Used to run the TensorFlow graph"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
@@ -117,15 +156,19 @@
"source": [
"Let's set up the simulation just like before. But now, we want to optimize the initial velocities so that all simulations arrive at a final state that is similar to the first simulation from the previous example. I.e., the state shown in the left-most image above.\n",
"\n",
"This is a fairly tough task: we're producing diffent dynamics by changing the boundary conditions (the marker inflow position), and an optimizer should now find a single initial velocity state, that gives the same state as simulation `0` above at $t=30$. Thus, after 20 steps with $\\Delta t=1.5$ the simulation should reproduce a different set of boundary conditions from the velocity state. It would be much easier to simply change the position of the marker inflow to arrive at this goal, but -- to make things a bit more difficult -- the inflow is _not_ a degree of freedom. The optimizer can only change the velocity $\\mathbf{u}$ at time $t=0$.\n",
"\n",
"To achieve this, we create a TensorFlow variable for the velocity at t=0.\n",
"It is initialized with zeros (like with the NumPy simulation above) and can later be used as a target for optimization."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"id": "NlJMJikaHOL6"
},
"outputs": [],
"source": [
"world = World()\n",
"fluid = world.add(Fluid(Domain([40, 32], boundaries=CLOSED), buoyancy_factor=0.05, batch_size=4), physics=IncompressibleFlow())\n",
@@ -133,40 +176,14 @@
"fluid.velocity = variable(fluid.velocity) # create TensorFlow variable\n",
"initial_state = fluid.state # Remember the state at t=0 for later visualization\n",
"session.initialize_variables()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "t-NDwXRCYHjw"
},
"source": [
"\n",
"\n",
"Note that we actually created two variables, one for each velocity component. If you're interested in how this magic works, have a look at the [Struct documentation](https://github.com/tum-pbs/PhiFlow/blob/master/documentation/Structs.ipynb)."
]
},
{
"cell_type": "code",
"metadata": {
"id": "2q5gfaH2YHr6"
},
"source": [
"[print(grid.data) for grid in fluid.velocity.unstack()];"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "vSdGIEzCgq5-"
},
"source": [
"If you look closely, you'll notice that the shapes of the variables differ. This is because the velocity is sampled in [staggered form](https://github.com/tum-pbs/PhiFlow/blob/master/documentation/Staggered_Grids.md).\n",
"\n",
"The simulation now contains variables in the initial state.\n",
"Since all later states depend on the value of the variable, the `step` method cannot directly compute concrete state values.\n",
"Instead, `world.step` will extend the TensorFlow graph by the operations needed to perform the step.\n",
@@ -176,15 +193,38 @@
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"id": "wSrIezfWHjcQ"
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f17381ec430>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"world.step()\n",
"pylab.imshow(np.concatenate(session.run(fluid.density).data[...,0], axis=1), origin='lower', cmap='magma')"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
@@ -197,16 +237,43 @@
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"id": "b9xHtdDQRrjL"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Building graph for frame 0\n",
"Building graph for frame 1\n",
"Building graph for frame 2\n",
"Building graph for frame 3\n",
"Building graph for frame 4\n",
"Building graph for frame 5\n",
"Building graph for frame 6\n",
"Building graph for frame 7\n",
"Building graph for frame 8\n",
"Building graph for frame 9\n",
"Building graph for frame 10\n",
"Building graph for frame 11\n",
"Building graph for frame 12\n",
"Building graph for frame 13\n",
"Building graph for frame 14\n",
"Building graph for frame 15\n",
"Building graph for frame 16\n",
"Building graph for frame 17\n",
"Building graph for frame 18\n",
"Building graph for frame 19\n"
]
}
],
"source": [
"for frame in range(20):\n",
" print('Building graph for frame %d' % frame)\n",
" world.step(dt=1.5)"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
@@ -221,15 +288,45 @@
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"id": "TA6Ibs-mXsTc"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Computing frames...\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f16a21e7ee0>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"print('Computing frames...')\n",
"pylab.imshow(np.concatenate(session.run(fluid.density).data[...,0], axis=1), origin='lower', cmap='magma')"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
@@ -245,9 +342,41 @@
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"id": "7KPpyIwjYETi"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initial loss: 65.417107\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f167b951e20>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"target = session.run(fluid.density).data[0,...]\n",
"loss = math.l2_loss(fluid.density.data[1:,...] - target)\n",
@@ -256,9 +385,7 @@
"\n",
"print('Initial loss: %f' % session.run(loss))\n",
"pylab.imshow(np.concatenate(session.run(fluid.density).data[...,0], axis=1), origin='lower', cmap='magma')"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
@@ -271,28 +398,265 @@
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"id": "pvvF6xqmaRLX"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Running optimization step 0. The first step sets up the adjoint graph.\n",
"Loss: 65.417130\n",
"Running optimization step 1. \n",
"Loss: 61.038616\n",
"Running optimization step 2. \n",
"Loss: 55.527817\n",
"Running optimization step 3. \n",
"Loss: 52.743553\n",
"Running optimization step 4. \n",
"Loss: 50.682068\n",
"Running optimization step 5. \n",
"Loss: 49.116470\n",
"Running optimization step 6. \n",
"Loss: 47.600983\n",
"Running optimization step 7. \n",
"Loss: 46.847046\n",
"Running optimization step 8. \n",
"Loss: 47.156219\n",
"Running optimization step 9. \n",
"Loss: 44.690727\n",
"Running optimization step 10. \n",
"Loss: 43.885071\n",
"Running optimization step 11. \n",
"Loss: 43.400795\n",
"Running optimization step 12. \n",
"Loss: 44.021904\n",
"Running optimization step 13. \n",
"Loss: 44.878464\n",
"Running optimization step 14. \n",
"Loss: 42.061104\n",
"Running optimization step 15. \n",
"Loss: 41.721771\n",
"Running optimization step 16. \n",
"Loss: 42.422424\n",
"Running optimization step 17. \n",
"Loss: 43.305126\n",
"Running optimization step 18. \n",
"Loss: 41.030945\n",
"Running optimization step 19. \n",
"Loss: 40.693314\n",
"Running optimization step 20. \n",
"Loss: 41.632492\n",
"Running optimization step 21. \n",
"Loss: 40.497219\n",
"Running optimization step 22. \n",
"Loss: 40.864441\n",
"Running optimization step 23. \n",
"Loss: 41.586533\n",
"Running optimization step 24. \n",
"Loss: 40.268814\n",
"Running optimization step 25. \n",
"Loss: 44.780869\n",
"Running optimization step 26. \n",
"Loss: 43.994247\n",
"Running optimization step 27. \n",
"Loss: 42.123501\n",
"Running optimization step 28. \n",
"Loss: 40.386658\n",
"Running optimization step 29. \n",
"Loss: 39.695370\n",
"Running optimization step 30. \n",
"Loss: 39.781601\n",
"Running optimization step 31. \n",
"Loss: 39.579910\n",
"Running optimization step 32. \n",
"Loss: 39.950123\n",
"Running optimization step 33. \n",
"Loss: 39.400608\n",
"Running optimization step 34. \n",
"Loss: 39.147316\n",
"Running optimization step 35. \n",
"Loss: 39.404778\n",
"Running optimization step 36. \n",
"Loss: 38.327095\n",
"Running optimization step 37. \n",
"Loss: 39.023270\n",
"Running optimization step 38. \n",
"Loss: 42.325951\n",
"Running optimization step 39. \n",
"Loss: 41.603100\n",
"Running optimization step 40. \n",
"Loss: 41.056602\n",
"Running optimization step 41. \n",
"Loss: 40.462925\n",
"Running optimization step 42. \n",
"Loss: 40.042713\n",
"Running optimization step 43. \n",
"Loss: 39.613541\n",
"Running optimization step 44. \n",
"Loss: 39.174477\n",
"Running optimization step 45. \n",
"Loss: 38.874172\n",
"Running optimization step 46. \n",
"Loss: 38.653236\n",
"Running optimization step 47. \n",
"Loss: 38.347786\n",
"Running optimization step 48. \n",
"Loss: 38.162994\n",
"Running optimization step 49. \n",
"Loss: 37.952271\n",
"Running optimization step 50. \n",
"Loss: 37.628460\n",
"Running optimization step 51. \n",
"Loss: 37.342438\n",
"Running optimization step 52. \n",
"Loss: 38.000610\n",
"Running optimization step 53. \n",
"Loss: 37.083599\n",
"Running optimization step 54. \n",
"Loss: 38.403442\n",
"Running optimization step 55. \n",
"Loss: 36.849007\n",
"Running optimization step 56. \n",
"Loss: 41.288948\n",
"Running optimization step 57. \n",
"Loss: 43.382652\n",
"Running optimization step 58. \n",
"Loss: 42.499889\n",
"Running optimization step 59. \n",
"Loss: 41.840115\n",
"Running optimization step 60. \n",
"Loss: 40.019958\n",
"Running optimization step 61. \n",
"Loss: 38.242035\n",
"Running optimization step 62. \n",
"Loss: 37.146896\n",
"Running optimization step 63. \n",
"Loss: 37.000000\n",
"Running optimization step 64. \n",
"Loss: 36.758942\n",
"Running optimization step 65. \n",
"Loss: 36.544884\n",
"Running optimization step 66. \n",
"Loss: 36.424988\n",
"Running optimization step 67. \n",
"Loss: 36.263794\n",
"Running optimization step 68. \n",
"Loss: 36.233051\n",
"Running optimization step 69. \n",
"Loss: 35.956253\n",
"Running optimization step 70. \n",
"Loss: 36.190147\n",
"Running optimization step 71. \n",
"Loss: 35.663338\n",
"Running optimization step 72. \n",
"Loss: 35.965942\n",
"Running optimization step 73. \n",
"Loss: 35.761196\n",
"Running optimization step 74. \n",
"Loss: 35.444168\n",
"Running optimization step 75. \n",
"Loss: 35.755909\n",
"Running optimization step 76. \n",
"Loss: 35.190250\n",
"Running optimization step 77. \n",
"Loss: 35.393356\n",
"Running optimization step 78. \n",
"Loss: 35.246380\n",
"Running optimization step 79. \n",
"Loss: 35.487621\n",
"Running optimization step 80. \n",
"Loss: 35.049461\n",
"Running optimization step 81. \n",
"Loss: 35.307079\n",
"Running optimization step 82. \n",
"Loss: 34.782936\n",
"Running optimization step 83. \n",
"Loss: 34.662254\n",
"Running optimization step 84. \n",
"Loss: 34.792183\n",
"Running optimization step 85. \n",
"Loss: 34.605667\n",
"Running optimization step 86. \n",
"Loss: 34.904476\n",
"Running optimization step 87. \n",
"Loss: 34.351589\n",
"Running optimization step 88. \n",
"Loss: 34.544693\n",
"Running optimization step 89. \n",
"Loss: 34.171722\n",
"Running optimization step 90. \n",
"Loss: 34.124374\n",
"Running optimization step 91. \n",
"Loss: 34.561535\n",
"Running optimization step 92. \n",
"Loss: 34.456116\n",
"Running optimization step 93. \n",
"Loss: 34.353249\n",
"Running optimization step 94. \n",
"Loss: 34.576324\n",
"Running optimization step 95. \n",
"Loss: 34.455849\n",
"Running optimization step 96. \n",
"Loss: 35.339233\n",
"Running optimization step 97. \n",
"Loss: 34.416187\n",
"Running optimization step 98. \n",
"Loss: 33.643890\n",
"Running optimization step 99. \n",
"Loss: 33.524048\n"
]
}
],
"source": [
"for optim_step in range(100):\n",
" print('Running optimization step %d. %s' % (optim_step, '' if optim_step else 'The first step sets up the adjoint graph.'))\n",
" _, loss_value = session.run([optim, loss])\n",
" print('Loss: %f' % loss_value)"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The loss should have gone down significantly, from ca. 65 to below 34, and now we can visualize how well the reconstruction for the last frame turned out for simulations 1 to 3."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"id": "SQBtCmhZaYYj"
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f167b90c580>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"pylab.imshow(np.concatenate(session.run(fluid.density).data[...,0], axis=1), origin='lower', cmap='magma')"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
@@ -300,43 +664,91 @@
"id": "HP7aDQfpKifp"
},
"source": [
"Naturally, the image on the left is the same (this is our reference), and the other three simulations now exhibit a noticeable curved shape towards the left. This is especially visible for the far left simulation (3), which was moving straight up in its original state, and now has an off-center plume shape that tries to match the reference on the left. Note that this simulation needs to \"work\" with a fixed inflow, hence it cannot simply \"produce\" marker density out of the blue to match the target. Also it needs to take into account how the non-linear model equations change the state of the system over the course of 20 time steps. The \n",
"\n",
"Now that the optimization has done its work, we can have a look at the now-optimized initial velocity field."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"id": "vRaBt5vGdSEY"
},
"outputs": [],
"source": [
"optimized_velocity_field = session.run(initial_state.velocity).at_centers()"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"id": "i7ZahlUudex8"
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f16a288c670>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"pylab.title('Initial y-velocity (optimized)')\n",
"pylab.imshow(np.concatenate(optimized_velocity_field.data[...,0], axis=1), origin='lower')"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"id": "Pqw5BDxmdkut"
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f167b8c6280>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"pylab.title('Initial x-velocity (optimized)')\n",
"pylab.imshow(np.concatenate(optimized_velocity_field.data[...,1], axis=1), origin='lower')"
],
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
@@ -350,5 +762,31 @@
"For additional examples, e.g. coupling simulations with neural networks, please check the [other demos](https://github.com/tum-pbs/PhiFlow/tree/master/demos)."
]
}
]
],
"metadata": {
"colab": {
"collapsed_sections": [],
"name": "Differentiable Physics with Fluid Simulations.ipynb",
"provenance": []
},
"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.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
+169 -58
View File
@@ -12,35 +12,39 @@
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/thuerey/phiflow/phi/tf/__init__.py:7: UserWarning: TensorFlow 2 is not fully supported by PhiFlow.\n",
" warnings.warn('TensorFlow 2 is not fully supported by PhiFlow.')\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Could not load resample cuda libraries: CUDA binaries not found at /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/cuda/build/resample.so. Run \"python setup.py cuda\" to compile them\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/util.py:119: The name tf.AUTO_REUSE is deprecated. Please use tf.compat.v1.AUTO_REUSE instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/profiling.py:12: The name tf.RunOptions is deprecated. Please use tf.compat.v1.RunOptions instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/profiling.py:13: The name tf.RunMetadata is deprecated. Please use tf.compat.v1.RunMetadata instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:287: to_complex64 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
"Could not load resample cuda libraries: CUDA binaries not found at /home/thuerey/phiflow/phi/tf/cuda/build/resample.so. Run \"python setup.py cuda\" to compile them\n",
"WARNING:tensorflow:From /home/thuerey/phiflow/phi/tf/tf_backend.py:287: to_complex64 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use `tf.cast` instead.\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:375: The name tf.fft is deprecated. Please use tf.signal.fft instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:387: The name tf.ifft is deprecated. Please use tf.signal.ifft instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:399: The name tf.real is deprecated. Please use tf.math.real instead.\n",
"\n"
"Use `tf.cast` instead.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/flow.py:15: UserWarning: TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\n",
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/_collections_abc.py:743: MatplotlibDeprecationWarning: The global colormaps dictionary is no longer considered public API.\n",
" for key in self._mapping:\n",
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/_collections_abc.py:744: MatplotlibDeprecationWarning: The global colormaps dictionary is no longer considered public API.\n",
" yield (key, self._mapping[key])\n",
"/home/thuerey/phiflow/phi/viz/display.py:80: UserWarning: GUI is disabled because of missing dependencies: No module named 'imageio'. To install all dependencies, run $ pip install phiflow[gui]\n",
" warnings.warn('GUI is disabled because of missing dependencies: %s. To install all dependencies, run $ pip install phiflow[gui]' % import_error)\n",
"/home/thuerey/phiflow/phi/tf/flow.py:15: UserWarning: TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\n",
"$ python setup.py tf_cuda\n",
"before reinstalling phiflow.\n",
" warnings.warn(\"TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\\n$ python setup.py tf_cuda\\nbefore reinstalling phiflow.\")\n"
@@ -59,7 +63,8 @@
"\n",
"# run with phiflow\n",
"n = 128\n",
"dt = 1./32.\n",
"steps = 32\n",
"dt = 1./steps\n",
"initial = np.zeros([n,1]) # start from 0\n",
"\n",
"domain = Domain([n], boundaries=PERIODIC, box=box[-1:1])\n",
@@ -69,7 +74,7 @@
"state_in = state0.copied_with(velocity= variable(state0.velocity) ) # <-- main change!\n",
"states = [state_in]\n",
"\n",
"for i in range(32):\n",
"for i in range(steps):\n",
" states.append( Burgers().step(states[-1],dt=dt) )\n",
"\n",
"print(\"Each velocity is a phiflow grid like this one: \" + format(states[-1].velocity) )\n",
@@ -80,25 +85,16 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Note, this didnt run anything! let's set up the loss"
"Now we don't need to keep track and pass along `state_in`, TF knows about the initial state as a variable we'd like to optimize. This is in contrast to the previous version of this optimization, where we explicitly stored and updated a field with the intial state.\n",
"\n",
"Nonetheless, this didnt run anything! We only have a graph of operations in tensorflow so far. Let's set up the loss, such that we can start the optimizer. It's actually pretty simple, we only need to compute the L2 error for the constrained state of the simulation (at $t=1/2$):"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:17: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:18: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n",
"\n"
]
}
],
"outputs": [],
"source": [
"sess = Session(None) \n",
"\n",
@@ -112,9 +108,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"As the graph encodes the full temporal sequence, and we can compute and propagate derivatives for all intermediates, we can can now back-propagate a gradient for this loss to any earlier variable, and hence also the initial velocity state that we're interested in (and that we already declared as a `variable()` to TF above).\n",
"\n",
"Note: because we're only constraining timestep 16, we could actually omit steps 17 to 31 here, but for fairness and comparison with the PINN case, let's include them.\n",
"\n",
"Now we don't need to keep track and pass along `state_in`, TF knows about the initial state as a variable we'd like to optimize."
"Also, we don't need additional terms for enforcing the boundary conditions, these are already present in the simulation, and hence encoded in the execution graph for the `states` sequence above.\n",
"\n",
"Now we're ready to run the optimization with one of the optimizers provided in tensorflow, e.g., the simplest starting point is always _gradient descent_ (GD):"
]
},
{
@@ -126,13 +126,6 @@
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/math_grad.py:1375: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:28: The name tf.global_variables_initializer is deprecated. Please use tf.compat.v1.global_variables_initializer instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:29: The name tf.train.Saver is deprecated. Please use tf.compat.v1.train.Saver instead.\n",
"\n",
"Initial loss: 0.382915\n",
"Step 0, loss: 0.382915\n",
"Step 5, loss: 0.194040\n",
@@ -144,7 +137,7 @@
"Step 35, loss: 0.009447\n",
"Step 40, loss: 0.006238\n",
"Step 45, loss: 0.004161\n",
"Runtime 1.89s\n"
"Runtime 1.17s\n"
]
}
],
@@ -179,22 +172,22 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x136ef4bd0>]"
"[<matplotlib.lines.Line2D at 0x7f68682ae0d0>]"
]
},
"execution_count": 5,
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -232,22 +225,22 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x136f4b290>]"
"[<matplotlib.lines.Line2D at 0x7f68b7dd9e50>]"
]
},
"execution_count": 6,
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -274,24 +267,24 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"And as image over time..."
"And as MAE, and image over time..."
]
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 128, 33, 1)\n"
"Vels array shape: (1, 128, 33, 1)\n"
]
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -309,16 +302,23 @@
" a = np.concatenate( [a,a] , axis=3)\n",
"\n",
" a = np.reshape( a, [a.shape[1],a.shape[2]*a.shape[3]] )\n",
" plt.imshow(a, origin='lower', cmap='magma')\n",
" plt.imshow(a, origin='upper', cmap='magma')\n",
" \n",
"# run all states through TF to get numpy arrays \n",
"vels = sess.run(states) # convert all states in 1 sess.run() call\n",
"vels = [ x.velocity.data for x in vels] \n",
"#vels = np.asarray( [ sess.run(x, feed_dict={state_in: stateN}).velocity.data for x in states] ) # also works, but slower\n",
"sn = np.concatenate(vels, axis=-1)\n",
"sn = np.reshape(sn, list(sn.shape)+[1] ) ; print(sn.shape)\n",
"vels = np.concatenate(vels, axis=-1)\n",
"vels = np.reshape(vels, list(vels.shape)+[1] ) ; print(\"Vels array shape: \"+format(vels.shape))\n",
"\n",
"show_state(sn)"
"# TODO later?\n",
"#error = np.sum( np.abs( np.asarray(vels[0:16]).flatten() - np.asarray(velP[bc_tx:bc_tx+steps]).flatten() )) / (steps*n)\n",
"#print(\"Mean absolute error across {} steps: {:7.5f}\".format(steps,error))\n",
"\n",
"# save for comparison with other methods\n",
"np.savez_compressed(\"./temp/burgers-diffphys-solution.npz\", np.reshape(vels,[n,steps+1])) # remove batch & channel dimension\n",
"\n",
"show_state(vels)"
]
},
{
@@ -328,6 +328,117 @@
"So far only 1D Burgers, but this works with more complex model equations and higher dimensions in just the same way."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Physics-Informed vs. Differentiable Physics Reconstruction\n",
"\n",
"now we have both versions, let's compare both reconstructions in more detail...\n",
"\n",
"let's first look at the solutions side by side, from top to bottom: the \"ground truth\" solution as given by the regular forward simulation, in the middle the PINN reconstruction, and at the bottom the differentiable physics version:"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# note, this requires running the forward sim & PINN notebooks beforehand\n",
"sol_gt=npfile=np.load(\"./temp/burgers-groundtruth-solution.npz\")[\"arr_0\"] ; #print(format(sol_gt.shape)) \n",
"sol_pi=npfile=np.load(\"./temp/burgers-pinn-solution.npz\")[\"arr_0\"] ; #print(format(sol_pi.shape)) \n",
"sol_dp=npfile=np.load(\"./temp/burgers-diffphys-solution.npz\")[\"arr_0\"] ; #print(format(sol_dp.shape)) \n",
"\n",
"divider = np.ones([10,33])*-1. # we'll sneak in a block of -1s to show a black divider in the image\n",
"sbs = np.concatenate( [sol_gt, divider, sol_pi, divider, sol_dp], axis=0)\n",
"\n",
"show_state(np.reshape(sbs,[1,n*3+20,33,1]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It's clealry visible here "
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MAE PINN: \t967.83557, \n",
"MAE DiffPhys: \t193.25261\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAADLCAYAAACVv9NEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAwiklEQVR4nO2df4xtV3XfP+uce2fmvecXg20wD9uJQXUaObQBioAIWjmJkgCitZAiC1oFSKy+/AFqkJCKoVKTFiG5agKlSoTyIhBYAgxVgrCQVWKcoCht+B0TDA7EIUb41dghMj9i+83ce/bqH+eMM5g3c777zT5z9rl3f6Xxm7l3e5+z793nu9b+rrXXNnenoKCgoGC1UI19AwUFBQUF6VHIvaCgoGAFUci9oKCgYAVRyL2goKBgBVHIvaCgoGAFUci9oKCgYAUxGLmb2UvM7Ktmdq+Z3TTUdQoKCgoKfhg2RJ67mdXA14CfB+4HPgu8yt2/kvxiBQUFBQU/hKE89+cD97r71919B7gVuH6gaxUUFBQUPAGzgfq9Avjmnr/vB16wt4GZnQZOAxyvZ//iGcef3NupYwlvcRpYxw3E6/g9j4m1m2IrNOCvPvLgt939Ked7byhy74W7nwHOAFx78nK/5bn/dqxb6UXw8chmTKILmT8EY34vKlbFUOU+F8aGjzQX/9X//e/f2O+9ocj9LHDVnr+v7F47Lxo3vr+Y93aqakhm+kysVuPZK0iAQmAHYywCK7gwDEXunwWuMbNn0JL6K4F9XfMgknttTiUQtzoFK3OZ3C3xWk4ZR1R/SXsrKMgHYewbmCgGIXd3X5rZ64GPAzXwHnf/8n7tGzf+YVn39juvtK95Zpr3XqGTrGIDKku/CFfvb4gVSGqDNhZSG9KCgilgMM3d3W8HblfaBuCRpt/3nAeTSKwWSXZWuURglemecS2TsWhUxKVwDIHpdiD9tbX+knZHM6KcsCoGsiANjtLRGC2guhfB4dGm/wHcFBl2bmDC8zxzk8ldJe1a5JHKTDIYavygSmwEYugw9XRNrX2P67n3f5LrGvdZR8N3lEkAmZC78ciyf9BNv3IDwNxMIuPaWpLtb+dU4kOqG4HUxkJs56YbDK3L5I9oTMxEQYznPgbPBh/bAPVjCAM0hUyiKRugPMgdeKwR2rkmyzSVU0ukrZFnhdguor8gzuugLEHQg8MBB4HsKgPhK2nHIrTbbZsS6mM3VhwkBmOldapjGTOTaMyVTWoDdJTGIg9ydzinMAnag9q4SSRbi572zLT+zFpJSMFMbDcXGdFcewgMkx7oRuwvoK1qIIKMZcLRpC0VMSuB3A2Gen9DGJXUY0kv06XtLwZHuVrJgtydtOTuYrt5heThN6IRqAxc9LRdZSVxZtdmNELTylpDoLTTLq0Zi8q6VYMA1VhUaKsLed9DBNGlJ7C0D/0Qq4uxDMaYxmLK8ZAsyD24c26p5K/rHqLiaavtaoO58C2bA5U4c1RdRjQCAagE8mzb9V+7NZDphI8grgR2r60gIO5TED38hrhVQx9iVhWps51iCFa99lgymDqWYeQyrV2ORiALcneHHeFTrBotCwZMkj2Ca+Q+q7QvubKIZVdiIxDMpeCwKt9UrsUtQHvoDY9YkqrppNpqxXApLlAZWjxC6Ava70RGBIGlpDAjraed+v4g/YphXYxAHuQOLIRPR81uqXCEzEoCJmnaTQNBaKdmtoC+CpGNABrR1eLDFzCNEFXiFNcBJotqepaJMmfa/sTPWrZRekxANgSJPfLU3vgQBDuFe1RxlEYgG3JfCqPeMfUL1AKg7i590WrwszHVi/3Bf7XWPahcIpKASfYixggo1/XERgDae1TSHGMeKCkbyyMkq4gUVQWqEahIS2IxNJdSNoo1Aikd4zGNQArkQe6uee5mJunKlcFSuG6rowsTu40GCvcnXJR2AsqWWS6soQU2a7QHNWAo2woqdCMwE1qKcfUO2oeo7iloH2ZdEtL6XC8jAGk97Tb9Oa2XP0RMIMcMoTzIHacRHoImuLQqXQSRPIOmkdfukiyjPvCVIbFYZUAlTsagXT+omT/KNYEmwghE6BliOxXaTuT2ykLcomupoBiB/aEScc7GZxc5evlZkDtoaXKNu6Qrg5biSOW44Bm3MU3hoTfXtXSBEXfnQeosE8mg4XIQWb9m6scqrVjQpn8WI3De644oB42lpY+VHZQK+ZC74rnjkvSxdD1HWwtYmtRhbcZSmBJm0IhZMJWhGbRKy19vPXelnRi3EB+BdqGSmrTzNwKp73EIIyDFTMSyFTG7lVOT8ZhGIMdgbjbkriDgkqfhaJ5G4xAEkg1i/mD7QGnkAGLqYkQxa2XaeKXRSI2a/qkaSA0t0eiEqKwclmLZClxzHoK3u5YVKHJjixGNQGIvXzUC+j6+8YxAaonpKDEpcgdNvum4U4LES+J2zcqQXJfK2uCw8uDHbHRX4wzKokH18H23cQ8q8UuJDaiq6ZopM38qXArYt+cFpDMC7TRMbwSmIPWkRIy5lTarjejhH4RsyF19CBSoc7VRRYWAxJzuYErevLYQALRdpy1E7zRCvlFKJLS7cvvbNY486JjiSpJDPpIR0NM/tfnfeGzmjwJtBdn2mbcRiNkIJnVH+rTOo9Tx8yF3ZQu7+NGoxazcxYnjSB65i567WZvRo0D13M3EHaBB32ylBJvriNWK9Nl0jbVbdMkNm1l6I6BgKumfmvy2nkZgrLTOFEJnFuRuaDni6pcMmiGoMMnLD6aRiCyPq5JRhBGoTAx4GVIZYTeoBfc0uCbz7KZ1SpCjchHeqdRK5BszfXk4YvqngrIH4AAMYATWMKBqWnVGNVfZtZWAiigPX4RyfF4rZWjplYugeVZu4EoKWmUExSN//D8HQ01h3e1U+vbU/QxdZRuhOzFzREy1bVuL7cYzAmUPwD7XnYAROAhZkLsZzCvFTdRcuhgjoCJGx1dQiVvQKjk/XFvyqZ57wEWP3CKWLEp/cck3itEIphFJbVpqZ9xwp2AEtID4Ou4BSJn5M4Q2fxDyIHfEzIyIoKsqt6jzQa5FLn6BC5UilK2xHaQ0PjMapUyB6J3W1ThGoO1UbyoFSh1mSmlnNCMQ53ulNwJq+qcCtVR0aiOw21LBIEZArBI61rkCByEbclfqpYPuQUs8IsotMR7+EEZAkphEicJNNwLqXgGp1r1aa5i43H4JYoZQbVoQ2dCNwFhaurq9LIhGoHKXCGwIIzCFjWDSdVPLQT3Ig9xNJ3dJzQhiEa+AFig1bfNUwOUJEXMqkSL1BEway9wqrfKhqQeZaHnSlRiDbL+3dPGSx/sV2rhoBKoII+ARQd+0SF8CWkGFLm3pcbG0RmCsKqFiRnVUqeiDcChyN7P7gO/TrkqW7v48M7sE+BBwNXAfcIO7P3xgP8CGNBp1w4UWQGvLCkitJIKt3GTSVqerusMxuBhQ9SAZvtpMksFUI6Ae27drBNRDWRSo/bV55P3tKtMzhBQj8HhjATFHnmgQDzwxLQW0zRrWpIzUWd9qb6uUJnoQUnjuP+Pu397z903Ane5+s5nd1P39poM6MDNpmRvkZDWtTntbA13LWlE1fClf3103AuJkUHe8VpjknTZmNNLBKFqmU2V6+ED1rFwpR0l7XTWgqpK7dGA6+gHnKoJpMopKnGowsI0zKM+oZgSaATKOdDVPlAfF8haNaARAz97NNaB6PXBd9/v7gE/SR+7ApvSg6uasUdL4HBbKVVWd3w0XXLX2eDht64q8cUt0EeXDp92wlOSOMZOCU9reA4jbQSjVujeoRS1dOcDFNKUM0NupB8fIMqdpOdX68YyI80Yj4ypirSLaemRtXlzVVKbvqk6dSXQQDkvuDvyRtWHg33P3M8Dl7v5A9/63gMvP9z+a2WngNMCPzC4WZRkVJm2d32m0CbsUXQJ3pJOBQA+uNGgE34h+S8xuSOUeDWOmfNggt9sUXfIgKpNL1/YKzCuoxd22jVjfXyIH9NWKuvrRJQptF/RMjke4HLdQvmX1vADYlSaVdtqzN1PlG3SnSf5exHYH4bDk/mJ3P2tmTwXuMLO/2vumu7vtk//TGYIzAFdsXeFbwmhU3dbQ8p8NTcqIOShaIRx3pxGILuAsXJs4uhFIu2KoMKnSShVhBJZNkLy/hVfSZ7OoTGq3rLS85tq0s3cra0lRwdy1kgvqZrA2yNePmbhhbCnGI0zNvjFd+1bLZdTiUkntT60BFZEIRi2vxA8vuh+K3N39bPfvQ2b2EeD5wINmdsrdHzCzU8BDff2YaQHVVvfrR23aQ9C2E8jBtICcu+qBGUsxMNx4LRHtIkLmCYKXHwh44pzE2rXpNmcufdEbXmseudcSuc9DJQeblU13FS7FkiqDpWgE1BXuotJIthZTaFPHI9o+RQlMHHOMsZDiDKadN9xWvdaurcSxjIjKGgfggsndzE4Albt/v/v9F4D/CtwGvAa4ufv3o319VThbtaaJauSuBTjmlWYEFgHmQnpEI2ZluKvVTvRsmaYJkjTTiMWxGmtohIhEINBYfwFck2sKwEw2AhtaO9/QyN1n1ML3MqOiFsp/GrBZaQvsDaWQD7AhPvVaDKslTuXKdaUd3lKh1SQyIoyF6GOocQbd+IjxCLSAfYWaBabf40E4jOd+OfCRbvk8Az7g7v/bzD4LfNjMbgS+AdzQ11FlsCWYSFUemZtWanURNE10o9IKeKkZAC1faw9zEDN13GGpBFXVZT1LaRdtsMCCbbFPJXyNbARq5lK7uW1K0tHMZ1KftdeSAaqp2Wj6WdYw5qG/XYWxoZTpAOZLbT/DTPXwxZO5ajOJ3Cu0jWCgZxyp7VrS7m+nknYbt+iHmjffXnfEgKq7fx34qfO8/vfAz8X0VQHHBM99fgDL7c1lXpgWu15WGnE2DgslFdJNWjY7+sSurZIMVV1BIxDEbFmxoRCT19KMXfgOO0q6GAu2/R/6GwKNi0ZARG1zidxj2ilGoKJLine truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"err_pi = np.sum( np.abs(sol_pi-sol_gt))\n",
"err_dp = np.sum( np.abs(sol_dp-sol_gt))\n",
"#error = np.sum( np.abs( np.asarray(vels[0:16]).flatten() - np.asarray(velP[bc_tx:bc_tx+steps]).flatten() )) / (steps*n)\n",
"print(\"MAE PINN: \\t{:7.5f} \\nMAE DiffPhys: \\t{:7.5f}\".format(err_pi,err_dp))\n",
"\n",
"show_state(np.reshape( np.concatenate([sol_pi-sol_gt, divider, sol_dp-sol_gt],axis=0) ,[1,n*2+10,33,1]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That's pretty clear, the PINN error is ca. 5 times higher than the Differentiable Physics (DP) reconstruction.\n",
"\n",
"That also shows clearly in the jointly visualized image: the magnitudes of the errors of the DP reconstruction are much closer to zero, as indicated by the purple color above."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we have a first example to show similarities and differences of the two approaches. In the section, we'll present a more in depth discussion of these findings, before moving to more complex cases."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercises:\n",
"As with the PINN version, there's variety of things that can be improved and experimented with here:\n",
"\n",
"* Try to adjust the training parameters to improve the reconstruction.\n",
"* As for the PINN case, you can activate a different optimizer, and observe the changing (not necessarily improved) behavior.\n",
"* Vary the number of steps, or the resolution of the simulation and reconstruction."
]
},
{
"cell_type": "code",
"execution_count": null,
@@ -352,7 +463,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
"version": "3.8.5"
}
},
"nbformat": 4,
+50 -12
View File
@@ -6,8 +6,14 @@
"source": [
"# Simple forward simulation in phiflow\n",
"\n",
"how to run\n",
"simple model equation $f(x) = ...$ "
"how to run ...\n",
"simple model equation \n",
"$\n",
" \\frac{\\partial u}{\\partial{t}} + u \\nabla u =\n",
" \\nu \\nabla\\cdot \\nabla u\n",
"$ \n",
"\n",
"Note, the first command with a \"!\" prefix installs the [Φ<sub>Flow</sub> Python package from GitHub](https://github.com/tum-pbs/PhiFlow) via `pip` in your python environment. (Skip or modify this command if necessary.)"
]
},
{
@@ -38,14 +44,28 @@
" [0.09414805]\n",
" [0.10529345]] ...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/_collections_abc.py:743: MatplotlibDeprecationWarning: The global colormaps dictionary is no longer considered public API.\n",
" for key in self._mapping:\n",
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/_collections_abc.py:744: MatplotlibDeprecationWarning: The global colormaps dictionary is no longer considered public API.\n",
" yield (key, self._mapping[key])\n",
"/home/thuerey/phiflow/phi/viz/display.py:80: UserWarning: GUI is disabled because of missing dependencies: No module named 'imageio'. To install all dependencies, run $ pip install phiflow[gui]\n",
" warnings.warn('GUI is disabled because of missing dependencies: %s. To install all dependencies, run $ pip install phiflow[gui]' % import_error)\n"
]
}
],
"source": [
"!pip install --upgrade --quiet phiflow\n",
"from phi.flow import *\n",
"\n",
"# run with phiflow\n",
"n = 128\n",
"dt = 1./32.\n",
"steps = 32\n",
"dt = 1./steps\n",
"viscosity = 0.01/np.pi\n",
"initial = np.asarray( [ [-math.sin(np.pi * x) * 1.] for x in np.linspace(-1,1,n)] )\n",
"\n",
@@ -84,7 +104,7 @@
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x122bc1550>]"
"[<matplotlib.lines.Line2D at 0x7f17fdeb2610>]"
]
},
"execution_count": 2,
@@ -93,7 +113,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABlyklEQVR4nO2dZ3hURReA30knhBJ66BGQ3kNJgqJ0FAUEKUqxIKAo0vuHSFEEBVEUREAQkCKIFJEuIknovbfQQqhJICF9d74fsyEhpO9uCpn3efbJ3nvnzpy92b3nzplThJQSjUaj0eRebLJaAI1Go9FkLVoRaDQaTS5HKwKNRqPJ5WhFoNFoNLkcrQg0Go0ml2OX1QJkhCJFisjy5ctntRgajUaTozh06NA9KWXRxPtzpCIoX748Bw8ezGoxNBqNJkchhLia1H5tGtJoNJpcjlYEGo1Gk8vRikCj0WhyOVoRaDQaTS5HKwKNRqPJ5VhEEQghFgoh7gghTiZzXAghvhNCXBRCHBdC1EtwrLcQ4oLp1dsS8mg0Go0m7VhqRrAIaJPC8bZAJdOrLzAHQAhRCPgMaAQ0BD4TQrhaSCaNRqPRpAGLxBFIKXcLIcqn0KQ98KtUOa/3CiEKCiHcgJeAbVLKIAAhxDaUQlluCbk0aefWLfDzgzNn4MoVCAyEyEiIjoZ8+aBwYShVCmrUgFq1oFo1sNGGRY3mmSCzAspKAdcTbN8w7Utu/1MIIfqiZhOULVvWOlLmIoxG8PWF1athwwa4fDl95xcpAi1bQvv26uXkZB0508Kj6EecvHOS47ePExAawL3we4THhJPXPi/5HfNTrWg1GpZqSMVCFRFCZJ2gGk02JcdEFksp5wHzADw8PHQ1nQwSFAQLFsCPP6on/zhcXKBxY6hdG9zdoXRpyJMH7OwgLAzu3wd/fzhxAg4dguvXYfly9SpYELp3h8GDoVIl638GKSX7A/bz14W/2HppKwduHsAojameVzp/aT6o9wF96vWhZL6S1hdUo8khZJYiCADKJNgubdoXgDIPJdy/K5NkylUEB8O0afDddxAervaVKwddukCnTuDhAba2aetLSjh/Hv7+G5YuVYphzhyYOxfefBPGj4fq1S3/GS4HX2bB4QUsP7kc/xD/x/vtbOyoXrQ6tUvUxr2gO0Wci5DXPi9h0WEERQRx9PZR9gfs58bDG3y26zMm7Z7ECK8RjG86Hkc7R8sLqtHkNKSUFnkB5YGTyRx7FfgbEEBjYL9pfyHAH3A1vfyBQqmNVb9+falJGzExUs6YIWWBAlKqW7iUrVpJuXGjlLGxlhnj+HEp+/SR0t5e9W9jI+VHH0l59675fRuNRrn5wmbZeklryQQev9y+dpMf//Wx3HhuowyNCk1TPzsu75CdVnaSYoKQTEDW+LGGPHzzsPlCajQ5BOCgTOoendTO9L5Qi7uBQAzKzv8+0B/obzougB+AS8AJwCPBue8BF02vd9MynlYEaWP/finr1IlXAM2aSbl3r/XGu35dKQBbWzVeoUJSLl0qpdGY/r6MRqPccG6DbDCvweObv+MkR9lrbS/5j/8/MtaQcS225+oeWem7SpIJSJcvXKTPNZ8M96XR5CSSUwRC5sDi9R4eHlJnH02e2FiYMgUmTQKDQZmAZs+Gdu0yZ/xTp+DTT2HHDrXdoQP89BMUK5b6uUZp5M+zfzJ592SO3DoCQFHnogz1HMoH9T+gUJ5CFpExPCac99e/z4qTK8jnkI8tPbbgWcbTIn1rNNkVIcQhKaXHU/u1Ini2uHEDunUDHx8QAoYMgc8/h7x5M1cOKWHhQjX+w4dQsiSsXAlNmiR/zr4b+/h086fsC9gHgJuLGyO8R9C3fl+c7Z0tLmOsMZaea3s+Vgb7P9hPlSJVLD6ORpNdSE4RaE/wZ4g9e6B+faUESpaE7dvh668zXwmAUkLvv6+8jJo0gZs34aWXYOZMpSQSEvAwgJ5re9J4QWP2BeyjhEsJZredzeVPLzOo8SCrKAFQi8xLOi7hjapvEBodSs+1PYkxxKTpXAnsB74GrllFOo0m89CK4BlhwQJo1gzu3IHmzeHYMbWd1ZQtCzt3wrBhykw1ZAj07w8xMRAZG8mkfyfx/OznWXp8KY62joxpMoYLn1xgQMMBONlZPzjBzsaOha8vpEz+Mhy8eZAv93yZYvswYAZQBRUOPxz43OpSajTWRZuGcjhSwsSJMGGC2h48WLmJ2mXDCJFVq6BXL4iKAo839vDwpQ84H3QWgE5VOzG95XTcXd2zRLad/jtp/mtz7Gzs2Pv+XuqXrP/E8WBgNvAtEGTa5wyEA03RPs+anIE2DT2DGAzw0UdKCdjYqAXZGTOypxIAFbPw1/aHOHX6iIO1XuB80FkquVbhn97/sLrL6ixTAgDN3JvxaaNPiTXG8unmT+M82rgLjAbKAeNRSqAxsA5lGgLlJqfR5GS0IsihGAzw7rsqiMvJCdasgb59s1qqlNlwbgO991cjsuYcMNrBv//DfsERqji9lNWiATDp5Um4Ornic92H9dd9GAO4A1OBUKA5sBPwBV5HKQdQiiDnzas1mniy6bOjJiUMBujdG5YtUwvBf/0FTZtmtVTJExoVyqDNg1h4dCEAjUo1YnKjn/lkVU1On1VrGbt2pc291Jrkc8xHvyajmBobSacSdTGY9r8C/A81E0iIC1AQCAHuAUUzS1CNxsJoRZDDMBrhvfeUEnBxUWkeUnLJzGr2XNtDr7W98A/xx8nOiS+afcHARgOxtbFl926lBE6eVAns/vkHClkmTCDdPABmAT96DQchMACNIkKYlacgjVI4rzRKEdxAKwJNzkWbhnIQUiqvm19/VTOBzZuzrxKINkQzevtoXvzlRfxD/Klboi6H+h5isOdgbG1UUqOiRZWLa+XKcPw4tGoFoaGZK2cE8BXKBPQZ8FAIygddhIXeFPrjrRSVAChFAHqdQJOz0YogBzF5MsyaBQ4O8Oef4O2d1RIlzYX7F/Bc4MlUn6kIIRj7wlj29tlLtaLVnmpbvLiKQH7uOZW8rnNnVQPB2hiAhahKSaNQXkEvorx/9jsWIE/gEf6++DeXg1POzx2XSVErAk1ORiuCHMKiRSqrp42NSv3cokVWS5Q0v534jXrz6nE48DDuBd3Z/c5uJjebjIOtQ7LnlCoFW7eqNYKtW6FPn6eDziyFBDYAtVAJsQKAusBWlBJoChTNW5QOVToAsPLkyhT70zMCzbOAVgQ5gJ074YMP1PvZs+GNN7JWnqQIjwmnz/o+vP3H24RFh9GleheO9DuCd9m0TVsqVFCL3nnzwpIl8NlnlpdxL+pG/zpwGpUudxlwEGiJyowYR/ca3QFYfjLlYnlaEWieBbQiyOacPavqBcTGwtCh8OGHWS3R05y+e5oGPzdgwZEFONk5MffVuazotIICTgXS1Y+HB/z+u5r1TJoEK1ZYRr5zQCfAE/gPKAzMBM4Cb5H0j6B1xda4Orly4s4JTt05lWzfcYrgerItNJrsj1YE2ZgHD1QZyJAQlcHzq6+yWqKnWXVqFQ1/bsjpu6epUqQK+/vsp59HvwyXhGzbVgXFgYqT2L8/5fYpcQf4EKgO/AHkAcagcqEPAlIqSeNg60Cnqp2AlGcFekageRbQiiCbYjTC22+rSmA1aypzSVoriGUGscZYhm0dRtfVXXkU84i3ar7FwQ8OUrN4TbP7HjhQmcIiI6FjR7h9O33nRwHTgYrAXNS6QB/gAjAFSOs8pXtNZR5acXIFyaViSagIdFCZJqeiFUE2ZcIEZTMvVEh5CLm4ZLVE8dx5dIeWS1ryjd832NnY8V2b71jacSl5HSyT5lQItRYSl7W0WzdlGksNCawFqgEjUNHAr6AqIf0MlEqnHE3LNaWESwkuBV/i4M2kc1vlN70iUJ5HGk1OxCKKQAjRRghxTghxUQgxKonjM4UQR02v80KIkATHDAmOrbeEPDmd7duVq6iNjcrh/9xzWS1RPHtv7KXeT/XYdWUXJVxK8E/vf/ik0ScZNgUlh4ODSlJXooSKOh4zJuX2x1ApIN4ALgNVUbVR/0Iphoxga2NL56qdAdhwfkOy7bR5SJPTMVsRCCFsUWUo26J+c92FEE/89qSUg6WUdaSUdYDvUSbbOCLijkkpXzdXnpzO7dvQo4dyn/zss+zjJiqlZO7Bubz4y4sEhAbgXcabw30P06Ss9SLa3NyUMrC1henTYX0Sjwl3gL4oF9B/UEWwZ6MUQxsLyNCyQksA/r36b7JttCLQ5HQsMSNoCFyUUl6WUkYDK4D2KbTvjqpxrEmE0ajSNN++rYq4jB2b1RIpomKj6LO+Dx/+9SExxhg+afgJO3vvxC2fm9XHfuGF+EXy995TpiJ4ch3gZ8AW+BRV+HoAYG+p8cu+gECw98ZeImIikmyjFYEmp2MJRVCKJ73nbpCMOVYIUQ4Vzb8zwW4nIcRBIcReIUSH5AYRQvQ1tTt49+5dC4id/fj6axVQVaSIyiWUHRaH7zy6Q4slLVh4dCF57PKwpOMSvmv7XYoBYpZm8GCVfuL+fejVG9YYn1wHeBW1DvAt4GrhsV3zuFK7RG2iDdGPS2gmRruQanI6mb1Y3A1YLaU0JNhXzlQo4S3gWyFEhaROlFLOk1J6SCk9ihZ99tJ77d0bPwNYtEiVmsxqTtw+QcOfG7Ln2h5K5SvFnvf20KNWj0yXw8ZGXZOCL8CO0dDZJn4dYDOwEVUxzFo0LadSu+66sivJ4zrNhCanYwlFEED8bwHUA1JAMm27kcgsJKUMMP29jIryr2sBmXIUISHQvbvyjBkyBF59NaslgvXn1uO10IurD67SsFRDDnxwgHpu9bJElhDgKzd4uAtoBtyHkdfhONA6E8aPUwTJrRNo05Amp2MJRXAAqCSEcBdCOKBu9k8t6wkhqqBm7n4J9rkKIRxN74sA3qjo/1zFgAFw5YqKrP0y5ZK5VkdKyVd7vqLDig6ERYfxds232dV7V6aLine truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -107,8 +127,6 @@
"source": [
"# we only need \"velocity.data\" from each phiflow state\n",
"vels = [x.velocity.data for x in state]\n",
"sn = np.concatenate(vels, axis=-1)\n",
"sn = np.reshape(sn, list(sn.shape)+[1] ) # print(sn.shape)\n",
"\n",
"# print(vels[0][0,:,0].shape)\n",
"# print(vels[0].shape[1])\n",
@@ -131,12 +149,19 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Vels array shape: (1, 128, 33, 1)\n"
]
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -156,10 +181,23 @@
"\n",
" a = np.reshape( a, [a.shape[1],a.shape[2]*a.shape[3]] )\n",
" #print(\"resulting image size\" +format(a.shape))\n",
" plt.imshow(a, origin='lower', cmap='magma')\n",
" plt.imshow(a, origin='upper', cmap='magma')\n",
" \n",
"show_state(sn)"
"vels_img = np.asarray( np.concatenate(vels, axis=-1), dtype=np.float32 )\n",
"vels_img = np.reshape(vels_img, list(vels_img.shape)+[1] ) ; print(\"Vels array shape: \"+format(vels_img.shape))\n",
"\n",
"# save for comparison with reconstructions later on\n",
"np.savez_compressed(\"./temp/burgers-groundtruth-solution.npz\", np.reshape(vels_img,[n,steps+1])) # remove batch & channel dimension\n",
"\n",
"show_state(vels_img)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
@@ -178,7 +216,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
"version": "3.8.5"
}
},
"nbformat": 4,
+141 -107
View File
@@ -1,17 +1,4 @@
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Forw Simulations with Φ-Flow.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
@@ -23,44 +10,37 @@
"\n",
"... now a more complex example with fluid simulations (Navier-Stokes) ... still very simple with phiflow (complexity of the differentiable operators hidden).\n",
"\n",
"Only for colab: \n",
"Execute the cell below to install the [Φ<sub>Flow</sub> Python package from GitHub](https://github.com/tum-pbs/PhiFlow)."
"As before, the first command with a \"!\" prefix installs the [Φ<sub>Flow</sub> Python package from GitHub](https://github.com/tum-pbs/PhiFlow) via `pip` in your python environment. (Skip or modify this command if necessary.)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Z6YoAVKebfNV"
},
"source": [
"!pip install --upgrade --quiet phiflow"
],
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "da1uZcDXdVcF",
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "da1uZcDXdVcF",
"outputId": "1082dc87-796c-4b57-e72e-5790fc1444c9"
},
"source": [
"from phi.flow import * # The Dash GUI is not supported on Google Colab, ignore the warning\n",
"import pylab"
],
"execution_count": 2,
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/phi/viz/display.py:80: UserWarning: GUI is disabled because of missing dependencies: No module named 'dash_core_components'. To install all dependencies, run $ pip install phiflow[gui]\n",
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/_collections_abc.py:743: MatplotlibDeprecationWarning: The global colormaps dictionary is no longer considered public API.\n",
" for key in self._mapping:\n",
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/_collections_abc.py:744: MatplotlibDeprecationWarning: The global colormaps dictionary is no longer considered public API.\n",
" yield (key, self._mapping[key])\n",
"/home/thuerey/phiflow/phi/viz/display.py:80: UserWarning: GUI is disabled because of missing dependencies: No module named 'imageio'. To install all dependencies, run $ pip install phiflow[gui]\n",
" warnings.warn('GUI is disabled because of missing dependencies: %s. To install all dependencies, run $ pip install phiflow[gui]' % import_error)\n"
],
"name": "stderr"
]
}
],
"source": [
"!pip install --upgrade --quiet phiflow\n",
"from phi.flow import * # The Dash GUI is not supported on Google Colab, ignore the warning\n",
"import pylab"
]
},
{
@@ -78,16 +58,16 @@
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "WrA3IXDxv31P"
},
"outputs": [],
"source": [
"world = World()\n",
"fluid = world.add(Fluid(Domain([40, 32], boundaries=CLOSED), buoyancy_factor=0.05), physics=IncompressibleFlow())\n",
"world.add(Inflow(Sphere(center=[5,14], radius=3), rate=0.2));"
],
"execution_count": 3,
"outputs": []
]
},
{
"cell_type": "markdown",
@@ -102,45 +82,81 @@
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"id": "WmGZdOwswOva",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "WmGZdOwswOva",
"outputId": "3ae4d68d-b586-4bbe-eca9-a223d7720949"
},
"source": [
"world.step()\n",
"pylab.imshow(fluid.density.data[0,...,0], origin='lower', cmap='magma')"
],
"execution_count": 4,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fc128aa7ef0>"
"<matplotlib.image.AxesImage at 0x7f9cf945eee0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 4
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAANAAAAD4CAYAAACdW2gvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAALeElEQVR4nO3dYahk9XnH8e+v2zUJTcDY2GVR29hGGqSpN0UWQ32RSCxboWgglFgoCxU2gVgSCAVJoU3aBhpo46vSsCHWfZGapFHRFttms7VNC0WzmhuzumnVVKnL6mITib6x3fXpizlXNu693rnzzNyduff7gWHOnHPmnP+f3R/nnP8985xUFZIm8xPnugHSIjNAUoMBkhoMkNRggKSGn9zMnSVxyE+L6PmqunC1BZsaoJEdm79LqeX002st8RROajBAUoMBkhoMkNRggKQGAyQ1GCCpwQBJDQZIajBAUoMBkhoMkNRggKQGAyQ1GCCpwQBJDQZIajBAUoMBkhoMkNSwboCSvDHJg0m+k+TRJJ8e5t+e5L+SLA+vpZm3Vpoz41TleRm4pqpeSrIT+Lckfz8s+72q+trsmifNt3UDVKPHN7w0fNw5vKzvJjHmNVCSHUmWgZPAoap6YFj0mSSPJLk1yRvW+O7+JEeSHJlOk6X5kY08HyjJ+cDdwO8C/wM8C5wHHACerKo/Wuf7ZWFFLZ7TD1XVlast2dAoXFW9ANwP7K2qEzXyMvBXwJ52O6UFM84o3IXDkYckbwKuBb6XZPcwL8ANwNHZNVOaT+OMwu0GDibZwShwX62qv0vyT0kuBAIsAx+ZXTOl+bSha6D2zrwG0kKa0jWQpB9ngKQGAyQ1GCCpwQBJDQZIajBAUoMBkhoMkNRggKQGAyQ1GCCpwQBJDQZIajBAUoMBkhoMkNRggKSGTmnfS5M8kOSJJF9Jct7smyvNl3GOQCulfa8AloC9Sa4CPgvcWlXvAH4I3DSzVkpzat0ADbXfVivtew2wUhf7IKPSVtK2MlFpX+BJ4IWqOjWs8gxw0RrftbSvtqyxAlRVp6tqCbiYUQXSd467g6o6UFVXrlUWSFpkk5b2fQ9wfpKVwowXA8en2zRp/k1a2vcYoyB9cFhtH3DPjNooza1Oad/HgC8n+RPg28AXZ9hOaS5Z2ldal6V9pZkwQFKDAZIaDJDUYICkBgMkNRggqcEASQ0GSGowQFKDAZIaDJDUYICkBgMkNRggqcEASQ0GSGowQFLDOEVFLklyf5LHhtK+HxvmfyrJ8STLw+u62TdXmi/jFBU5BXyiqh5O8hbgoSSHhmW3VtWfza550nxbN0BVdQI4MUy/mOQYa1QhlbabDV0DJXk78G7ggWHWzUkeSXJbkreu8R1L+2rLGrusVZI3A/8CfKaq7kqyC3ieUaH5PwZ2V9XvrLMNy1ppATXLWiXZCdwJfKmq7gKoqueGmtmvAF9gVDNb2lbGGYULo6qjx6rqc2fM333Gah8Ajk6/edJ8G2cU7leB3wa+OzziBOCTwI1Jlhidwj0FfHgG7ZPmmqV9pXVZ2leaCQMkNRggqcEASQ0GSGowQFKDAZIaDJDUYICkBgMkNRggqcEASQ0GSGowQFKDAZIaDJDUYICkBgMkNXRK+16Q5FCSx4f3VevCSVvZOEegldK+lwNXAR9NcjlwC3C4qi4DDg+fpW1l3QBV1YmqeniYfhFYKe17PXBwWO0gcMOM2ijNrXHKWr3qNaV9dw11swGeBXat8Z39wP5GG6W5NfYgwlDa907g41X1ozOX1ag21qr1sarqQFVduVZZIGmRTVzaF3hupTrp8H5yNk2U5tfEpX2Be4F9w/Q+4J7pN0+ab+tWJk1yNfCvwHeBV4bZn2R0HfRV4GeBp4HfrKofrLMtK5NqAa1dmdTSvtK6LO0rzYQBkhoMkNRggKQGAyQ1GCCpwQBJDQZIajBAUoMBkhoMkNRggKQGAyQ1GCCpwQBJDQZIajBAUoMBkhrGKSpyW5KTSY6eMe9TSY4nWR5e1822mdJ8GucIdDuwd5X5t1bV0vC6b7rNkhbDOKV9vwm8brUdabvqXAPdnOSR4RTPJzNoW5o0QH8J/AKwBJwA/nytFZPsT3IkyZEJ9yXNrYkCVFXPVdXpqnoF+AKw53XWtTa2tqyJArRSE3vwAeDoWutKW9m6jzdJcgfwXuBtSZ4B/hB4b5IlRk9keAr48OyaKM0vS/tK67K0rzQTBkhqMEBSgwGSGgyQ1GCApAYDJDUYIKnBAEkNBkhqMEBSgwGSGgyQ1GCApAYDJDUYIKnBAEkNBkhqMEBSw6S1sS9IcijJ48O7hRW1LU1aG/sW4HBVXQYcHj5L286ktbGvBw4O0weBG6bbLGkxrFsXbg27qurEMP0ssGutFZPsB/ZPuB9prk0aoFdVVY3qva25/ABwAFbqwklbx6SjcM+tlPcd3k9Or0nS4pg0QPcC+4bpfcA902mOtFjGGca+A/h34BeTPJPkJuBPgWuTPA68f/gsbTvWxpbWZW1saSYMkNTQHsbWdFx0/vvGXvf4C/fPsCXaCI9AUoMBkhoMkNRggKQGBxFmaLWBgb9d+qVV1136yPh/H1v+/Nnb+I3lsx+U7mDD7HkEkhoMkNRggKQGAyQ1GCCpwVG4GVptxO1d37h+1XVPb2C77/rgKvt6/9nzfuWfHYWbNY9AUoMBkhoMkNRggKSG1iBCkqeAFxldA59a62evW91av+VZ7facjQwWbMRq+7poefV2eYvP9ExjFO59VfX8FLYjLRxP4aSGboAK+HqSh4YSvmdJsj/JkSRHmvuS5k73FO7qqjqe5GeAQ0m+NxSjf5WlfbWVtY5AVXV8eD8J3A3smUajpEUxcYCS/FSSt6xMA78GnP2rLmkL65zC7QLuTrKynb+uqn+YSqukBTFxgKrq+8AVU2yLtHAcxpYaDJDU4O+BpmCtW2NWq56z2m95pmH582ffJOQtO7PnEUhqMEBSgwGSGgyQ1GCApAZH4WZotXrVq1XPgY3Wxj57xG21fWn2PAJJDQZIajBAUoMBkhpStXk/Eh39InX8i+XtxKd0z7PTD61VccojkNRggKQGAyQ1GCCpoRWgJHuT/EeSJ5LcMq1GSYti4lG4JDuA/wSuBZ4BvgXcWFWPvc53HIXTAprNKNwe4Imq+n5V/S/wZWD1x69JW1QnQBcB/33G52eGeT/G0r7aymZ+N7alfbWVdY5Ax4FLzvh88TBP2jY6R6BvAZcluZRRcD4E/NY633keTj89TL9t9HnLsV+LZ72+/dxaCzqVSU8luRn4R0ZDa7dV1aPrfOfClekkR7biE+3s1+Lp9K11DVRV9wH3dbYhLTLvRJAazmWADpzDfc+S/Vo8E/dtU38PJG01nsJJDQZIatj0AG2lO7iT3JbkZJKjZ8y7IMmhJI8P7289l22cRJJLktyf5LEkjyb52DB/ofuW5I1JHkzynaFfnx7mX5rkgeH/5FeSnDfuNjc1QMMd3H8B/DpwOXBjkss3sw1Tdjuw9zXzbgEOV9VlwOHh86I5BXyiqi4HrgI+Ovw7LXrfXgauqaorgCVgb5KrgM8Ct1bVO4AfAjeNu8HNPgJtqTu4q+qbwA9eM/t64OAwfRC4YTPbNA1VdaKqHh6mXwSOMbpReKH7ViMvDR93Dq8CrgG+NszfUL82O0Bj3cG94HZV1Ylh+llGD2NeWEneDrwbeIAt0LckO5IsAyeBQ8CTwAtVdWpYZUP/Jx1EmKEa/Y1gYf9OkOTNwJ3Ax6vqR2cuW9S+VdXpqlpidPPzHuCdne1tdoC2wx3czyXZDTC8nzzH7ZlIkp2MwvOlqrprmL0l+gZQVS8A9wPvAc5PsnJb24b+T252gF69g3sY6fgQcO8mt2HW7gX2DdP7gHvOYVsmkiTAF4FjVfW5MxYtdN+SXJjk/GH6TYzKERxjFKSVp9durF9Vtakv4DpGtRSeBH5/s/c/5b7cAZwA/o/RufNNwE8zGqF6HPgGcMG5bucE/bqa0enZI8Dy8Lpu0fsG/DLw7aFfR4E/GOb/PPAg8ATwN8Abxt2mt/JIDQ4iSA0GSGowQFKDAZIaDJDUYICkBgMkNfw/J69t/fXJCH0AAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"world.step()\n",
"pylab.imshow(fluid.density.data[0,...,0], origin='lower', cmap='magma')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A lot has happened internally in the `world.step()` call, e.g., for fluids we have a more complex `struct` object that stores the different fields of the simulation. For fluids we have the aforementioned marker density in addition to a velocity."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fluid state: Fluid[density: Grid[40x32(1), size=[40. 32.], float32], velocity: StaggeredGrid[40x32, size=[40. 32.], float32]]\n",
"\n",
" Velocity content:\n",
"(1, 41, 32, 1)\n",
"(1, 40, 33, 1)\n"
]
}
],
"source": [
"print(\"Fluid state: \" + format(fluid.state))\n",
"print(\"\\nVelocity content:\")\n",
"[print(grid.data.shape) for grid in fluid.velocity.unstack()];"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that we actually created two variables, one for each velocity component. If you're interested in how this works, have a look at the [Struct documentation](https://github.com/tum-pbs/PhiFlow/blob/master/documentation/Structs.ipynb).\n",
"\n",
"If you look closely at the output from the last `print` command, you'll notice that the shapes of the variables differ. This is because the velocity is sampled in [staggered form](https://github.com/tum-pbs/PhiFlow/blob/master/documentation/Staggered_Grids.md).\n"
]
},
{
@@ -154,21 +170,17 @@
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"id": "0hZk5HX3w4Or",
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0hZk5HX3w4Or",
"outputId": "f7811af7-4b58-4ff6-a8b6-6e7bedefaa6e"
},
"source": [
"for frame in range(10):\n",
" print('Computing frame %d' % frame)\n",
" world.step(dt=1.5)"
],
"execution_count": 5,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Computing frame 0\n",
@@ -181,9 +193,13 @@
"Computing frame 7\n",
"Computing frame 8\n",
"Computing frame 9\n"
],
"name": "stdout"
]
}
],
"source": [
"for frame in range(10):\n",
" print('Computing frame %d' % frame)\n",
" world.step(dt=1.5)"
]
},
{
@@ -197,44 +213,41 @@
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"id": "Mfl80CjZxZcL",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "Mfl80CjZxZcL",
"outputId": "92f3a9ba-d403-4799-a543-132ee8ed234c"
},
"source": [
"pylab.imshow(fluid.density.data[0,...,0], origin='lower', cmap='magma')"
],
"execution_count": 6,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fc1265294a8>"
"<matplotlib.image.AxesImage at 0x7fa84d3553d0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 6
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"output_type": "display_data",
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
},
"output_type": "display_data"
}
}
],
"source": [
"pylab.imshow(fluid.density.data[0,...,0], origin='lower', cmap='magma')"
]
},
{
@@ -248,6 +261,7 @@
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -256,19 +270,9 @@
"id": "tkhCOzc0ITsj",
"outputId": "f6366c12-1eb5-4ff6-e0d7-94b806bfd8e4"
},
"source": [
"frames = [fluid.density.data[0,...,0]]\n",
"for frame in range(20):\n",
" print('Computing frame %d' % frame)\n",
" world.step(dt=1.5)\n",
" if frame%5==0:\n",
" frames.append(fluid.density.data[0,...,0])\n",
"\n",
"pylab.imshow(np.concatenate(frames,axis=1), origin='lower', cmap='magma')"
],
"execution_count": 7,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Computing frame 0\n",
@@ -291,34 +295,40 @@
"Computing frame 17\n",
"Computing frame 18\n",
"Computing frame 19\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fc1265346a0>"
]
},
"metadata": {
"tags": []
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fa84d2d8790>"
]
},
"execution_count": 7
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"output_type": "display_data",
"data": {
"image/png": "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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAABzCAYAAACB+lklAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7h0lEQVR4nO29eaxsW1rY9/vW2nvXcOY7v3ff6zf3RNMTQ3dDO2Bohrba4FjIZhDGChJSFOQhSA4YKU6k/IHlyA5RbBxkE5OkA9gYTAdDEHQziARD093Q3bzu129+707vnHvumWrYw1rryx9r7zp153Onc+qct39S3XNr166qVV/V/va3v1FUlZaWlpaWw4c56AW0tLS0tNwdrQJvaWlpOaS0CrylpaXlkNIq8JaWlpZDSqvAW1paWg4prQJvaWlpOaQk+/lmItLmLLa0tNwjAgjWdLCSkdIhxSAiGMAIiMhtX2H672R7veHa7Gq99m+9w40UWvPcUO8QUBTweDwBR0EIFUE94G65zikuq+rJazfuqwKP2P1/y5aWliODkIAkLPSfZjl9C4+EpzmbztOxhrlUSI2Q1b6FaxVxo6DtNX+NxNu1BI03ZfevD1E5e4Wget17hPp9C694hcIHqqBc9iO2ZYc1XmareI282sC5jfpZt7Nt/as32noACrylpaXl7lEUISAYLCknbJ/HFxKWMzieBSAqToCAoLqrVOO2qIzja92eab3eKHnD7smg+b+pX81IfE6zb+4tlcJXthd5Y9Sn0oKRXadyQxymXtHd0SrwlpaWw4cGRKIC71vLYgrLaWAl87ggOJVoPaO1AperLOkbKfYbcSMl3SjoRLTe1ihtnVLeSmoUAxRBqIKw3knInaU/nicxHYxJkPgswN+VGFoF3tLScqgQBCRhMXmYR8NbeHjO8pa+JygMnEEVqlqBe40auFHUja27q8xv7SuHqIzj+4Kp/exRccfn7ir2eN/W9+2UW0ZQnpn3PDkH/o2T7JRP4LOKoroCodzTlcCNaBV4S8ubkkZxTSeiTV/Kz3C+gRhEErrMM28yFlJYSDwjb6ICB6ogEz81XK+wm08XbvMxjcSTQCMtRSfByYk7RQFk4k93tVXeKPBUonJfzhxdE1jp9JgvltgwPUQSVNxdi7tV4C0tbwoEwYIkzPceJbVzrCSP0ddFLCkAuQwoGbPjLzEqL1O6HZzbnORQzA4GIwldnWcujUkRI28YecPY7ypur4K7iXt5OmA5rcRvFMicnOpqS7yx6r3GbROrntrVAmj9b3PSMAJlMBggNbCo86TSv5sPfxWtAm9pOfIIYBCTYUyXhewh5uUUT+oTLCUpiYkKZrv0jELFBbvI5U7CyCQMQw5aohqDg7OA1BZ4Rzt0arO3CBJ9zVOKW4EyXB1QhEbBXp9CCFGZ30iJG9HJ82A6K0WwtWIPuqvElZjKGDS6U5qrAivRUu9KSiKd5tXvWhatAm9pOZIIIh0SO8+p+a9mTo7zNp5iMU0407P0ElhMoWN0Eqgrg8Frxk71FEP3FINKuVI41t2Yl82XGbpVrgy/gmqJanlwn0wSrMmYo8tiFj3RQ2fYqoSNMlrGpVeqAGMfoqJVsAYWU4M1wlwSXRzTfmqISt1PKfHGBSPIZFvjKmlSDN3UqaBJR2wcNSLgEVDo13751MCcTchCH7nHWspWgbe0HEkM1nTpZcd5Rt/D6aTPXzptOZZ5ltOcjg3ITSxqr4JXYcclbFWW10aLzF1+N+ftZXbsBVwY4X3FQVnkIglGUnqSMldrsJEXtivYKAJlUHKnlCEwCCWeQEFFh5QzYY6uFQRDaqIyvTrYGLnWR24ERHeVfrNPDJTu7kO9T2P1T1e9uPrqwAp0EyEtO7U/39wyE+ZWtAq8peXIYcnS4zw2/2FOh0f40PFFVjI4njn6iY9+2zrwBruBPTNxBcSgXdcEJFVM39I51eXC6CwJf5XLcp5z2/8fPoxQPQBFrgHF4zTgNLpJAMYehk6pQiD38fGqrn90dcXjWjkmwbCWGzrG8thCOrHGG6Xb/DWyq8CrEN/Ha/x/Y+V7hWHtaE9ESIzQT4TUwEIqJFOFQj6RiT88ESHRe1e/rQJvaTlSCCKWfucU7zVv55HFhA+fyJlLHEEFRXBB6v9fnUbnVSa+XiNKP/H0gROdkmcWlNdHPeAMrw2PcTl7jrwE53fY7wCnEgjBUeGpauUdFMZOGTpHpYFSHY5AQUkg4MVTUTFgmyCBioJO6HHaP85CKhMFnpj4t8nhbop+vErtkoHtMlZWjl0gD54NHQLQIyPFcjxrfPOGbm2CW4mKX23z+nVQ+R5pFXhLy5HB0klPcmb+vTwSnuZtywnHO0pQofAWrzLlGrhx/nOjxKmtcCOKw5IYpWsDTy5Y5tIOV658lLXuJV4Z/AGV20a1YL8s8RBKvCQ4oiI1xLy9zMBKlqIoPmR4VZz28aqTW6WeQh3nzSvkEtgoAgbDUiZ0LWho/OBRqTduks0SLgw9m1XFed7AktLTLgFlJAMAClJSTUkqQzdYEiOMDVgTX2s5E+ZVcAq5VyopUHWo7rkfynW0Cryl5UhgEUlZ7j/BN2Vfy9k5wweOFaQmUATD2NtJcct01WATQrsq225qv1i0oqSq9K3nvcuOrSphPjnGueEKv+JeYie/QFldRvfemOmeUK3wfkRBWacJKh2EXiLMp4076OreJZWCD0rulUEVOOcDI91mtRxR+i6JSUma9BF23SiNC2V1HHi2usgqL3Bx60/IkmVOz72bRDqTQKSnwkpKCGfouS5l6JIZQ8cYEiOc6BiqBHIPQ+fJGRBCGc8ad0mrwFtajgAiKVmyzJI5y1vmDcc7ilchBEPuDUFlEmzbDdopyG463LVFLUosRW8qDo0KQsCKcrobcGo4Nn4SunDFb6NhfxR4gxdHFZTECNZEF8XYxeyTKtTZ66qTQKOqkvvAKFQUMsBpzrYMEC88FBKmEwt9/ZyNQtksA68XA1blBUbuComdp5Mu0ZdlOtoj0y4AlVQYDD26pLV7ZFKuX58ZRGDklA2XM5YNdnsV3h2tAm9pOQJY22ex9yhP6hO8f6XEipJ7g9dY4DKdTdFUBmYmoIALMil8afKYAawoVnYDnE1VYmoCz8yPWUw6vGP9aV61i2yZ1whhzP4FNAMFOWOndG3sPrhTKatjx9A7LrNJDHVW9d7Ryq2koDIFo2odJbCWvs5IVnjcP0XQ3WrKJlj54iDni3yWreo1BqOXsckiC91HWEjOcCY8TIeE+STFIFQaosIWJWg88QUUH6IcY/AStsrAK+YFdoqL95yOeVsFLiJd4A+ATr3/L6vqPxKRJ4BfBI4DnwF+UA8yObSl5U2L0EmWOGmfZjnJ6j7TQhkMVYhFLtN9QLqmbsRUl39PK2+vMglJet211qXJjTZAMGQmYEQ50U0oxsd5PlnA+e19zUopZMzQeRYzgxFwAQauYpsxG2YVJeC0ACDgUQI+VAStcGEMEAuUpsIBpk4THPtozQ+0YOjXKKsdFE8IJaXbYWw6rNk1etonuEWsGCxS90qR2u8tJCJkVsjMbh65D1DoAO/vXV3uxQIvgG9R1YGIpMAfishvAv818M9U9RdF5F8CPwz8zD2vqKWl5Q6I2Qwr3Sf5QOcpzvQNudc6j9tQKYyc1JWA8RkLKaQi9KySiBLYLQ1vOvX5qTRDO7HawQYlFaVRHe9cFo53e/zZlbNTpfcP2pUSQIXtcIkLHGfJnSQRYeQC58xFNvUCm+NX8KHAhxIl1MHCQHMaM5JhTIbPqsmrGomB0Mwoa7mwXgRWzQW2B69EXzVKCENGec64XGOQXowtCTpP0GGeM+EsHU1YTDJSY+jZ2Ju8lwgdG183BjADY7+BDwW7daF3x20VuMbRE4P6blrfFPgW4Pvr7T8P/He0CrylZV8RLGIyerLE8a5hLoGybqeaByi8MHC7ytlITGHzJqbMGdktRHEqdSe/Zv+o+K0ori4BTw2oRKveqzCfKMNE6JpFUjuH89v75kXxWjCyA1w4Ud+HigKnOZUfEtTVijcq8OlgYTCAGvSaFMgm/7sMMSWxYFA/tzkpaXyOllRugGpgaFep7IgN6dGhS3ALdCRBNSGzwlxqSSR+L9uVYRRKfCgI6rhXYe3JBy4ilugmeRr458CLwKbu5r+cA87e00paWlruGDEZqV3kdHiEty5En/aWM+Q+lpXnHt4YOZwqqTFYgVHH0LWC7QHIJGDXuFJyD4WPlYNViAo/qZX3QgpW4gkiNcrxzCEknAyPMuqsk1fr+1Jmryij8jKXOwlb1VnKYCl9oGBA6Yc4P6it7mryjFpi8U8oCRiCBoLsKnErSiox1/sVvcCWO0cIBdd2alQtcb7C+R1Kt4lIwkbyEkZSOukSqelxyj3NYrXEUrbC8Y6wOoahg/NcIi838CG/ZznsSYGrqgfeKyLLwK8Cb9/rG4jIjwA/clera2lpuSUiCYnt0SEhNUpVDw8oQ8x2GDtly1V4DXRNQiqGfmImAUmagQdTxSqFjz7g0itliC6UrA4UWolVhqnsWqupUebo0bMrGEnuYb7MXon5MT4UUVnbQBViPkd8dNrivjMLN2gMPJZeGcl27ea42evELo0hFAglJdE1A+BtQZ4N6RAzVKzE3O/tMsTX1fKe8r8b7igLRVU3ReR3gQ8ByyKS1Fb4I8D5mzznZ4GfhXaocUvL/Sa18yx1H6UvKbkXyiAMHWxX8PqgYicUnDOv46Wir4t0tAv5CRYzy+muwaCTYcCVjxb7RqlcyT0D59jSnARDh4SeTTjeSZhLDaYfg55zPuasPNqdw+bv5HL63D5VZyql28SHkvX5LbarHnnwsVNhnUdz8/Q8M+lBYiWdtNMNdVl+FYQrLmcjvEpRbbGHeZVRlfshgRE+5FjTpcwew7EcA5sCl3PPS9U6G+FVvB8Q7eJ747atsETkZG15IyI94NuALwG/C3xPvdsPAb92z6tpaXmLine truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
},
"output_type": "display_data"
}
}
],
"source": [
"frames = [fluid.density.data[0,...,0]]\n",
"for frame in range(20):\n",
" print('Computing frame %d' % frame)\n",
" world.step(dt=1.5)\n",
" if frame%5==0:\n",
" frames.append(fluid.density.data[0,...,0])\n",
"\n",
"pylab.imshow(np.concatenate(frames,axis=1), origin='lower', cmap='magma')"
]
},
{
@@ -334,14 +344,38 @@
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "BL-AOqwMJmkq"
},
"source": [
""
"outputs": [],
"source": []
}
],
"execution_count": null,
"outputs": []
"metadata": {
"colab": {
"collapsed_sections": [],
"name": "Forw Simulations with Φ-Flow.ipynb",
"provenance": []
},
"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.8.5"
}
]
},
"nbformat": 4,
"nbformat_minor": 1
}
+182 -272
View File
@@ -7,11 +7,12 @@
"# PINN Example \n",
"\n",
"Burgers example $u=...$\n",
"\n",
"at $t=0$ , sine function (boundary_t0)\n",
"\n",
"at sides $t \\in [0,1], u=0$ (open_boundary)\n",
"\n",
"Note that we're still sampling with 128 points ($n=128), but now we have a discretization via the NN, so we can \n",
"also sample points inbetween; similar to linear interpolatoin or basis functions for FEM, just now the NN internally determines how to use its degrees of freedom to construct the basis functions. So we have no direct control over the reconstruction.\n",
"\n",
"## Preliminaries"
]
},
@@ -20,24 +21,32 @@
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/thuerey/phiflow/phi/tf/__init__.py:7: UserWarning: TensorFlow 2 is not fully supported by PhiFlow.\n",
" warnings.warn('TensorFlow 2 is not fully supported by PhiFlow.')\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Could not load resample cuda libraries: CUDA binaries not found at /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/cuda/build/resample.so. Run \"python setup.py cuda\" to compile them\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/util.py:119: The name tf.AUTO_REUSE is deprecated. Please use tf.compat.v1.AUTO_REUSE instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/profiling.py:12: The name tf.RunOptions is deprecated. Please use tf.compat.v1.RunOptions instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/profiling.py:13: The name tf.RunMetadata is deprecated. Please use tf.compat.v1.RunMetadata instead.\n",
"\n"
"Could not load resample cuda libraries: CUDA binaries not found at /home/thuerey/phiflow/phi/tf/cuda/build/resample.so. Run \"python setup.py cuda\" to compile them\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/flow.py:15: UserWarning: TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\n",
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/_collections_abc.py:743: MatplotlibDeprecationWarning: The global colormaps dictionary is no longer considered public API.\n",
" for key in self._mapping:\n",
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/_collections_abc.py:744: MatplotlibDeprecationWarning: The global colormaps dictionary is no longer considered public API.\n",
" yield (key, self._mapping[key])\n",
"/home/thuerey/phiflow/phi/viz/display.py:80: UserWarning: GUI is disabled because of missing dependencies: No module named 'imageio'. To install all dependencies, run $ pip install phiflow[gui]\n",
" warnings.warn('GUI is disabled because of missing dependencies: %s. To install all dependencies, run $ pip install phiflow[gui]' % import_error)\n",
"/home/thuerey/phiflow/phi/tf/flow.py:15: UserWarning: TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\n",
"$ python setup.py tf_cuda\n",
"before reinstalling phiflow.\n",
" warnings.warn(\"TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\\n$ python setup.py tf_cuda\\nbefore reinstalling phiflow.\")\n"
@@ -51,6 +60,13 @@
"rnd = math.choose_backend(1) # use same random points for all iterations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We're important phiflow here, but we won't use it to compute a solution to the PDE. Now we'll instead use the derivatives of an NN (as explained in the previous section) to set up a loss formulation to train an NN."
]
},
{
"cell_type": "code",
"execution_count": 2,
@@ -116,15 +132,13 @@
"metadata": {},
"outputs": [
{
"name": "stdout",
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From <ipython-input-2-a9e33b53329c>:7: dense (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use keras.layers.Dense instead.\n",
"WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow_core/python/layers/core.py:187: Layer.apply (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use `layer.__call__` method instead.\n"
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/legacy_tf_layers/core.py:171: UserWarning: `tf.layers.dense` is deprecated and will be removed in a future version. Please use `tf.keras.layers.Dense` instead.\n",
" warnings.warn('`tf.layers.dense` is deprecated and '\n",
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer_v1.py:1719: UserWarning: `layer.apply` is deprecated and will be removed in a future version. Please use `layer.__call__` method instead.\n",
" warnings.warn('`layer.apply` is deprecated and '\n"
]
}
],
@@ -132,7 +146,8 @@
"# generate array with positions: \n",
"# -1 to 1 spatial with 128 cells\n",
"# 0 to 1 in time with 1+32 timesteps\n",
"grids_xt = np.meshgrid(np.linspace(-1, 1, 128), np.linspace(0, 1, 33), indexing='ij')\n",
"n=128\n",
"grids_xt = np.meshgrid(np.linspace(-1, 1, n), np.linspace(0, 1, 33), indexing='ij')\n",
"grid_x, grid_t = [tf.convert_to_tensor(t, tf.float32) for t in grids_xt]\n",
"\n",
"# # gx ,gt = \n",
@@ -148,7 +163,7 @@
"# print(format(grid_x.shape))\n",
"\n",
"# create 4D tensor with batch and channel dimensions in addition to space and time\n",
"# in this case gives shape=(1, 128, 33, 1)\n",
"# in this case gives shape=(1, n, 33, 1)\n",
"grid_u = math.expand_dims(network(grid_x, grid_t))"
]
},
@@ -156,7 +171,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Helper to show"
"Helper to show (see below)"
]
},
{
@@ -171,20 +186,12 @@
"output_type": "stream",
"text": [
"Size of grid_u: (1, 128, 33, 1)\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:17: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:18: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:28: The name tf.global_variables_initializer is deprecated. Please use tf.compat.v1.global_variables_initializer instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:29: The name tf.train.Saver is deprecated. Please use tf.compat.v1.train.Saver instead.\n",
"\n",
"Randomly initialized network state:\n"
]
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -213,7 +220,7 @@
" a = np.concatenate( [a,a] , axis=3)\n",
" a = np.reshape( a, [a.shape[1],a.shape[2]*a.shape[3]] )\n",
" #print(a.shape)\n",
" plt.imshow(a, origin='lower', cmap='magma')\n",
" plt.imshow(a, origin='upper', cmap='magma')\n",
" \n",
"print(\"Randomly initialized network state:\")\n",
"show_state(grid_u)"
@@ -236,12 +243,13 @@
"metadata": {},
"outputs": [
{
"name": "stdout",
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/math_grad.py:1375: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use tf.where in 2.0, which has the same broadcast rule as np.where\n"
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/legacy_tf_layers/core.py:171: UserWarning: `tf.layers.dense` is deprecated and will be removed in a future version. Please use `tf.keras.layers.Dense` instead.\n",
" warnings.warn('`tf.layers.dense` is deprecated and '\n",
"/home/thuerey/anaconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer_v1.py:1719: UserWarning: `layer.apply` is deprecated and will be removed in a future version. Please use `layer.__call__` method instead.\n",
" warnings.warn('`layer.apply` is deprecated and '\n"
]
}
],
@@ -275,208 +283,28 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Step 0, loss: 0.111230\n",
"Step 50, loss: 0.059567\n",
"Step 100, loss: 0.050345\n",
"Step 150, loss: 0.040759\n",
"Step 200, loss: 0.033108\n",
"Step 250, loss: 0.027403\n",
"Step 300, loss: 0.021609\n",
"Step 350, loss: 0.017801\n",
"Step 400, loss: 0.013434\n",
"Step 450, loss: 0.031098\n",
"Step 500, loss: 0.019279\n",
"Step 550, loss: 0.015963\n",
"Step 600, loss: 0.014481\n",
"Step 650, loss: 0.013526\n",
"Step 700, loss: 0.012771\n",
"Step 750, loss: 0.012119\n",
"Step 800, loss: 0.011504\n",
"Step 850, loss: 0.010888\n",
"Step 900, loss: 0.010266\n",
"Step 950, loss: 0.009654\n",
"Step 1000, loss: 0.009068\n",
"Step 1050, loss: 0.008521\n",
"Step 1100, loss: 0.008014\n",
"Step 1150, loss: 0.007544\n",
"Step 1200, loss: 0.007104\n",
"Step 1250, loss: 0.006684\n",
"Step 1300, loss: 0.006282\n",
"Step 1350, loss: 0.005901\n",
"Step 1400, loss: 0.005545\n",
"Step 1450, loss: 0.005212\n",
"Step 1500, loss: 0.004900\n",
"Step 1550, loss: 0.004604\n",
"Step 1600, loss: 0.004324\n",
"Step 1650, loss: 0.004058\n",
"Step 1700, loss: 0.003808\n",
"Step 1750, loss: 0.003562\n",
"Step 1800, loss: 0.003326\n",
"Step 1850, loss: 0.003089\n",
"Step 1900, loss: 0.002863\n",
"Step 1950, loss: 0.002722\n",
"Step 2000, loss: 0.002980\n",
"Step 2050, loss: 0.002280\n",
"Step 2100, loss: 0.071292\n",
"Step 2150, loss: 0.022765\n",
"Step 2200, loss: 0.017804\n",
"Step 2250, loss: 0.013744\n",
"Step 2300, loss: 0.011416\n",
"Step 2350, loss: 0.010243\n",
"Step 2400, loss: 0.009419\n",
"Step 2450, loss: 0.008764\n",
"Step 2500, loss: 0.008265\n",
"Step 2550, loss: 0.007883\n",
"Step 2600, loss: 0.007578\n",
"Step 2650, loss: 0.007323\n",
"Step 2700, loss: 0.007102\n",
"Step 2750, loss: 0.006902\n",
"Step 2800, loss: 0.006712\n",
"Step 2850, loss: 0.006524\n",
"Step 2900, loss: 0.006349\n",
"Step 2950, loss: 0.006186\n",
"Step 3000, loss: 0.006033\n",
"Step 3050, loss: 0.005888\n",
"Step 3100, loss: 0.005747\n",
"Step 3150, loss: 0.005610\n",
"Step 3200, loss: 0.005475\n",
"Step 3250, loss: 0.005339\n",
"Step 3300, loss: 0.005198\n",
"Step 3350, loss: 0.005044\n",
"Step 3400, loss: 0.004859\n",
"Step 3450, loss: 0.004585\n",
"Step 3500, loss: 0.017968\n",
"Step 3550, loss: 0.004040\n",
"Step 3600, loss: 0.002951\n",
"Step 3650, loss: 0.002693\n",
"Step 3700, loss: 0.002550\n",
"Step 3750, loss: 0.002443\n",
"Step 3800, loss: 0.002351\n",
"Step 3850, loss: 0.002269\n",
"Step 3900, loss: 0.002193\n",
"Step 3950, loss: 0.002122\n",
"Step 4000, loss: 0.002056\n",
"Step 4050, loss: 0.001994\n",
"Step 4100, loss: 0.001934\n",
"Step 4150, loss: 0.001877\n",
"Step 4200, loss: 0.001822\n",
"Step 4250, loss: 0.001768\n",
"Step 4300, loss: 0.001716\n",
"Step 4350, loss: 0.001665\n",
"Step 4400, loss: 0.001615\n",
"Step 4450, loss: 0.001566\n",
"Step 4500, loss: 0.001517\n",
"Step 4550, loss: 0.001470\n",
"Step 4600, loss: 0.001476\n",
"Step 4650, loss: 0.001383\n",
"Step 4700, loss: 0.001337\n",
"Step 4750, loss: 0.001381\n",
"Step 4800, loss: 0.001255\n",
"Step 4850, loss: 0.001212\n",
"Step 4900, loss: 0.001305\n",
"Step 4950, loss: 0.001134\n",
"Step 5000, loss: 0.001114\n",
"Step 5050, loss: 0.001072\n",
"Step 5100, loss: 0.001658\n",
"Step 5150, loss: 0.063174\n",
"Step 5200, loss: 0.047222\n",
"Step 5250, loss: 0.043665\n",
"Step 5300, loss: 0.042181\n",
"Step 5350, loss: 0.041065\n",
"Step 5400, loss: 0.040186\n",
"Step 5450, loss: 0.039448\n",
"Step 5500, loss: 0.038687\n",
"Step 5550, loss: 0.037640\n",
"Step 5600, loss: 0.036418\n",
"Step 5650, loss: 0.035370\n",
"Step 5700, loss: 0.034606\n",
"Step 5750, loss: 0.034045\n",
"Step 5800, loss: 0.167828\n",
"Step 5850, loss: 0.099039\n",
"Step 5900, loss: 0.095293\n",
"Step 5950, loss: 0.090091\n",
"Step 6000, loss: 0.083824\n",
"Step 6050, loss: 0.072519\n",
"Step 6100, loss: 0.056544\n",
"Step 6150, loss: 0.051577\n",
"Step 6200, loss: 0.048992\n",
"Step 6250, loss: 0.046800\n",
"Step 6300, loss: 0.044814\n",
"Step 6350, loss: 0.042973\n",
"Step 6400, loss: 0.041381\n",
"Step 6450, loss: 0.040075\n",
"Step 6500, loss: 0.038997\n",
"Step 6550, loss: 0.038067\n",
"Step 6600, loss: 0.037238\n",
"Step 6650, loss: 0.036487\n",
"Step 6700, loss: 0.035804\n",
"Step 6750, loss: 0.035185\n",
"Step 6800, loss: 0.034636\n",
"Step 6850, loss: 0.034157\n",
"Step 6900, loss: 0.033735\n",
"Step 6950, loss: 0.033001\n",
"Step 7000, loss: 0.031376\n",
"Step 7050, loss: 0.029146\n",
"Step 7100, loss: 0.026367\n",
"Step 7150, loss: 0.023316\n",
"Step 7200, loss: 0.020324\n",
"Step 7250, loss: 0.017877\n",
"Step 7300, loss: 0.015863\n",
"Step 7350, loss: 0.014097\n",
"Step 7400, loss: 0.012570\n",
"Step 7450, loss: 0.012832\n",
"Step 7500, loss: 0.010255\n",
"Step 7550, loss: 0.009250\n",
"Step 7600, loss: 0.027104\n",
"Step 7650, loss: 0.008814\n",
"Step 7700, loss: 0.007840\n",
"Step 7750, loss: 0.007265\n",
"Step 7800, loss: 0.006804\n",
"Step 7850, loss: 0.006415\n",
"Step 7900, loss: 0.006079\n",
"Step 7950, loss: 0.005783\n",
"Step 8000, loss: 0.005516\n",
"Step 8050, loss: 0.005274\n",
"Step 8100, loss: 0.005057\n",
"Step 8150, loss: 0.004895\n",
"Step 8200, loss: 0.004679\n",
"Step 8250, loss: 0.004554\n",
"Step 8300, loss: 0.007953\n",
"Step 8350, loss: 0.026119\n",
"Step 8400, loss: 0.018625\n",
"Step 8450, loss: 0.012710\n",
"Step 8500, loss: 0.007646\n",
"Step 8550, loss: 0.003899\n",
"Step 8600, loss: 0.005047\n",
"Step 8650, loss: 0.002152\n",
"Step 8700, loss: 0.002009\n",
"Step 8750, loss: 0.001450\n",
"Step 8800, loss: 0.001367\n",
"Step 8850, loss: 0.001321\n",
"Step 8900, loss: 0.001109\n",
"Step 8950, loss: 0.001148\n",
"Step 9000, loss: 0.000987\n",
"Step 9050, loss: 0.000899\n",
"Step 9100, loss: 0.000856\n",
"Step 9150, loss: 0.000848\n",
"Step 9200, loss: 0.000861\n",
"Step 9250, loss: 0.000908\n",
"Step 9300, loss: 0.000710\n",
"Step 9350, loss: 0.000693\n",
"Step 9400, loss: 0.000713\n",
"Step 9450, loss: 0.000753\n",
"Step 9500, loss: 0.000672\n",
"Step 9550, loss: 0.000668\n",
"Step 9600, loss: 0.000709\n",
"Step 9650, loss: 0.000541\n",
"Step 9700, loss: 0.000864\n",
"Step 9750, loss: 0.000872\n",
"Step 9800, loss: 0.000668\n",
"Step 9850, loss: 0.001222\n",
"Step 9900, loss: 0.000966\n",
"Step 9950, loss: 0.000658\n",
"Step 10000, loss: 0.000867\n",
"Runtime 106.27s\n"
"Step 0, loss: 0.238804\n",
"Step 500, loss: 0.051395\n",
"Step 1000, loss: 0.045798\n",
"Step 1500, loss: 0.043285\n",
"Step 2000, loss: 0.041360\n",
"Step 2500, loss: 0.039480\n",
"Step 3000, loss: 0.037504\n",
"Step 3500, loss: 0.035440\n",
"Step 4000, loss: 0.033171\n",
"Step 4500, loss: 0.031074\n",
"Step 5000, loss: 0.029556\n",
"Step 5500, loss: 0.028347\n",
"Step 6000, loss: 0.026291\n",
"Step 6500, loss: 0.024694\n",
"Step 7000, loss: 0.022832\n",
"Step 7500, loss: 0.020840\n",
"Step 8000, loss: 0.035597\n",
"Step 8500, loss: 0.021575\n",
"Step 9000, loss: 0.080320\n",
"Step 9500, loss: 0.036767\n",
"Step 10000, loss: 0.034146\n",
"Runtime 77.39s\n"
]
}
],
@@ -501,7 +329,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks pretty good on first sight!"
"This training can take a significant amount of time, around 1 minute on a typical notebook, but at least the error goes down significantly, and the network seems to successfully converge to a solution.\n",
"\n",
"Let's show the reconstruction of the network, by evaluating the network at the centers of a regular grid, so that we can show the solution as an image. Note that this is actually fairly expensive, we have to run through the whole network with a few thousand weights for all of the $128 \\times 32$ points in the grid.\n",
"\n",
"It looks pretty good on first sight, though:\n"
]
},
{
@@ -511,7 +343,7 @@
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -523,10 +355,7 @@
}
],
"source": [
"# a = session.run(grid_u)\n",
"# a = a[0,:,:,0].transpose() # ; print(a.shape)\n",
"# pylab.imshow(a, origin='lower', cmap='magma')\n",
"show_state(grid_u)"
"show_state(grid_u) # note, this helper internally does a `sess.run()`"
]
},
{
@@ -537,8 +366,7 @@
"\n",
"## Evaluation\n",
"\n",
"Let's compare solution at $t=0$\n",
"Actually not that great, blue curve from PINN quite far away from constraits (in gray)... Solution get's better with larger number of iterations, but requires a surprisingly large number of them for a fairly simple case. The shock in the middle is not well recovered (the maximum is still much too low).\n"
"Let's compare solution in a bit more detail. Here are the actual sample points used for constraining the solution (at time step 16, $t=1/2$) shown in gray, versus the reconstructed solution in blue:\n"
]
},
{
@@ -549,7 +377,7 @@
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x13ab749d0>"
"<matplotlib.collections.PathCollection at 0x7f31f079da90>"
]
},
"execution_count": 8,
@@ -558,7 +386,7 @@
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deXxV9b3v/9cnE4QpDGGeAqKAFhWNoIgCBpkUQiAg7c9WT+2h7a/e38Nz7rmn9vT3OPb2tvdyzh368J720ZbrsfW051c0CYQEiAibwRElIBhBkQjIPJMwJSHD5/fHWjsuNgkE9kp2VvJ5Ph4+svdaa+/9ySbu9/4Oa31FVTHGGNN+xcW6AGOMMbFlQWCMMe2cBYExxrRzFgTGGNPOWRAYY0w7lxDrAm5FamqqpqWlxboMY4wJlG3btp1W1d6R2wMZBGlpaRQXF8e6DGOMCRQR+aqh7dY1ZIwx7ZwFgTHGtHMWBMYY085ZEBhjTDtnQWCMMe2cBYExxrRzvgSBiLwqIidF5NNG9ouI/G8RKRWRT0TkPs++Z0Rkr/vfM37UY4wxpun8ahH8EZhxnf0zgdvd/xYDvwUQkZ7AS8B4YBzwkoj08KkmY4wxTeDLCWWq+raIpF3nkEzg39RZ/GCLiHQXkf7AZGCdqp4FEJF1OIHyFz/qMsYvJSUlhEIhysvLERFUlZSUFDIyMhgzZkysyzMmKi11ZvFA4JDn/mF3W2PbryEii3FaEwwZMqR5qjQmQklJCUVFRVRUVNRvCy/mVF5ezvLly1m+fLmFggm0wFxiQlWXAksB0tPTbVk102y83/6bqry8nMLCQgALAxM4LRUER4DBnvuD3G1HcLqHvNs3tVBNxlyloW//N6O6uppQKGRBYAKnpYKgAHheRJbhDAyXq+oxEVkL/FfPAPE04CctVJMxQPQB4HUzrQhjWgtfgkBE/oLzzT5VRA7jzARKBFDV3wFrgFlAKXAZ+Ct331kR+S/AVvepfh4eODamOd1K909TpKSk+Pp8xrQEv2YNffMG+xX4USP7XgVe9aMOY26ksW//Fy505uTJvpw82ZtLl7pQXZ2IKqSklNOjxznS0r6iUyfnMeFZQ5ESExPJyMhokd/DGD8FZrDYmGhEBkBdHRw8OJTPPhvFl1/exunT16zVcZW4uFruvPMAzz8fx/e/P6z+OcOtCps1ZIJMGvpm09qlp6erLUxjmqqkpITCwkKqq6u5cKEzxcUPsGPHPZSXd68/Jimpin79jtOnzym6dTtPYuIVVIVLl3px5cootm3rQl2dc+wzz8DLL4P1ApmgEZFtqpoeud1aBKbN8n5jP3OmJ++8M5GSkjHU1jp/9ikpZXzjG59yxx17GTToMPHxdfWPTU5OZubMmfXf8I8dg1dfhV/8Al57DTZuhHXr4I47YvKrGeMraxGYNsfbDVRW1o3NmyexY8e9qMYByqhRnzNu3EekpR0gLuIiKzfq4vn8c/j2t6G4GEaNgg8/hG7dmv93MsYP1iIwbVrkLKCamnjef38ib7/9KDU1iYjUMXbsdh555F169jx31WMjv/1fz6hRTmvgwQdh1y6nmygvj2sCxZggsSAwgecdAwD48svhrFkzkzNnUgG4885dZGRsoFevq2cm30wAeHXpAvn58MADzs+XX4a/+Rt/fhdjYsGCwARaSUkJK1asQFU5f74Lb745g9277wIgNfUUs2YVMXz4/qse48cMnxEj4Ne/hqefdsLAgsAEmQWBCaxwS6CuTikp+QZr1syisjKZxMQrTJr0Ng8++AEJCV8PACcmJjJ79mzfpng++KDz88ABX57OmJixIDCBFQqFKCtLZNWquXz22Z0AjBixlyefXEX37uevOvZWu4GuZ/BgEIHDh6G6GhITfXtqY1qUBYEJjMgTuLZs6ceqVU9y6VIXkpKqmD59Lffd9zEiXz+mOU/0SkqCgQOdIDh8GIYN8/0ljGkRFgQmELwDwhUVHVi+fAqffHIPAGlp+8nMXEmPHs6MIREhKyurRc7yTUtzQuDAAQsCE1wWBCYQQqEQ1dXVlJbexsqVc7hwoRsJCdVMnbqeceM+qp++6fc4wI2kpcG779o4gQk2CwLTanm7giorO7B27Ww+/vg+AAYNOsTcuStJTT1DSkpKzK73k5bm/Ny//7qHGdOqWRCYVqWhy0OXlt5GQcFszp9PIT6+hilTNvHQQ+8TH++sG/zCCy/ErN5wEFiLwASZBYFpNSJPDKusTOKtt6azfbvTChgw4Ahz5+bTp89poHVc9jk8LmBBYILMr4VpZgAvA/HAK6q6JGL/r4Ap7t1OQB9V7e7uqwVK3H0HVXWOHzWZ4AmPAwCUlg6noGBOfStg8uRNTJjgtAKgeWcD3QxrEZi2IOogEJF44DfA48BhYKuIFKjq7vAxqvo3nuP/AzDW8xQVqnpvtHWYYIrsCnJaAdPYvv1+INwKWEmfPqcAYt4VFGnQIOc6Q0eOwJUrzpRSY4LGjxbBOKBUVfcBuOsSZwK7Gzn+mzhLWZp2rqFrBBUUzKa8vLvbCtjMhAnv1bcCWkNXUKTwuQSHDjnTSIcPj3VFxtw8P4JgIHDIc/8wzgL11xCRocAwYINnc0cRKQZqgCWqmt/IYxcDiwGGDBniQ9km1sJdQZWVSaxbN41t275uBWRmrqRv31P1x7aWrqCGpKU5QXDggAWBCaaWHixeBOSqaq1n21BVPSIiw4ENIlKiql9GPlBVlwJLwVmPoGXKNX6KPDO4vLycL78cRkHBHMrLuxMXV8vkyZt4+OH36mcEtdYPf6+0NHjnHRsnMMHlRxAcAQZ77g9ytzVkERGL2KvqEffnPhHZhDN+cE0QmGCL7AY6ebKCt956gm3bnDUy+vc/yty5+fTte6rVjQPciA0Ym6DzIwi2AreLyDCcAFgEfCvyIBEZBfQAPvBs6wFcVtUqEUkFHgb+2YeaTCvivVQ0wL59w1i50tsK2Oy2Aupa5TjAjdhJZSboog4CVa0RkeeBtTjTR19V1V0i8nOgWFUL3EMXAcv06rUxRwO/F5E6IA5njKCxQWYTQOGWgKpSVZXEunWPU1zsbQWs5I47qigvrwtMV1AkaxGYoPNljEBV1wBrIrb9Y8T9nzXwuPeBYP1fb5okclrovn1prFyZWd8KmDRpMxMnvkfPnl0D1Q3UEAsCE3R2ZrHxlXfheIArVxJZt24qW7eOA6Bfv2PMnZtPv34nA9kN1JCyshJE7uLwYeF//I9/Yfr0KYFr1Zj2zYLA+CZyQPjgwUHk58/l7NlebivgbSZOfJf4+DpEpEWvEtpcSkpKePPNQpKSbqeqqiOnT1+msLAQIPC/m2k/LAiML7wDwtXV8WzaNIX3338I1Tj69DlBVtYK+vc/AbT8paKbU/hciLg4Z0nMurp4qqurCIVCbeL3M+2DBYGJmndA+OjRfqxYkcWpU30QqWPixHeZPHkTCQnOqSNBHRBuTHgMJD7e+f1qa+Ov2m5MEFgQmFvmHRCurRXeeedR3n77Uerq4unZ8wxZWfkMHnwYaFutAK/wiXHhFkFtbVz9dmOCwoLA3LTIAeGzZ7uzfPk8Dh92ziscN+5Dpk4NkZTkjBU0x8LxrUVGRgaFhYX1LYK6uvg2Mwhu2g8LAnNTIgeEd+4cw+rVT3DlSge6dj1PVlY+w4c7Z1a15NrBsRL+3V5+2bnfqVMKs2dPbtO/s2l7LAhMk3kHhCsrO7B69SxKSu4GYPTo3cyeXUinTpVA2+0KasiYMWPo2xdOnoRvfvM7tINf2bQxFgSmSbwDwgcPDmL58nmUlfUgMfEKM2e+ydixHyPiHNvWBoSbIjHR+ek2lIwJFAsCc13XDghPYvPmR1GNo3//o8yfv5zU1DNA+2oFRLIgMEFmQWAa5R0POH++C3l58/nqqzQAHn74PaZM2UBCgjNbpi0PCDdFOAiuXIltHcbcCgsC06jwyVL79g0jL28ely51oXPni8ybt5zbbms/A8JNYS0CE2QWBKZR586dZ/PmSWzePAkQ0tL2M39+Hl27XgLad1dQpPBaxRYEJogsCEyDTpyAv/zlWfbuHQIokyZtZtKkzcTFOVcRb48DwtdjLQITZBYE5polJFNS5vAP/zCc48eH0LnzJbcraB9grYDGWBCYILMgaMcizxCuq4PCwjFs3JiGKjzyCLz00kFKSs5QXm6tgOuxIDBB5ksQiMgM4GWcFcpeUdUlEfufBf47X69l/GtVfcXd9wzw/7rbf6Gqr/lRk7m+yDOEL11KZsWKLEpLbwdg6tSPKCoaR0LCaDIyRsey1ECwIDBBFnUQiEg88BvgceAwsFVEChpYcvJ1VX0+4rE9gZeAdECBbe5jz0Vbl2lY5MphAAcPDiYnJ5sLF7qRnHyZrKwV3HFHKQkJ42JYabDY9FETZH60CMYBpaq6D0BElgGZQFPWHp4OrFPVs+5j1wEzgL/4UJeJENkKqKuDDz6YwPr1GajGMWjQIRYsyCUl5bxdPfMm2awhE2R+BMFA4JDn/mFgfAPHzReRR4EvgL9R1UONPHZgQy8iIouBxQBDhgzxoez2xXudIIDLlzuSnz+XL74YCcCECe+TkREiPr7Orp55C6xryARZSw0WFwJ/UdUqEfk+8Brw2M08gaouBZYCpKenq/8ltl3e6wQBHD48kJycbMrLu9OxYwVZWfmMHPkFYGcI3yoLAhNkfgTBEWCw5/4gvh4UBkBVz3juvgL8s+exkyMeu8mHmozL2xJQhS1bxrNu3ePU1cUzcOBhsrNz6dGj3GYERcmCwASZH0GwFbhdRIbhfLAvAr7lPUBE+qvqMffuHOAz9/Za4L+KSA/3/jTgJz7U1K41NCBcUdGBlSsz+fxzZwbQ+PFbePzxdSQnxzN79jwLgChZEJggizoIVLVGRJ7H+VCPB15V1V0i8nOgWFULgP9HROYANcBZ4Fn3sWdF5L/ghAnAz8MDx+bWRA4IAxwLine truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -585,7 +413,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's check how well the initial state was reconstructed, compared ot the (known) ground truth solution."
"Not too bad at the sides of the domain (the Dirichlet boundary conditions $u=0$ are fulfilled), but the shock at $x=0$ is not well represented.\n",
"\n",
"Let's check how well the initial state at $t=0$ was reconstructed. That's the most interesting, and toughest part of the problem (the rest basically follows from the model equation and boundary conditions, given the first state).\n",
"\n",
"And turns out, it's actually not that great, blue curve from PINN quite far away from constraits (in gray)... Solution get's better with larger number of iterations, but requires a surprisingly large number of them for a fairly simple case. The shock in the middle is not well recovered (the maximum is still much too low).\n",
"\n",
"... shown in blue, compared ot the (known) ground truth solution in gray ..."
]
},
{
@@ -596,7 +430,7 @@
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x13ac00110>]"
"[<matplotlib.lines.Line2D at 0x7f31f0719a00>]"
]
},
"execution_count": 9,
@@ -605,7 +439,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -617,8 +451,6 @@
}
],
"source": [
"n = 128\n",
"\n",
"# ground truth solution at t0\n",
"t0gt = np.asarray( [ [-math.sin(np.pi * x) * 1.] for x in np.linspace(-1,1,n)] )\n",
"\n",
@@ -634,9 +466,10 @@
"metadata": {},
"source": [
"That's not very close...\n",
"especially the maximum / minimum at $x=\\pm 1/2$ are far off, and the boudaries at $x=\\pm 1$ are not fulfilled.\n",
"\n",
"But we have the forward simulator, so we can use the $t=0$ solution of the network to \n",
"evaluate how well the temporal evoluation was reconstructed by the PINN."
"We have the forward simulator for this simulation, so we can use the $t=0$ solution of the network to \n",
"evaluate how well the temporal evoluation was reconstructed by the PINN. This measures how well the temporal evolution of the model equation was captured via the soft constraints of the PINN loss."
]
},
{
@@ -654,7 +487,7 @@
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x13ac91710>]"
"[<matplotlib.lines.Line2D at 0x7f31f069f1f0>]"
]
},
"execution_count": 10,
@@ -663,7 +496,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABKJUlEQVR4nO2dd3hU1daH351KD1WkFylSRYhIUZAiRRSQ3hQQ7Oi1fV7LvdjuvYq9YUF6lw4KSkfEQkea0pEOgRBISE/298eaIUOY9EmZZL3Pk2fOnLPPmTUnyW/WrL32WsZai6IoipL/8cltAxRFUZScQQVfURSlgKCCryiKUkBQwVcURSkgqOAriqIUEPxy24CUKFu2rK1evXpum6EoiuJVbN269by1tpy7Y3lW8KtXr86WLVty2wxFURSvwhjzd0rHNKSjKIpSQFDBVxRFKSCo4CuKohQQVPAVRVEKCCr4iqIoBQQVfEVRlAKCCr6iKEoBIc/m4Sv5D2vhr7/gjz9gzx44dgwuXoTwcChcGIoXh6pVoUkTCA6GOnXAmNy2WlHyDyr4SrZy+TIsWQLffw9r18K5c+k/t359GDQIHnoIKlSQfdHANuBP4C8gBIgA4oFyQHmgGdAOKOm5t6Eo+QKTVxugBAcHW11p650kJsKKFTBuHCxbBjExSccqVIDbboMGDaBWLShdWjz76Gj5cDhwAHbsgJ9+gtBQOSewGTR/G+LbwVY/iE2HDT7AXcBooC0QGxHLqa2nCD0YyuXjl4kOi8a/qD+BJQKp1qYalVtUxujXCSUfYIzZaq0NdndMPXzFY0REwPjx8MkncPSo7DMG2raF3r2hU6f0h2kOxcEbh2FBcbhSEX527DcWGhloDNwMVAKKAb6It38C+AnYGJfA4V+O89+l+/l+5WGK7zqHTUzZuSlVsxTBTwTT8rmWKvxKvkUFX8kyly+LyH/8cZJXXr06PPwwDBsGFSum7zoWWA+8Dyz1B1tX9peMg4DlcO4bsBvg/lEwejT4+iY731qO/3qcFjN2sXvOHqIvRF09luBrCGpagRoNyhFUNYjCZQoTdyWO8NPh7Fu0j4uHL7LyhZVEno+k49sds3Q/FCWvooKvZJqYGPj8c3j7bbhwQfa1bAn//Cfcdx/4pDMHLB6Yjwi9M4gXCPQEhgMd/MF0hf9ug9e/gzffhIMHYepUEf3YiFh2ztjJ5s83c2530iRBmTplqHJfHWbcU5tFLSrjW8SfmUD7ZK/f9dOu7Jmzh0UPLuKXd36hcKnCtH6xdabvi6LkVTSGr2SKFSvgqadg/3553ro1/Oc/Er5Jb0QkHpgM/AdwlvcrC4wCnkAmYZOzahXcf7+Ejx7qcYE+1Tbzx5QdxFySiYKi5YvS+IHGNB7cmPK3lMcYQ5zjmuOQD5LNQCM31941cxcLhiwACwO/H0idbnXS90YUJQ+hMXzFYxw7Bs8+CwsWyPO6deHDD6Fr1/QLvQUWAq8imTYAtYHngQeBwqmc27EjzP3iHJOH/0yVxbvZ5NhfpXUVbnvyNur3ro9vwLWxHn/gK+QDZiIwABH9Ismu3WhQI0IPhrLutXVsH79dBV/Jd+jCKyVdxMdL6Obmm0XsixaFMWNg50645570i/1PQEugNyL2NYEZju1HSV3sz+w4w5w+c9j44JfUS9hNIj5sowllX32EhzY8RKOBja4TeycG+BSoC+wFnkvhNZqObAoGDvxwgJjwmBRGKYp3ooKvpMm+fRKyeeUViIqC/v1lAdWLL0JAQPqucQLoh6RKbgRuAD5D8ukHkfof4vm/zvNtr2/5+tav+XP+n/gG+nLbqNuo+cnTLKEHz71Xga1b07ahKDAbCAC+Bta6GVO8YnGqtq5KQkwCB5YeSN+bUxQvQUM6SookJsLYsTIJGxUFVarAhAlw993pv0Ys8AnwBnAFCaO8iIRviqVxbvjpcNa9vo7tE7ZjEyx+hf0IfiyYVi+0onjF4gBs/BO++gr69oVt26BkydSv2QR4BXgdeBtZoJWcen3qcWzDMfbO20vDAQ3T+U4VJe+jHr7ilhMnoHNnePppEfsHH4RduzIm9usQgX0REfveiEf/GqmLfUx4DGtHr+WzWp+xbdw2AJo92oynDz1N5w87XxV7gI8+gmbN4MgRePXV9Nn1tOP1VwLuvhjU61UPgAPLDhB7JT3LvBTFO1DBV67jxx/hllskI6ZsWZg/H6ZMgaCg9J1/GYnHt0MEvhbwAzAPqJrKedZadk7fyed1P2f9W+uJi4zj5p4388TuJ7j3q3spXqH4decUKgSTJ0t65pdfQnoSu0o57AMY4+Z4UJUgKreoTHxUPAd/OJj2BRXFS/CI4Btjuhhj9hljDhpjXkplXG9jjDXGuE0ZUnKXhAR47TWZhA0Nlcyb3buhV6/0X+NHoAGSAumPhHJ2A13SOO/0ttNMumMSCx9YSMTpCCo1r8Twn4fTf2F/yt5cNtVzGzaUzCFr4fHH5X2kxbMO++YB7iL19fqIl7937t60L6YoXkKWBd8Y4wuMBboC9YGBxpj6bsYVB/6BzNkpeYyQEBH4N9+U5//5jxQ8K18+feeHAQ8hfwQngNuA7Ugtm8BUzosKjeL7x75nXPA4jv96nKI3FKXHpB6M+G0EVe9I7fvAtbz2GlSuLB7+uHFpj6+EpIBa4GM3x+veJ8t8j204lm4bFCWv4wkPvzlw0Fp72FobiyRC9HAz7i3kG3S0B15T8SAbN8Ktt8LKlVCunCyqevXV9K+UXYssZJqEiPsY4FfE008Jay27Zu1ibL2xbP16Kz6+PrR4tgWj9o+iybAmGJ+M1bMpVkxKO4B8aEVFpTockMVYAAuAxGTHStUshfE1hJ8KJz4mPkO2KEpexROCXwk47vL8hGPfVYwxTYEq1tqlqV3IGPOIMWaLMWZLSEiIB0xT0mLmTFkde/IktGolmS4d01lKJhaZkO2A/NJvB3Y49qWW/hV2NIyZ3WayYNACrpy7QrU21Xjsj8fo/GFnCgUVyvR76dVLJnDPnIGvv057/C1ANeAMshDLFR8/H0pULgHA5eOXM22TouQlsn3S1hjjA3yIZOKlirV2nLU22FobXK6cu4X1iqdITJQCZIMHS02cRx+FdeskLJIe/gRaAO8hi5peAzYgFSxTfM34RH778De+aPAFB384SKGShbhv/H0MXTuUcvWz/vs2Bl5/XbbHjEnbyzdAd8f2YjfHS1YvCcgHlKLkBzwh+CeBKi7PKzv2OSkONATWGWOOIjqxRCduc4/ISBgwAN56S8I2n3wiGS7+/mmfa5EJ2aZIjL4GIvSvk7pXf3r7aca3GM+K51cQFxlHg/4NePLPJ2k6ommGwzep0a1bxrx8Z+xxiZtjJauVBFTwlfyDJwR/M1DbGFPDGBOAlCq5+v9jrb1krS1rra1ura0O/A50t9ZqZbRc4MwZCeHMnSuNR77/XnLt01MaIQJ4AElpjAaGIiGclqmcEx8Tz6qXVvHNbd9weutpgqoGMfD7gfSZ3YdiN6a19CrjuHr577wjjVVSow0QBOwBDiU7FlRd8lDD/g7zqI2KkltkWfCttfHI/Ndy5Jv+HGvtHmPMm8aY7qmfreQk+/dL+eItW6BGDfjtN8nMSQ97kMybGUiJgulIpcsSqZxzauspxjUbxy9jfgELtz9zO0/seSLbi5J16yZ9cc+ehTlzUh/rD9zj2E7u5TtDOpeOXvKsgYqSS3gkhm+tXWatrWOtvcla+1/HvtHW2uu+KVtr71LvPufZtEnq4Rw9Ki0GN26UNoPpYSqSivUXkne7GRicyviE2ATWvraW8bePJ2RPCGXqlOGhXx6iy0ddCCiWzuI7WcAYGOVIwRk7Nu3xzrBO8ji+xvCV/IautC0A/PADtGsH58+LR792raRfpkUUMBIJ3UQi4ZxNQL1Uzjm76yzjbx/P+jfXYxMstz9zO49uf5TKLdI5G+whBg6EUqXkgy6t1bddEE//Z8DVl78aw9eQjpJPUMHP50ydCt27y0Tt0KGweLGUNk6LA8js+gSgEDAemIKEc9yRGJ/Iz2//zLhm4ziz4wwla5Rk6LqhdPmoC/5F0jEb7GGKFIHhw2U7LS8/CLgVycV3ra1TonIJjI8h/GQ4CbHpWL6rKHkcFfx8zCefiMjHx8NLL8GkSenLxFkKBAM7kcYkvwMjkDRGd4QeCmXSnZNY88oaEuMSafZYMx7f+TjV21b3zBvJJI8/Lo+zZye1YEyJ2xyPrvn4vgG+FK9UHJtouXxCc/EV70cFP5/yv//BM8/I9kcfSfOStDJxLPA/4D6kAFovpMfsLSmNt5Ydk3fwdZOvOfH7CYpXKs6Q5UO498t7cyRWnxa1akGXLpKpM2VK6mOdgp88+qOpmUp+QgU/n2EtvPyylEYwRurXO4U/NSKQBiXOCsNvAXNJOQsn6mIU8/rPY/HwxcRGxFK/b30e3/U4N3W6yQPvwnM8/LA8Tp+e+jjnopDkK26vTtxqHF/JB2gDlHxEYiL84x/w+efg5wfTpskCq7Q4gmSq7EJWyc1AvPyUOLruKAsfWMjlE5cJKBZA18+7csuDt2DS2+cwB7nnHinrvH077N0L9a8r6yfcjMxP/A2EkNRA/Wouvnr4Sj5APfx8QkKCeLOffy5tB+fPT5/Yr0a8211AHSQLJyWxT4hNYNVLq5jSfgqXT1ym0u2VeHTHozQZ2iRPij1Ivfw+fWR7xoyUx/kCzRzbrl6+M6SjufhKfkAFPx+QkAAjR8LEiZKd8v33kpmTGs6ywJ2BUGTx0UZSroUTejCUCa0m8MuYXzDG0GZ0G4b/PJzSN5X23BvJJoYMkceZMyXklRLuJm41pKPkJzSk4+UkJopnP3myiP2yZVI6ITXikKXRzrLxrwBvIl6uO3bP3s13j3xHbHgsQdWC6DWjF1Vbp79WfW7Tpo0UhTt6FH79VRaguSNVwdeQjpIPUA/fi0lMFM9+0iQR+6VL0xb7MKRJyTgkv34Line truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -722,7 +555,7 @@
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x13ad0b910>]"
"[<matplotlib.lines.Line2D at 0x7f31f0671e80>]"
]
},
"execution_count": 11,
@@ -731,7 +564,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -757,31 +590,35 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"And the error in the PINN reconstruction. Not surprisingly grows over time. \n",
"\n",
"The shock is not \"undone\" well towards $t=0$.\n",
"\n",
"(Old: BC at 0, the last state at $t=1$ in purple doesnt capture the sharp shock very well.)"
"Not surprisingly, the errors grow over time. Especially the steepening of the solution near the shock at $x=0$ is not \"captured\" well. It's a bit difficult to see in these two graphs, though, let's quantify the error and show the actual difference:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x13ad82d10>]"
"name": "stdout",
"output_type": "stream",
"text": [
"[(2048,), (2048,)]\n",
"Mean absolute error across 16 steps: 0.01397\n"
]
},
"execution_count": 12,
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f31f07df610>]"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -793,6 +630,9 @@
}
],
"source": [
"error = np.sum( np.abs( np.asarray(vels[0:16]).flatten() - np.asarray(velP[bc_tx:bc_tx+steps]).flatten() )) / (steps*n)\n",
"print(\"Mean absolute error for re-simulation across {} steps: {:7.5f}\".format(steps,error))\n",
"\n",
"fig = plt.figure().gca()\n",
"fig.plot(pltx, (vels[0 ].flatten()-velP[bc_tx ].flatten()), lw=2, color='blue')\n",
"#fig.plot(pltx, (vels[steps//4].flatten()-velP[bc_tx+steps//4].flatten()), lw=2, color='green')\n",
@@ -804,17 +644,21 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"All steps over time, with a color map... (note x axis does not show actual simulation time)"
"This should show a mean absolute error of ca. $1.4 \\cdot 10^{-2}$, which is significant for the value range of the simulation.\n",
"\n",
"And for comparison with the forward simulation and following cases, here are also all steps over time with a color map... (note x axis does not show actual simulation time)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAC8CAYAAACDmO49AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAk4klEQVR4nO2da4xk13Wdv3VuVfc8OCRFip5MSDqkAyaIIsAxQ8gCZCiCmYfEKB4HEAjZgULJDAYBJFtOYlik9cP6YQVU4shhYEPGxGRMBoxGtK2ABKLYkgULgoGQlijTehG0qZc1xJCUEdGPiOyuqrvz49ZIDaq7eqZ6VdXuvmcNBt1dVX36nHvuWXvvtfc5VxFBRUVFRcXBQll1ByoqKioq/KjkXlFRUXEAUcm9oqKi4gCikntFRUXFAUQl94qKiooDiMGqOwBw6eBIfM/6Zbb2ZGupoqKiIi+e+tYzfxYRV233Xgpyv2r9cu76O7fb2hPe8s6S2FrU0Gt+SLUMuGJ/4+Sn/v3XdnovBblHwLh1MqivraJgkpgDMhse8BtaKyL5xTMi+31S4UcKcgfSEujETADuRea+bn4OyMsqpUeeu/s+qcYiP1KQewAjI4lmlirqIpsf7ijAbbidyD6vWZ0xyOxOLBd5yN0oy2RfGE6UHh0fIfVnYkt/prVX63WZ2JXcJd0LvBF4LiJeOX3tPwL/DNgEvgS8LSKen753J3A7MAF+KiJ+Z7e/EeH1BDJ7FXZZJrGfYu9Zj6Keibm9kjj3YZcWE8/rMnEhnvuvA78M3L/ltY8Bd0bEWNL7gDuBd0l6BfBm4O8Cfx34XUl/KyJm3qtuWcYJt8TTtxu5L6SS2VAAtImdADcyy7LLxK7kHhGflHTdS1776JYfHwHeNP3+JHAmIjaAr0h6CngV8H9m/g1g1F5Er2fA7xknv1mMBLUIQ+GMLDLPg+n2XRgyG1k3+jPS2XBo7j8BfGj6/dV0ZH8eZ6evfRcknQJOAVw+uMyW3PInLMMeIruwCNkjsweaetEmj8j6YmQhv6FdFvZE7pLeDYyBBy72dyPiNHAa4OpDV8emcUa860KpCc/dt8zVgZlLF/uUX/DnA8xIbmiXhbnJXdJb6RKtN8d3nvjxNHDtlo9dM31tJgJwkbt7HorwSh++poDcnrZ/rHkHazey3uYWEtG64DYWmQ3tMtfrXOQu6fXAzwL/ICK+teWth4H/Ien9dAnVG4A/2K29CJ/mDt7JdU9Gdk87M0llToBOInd9tXu8kXi0eXsGsURx8UJKIT8IvA54uaSzwM/TVcesAx+b1h4/EhH/OiK+IOlB4It0cs3bd6uUAW9CFbw3cp/Isyg3gboNRZ+iHjelOO+TPkWzyzSKF1It82PbvHzPjM+/F3jvxXQiM7m79UCnslCUm/Aye7N9MmSQOxndp7G2S+xcjh2qEWyYVprkJWTJq/VmjgQyGzKoEdlekF1edEHUIz7OIwW5t4GN3AEGxtnoWvL1rTEzaDVke2jP2FZmQwa55yIzd2aP8GYhBbl31TLG7Lt5MvImBbWA5LHRkLkJyk6g/TBki4jIMhNelSo75CD3gE3T3VIEE+PVcxNUYySUIm96ppg9d7e+aPUW1cmBzvaccM7sBHPi3dgWdOvfCf9ceNEvcicYhSmjGl4CnZg3MbmP0HHKPApZ65fdN7FTbsPsQbm9z8YcCjgJr/NmjU6AraUOfTM+OyEFubfAi61nK0NBXu8YWSfD3TdrSZo5Ge3OL7js/3lkJvfWzADuqGdiZLzMifwiWTdZmZXPmUhC7sGLMbK0VRBN+G6XRoVidLed5O5uz23IBuYwJbOG3+VmjBGjOYLyV8u4ixZ88Boy8/OYra3NRgpyD4INjOROY2kLYBDFumgHRsMDnfFxQcDA2N5EQTFeu7FxoRWz3CbJevKi3fA4n3Rm9tzdEZQ1E2WW75Z5snkScm/Z0Ialrc5z9w1rQoOM9jaMhgegtYbHYuKslglZPbzGmmQMc0TmPSOlMVqeSXiP/O1KZm3NeSOe8J5744563PmKWUhB7i3Bhl6wtFWiMNS6pS2ANlqKldx9wrEoDIyLtiCrh9f57c7qG++icEYpLd4opTWWGhVk9RhlzvW4k8fO1txjLfI6ZLOQgtyDlhEezx1BayTQAQNk9LbbGNraAgh87YliJaggbCtNiDArllYSMHtkzqhC8kYpMstt9goyq2ccVolsmUcjpCH3Df7K0lanfPrIfaIBxUjuE0bWSGBiFAOaaMx980paE2NbBTE2lt8UZJZ5jIbMXB7cjdO52c3L7m3i3cLLfMh7GnIfh8lzB0K+RdswtBKUUzICGBoJaqKSOkqZGG9Xd+K9IK8sYw7dW7NhdML9fFd3e5mjnllIQu7BOF5cdTe2RdAioxcVtFZj4bxPij15PLEaC2u+IhaQrzBeO2ffwJ94txqyxIaxSGYNH2vRwiykIHeiZdJ6PHepYYzPUIQmKIwVLolPSSo0NM5bQtAd629CGKMeTazGoqvQ8klkYTa0TgTejT1NFG97TmcsumS5C8vy2iEJuXee+6alLUWhkXGRyeu522Gtgii0xgStM7ENeKOUKDgffd66w+0At7FwwZ14t8PoGE/wErLMUcosXMiTmO6le1bqcxHxyulrVwAfAq4DvgrcGhHfVJctuBu4BfgW8NaI+MxufyMIn+dOIYozUdZSjBuP3MbCSVCFIa3R055oZE1GW2UZFQZOQ2Y+G6HR0JrcdvavTP+50Jr3frglLScZu6OUWbgQz/3XgV8G7t/y2h3AxyPiLkl3TH9+F/AGuuem3gD8IPCB6dfZiKBtfaTiJIHQhFbOxFtr8ywKxZo8lkY08hFeiaGV3FtjRFZorPfJWN4qKGfUU6LQOufV7LmPw2ss3BsFM+dSZv+tXRARn5R03UtePkn3XFWA+4BP0JH7SeD+6M5SfUTS5ZJORMS5mX+DoDWdLQNYj5mzyzLGplq8uppoCKeHp5ZivHbFWH1TaKzGomG4NI/sYjEx7/0oZjJuNLSW9PqjFB8h2wsqZmBebji+hbCfAY5Pv78a+PqWz52dvvZd5C7pFHCq+6mxeu7WYpRorOTuntix1e4MrIsWfGe6S8WquYcxgoKpE5A0AeqMngBCjbW0MvOB6UFLa5Rl3cZiFvbs+EVEaI6j0yLiNHAaoGgYbXjIXSpWQ1EKRPi8CpkPDvNGKRPCGL5bEZiP1BsRTpnHLEE5CWrCyJoot5fMug2jOaHqlCqDNpXmvh2ePS+3SDoBPDd9/Wng2i2fu2b62kwEQZjIPaZVuDa4nyRghGi8UQrFKstEMS9a41xI/ZKgMm/sc8Oah6LYZR7n3o9ZmJfcHwZuA+6afn1oy+vvkHSGLpH657vp7edh89wpOBlv4tbIrMZibK2WEQ2l+FT8aL3XzlkF1ZXMGsfqDt+NBFVUrHs1FrGxzwn34XxOo90wxLr3YwYupBTyg3TJ05dLOgv8PB2pPyjpduBrwK3Tj3+ErgzyKbpSyLddWDcCF+tFtGBctArvzeK8jd0SlNQSpidiARQNvcloq+fuPYOoWI9G8Oc9ilNaMG/sc5e4utGY936453cnXEi1zI/t8NbN23w2gLfP0xFniOy0jEEx3zBG2SNaitGQufM8QeudV7MEpaR9c59+6UYnfTotrbGp8Bptt7HoDjbMLcuY4fPcwftAW8n9gFyjp02xbjqSO1/hhtlzd0cVrvacUtsiIBovuZvhTIC6jUXRgInpqXO7IQm5+ypShLylUAFeMcWr8zrlgJg+cqIP6Dx3owdV8JdWJj32QkuUFlaNYpbvlnmgexJyN2ruYHW1RQvWg4icGnmxJaLPt+d8KI4zqnBDUZAxaWl3ZI3GQvJWQUnFv2vb1tY+yFf0S5YBn0kTVonHrc1ao4oWb/F3sXrubpmnSlDzwS1BZc5XdCvCayysx5kwgL7JMj4E3nN1vVKFdVGAXYKyPlLMWGnkjirMDxOiZWw2ZCOfhh8TirHiA8zli2ZD5lxh9uTxEnEAyR3cj8h1RwJOuKMKdzLaBXeJK/aoZ2AvrUxbaWQ+ksO56SjCejBCt/ytO169B8zNwgEldyfcGRD3hg1zVGFPRjvh1PC9Z9UQY2tuxp1Lce+HyLuxD7Mh8ya2RbO0ooVK7vse5qjCeY6OPRlta8pf4iqm0YCrPWMVVHjJuNPcc56UCvjzFWYHallVUJXcl47ER+DhlSqC6FUy2tueudLIvNktq+YOpJag3MZiFhKRuzVGNraVHXnzC131jbEsNXkyOut+iA5uScsrQTkJNLMEVRiad+PvjCTkLrxej/vi9cVY+CuNnPCWacoso0Dme9gtQbkrl1yEJ3suxdgWXRXUspCE3KeLzQRvwqIl9d1ihzsSyAlnRAH5k9HuElfveTC+tsL8fDL3k5OcO8p3Qxpyd4Z5zvDdn9nOXDOb3fDkFWcz5xdgEclo80ZBZ5LRWGmEin0/xLKQhNyFTAmfMHtQAmv4nttY5PW0F4OaX5gH7mS021hk3g9hf5jQDKQhd9cF7DwA76YIbwiaV4fukDmyyIzc8+qNKtxrzNbUFHn3Q7ifDzELScjde25y+npoZ3PWqML9oNJqKLKgL1FFB+89nHn9z8KeyF3SvwH+FZ0q9Tm6Jy+dAM4AVwKPAW+JiM1dWrLJMiwgseU1PO76ZWNTNapIhOT5Besic2928147ezJ6SZibUSVdDfwU8IqIeEHSg8Cb6R6z90sRcUbSrwK3Ax+Y2Rb4dChzyChacxjlDJbcXoX52lVjkQiJ8wsLKUv1Iet5S7thr0wzAA5LGgFHgHPADwM/Pn3/PuA97ELuSNbHxXmP6GzJayy8ZJw9BM1vLJzIbHj8O5mdyCwb7QvPPSKelvSLwJ8CLwAfpZNhno/vaA9ngau3+31Jp4BT0B2mU4qP3J071LoHO3nPJPdmy83JI7uxyOuR+fMVTmSPUryRgBN9iipmYS+yzMuAk8D1wPPLine truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -832,6 +676,72 @@
"\n",
"show_state(sn, run_session=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"More important, though, the mean absolute error (MAE) for the whole solution, i.e., from start to end:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"error_full = np.sum( np.abs( np.asarray(vels[0:16]).flatten() - np.asarray(velP[bc_tx:bc_tx+steps]).flatten() )) / (steps*n)\n",
"print(\"Overall MAE: {:7.5f}\".format(error_full))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"... store solution , just for comparison ..."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Vels array shape: (128, 33)\n"
]
}
],
"source": [
"vels = session.run(grid_u) # special for showing NN results, run through TF \n",
"vels = np.reshape( vels, [vels.shape[1],vels.shape[2]] )\n",
"\n",
"# save for comparison with other methods\n",
"np.savez_compressed(\"./temp/burgers-pinn-solution.npz\",vels) ; print(\"Vels array shape: \"+format(vels.shape))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercises\n",
"\n",
"This is just a starting point, the parameters were chosen to compare to run relatively quickly by default. The solution can be improved however. E.g., try to:\n",
"\n",
"* Adjust parameters of the training to further decrease the error without making the solution diverge\n",
"* Adapt the NN architecture for further improvements (keep track of the weight count, though!)\n",
"* Activate a different optimizer, and observe the changing behavior (this typically requires adjusting the learning rate). Note that the more complex optimizers don't necessarily do better in this relatively simple example.\n",
"* Or modify the setup to make the test case more interesting: e.g., move the boundary conditions further back in time, to let the reconstruction go \"further backward\" in time."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
@@ -850,7 +760,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
"version": "3.8.5"
}
},
"nbformat": 4,