From 2904b88eb2275c6a6af37e09a31142e6e3d844ca Mon Sep 17 00:00:00 2001 From: Stephan Kramer Date: Thu, 21 Sep 2023 12:03:38 +1000 Subject: [PATCH] Try to make output consistent for PDE constrained notebooks --- 08-GD-2D-pde-constrained1.ipynb | 454 ++++++++++++++++++++++++++++++-- 09-GD-2D-pde-constrained2.ipynb | 49 ++-- 2 files changed, 462 insertions(+), 41 deletions(-) diff --git a/08-GD-2D-pde-constrained1.ipynb b/08-GD-2D-pde-constrained1.ipynb index 5dfa6aa..b9a986c 100644 --- a/08-GD-2D-pde-constrained1.ipynb +++ b/08-GD-2D-pde-constrained1.ipynb @@ -300,7 +300,7 @@ " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", - "Mismatch functional J=0.6916401392014154\n" + "Mismatch functional J=0.69164013920142\n" ] } ], @@ -322,7 +322,7 @@ "# Note that mathematically scaling the functional should not change the optimal solution\n", "scaling = 1./assemble(T_target**2*dx)\n", "J = assemble(scaling * (T-T_target)**2*dx)\n", - "print(F\"Mismatch functional J={J}\")" + "print(f\"Mismatch functional J={J:.14f}\")" ] }, { @@ -394,12 +394,12 @@ " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", - "0.6916401392014154\n" + "0.69164013920142\n" ] } ], "source": [ - "print(Jhat(T_target))" + "print(f\"{Jhat(T_target):.14f}\")" ] }, { @@ -493,16 +493,6 @@ "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n" ] }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - }, { "data": { "image/png": "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y2+88UZ89tlnMBqNFm8FbI+9l9GVOnbsiEGDBmHDhg249tprcc0112DIkCEYMmRIi3Xtud5cwZ23UWv69euH0aNH49FHH0VNTQ2ysrLQtWtXPP300y4d07hx4/Dee+8hICAAgwYNQkFBAb744gt07drVYr2oqCjo9XosW7YMZWVlMBqN5s8YePDBB/HII4/gnnvuwW233YYDBw5g69atCAoKsumyuuLvgIhvhXOzpre7NP0YDAYRFhYmbrvtNrFixQpRXl5u9XTHjx8XU6dOFWFhYcLb21t0795djBs3Tnz00Uctztva2+yufitcc5MnTxYAREJCgtVtb968WQwbNkz4+PiIyMhIsWzZMrFmzZoW51dSUiLGjh0r/Pz8BADzW5iufitcc/PmzRMARL9+/VrdZzt27BCJiYkiICBA+Pj4iL59+4pp06aJ//znP62eprmQkBABQJhMJvOy3bt3CwAiPj6+xfpjxowRgwcPtnperV3G1qCVt8J9+OGHFus1vcVr7dq15mVXvxVOCCH27NkjoqOjhcFgsHiLlbW3wtl6vbnirXBCOHcbbRr/uXPnLJYnJSWJTp06mX9v2k8vvviiePnll0VERIQwGo0iPj5eHDhwoMVYnf27uXDhgkhOThZBQUGic+fOIjExURw+fLjF29iEEGL16tWiT58+Qq/XW9zeGxoaxJw5c0RQUJDw9fUViYmJ4tixY62+Fa61t8k6+3dA2sbPlici2SouLkbv3r3x4osv4sknn5R6OESKwefciYiIVIZxJyIiUhnGnYiISGXsjvvOnTsxfvx4hIeHQ6fTYdOmTe2eJj8/HyNGjIDRaES/fv2wbt06B4ZKRFrT9GFEfL6dyD52x72qqgrDhw9Hdna2TeufPHkSY8eOxc0334yioiI88cQTePDBB7F161a7B0tERETtc+rV8jqdDh9//DEmTJjQ6jpz5szBli1bLL57+f7778fFixeRm5vr6KaJiIioFW7/EJuCgoIWH6GYmJiIJ554otXT1NTUoKamxvx7Y2Mjzp8/j65du0r6caBERGQ/IQQqKioQHh7e4nsdXOnSpUuora11yXkZDAaLDxdTGrfHvaSkBKGhoRbLQkNDUV5ejt9++83qlzdkZGTY9fnfREQkf2fOnEGPHj3cct6XLl1CDz9//Frf8iN7HREWFoaTJ08qNvCy/PjZtLQ0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", @@ -530,7 +520,7 @@ " c = tricontourf(gradJ, axes=ax, levels=levels, norm=colors.CenteredNorm(), cmap=cmap)\n", "ax.set_title('Derivative wrt Initial Temperature')\n", "ax.set_aspect('equal')\n", - "fig.colorbar(c)" + "fig.colorbar(c);" ] }, { @@ -549,10 +539,425 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "9dec8e63-9b11-4bad-a4f7-7be1497a7f46", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/skramer/firedrake/src/firedrake/firedrake/adjoint_utils/function.py:112: UserWarning: Could not find overloaded class of type ''.\n", + " other = create_overloaded_object(other)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + " Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n", + "Linear ImplicitMidpoint-EnergyEquation_stage0_ solve converged due to CONVERGED_ITS iterations 1\n" + ] + } + ], "source": [ "# the L-BFGS-B allows for \"box constraints\", min and max values for the control\n", "# which we can provide as functions in the same functionspace as the control\n", @@ -576,10 +981,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "id": "35689694-ac2d-472d-b440-b08c4c0af691", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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SKZTp07huuuuc/p62DeIvIureoepmpoatIsLxLmz9bKWCwoKwqVLl4ymZWdnIycnp8k12dPfLPHIT2KYNWsWMjIyDN9XVlaiXbt26Bc6Er4qftwHkatdEzr8T8X7aNmypbtLsYp9g8jzuLt36HQ6nDtbjz172yAoSNpI/KVLAn16n8OpU6cQHBxsmO6I0TdHcnqAi4yMNPuA8fLycgQHB1tNmdaGKX1VGvj6sBETudz/Hby66lQk+waRl3Bx77AmKEiFli2lnsL9s+jg4GCjAOco9vQ3S5x+Qjo5ORlFRUVG07788kvDhysTEZli3yAib+Wo/iY7wF26dAklJSUoKSkB8OftsCUlJTh58iSAP09jjBkzxjD/pEmTcOzYMTzzzDM4fPgw3njjDXzwwQeYMWOG3FUTkUKxbxCRt3JXf5Md4L777jvcdNNNuOmmmwAAGRkZuOmmm5CVlQUA+O233wxFA0D79u1RWFiIL7/8Ej169MDChQvx9ttvIy0tTe6qiUih2DeIyFu5q7816TlwrlJVVYWQkBDcFZbOa1mI3OBavQ5FF9agsrLSKdeEOAP7BpH7ubt36PvAwZ/bSr4G7uLFetzY9azH9zt+FioRERGRwjDAERERESkMAxwRERGRwjDAERERESkMAxwRERGRwjDAERERESkMAxwRERGRwjDAERERESkMAxwRERGRwjDAERERESkMAxwRERGRwjDAERERESkMAxwRERGRwjDAERERESkMAxwRERGRwvi6uwAiIiIiZ9pxJQH+ammR58qVawDOOrcgB+AIHBEREZHCMMARERERKQwDHBEREZHCMMARERERKQwDHBEREZHCMMARERERKQwDHBEREZHCMMARERERKQwDHBEREZHCMMARERERKQwDHBEREZHCMMARERERKQwDHBEREZHCMMARERERKQwDHBEREZHCMMARERERKQwDHBEREZHCMMARERERKYxdAW7ZsmWIj4+Hn58fkpKSsHfvXpvzL168GJ06dYK/vz9iY2MxY8YM1NTU2FUwESkT+wYReSt39DfZAW7Dhg3IyMhAdnY29u/fjx49eiAtLQ1nz561OP/69euRmZmJ7OxsHDp0CKtWrcKGDRvw3HPPyV01ESkU+wYReSt39TfZAW7RokWYMGECxo0bh65du2L58uUICAjAO++8Y3H+PXv2oG/fvnjk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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "fig, ax = plt.subplots(1,2)\n", "plot_temp(T_opt, 'Optimal Initial Condition', Tmax=1, ax=ax[0], colorbar=False)\n", diff --git a/09-GD-2D-pde-constrained2.ipynb b/09-GD-2D-pde-constrained2.ipynb index 367e2d7..9958572 100644 --- a/09-GD-2D-pde-constrained2.ipynb +++ b/09-GD-2D-pde-constrained2.ipynb @@ -286,7 +286,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.0638596121236412\n" + "0.06385961212364\n" ] } ], @@ -315,7 +315,7 @@ " # add final contribution weighted again by 0.5\n", " J = J + factor * assemble((T-T_target)**2*ds(left))\n", "\n", - "print(J)" + "print(f\"{J:.14f}\")" ] }, { @@ -343,18 +343,15 @@ "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "0.06385919930808436" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "0.06385919930808\n" + ] } ], "source": [ - "Jhat(Twrong)" + "print(f\"{Jhat(Twrong):.14f}\")" ] }, { @@ -385,18 +382,15 @@ "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "1.481456131569618e-05" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "0.00001481456132\n" + ] } ], "source": [ - "Jhat(T0)" + "print(f\"{Jhat(T0):.14f}\")" ] }, { @@ -477,10 +471,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "ecc77ca9-58a1-4647-8122-689f30504897", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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R+K2225Denq64v1/yJAhuHjxIv7xj380uq5jH6m/b1ZXV6OoqEjx/n/o0CG3/8C12P/VPnbV4O0zdSwz+rhs37492rdvjx07dmDHjh3OYeWbbroJR44cwbvvvouamhpJFzCQufh1gJs+fTrCwsLw4IMPul159+uvv2LixIkIDw933gKgLsdl3Q5Lly4FANx+++3OZREREbrc4dxxxlO/QC5ZskTzbUsVEREBAJI+j+DgYLffZenSpW63apDq8ccfR0REBMaNG4eSkhK3nx86dMh5ReigQYMAuH92ixcvBvDbvBW5Bg0ahC+++AK7d+92Ljt9+jTWrVvX6GvlfG6DBg1CTU0Nli1b5rL8hRdegM1mc9k3SV++7v/vvvuu2y0npJo4cSLatm2LRx99FD/99JPbz0+dOoVnnnkGwG/zIkNCQvDSSy+5tGHVqlUoKytTvP+fPHkS7733nnOZ4/ZNjQkPDwcgff8H1D121dC7d2+0adMGK1ascLmdyb///W/s37/fsHbVlZaWhk8//RS7d+92BrhevXqhWbNmmD9/PsLCwpw3fybr8NshVOC3eWxr1qzBfffdhx49erg9ieHMmTN4++23Pd6luqioCEOHDsXAgQNRUFCAv//977j33nvRs2dP5zrJycnYunUrFi9ejPj4eFxxxRXOCxDUFBUVhZtuugkLFizApUuX0K5dO3z88cc+XV6uNsfB/9e//hUDBgxAcHCwx0v7gd96zNauXYvo6Gh069YNBQUF2Lp1K1q1aqVo2x07dsRbb72FESNGoGvXri5PYti1axfeffdd5/2MevbsiYyMDLz22msoLS1Fv379sHv3bqxZswbDhg1D//79ZW//8ccfx9q1azFw4EBMmTIFEREReO2115CYmNjoEH7Hjh3RvHlzrFixAs2aNUNERARSUlLc5tkAv/W09O/fHzNnzsSRI0fQs2dPfPzxx/jnP/+JqVOnKrrbOqnDsf/PnDkTI0eORNOmTTFkyBBnsKtr8ODBePrppzF27FjccMMN+Pbbb7Fu3TrFPeotWrTA+++/j0GDBqFXr14uT2LYu3cv3n77befFU61bt0ZWVhbmzJmDgQMHYujQofjxxx/x8ssv47rrrlN089fx48dj2bJlGD16NPbs2YO2bdti7dq1znDWkLCwMHTr1g0bNmzAlVdeiZYtW6J79+4eJ9Nrceyq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n+9cVltbi/z8fKSmpnp93YIFCzB37lxs3rwZvXv3lt1IMg/HlaFyv/TAgm9erB1E5I+MrG2yh1AzMzORkZGB3r17o0+fPliyZAkqKiowduxYAMDo0aPRrl075ObmAgCee+45zJ49G2+99RaSkpJQXFwMAIiMjERkZKSiRpN0gXLzTYY382PtICJ/ZFRtkx3gRowYgdOnT2P27NkoLi5Gr169sHnzZucEvmPHjiEo6L8de6+88gqqq6tx1113ubyPp8mApB1/fkA1w5s1sHYQkT8yqrbJvg+cEXg/J/X4W4hjeNOH0fdyUoJ1g8h4RtcORx245ZoZaBIs8T5wNZX4dN9809c7RY/SIuvyl8DDO6YTEVEgY4ALQFYPPlZvPxERka8Y4AKUFUMQe92IiIh+wwAXwKwShhjciIiIXDHABTizByOzt4+IiMgIDHBkypDEXjciIiLvGOAIgHlCHIMbERFR43R9mD2ZW93gpPf94hjaiIiIpGOAI4/0egQXgxsREZF8DHDUIK165RjciIiIlGOAI8l86ZVjYCMiIlIPAxzJxjBGRERkLF6FSkRERGQxDHBEREREFsMAR0RERGQxDHBEREREFsOLGIiIiMiv2Y78DFtQiLR1a6s1bo062ANHREREZDEMcEREREQWwwBHREREZDEMcEREREQWwwBHREREZDEMcEREREQWwwBHREREZDEMcEREREQWwwBHREREZDEMcEREREQWwwBHREREZDEMcEREREQWwwBHREREZDEMcEREREQWwwBHREREZDEMcEREREQWwwBHREREZDGKAtzy5cuRlJSE0NBQpKSkYPfu3Q2u/+6776JLly4IDQ1Fjx49sGnTJkWNJSJrY+0gIn9kRG2THeA2bNiAzMxMZGdnY+/evejZsycGDBiAU6dOeVx/165duOeee/DAAw9g3759GDZsGIYNG4bvvvtOdmOJyLpYO4jIHxlV22xCCCHnBSkpKbjuuuuwbNkyAEBtbS0SEhIwefJkzJgxw239ESNGoKKiAv/617+cy66//nr06tULK1askLTN8vJyREdH4w8tMtAkKEROc4lIBZdrq5F/dg3KysoQFRWl6D30rh2sG0TGU6N2+EJJHZDbZiNyEQA0kbwmgOrqauzZswdZWVnOZUFBQUhPT0dBQYHH1xQUFCAzM9Nl2YABA/DBBx943U5VVRWq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pk0RHBzsXNa1a1cUFxejuroaISEhpmvzU089hVGjRmHcuHEAgB49eqCiogITJkzAzJkzERRkvvMsb8dgVFSULmfRrBv6YN3Qp24AgVE7jK4b/sbwv25ISAiSk5ORn5/vXFZbW4v8/HykpqZ6fE1qaqrL+gDwySefeF1fbUraDAALFizA3LlzsXnzZvTu3VuPpjrJbXOXLl3w7bfforCw0Pk1dOhQ9O/fH4WFhUhISDBdmwGgb9++OHjwoPM/DQD46aef0LZtW12KsJI2X7hwwa3QOv4jEUJo11gfWPEYtGKbAdYNrdsMGF83gMCoHUYfg37H2GsofrN+/Xpht9vF6tWrxQ8//CAmTJggmjdvLoqLi4UQQowaNUrMmDHDuf7nn38umjRpIp5//nmxf/9+kZ2dbcjtAOS0ef78+SIkJES899574ueff3Z+nTt3zrRtrs+Iq8nktvnYsWOiWbNm4pFHHhE//vij+Ne//iXatGkjnnnmGdO2OTs7WzRr1ky8/fbb4vDhw+Ljjz8WHTt2FMOHD9etzefOnRP79u0T+/btEwDE4sWLxb59+8TRo0eFEELMmDFDjBo1yrm+43YA06dPF/v37xfLly835DYirBvma3N9rBvatdvo2mHFuuFPTBHghBBi6dKlon379iIkJET06dNHfPHFF86f9evXT2RkZLis/84774grr7xShISEiKuuukrk5eXp3GJ5bU5MTBQA3L6ys7NN2+b6jCjEQshv865du0RKSoqw2+2iQ4cO4tlnnxWXL182bZsvXbokcnJyRMeOHUVoaKhISEgQDz/8sDh79qxu7f3ss8887p+OdmZkZIh+/fq5vaZXr14iJCREdOjQQbz55pu6tdeBdcN8ba6PdUMeK9UOq9YNf2ETwoT9rERERETkleFz4IiIiIhIHgY4IiIiIothgCMiIiKyGAY4IiIiIothgCMiIiKyGAY4IiIiIothgCMiIiKyGAY4IiIiIothgCMiIiKyGAY4IiIiIothgCMiIiKymP8Pw/LYbLoahcQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "fig, ax = plt.subplots(1,2)\n", "plot_temp(T_opt, 'Optimal Initial Condition', Tmax=1, ax=ax[0], colorbar=False)\n",