diff --git a/diffphys-code-ns.ipynb b/diffphys-code-ns.ipynb index 1c9735b..f45c37d 100644 --- a/diffphys-code-ns.ipynb +++ b/diffphys-code-ns.ipynb @@ -8,9 +8,8 @@ "source": [ "# Differentiable Fluid Simulations\n", "\n", - "
\n", - "\n", - "**TODO , NEXT finish opt case, diverges? see colab example , finish texts before end.**\n", + "
**TODO , NEXT finish opt case, diverges? see colab example , finish texts before end.**\n", + "
**TODO , fix bottom row, crop in display with [1:,0:]**\n", "\n", "

\n", "\n", @@ -70,22 +69,11 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "id": "da1uZcDXdVcF" }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/thuerey/miniconda3/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", - "/Users/thuerey/miniconda3/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" - ] - } - ], + "outputs": [], "source": [ "#!pip install --upgrade --quiet phiflow\n", "#!pip install --upgrade --quiet git+https://github.com/tum-pbs/PhiFlow@develop\n", @@ -154,7 +142,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -226,34 +214,18 @@ } ], "source": [ - "#smoke = initial_smoke = DOMAIN.grid(math.zeros(inflow_loc=4))\n", - "#velocity = initial_velocity = DOMAIN.staggered_grid(0) * math.ones(inflow_loc=4)\n", "initial_smoke = DOMAIN.grid(math.zeros(inflow_loc=4))\n", "initial_velocity = DOMAIN.staggered_grid(0) * math.ones(inflow_loc=4)\n", "\n", "print(\"Velocity tensor shape: \"+format(initial_velocity.shape))\n", "\n", - "# old?\n", - "# with math.record_gradients(initial_velocity.values):\n", - "# for _ in range(5):\n", - "# smoke,velocity = step(smoke,velocity)\n", - "\n", - "# loss = field.l2_loss(smoke - field.stop_gradient(smoke.inflow_loc[-1]))\n", - "# grad = math.gradients(loss, initial_velocity.values)\n", - "\n", "def simulate(smoke: CenteredGrid, velocity: StaggeredGrid):\n", " for _ in range(20):\n", " smoke,velocity = step(smoke,velocity)\n", " \n", " loss = field.l2_loss(diffuse.explicit(smoke - field.stop_gradient(smoke.inflow_loc[-1]), 1, 1, 10))\n", " \n", - " return loss, smoke, velocity\n", - "# smoke = advect.mac_cormack(smoke, velocity, dt=1) + INFLOW\n", - "# buoyancy_force = smoke * (0, 0.5) >> velocity\n", - "# velocity = advect.semi_lagrangian(velocity, velocity, dt=1) + buoyancy_force\n", - "# velocity, _, _, _ = fluid.make_incompressible(velocity, DOMAIN)\n", - "\n", - "\n" + " return loss, smoke, velocity\n" ] }, { @@ -262,7 +234,7 @@ "source": [ "Then, we use `field.functional_gradient()` to obtain the gradient with respect to the initial velocity. Since the velocity is the second argument of the `simulate()` function, we pass `wrt=[1]`. (Note that there's also a `field.spatal_gradient` with computes derivatives of tensors along spatial dimensions like `x,y`.)\n", "\n", - "`functional_gradient` returns a gradient function, which we can evaluate with the initial states for smoke and velocity." + "`functional_gradient` returns a gradient function, which we can evaluate with the initial states for smoke and velocity. \n" ] }, { @@ -274,45 +246,35 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[ 0.0000000e+00 0.0000000e+00 0.0000000e+00 ... 0.0000000e+00\n", - " 0.0000000e+00 0.0000000e+00]\n", - " [-1.2200639e-02 -1.9027891e-02 -2.3449246e-02 ... 0.0000000e+00\n", - " 0.0000000e+00 0.0000000e+00]\n", - " [-6.2169664e-02 -6.8051241e-02 -6.4626858e-02 ... -3.4051553e-43\n", - " 0.0000000e+00 0.0000000e+00]\n", - " ...\n", - " [ 2.0202854e-15 5.0669552e-14 3.2829501e-13 ... 0.0000000e+00\n", - " 0.0000000e+00 0.0000000e+00]\n", - " [ 1.0069069e-18 4.1775261e-17 4.3741229e-16 ... 0.0000000e+00\n", - " 0.0000000e+00 0.0000000e+00]\n", - " [ 1.9205262e-24 7.9680139e-23 8.3429929e-22 ... 0.0000000e+00\n", - " 0.0000000e+00 0.0000000e+00]]\n" + "Gradient info StaggeredGrid[(inflow_loc=4, x=32, y=40, vector=2), size=(32, 40) along vector, extrapolation=0]\n" ] + }, + { + "data": { + "text/plain": [ + "(x=33, y=40) float32 -1.1465684 < ... < 1.2370852" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ + "sim_grad = field.functional_gradient(simulate, wrt=[1], get_output=False)\n", + "[velocity_grad] = sim_grad(initial_smoke, initial_velocity)\n", "\n", - "for i in range(1):\n", - " sim_grad = field.functional_gradient(simulate, wrt=[1], get_output=True)\n", - " #[vals,velocity_grad]\n", - " [loss,s,v,velocity_grad] = sim_grad(initial_smoke, initial_velocity)\n", - "\n", - " print(format( velocity_grad.inflow_loc[0].vector[0].values.numpy('x,y') ))\n", - "\n", - "#v2 = initial_velocity + velocity_grad\n", - "#[loss2,s,v,velocity_grad] = sim_grad(initial_smoke, initial_velocity+velocity_grad)\n", - "\n" + "print(\"Gradient info \" + format(velocity_grad))\n", + "velocity_grad.inflow_loc[0].vector[0].values # one example, location 0, x component\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Computing the actual gradient is not very difficult. We simply call `math.gradients` for the initial velocity w.r.t. our loss function to obtain the `grad` tensor.\n", + "The last two lines just print some information about the resulting gradient field. Naturally, it has the same shape as the velocity itself: it's a staggered grid with four inflow locations. The last line shows how to access the x-components of one of the gradients.\n", "\n", - "Let's direcly take a look at it. The following images show the `x` components (via `vector[0].values`) of the staggered grid gradient in `grad`.\n", - "\n", - "**TODO , fix bottom row, crop in display with [1:,0:]**" + "We can directly use this to take a look at the content of the computed gradient. The following images show the `x` components (via `vector[0].values.numpy()`) of the staggered grid gradient in `velocity_grad`.\n" ] }, { @@ -324,12 +286,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "CenteredGrid[(x=33, y=40), size=(33.0, 40.0) along vector, extrapolation=boundary]\n" + "CenteredGrid[(x=33, y=40), size=(33.0, 40.0) along vector, extrapolation=0]\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -366,7 +328,9 @@ "\n", "Note that this is a fairly tough task: we're producing different dynamics by changing the boundary conditions (the marker inflow position), and an optimizer should now find a single initial velocity state for each of the three simulations on the right, that gives the same state as simulation `0` above at $t=20$. Thus, after 20 update steps 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 and interesting here -- the inflow is _not_ a degree of freedom. The optimizer can only change the velocity $\\mathbf{u}$ at time $t=0$.\n", "\n", - "The following cell re-evalutes the gradient function, and iterates a few times to optimize the initial velocities with a learning rate (step size) `LR`." + "The following cell re-evalutes the gradient function, and iterates a few times to optimize the initial velocities with a learning rate (step size) `LR`.\n", + "\n", + "`field.functional_gradient` has a parameter `get_output` that determines whether the original results of the function (`simulate` here) are returned, or only the gradient. As it's interesting to track how the loss evolves over the course of the iterations, let's redefine the gradient function with `get_output=True`.\n" ] }, { @@ -378,22 +342,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "22.651642\n" - ] - }, - { - "ename": "RuntimeError", - "evalue": "you can only change requires_grad flags of leaf variables.", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0msim_grad\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfield\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunctional_gradient\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msimulate\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwrt\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mget_output\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0;34m[\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvelocity_grad\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msim_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minitial_smoke\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minitial_velocity\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 23\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/Dropbox/mbaDevelSelected/phiflow-v2/phi/field/_field_math.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*fields)\u001b[0m\n\u001b[1;32m 244\u001b[0m \u001b[0mINPUT_FIELDS\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfields\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 245\u001b[0m \u001b[0mtensors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mfield\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mfield\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mfields\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 246\u001b[0;31m \u001b[0mresult_tensors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtensor_gradient\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mtensors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 247\u001b[0m \u001b[0mproto_fields\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 248\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mget_output\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/Dropbox/mbaDevelSelected/phiflow-v2/phi/math/_functions.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*values)\u001b[0m\n\u001b[1;32m 1232\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1233\u001b[0m \u001b[0mARG_INDICES\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marg_index\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1234\u001b[0;31m \u001b[0mresults_native\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrad_native\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnatives\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1235\u001b[0m \u001b[0mproto_tensors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1236\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mget_output\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/Dropbox/mbaDevelSelected/phiflow-v2/phi/math/_functions.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1216\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgradf\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1217\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgradf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbackend\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunctional_gradient\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnative_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mshifted_wrt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mget_output\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mget_output\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1218\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgradf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1219\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1220\u001b[0m \u001b[0mgrad_native\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mGradientFunction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/Dropbox/mbaDevelSelected/phiflow-v2/phi/torch/_torch_backend.py\u001b[0m in \u001b[0;36meval_grad\u001b[0;34m(*args)\u001b[0m\n\u001b[1;32m 548\u001b[0m \u001b[0mwrt_args\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0marg\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mwrt\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 549\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mwrt_args\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 550\u001b[0;31m \u001b[0marg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrequires_grad\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 551\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 552\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maux\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mtuple\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mRuntimeError\u001b[0m: you can only change requires_grad flags of leaf variables." + "Optimization step 0, loss: 22.651701\n", + "Optimization step 1, loss: 22.533409\n", + "Optimization step 2, loss: 22.277126\n", + "Optimization step 3, loss: 22.404198\n", + "Optimization step 4, loss: 22.268917\n", + "Optimization step 5, loss: 22.391558\n", + "Optimization step 6, loss: 22.448061\n", + "Optimization step 7, loss: 22.387615\n", + "Optimization step 8, loss: 24.646418\n", + "Optimization step 9, loss: 26.083023\n" ] } ], @@ -401,26 +359,16 @@ "#initial_velocity = DOMAIN.staggered_grid(0) * math.ones(inflow_loc=4)\n", "LR = 1e-02\n", "\n", - "for _ in range(10):\n", - "# velocity = initial_velocity\n", - "# smoke = DOMAIN.grid(math.zeros(inflow_loc=4)) + INFLOW\n", + "sim_grad_wloss = field.functional_gradient(simulate, wrt=[1], get_output=True)\n", + "\n", + "for optim_step in range(10):\n", " initial_smoke = DOMAIN.grid(math.zeros(inflow_loc=4))\n", - " #initial_velocity = DOMAIN.staggered_grid(0) * math.ones(inflow_loc=4)\n", - "\n", - "# with math.record_gradients(initial_velocity.values):\n", - "\n", - "# buoyancy_force = smoke * (0, 1) >> velocity\n", - "# velocity, _, _, _ = fluid.make_incompressible(velocity + buoyancy_force, DOMAIN)\n", - "# for _ in range(20):\n", - "# smoke,velocity = step(smoke,velocity)\n", - "\n", - "# loss = field.l2_loss(smoke - field.stop_gradient(smoke.inflow_loc[0]))\n", - "# print(format(loss))\n", - "# grad = math.gradients(loss, initial_velocity.values)\n", - "\n", + " \n", + " # sim_grad__wloss returns: [loss,s,v,velocity _grad] \n", " sim_grad = field.functional_gradient(simulate, wrt=[1], get_output=True)\n", - " [loss,s,v, velocity_grad] = sim_grad(initial_smoke, initial_velocity)\n", - " print(loss)\n", + " [loss,s,v, velocity_grad] = sim_grad_wloss(initial_smoke, initial_velocity)\n", + "\n", + " print('Optimization step %d, loss: %f' % (optim_step,loss))\n", "\n", " initial_velocity = initial_velocity - LR * velocity_grad\n" ] @@ -431,18 +379,31 @@ "source": [ "The loss should have gone down significantly, from above 60 to below 40, and now we can also visualize the initial velocities that were obtained in the optimization.\n", "\n", - "**TODO, test ini-vel images below**" + "The following images show the resulting three initial velocities (we're skipping the fourth set with `inflow_loc[0]` because it only contains zeros).\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "fig, axes = pylab.subplots(1, 4, figsize=(16, 5))\n", - "for i in range(INFLOW.shape.inflow_loc):\n", - " im = axes[i].imshow(initial_velocity.inflow_loc[i].vector[0].numpy('y,x'), origin='lower', cmap='bwr')\n", + "fig, axes = pylab.subplots(1, 3, figsize=(12, 5))\n", + "for i in range(INFLOW.shape.inflow_loc-1):\n", + " im = axes[i].imshow(initial_velocity.inflow_loc[i].vector[0].values.numpy('y,x'), origin='lower', cmap='bwr')\n", " pylab.colorbar(im, ax=axes[i])\n", " axes[i].set_title(f\"Initial velocity x for {math.to_int(INFLOW_LOCATION).inflow_loc[i].vector.unstack_spatial('x,y')}\")\n", "pylab.tight_layout()" @@ -450,13 +411,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "fig, axes = pylab.subplots(1, 4, figsize=(16, 5))\n", - "for i in range(INFLOW.shape.inflow_loc):\n", - " im = axes[i].imshow(initial_velocity.inflow_loc[i].vector[1].numpy('y,x'), origin='lower', cmap='bwr')\n", + "fig, axes = pylab.subplots(1, 3, figsize=(12, 5))\n", + "for i in range(INFLOW.shape.inflow_loc-1):\n", + " im = axes[i].imshow(initial_velocity.inflow_loc[i].vector[1].values.numpy('y,x'), origin='lower', cmap='bwr')\n", " pylab.colorbar(im, ax=axes[i])\n", " axes[i].set_title(f\"Initial velocity y for {math.to_int(INFLOW_LOCATION).inflow_loc[i].vector.unstack_spatial('x,y')}\")\n", "pylab.tight_layout()" @@ -473,15 +447,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# re-run sim\n", - "smoke = initial_smoke # DOMAIN.grid(math.zeros(inflow_loc=4)) + INFLOW\n", + "smoke = initial_smoke \n", "velocity = initial_velocity\n", - "#buoyancy_force = smoke * (0, 1) >> velocity\n", - "#velocity, _, _, _ = fluid.make_incompressible(velocity + buoyancy_force, DOMAIN)\n", "\n", "for _ in range(20):\n", " smoke,velocity = step(smoke,velocity)\n",