diff --git a/PhiML b/PhiML
index 60c0d66f6..1582deae5 160000
--- a/PhiML
+++ b/PhiML
@@ -1 +1 @@
-Subproject commit 60c0d66f694c6c7ca5ca8f41c5776d43a4d233c6
+Subproject commit 1582deae575b701f2bd1319c09c67623a44176a5
diff --git a/docs/Fluid_Simulation.ipynb b/docs/Fluid_Simulation.ipynb
new file mode 100644
index 000000000..e727370fc
--- /dev/null
+++ b/docs/Fluid_Simulation.ipynb
@@ -0,0 +1,333 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true,
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "# Writing Fluid Simulations in ΦFlow\n",
+ "\n",
+ "There are two main viewpoints for simulating fluids:\n",
+ "\n",
+ "* *Eulerian* simulations use grids, tracking fluid distribution and fluid velocity at fixed sample points\n",
+ "* *Lagrangian* simulations track particles that move with the fluid.\n",
+ "\n",
+ "ΦFlow supports both methods to some extent but mainly focuses on Eulerian simulations.\n",
+ "\n",
+ "Before we discuss the various operations required for fluid simulations, let's define our variables and initial state.\n",
+ "In this case, we will create a 64×96 grid, sampling velocity vectors [in staggered form](Staggered_Grids.html) and marker values at the centroids."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/home/holl/miniconda3/envs/phiflow-dev/lib/python3.9/site-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.16.5 and <1.23.0 is required for this version of SciPy (detected version 1.26.1\n",
+ " warnings.warn(f\"A NumPy version >={np_minversion} and <{np_maxversion}\"\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": "