fixed burgers initialization

This commit is contained in:
NT committed 2022-02-05 16:52:05 +01:00
1 parent b74ada9eb2
commit 5ae6a742ec
3 files changed
+248 -197

No files matched your search

+29 -28
View File
@@ -28,13 +28,13 @@
"metadata": {},
"outputs": [],
"source": [
"!pip install --upgrade --quiet phiflow\n",
"#!pip install --upgrade --quiet git+https://github.com/tum-pbs/PhiFlow@develop \n",
"#!pip install --upgrade --quiet phiflow\n",
"from phi.tf.flow import *\n",
"\n",
"N = 128\n",
"DX = 2/N\n",
"STEPS = 32\n",
"DT = 1./STEPS\n",
"DT = 1/STEPS\n",
"NU = 0.01/(N*np.pi)\n",
"\n",
"# allocate velocity grid\n",
@@ -92,6 +92,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /Users/thuerey/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/ops/math_grad.py:297: setdiff1d (from tensorflow.python.ops.array_ops) is deprecated and will be removed after 2018-11-30.\n",
"Instructions for updating:\n",
"This op will be removed after the deprecation date. Please switch to tf.sets.difference().\n",
"Loss: 0.382915\n"
@@ -136,7 +137,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>"
]
@@ -193,10 +194,10 @@
"output_type": "stream",
"text": [
"Optimization step 0, loss: 0.382915\n",
"Optimization step 1, loss: 0.329677\n",
"Optimization step 2, loss: 0.284684\n",
"Optimization step 3, loss: 0.246604\n",
"Optimization step 4, loss: 0.214305\n"
"Optimization step 1, loss: 0.326882\n",
"Optimization step 2, loss: 0.281032\n",
"Optimization step 3, loss: 0.242804\n",
"Optimization step 4, loss: 0.210666\n"
]
}
],
@@ -237,7 +238,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>"
]
@@ -289,16 +290,16 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Optimization step 0, loss: 0.186823\n",
"Optimization step 5, loss: 0.098101\n",
"Optimization step 10, loss: 0.055802\n",
"Optimization step 15, loss: 0.033452\n",
"Optimization step 20, loss: 0.020761\n",
"Optimization step 25, loss: 0.013248\n",
"Optimization step 30, loss: 0.008643\n",
"Optimization step 35, loss: 0.005733\n",
"Optimization step 40, loss: 0.003848\n",
"Runtime 204.01s\n"
"Optimization step 0, loss: 0.183476\n",
"Optimization step 5, loss: 0.096224\n",
"Optimization step 10, loss: 0.054792\n",
"Optimization step 15, loss: 0.032819\n",
"Optimization step 20, loss: 0.020334\n",
"Optimization step 25, loss: 0.012852\n",
"Optimization step 30, loss: 0.008185\n",
"Optimization step 35, loss: 0.005186\n",
"Optimization step 40, loss: 0.003263\n",
"Runtime 56.25s\n"
]
}
],
@@ -330,7 +331,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Thinking back to the PINN version from {doc}`diffphys-code-burgers`, we have a much lower error here after only 50 steps (by ca. an order of magnitude), and the runtime is also lower (roughly by a factor of 2).\n",
"Thinking back to the PINN version from {doc}`diffphys-code-burgers`, we have a much lower error here after only 50 steps (by ca. an order of magnitude), and the runtime is also lower (roughly by a factor of 1.5 to 2). This behavior stems fro\n",
"\n",
"Let's plot again how well our solution at $t=0.5$ (blue) matches the constraints (green) now:"
]
@@ -342,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>"
]
@@ -376,7 +377,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>"
]
@@ -392,7 +393,7 @@
"pltx = np.linspace(-1,1,N)\n",
"\n",
"# ground truth state at time=0 , move down\n",
"INITIAL_GT = np.asarray( [-np.sin(np.pi * x) * 1. for x in np.linspace(-1,1,N)] ) # 1D array\n",
"INITIAL_GT = np.asarray( [-np.sin(np.pi * x) for x in np.linspace(-1+DX/2,1-DX/2,N)] ) # 1D numpy array\n",
"fig.plot(pltx, INITIAL_GT.flatten() , lw=2, color='forestgreen', label=\"Ground truth initial state\") # ground truth initial state of sim\n",
"fig.plot(pltx, velocity.values.numpy('x'), lw=2, color='mediumblue', label=\"Optimized initial state\") # manual\n",
"plt.xlabel('x'); plt.ylabel('u'); plt.legend(); plt.title(\"Initial State After 50 Optimization Steps\");\n"
@@ -414,7 +415,7 @@
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]
@@ -475,7 +476,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]
@@ -519,15 +520,15 @@
"name": "stdout",
"output_type": "stream",
"text": [
"MAE PINN: 0.22991 \n",
"MAE DP: 0.05811\n",
"MAE PINN: 0.23281 \n",
"MAE DP: 0.06382\n",
"\n",
"Error GT to PINN (top) , DiffPhys (bottom):\n"
]
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]
+130 -125
View File
@@ -2,6 +2,7 @@
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simple Forward Simulation of Burgers Equation with phiflow\n",
"\n",
@@ -22,45 +23,43 @@
" \\nu \\nabla\\cdot \\nabla u\n",
"$$ \n",
"\n"
],
"metadata": {}
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Importing and loading phiflow\n",
"\n",
"Let's get some preliminaries out of the way: first we'll import the phiflow library, more specifically the `numpy` operators for fluid flow simulations: `phi.flow` (differentiable versions for a DL framework _X_ are loaded via `phi.X.flow` instead).\n",
"\n",
"**Note:** Below, the first command with a \"!\" prefix will install the [phiflow python package from GitHub](https://github.com/tum-pbs/PhiFlow) via `pip` in your python environment once you uncomment it. We've assumed that phiflow isn't installed, but if you have already done so, just comment out the first line (the same will hold for all following notebooks)."
],
"metadata": {}
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using phiflow version: 2.0.3\n"
]
}
],
"source": [
"!pip install --upgrade --quiet phiflow\n",
"#!pip install --upgrade --quiet git+https://github.com/tum-pbs/PhiFlow@develop\n",
"\n",
"from phi.flow import *\n",
"\n",
"from phi import __version__\n",
"print(\"Using phiflow version: {}\".format(phi.__version__))"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Using phiflow version: 2.0.0rc2\n"
]
}
],
"metadata": {}
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next we can define and initialize the necessary constants (denoted by upper-case names):\n",
"our simulation domain will have `N=128` cells as discretization points for the 1D velocity $u$ in a periodic domain $\\Omega$ for the interval $[-1,1]$. We'll use 32 time `STEPS` for a time interval of 1, giving us `DT=1/32`. Additionally, we'll use a viscosity `NU` of $\\nu=0.01/\\pi$.\n",
@@ -70,73 +69,89 @@
"Phiflow is object-oriented and centered around field data in the form of grids (internally represented by a tensor object). I.e. you assemble your simulation by constructing a number of grids, and updating them over the course of time steps. \n",
"\n",
"Phiflow internally works with tensors that have named dimensions. This will be especially handy later on for 2D simulations with additional batch and channel dimensions, but for now we'll simply convert the 1D array into a phiflow tensor that has a single spatial dimension `'x'`.\n"
],
"metadata": {}
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"N = 128\n",
"DX = 2./N\n",
"STEPS = 32\n",
"DT = 1./STEPS\n",
"NU = 0.01/(N*np.pi)\n",
"\n",
"# initialization of velocities\n",
"INITIAL_NUMPY = np.asarray( [-np.sin(np.pi * x) * 1. for x in np.linspace(-1,1,N)] ) # 1D numpy array\n",
"# initialization of velocities, cell centers of a CenteredGrid have DX/2 offsets for linspace()\n",
"INITIAL_NUMPY = np.asarray( [-np.sin(np.pi * x) for x in np.linspace(-1+DX/2,1-DX/2,N)] ) # 1D numpy array\n",
"\n",
"INITIAL = math.tensor(INITIAL_NUMPY, spatial('x') ) # convert to phiflow tensor\n"
],
"outputs": [],
"metadata": {}
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Next, we initialize a 1D `velocity` grid from the `INITIAL` numpy array that was converted into a tensor.\n",
"The extent of our domain $\\Omega$ is specifiied via the `bounds` parameter $[-1,1]$, and the grid uses periodic boundary conditions (`extrapolation.PERIODIC`). These two properties are the main difference between a tensor and a grid: the latter has boundary conditions and a physical extent.\n",
"\n",
"Just to illustrate, we'll also print some info about the velocity object: it's a `phi.math` tensor with a size of 128. Note that the actual grid content is contained in the `values` of the grid. Below we're printing five entries by using the `numpy()` function to convert the content of the phiflow tensor into a numpy array. For tensors with more dimensions, we'd need to specify the order here, e.g., `'y,x,vector'` for a 2D velocity field. (If we'd call `numpy('x,vector')` below, this would convert the 1D array into one with an additional dimension for each 1D velocity component.)"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 3,
"source": [
"velocity = CenteredGrid(INITIAL, extrapolation.PERIODIC, x=N, bounds=Box[-1:1])\n",
"#velocity = CenteredGrid(Noise(), extrapolation.PERIODIC, x=N, bounds=Box[-1:1]) # random init\n",
"\n",
"print(\"Velocity tensor shape: \" + format( velocity.shape )) # == velocity.values.shape\n",
"print(\"Velocity tensor type: \" + format( type(velocity.values) ))\n",
"print(\"Velocity tensor entries 10 to 14: \" + format( velocity.values.numpy()[10:15] ))"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Velocity tensor shape: (xˢ=128)\n",
"Velocity tensor type: <class 'phi.math._tensors.CollapsedTensor'>\n",
"Velocity tensor entries 10 to 14: [0.47480196 0.51774486 0.55942075 0.59972764 0.6385669 ]\n"
]
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"## Running the simulation\n",
"\n",
"Now we're ready to run the simulation itself. To ccompute the diffusion and advection components of our model equation we can simply call the existing `diffusion` and `semi_lagrangian` operators in phiflow: `diffuse.explicit(u,...)` computes an explicit diffusion step via central differences for the term $\\nu \\nabla\\cdot \\nabla u$ of our model. Next, `advect.semi_lagrangian(f,u)` is used for a stable first-order approximation of the transport of an arbitrary field `f` by a velocity `u`. In our model we have $\\partial u / \\partial{t} + u \\nabla f$, hence we use the `semi_lagrangian` function to transport the velocity with itself in the implementation:"
],
"metadata": {}
"Just to illustrate, we'll also print some info about the velocity object: it's a `phi.math` tensor with a size of 128. Note that the actual grid content is contained in the `values` of the grid. Below we're printing five entries by using the `numpy()` function to convert the content of the phiflow tensor into a numpy array. For tensors with more dimensions, we'd need to specify the additional dimenions here, e.g., `'y,x,vector'` for a 2D velocity field. (For tensors with a single dimensions we could leave it out.)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Velocity tensor shape: (xˢ=128)\n",
"Velocity tensor type: <class 'phi.math._tensors.CollapsedTensor'>\n",
"Velocity tensor entries 10 to 14: [0.49289819 0.53499762 0.57580819 0.61523159 0.65317284]\n"
]
}
],
"source": [
"velocity = CenteredGrid(INITIAL, extrapolation.PERIODIC, x=N, bounds=Box[-1:1])\n",
"vt = advect.semi_lagrangian(velocity, velocity, DT)\n",
"#velocity = CenteredGrid(lambda x: -math.sin(np.pi * x), extrapolation.PERIODIC, x=N, bounds=Box[-1:1])\n",
"#velocity = CenteredGrid(Noise(), extrapolation.PERIODIC, x=N, bounds=Box[-1:1]) # random init\n",
"\n",
"print(\"Velocity tensor shape: \" + format( velocity.shape )) # == velocity.values.shape\n",
"print(\"Velocity tensor type: \" + format( type(velocity.values) ))\n",
"print(\"Velocity tensor entries 10 to 14: \" + format( velocity.values.numpy('x')[10:15] ))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Running the simulation\n",
"\n",
"Now we're ready to run the simulation itself. To ccompute the diffusion and advection components of our model equation we can simply call the existing `diffusion` and `semi_lagrangian` operators in phiflow: `diffuse.explicit(u,...)` computes an explicit diffusion step via central differences for the term $\\nu \\nabla\\cdot \\nabla u$ of our model. Next, `advect.semi_lagrangian(f,u)` is used for a stable first-order approximation of the transport of an arbitrary field `f` by a velocity `u`. In our model we have $\\partial u / \\partial{t} + u \\nabla f$, hence we use the `semi_lagrangian` function to transport the velocity with itself in the implementation:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"New velocity content at t=1.0: [[0.0057228 ]\n",
" [0.01716715]\n",
" [0.02861034]\n",
" [0.040052 ]\n",
" [0.05149214]]\n"
]
}
],
"source": [
"velocities = [velocity]\n",
"age = 0.\n",
@@ -146,21 +161,12 @@
" age += DT\n",
" velocities.append(v2)\n",
"\n",
"print(\"New velocity content at t={}: {}\".format( age, velocities[-1].values.numpy()[0:5] ))"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"New velocity content at t=1.0: [0.00274862 0.01272991 0.02360343 0.03478042 0.0460869 ]\n"
]
}
],
"metadata": {}
"print(\"New velocity content at t={}: {}\".format( age, velocities[-1].values.numpy('x,vector')[0:5] ))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we're actually collecting all time steps in the list `velocities`. This is not necessary in general (and could consume lots of memory for long-running sims), but useful here to plot the evolution of the velocity states later on.\n",
"\n",
@@ -169,12 +175,36 @@
"## Visualization\n",
"\n",
"We can visualize this 1D case easily in a graph: the following code shows the initial state in blue, and then times $10/32, 20/32, 1$ in green, cyan and purple. "
],
"metadata": {}
]
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f9fd19fd940>"
]
},
"execution_count": 6,
"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": [
"# get \"velocity.values\" from each phiflow state with a channel dimensions, i.e. \"vector\"\n",
"vels = [v.values.numpy('x,vector') for v in velocities] # gives a list of 2D arrays \n",
@@ -187,47 +217,37 @@
"fig.plot(np.linspace(-1,1,len(vels[20].flatten())), vels[20].flatten(), lw=2, color='cyan', label=\"t=0.625\")\n",
"fig.plot(np.linspace(-1,1,len(vels[32].flatten())), vels[32].flatten(), lw=2, color='purple',label=\"t=1\")\n",
"pylab.xlabel('x'); pylab.ylabel('u'); pylab.legend()\n"
],
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f9ca2d4ef70>"
]
},
"metadata": {},
"execution_count": 5
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/png": "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 truncated
},
"metadata": {
"needs_background": "light"
}
}
],
"metadata": {}
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This nicely shows the shock developing in the center of our domain, which forms from the collision of the two initial velocity \"bumps\", the positive one on left (moving right) and the negative one right of the center (moving left).\n",
"\n",
"As these lines can overlap quite a bit we'll also use a different visualization in the following chapters that shows the evolution over the course of all time steps in a 2D image. Our 1D domain will be shown along the Y-axis, and each point along X will represent one time step.\n",
"\n",
"The code below converts our collection of velocity states into a 2D array, repeating individual time steps 8 times to make the image a bit wider. This is purely optional, of course, but makes it easier to see what's happening in our Burgers simulation."
],
"metadata": {}
]
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def show_state(a, title):\n",
" # we only have 33 time steps, blow up by a factor of 2^4 to make it easier to see\n",
@@ -250,32 +270,18 @@
"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, \"Velocity\")"
],
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
],
"image/png": "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 truncated
},
"metadata": {
"needs_background": "light"
}
}
],
"metadata": {}
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This concludes a first simulation in phiflow. It's not overly complex, but because of that it's a good starting point for evaluating and comparing different physics-based deep learning approaches in the next chapter. But before that, we'll target a more complex simulation type in the next section."
],
"metadata": {}
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Next steps\n",
"\n",
@@ -284,8 +290,7 @@
"- Feel free to experiment - the setup above is very simple, you can change the simulation parameters, or the initialization. E.g., you can use a noise field via `Noise()` to get more chaotic results (cf. the comment in the `velocity` cell above).\n",
"\n",
"- A bit more complicated: extend the simulation to 2D (or higher). This will require changes throughout, but all operators above support higher dimensions. Before trying this, you probably will want to check out the next example, which covers a 2D Navier-Stokes case."
],
"metadata": {}
]
}
],
"metadata": {
+89 -44
View File
@@ -60,7 +60,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 1,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@@ -68,7 +68,32 @@
"id": "L30jgXowoXat",
"outputId": "bcceefc0-fb33-44c7-959c-0b742e5a1606"
},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/bin/bash: pip: command not found\n",
"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"
]
},
{
"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",
"$ 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": [
"!pip install --quiet phiflow==1.5.1\n",
"\n",
@@ -186,8 +211,10 @@
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From <ipython-input-2-f2ebc84042fb>: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"
]
@@ -232,12 +259,20 @@
"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 1152x360 with 2 Axes>"
]
@@ -302,7 +337,17 @@
"id": "bfZvwnFooXa1",
"outputId": "f0188a14-5922-4faa-b1aa-fb6482bd81f3"
},
"outputs": [],
"outputs": [
{
"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"
]
}
],
"source": [
"# Boundary loss\n",
"N_SAMPLE_POINTS_BND = 100\n",
@@ -350,20 +395,20 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Step 0, loss: 0.108430\n",
"Step 1, loss: 0.103907\n",
"Step 2, loss: 0.100539\n",
"Step 1000, loss: 0.057177\n",
"Step 2000, loss: 0.053230\n",
"Step 3000, loss: 0.049326\n",
"Step 4000, loss: 0.046316\n",
"Step 5000, loss: 0.044153\n",
"Step 6000, loss: 0.041827\n",
"Step 7000, loss: 0.039517\n",
"Step 8000, loss: 0.037237\n",
"Step 9000, loss: 0.035256\n",
"Step 10000, loss: 0.033931\n",
"Runtime 110.15s\n"
"Step 0, loss: 0.095709\n",
"Step 1, loss: 0.093502\n",
"Step 2, loss: 0.091750\n",
"Step 1000, loss: 0.050177\n",
"Step 2000, loss: 0.044144\n",
"Step 3000, loss: 0.039773\n",
"Step 4000, loss: 0.034952\n",
"Step 5000, loss: 0.032054\n",
"Step 6000, loss: 0.030908\n",
"Step 7000, loss: 0.029630\n",
"Step 8000, loss: 0.028747\n",
"Step 9000, loss: 0.028692\n",
"Step 10000, loss: 0.020781\n",
"Runtime 88.29s\n"
]
}
],
@@ -411,7 +456,7 @@
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]
@@ -441,7 +486,7 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 9,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -454,16 +499,16 @@
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f84721c3fd0>"
"<matplotlib.legend.Legend at 0x11f9b5b90>"
]
},
"execution_count": 10,
"execution_count": 9,
"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>"
]
@@ -503,7 +548,7 @@
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 10,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -516,16 +561,16 @@
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f847223da60>"
"<matplotlib.legend.Legend at 0x11fa4db90>"
]
},
"execution_count": 11,
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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5gzTp09nzZo16PLLKlD96le/4sSJE4Xui4mJ4aabbipoS6xIKtWa6HFxcUYXlLrUxo0b+eKLL8jLy6N58+ZMmjQpYBqwc3NzWbRoEWvWrAGgR48ejB07luDgYJcjU27bsWMH7du3dzuMCqmw91ZENhhj4i4/VquwKiljDMuWLWPZsmUA9O3blxEjRpSqd5WvBAcHM3LkSBo2bMgnn3zCxo0bycjI4NZbbyUsLMzt8JSq9ALn00L5TV5eHl988QXLli1DRLj++usZNWpUQCUPTx07duTee+8lPDyc/fv389///pesrCy3w1Kq0gvMTwzlM3l5ecyZM4cNGzYQEhLCrbfeSs+ePd0O65oaNWrE/fffT1RUFIcPH2b69OkVbloIpcobTSCVSF5eHp9++ilbtmwhNDSUO+64g3bt2rkdVrFFR0czdepUYmJiOH78OO+++y5nz551OyylKi1NIJWEMYa5c+eydetWqlSpwp133kmzZs3cDqvEIiMjuffee6lTpw4nTpzQ6iylXKQJpBIwxrBgwQI2b95cUPIoz+Mqqlevzl133UXt2rVJSUnhv//9b4XsIqlUoNMEUgksX76cdevWERwczOTJk8t18sgXERHB3XffTa1atTh69CgfffQRubm5boelKpHg4GC6detGp06duOGGGy6Zpbowqamp9OnTh+7du7NixQr/BOljmkAquMTERJYuXYqIMHHiRFq0aOF2SF4TGRnJnXfeSfXq1dm3bx9z587VwYbKb6pVq0ZiYiLbtm0jOjr6mtOVLFq0iM6dO7Np0yYGDhxYrHsE+pciTSAV2IEDB/jss88AGDNmTIUceBUdHc2UKVMIDQ1ly5YtLF261O2QVCUUHx/P4cOHAdi3bx+jR4+mZ8+eDBw4kJ07d5KYmMgjjzzCnDlz6NatG1lZWXz11VfEx8fTo0cPbrnlloJehc2aNePRRx+lR48efPTRR1c97sknn6RHjx507tyZnTt3AnaV0KlTp9K5c2e6dOnCxx9/DFDkdcpCBxJWUCdOnODDDz8kLy+P+Ph4evXq5XZIPtOgQQNuueUWZsyYwfLly4mNjaVTp05uh6X8xFdTpT/55JPFOi5/xoT7778fgGnTpvHGG2/QunVr1q1bx49//GMWL17M008/TUJCAn//+985ceIEzzzzDAsXLqR69eo899xz/PWvf+X3v/89ALVr12bjxo2cOHGCm2++ucjjYmJi2LhxI6+//jovvPACb7/9Nn/84x+pWbMmW7duBSA9Pf2a9ystTSAVUHZ2NjNnziQ7O5t27doxfPhwt0PyudatWzNy5EgWLFjAnDlzqFWrFg0bFrrKsVJekZWVRbdu3Th8+DDt27dnxIgRZGZmsnr1am6Line truncated
"image/png": "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3nvvZezYsdWaPAqJCH379uUHP/gBUVFRXLhwgffee48NGzagyy8rb/XTn/6UU6dOlXgsPDycW265pagtsSapVWuix8bGGl1Q6nJbt27liy++wOVy0a5dO6ZOneo1DdgFBQUsW7aMDRs2ANC3b19uvPFG/P39HY5MOW3Pnj1069bN6TBqpJL+bEVkizEm9spztQqrljLGsGrVKlatWgXAoEGDGDNmTIV6V3mKv78/Y8eOJTIykk8//ZStW7eSkZHB7bffTt26dZ0OT6laz3u+LVS1cblcfPHFF6xatQoR4Xvf+x7jxo3zquRRXHR0NPfffz9BQUEcPHiQDz74gJycHKfDUqrW885vDOUxLpeL+fPns2XLFgICArj99tvp16+f02FdV6tWrXjooYcICQkhNTWV9957r8ZNC6GUr9EEUou4XC4+++wzduzYQWBgIHfddRddu3Z1OqwyCw0N5YEHHiA8PJyTJ08yc+ZMsrKynA5LqVpLE0gtYYxhwYIF7Ny5kzp16nD33XfTtm1bp8Mqt0aNGnH//ffTtGlTTp06pdVZSjlIE0gtYIxh8eLFbN++vajk4cvjKho0aMA999xDWFgYaWlpfPDBBzWyi6RS3k4TSC2wevVqNm3ahL+/P9OmTfPp5FEoODiYe++9lyZNmnD8+HE+/vhjCgoKnA5L1SL+/v7ExMTQo0cPJk6ceNks1aV59dVX6datG3fddVc1ROh5mkBquMTERFauXImIMGXKFNq3b+90SFWmUaNG3H333TRo0IADBw6wYMECHWyoqk39+vVJTExk165dhIaGlmm6ktdff52lS5fy4Ycfluk9vH30uiaQGuzQoUP897//BWDChAk1cuBVaGgo06dPJzAwkB07drBy5UqnQ1K1UFxcHKmpqUWvX3zxRfr370+vXr34zW9+A8AjjzzCwYMHmTBhAi+//DJZWVk8+OCDDBgwgD59+jB//nwA3nvvPSZNmsSoUaO44YYbSr3f4cOH6datG9///veJjo5m7NixRe2B+/fvZ/To0fTu3Zu+ffty4MCBUu9TGTqQsIY6deoUc+bMweVyERcXR//+/Z0OyWNatmzJbbfdxqxZs1i9ejURERH06NHD6bBUNfHUVOll/YItnDHhoYceAmDJkiUkJyfz9ddfY4xh0qRJrF69mjfeeINFixaxYsUKwsPD+eUvf8moUaN49913ycjIYMCAAYwePRqwM0Ts2LGD0NDQUu8XFRVFcnIys2bN4u233+b2229n3rx53H333dx11108/fTT3HLLLeTm5uJyuUq9T3x8fIX/jDSB1EC5ubnMnj2b3NxcunbtWvSPsibr1KkTY8eOZfHixcyfP58mTZoQGVniKsdKVYmcnBxiYmJLine truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -566,7 +611,7 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 11,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -586,16 +631,16 @@
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f84722de760>"
"<matplotlib.legend.Legend at 0x11faef650>"
]
},
"execution_count": 12,
"execution_count": 11,
"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>"
]
@@ -645,7 +690,7 @@
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 12,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -665,16 +710,16 @@
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f8470cfb1f0>"
"<matplotlib.legend.Legend at 0x11fb76c50>"
]
},
"execution_count": 13,
"execution_count": 12,
"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>"
]
@@ -709,7 +754,7 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 13,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -723,22 +768,22 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Mean absolute error for re-simulation across 16 steps: 0.01067\n"
"Mean absolute error for re-simulation across 16 steps: 0.02124\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f8472550e50>"
"<matplotlib.legend.Legend at 0x11fc06910>"
]
},
"execution_count": 14,
"execution_count": 13,
"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>"
]
@@ -775,7 +820,7 @@
},
{
"cell_type": "code",
"execution_count": 15,
"execution_count": 14,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -788,7 +833,7 @@
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]
@@ -819,7 +864,7 @@
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": 15,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@@ -886,7 +931,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
"version": "3.7.6"
}
},
"nbformat": 4,