From 36ff1ef9985eeb792f569610f9f2b22eb71da2f5 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Tue, 14 Sep 2021 11:52:20 +0200
Subject: [PATCH] Added first Jupyter notebook.

---
 Tests/Notebooks/.gitignore                    |   2 +
 Tests/Notebooks/README.md                     |   9 +
 Tests/Notebooks/SimpleMechanics.ipynb         | 223 ++++++++++++++++++
 .../nbconvert_templates/collapsed.md.j2       | 118 +++++++++
 web/.gitignore                                |   4 +
 5 files changed, 356 insertions(+)
 create mode 100644 Tests/Notebooks/.gitignore
 create mode 100644 Tests/Notebooks/README.md
 create mode 100644 Tests/Notebooks/SimpleMechanics.ipynb
 create mode 100644 Tests/Notebooks/nbconvert_templates/collapsed.md.j2

diff --git a/Tests/Notebooks/.gitignore b/Tests/Notebooks/.gitignore
new file mode 100644
index 00000000000..fd3eb1669c0
--- /dev/null
+++ b/Tests/Notebooks/.gitignore
@@ -0,0 +1,2 @@
+_out
+.ipynb_checkpoints
diff --git a/Tests/Notebooks/README.md b/Tests/Notebooks/README.md
new file mode 100644
index 00000000000..427276d2118
--- /dev/null
+++ b/Tests/Notebooks/README.md
@@ -0,0 +1,9 @@
+# OGS Juypter notebook tips
+
+## Git diff / merge tool
+
+Install [nbdime](https://nbdime.readthedocs.io) and enable [git integration](https://nbdime.readthedocs.io/en/latest/vcs.html):
+
+```bash
+nbdime config-git --enable --global
+```
diff --git a/Tests/Notebooks/SimpleMechanics.ipynb b/Tests/Notebooks/SimpleMechanics.ipynb
new file mode 100644
index 00000000000..2949dc829b1
--- /dev/null
+++ b/Tests/Notebooks/SimpleMechanics.ipynb
@@ -0,0 +1,223 @@
+{
+ "cells": [
+  {
+   "cell_type": "raw",
+   "source": [
+    "title = \"SimpleMechanics\"\n",
+    "date = \"2021-09-10\"\n",
+    "author = \"Lars Bilke, Jörg Buchwald\"\n",
+    "notebook = \"SimpleMechanics.ipynb\"\n",
+    "[menu]\n",
+    "  [menu.benchmarks]\n",
+    "    parent = \"small-deformations\"\n",
+    "<!--eofm-->"
+   ],
+   "metadata": {}
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "The following example consists of a simple mechanics problem."
+   ],
+   "metadata": {}
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "source": [
+    "from ogs6py import ogs\n",
+    "import os\n",
+    "\n",
+    "prj_name = \"simple_mechanics\"\n",
+    "out_dir = f\"_out/{prj_name}\"\n",
+    "\n",
+    "if not os.path.exists(out_dir):\n",
+    "    os.makedirs(out_dir)\n",
+    "os.chdir(out_dir)\n",
+    "\n",
+    "model = ogs.OGS(PROJECT_FILE=f\"{prj_name}.prj\")\n",
+    "model.geo.add_geom(filename=\"../../../Data/Mechanics/Linear/square_1x1.gml\")\n",
+    "model.mesh.add_mesh(filename=\"../../../Data/Mechanics/Linear/square_1x1_quad_1e2.vtu\")\n",
+    "model.processes.set_process(name=\"SD\",\n",
+    "                           type=\"SMALL_DEFORMATION\",\n",
+    "                           integration_order=\"2\",\n",
+    "                           solid_density=\"rho_sr\",\n",
+    "                           specific_body_force=\"0 0\")\n",
+    "model.processes.set_constitutive_relation(type=\"LinearElasticIsotropic\",\n",
+    "                                        youngs_modulus=\"E\",\n",
+    "                                        poissons_ratio=\"nu\")\n",
+    "model.processes.add_process_variable(process_variable=\"process_variable\",\n",
+    "                                   process_variable_name=\"displacement\")\n",
+    "model.processes.add_process_variable(secondary_variable=\"sigma\",\n",
+    "                                   output_name=\"sigma\")\n",
+    "model.timeloop.add_process(process=\"SD\",\n",
+    "                          nonlinear_solver_name=\"basic_newton\",\n",
+    "                          convergence_type=\"DeltaX\",\n",
+    "                          norm_type=\"NORM2\",\n",
+    "                          abstol=\"1e-15\",\n",
+    "                          time_discretization=\"BackwardEuler\")\n",
+    "model.timeloop.set_stepping(process=\"SD\", type=\"FixedTimeStepping\",\n",
+    "                           t_initial=\"0\",\n",
+    "                           t_end=\"1\",\n",
+    "                           repeat=\"4\",\n",
+    "                           delta_t=\"0.25\")\n",
+    "model.timeloop.add_output(type=\"VTK\",\n",
+    "                         prefix=\"blubb\",\n",
+    "                         repeat=\"1\",\n",
+    "                         each_steps=\"10\",\n",
+    "                         variables=[\"displacement\", \"sigma\"])\n",
+    "model.parameters.add_parameter(name=\"E\", type=\"Constant\", value=\"1\")\n",
+    "model.parameters.add_parameter(name=\"nu\", type=\"Constant\", value=\"0.3\")\n",
+    "model.parameters.add_parameter(name=\"rho_sr\", type=\"Constant\", value=\"1\")\n",
+    "model.parameters.add_parameter(name=\"displacement0\",\n",
+    "                              type=\"Constant\",\n",
+    "                              values=\"0 0\")\n",
+    "model.parameters.add_parameter(name=\"dirichlet0\", type=\"Constant\", value=\"0\")\n",
+    "model.parameters.add_parameter(name=\"dirichlet1\", type=\"Constant\", value=\"0.05\")\n",
+    "model.processvars.set_ic(process_variable_name=\"displacement\",\n",
+    "                        components=\"2\",\n",
+    "                        order=\"1\",\n",
+    "                        initial_condition=\"displacement0\")\n",
+    "model.processvars.add_bc(process_variable_name=\"displacement\",\n",
+    "                        geometrical_set=\"square_1x1_geometry\",\n",
+    "                        geometry=\"left\",\n",
+    "                        type=\"Dirichlet\",\n",
+    "                        component=\"0\",\n",
+    "                        parameter=\"dirichlet0\")\n",
+    "model.processvars.add_bc(process_variable_name=\"displacement\",\n",
+    "                        geometrical_set=\"square_1x1_geometry\",\n",
+    "                        geometry=\"bottom\",\n",
+    "                        type=\"Dirichlet\",\n",
+    "                        component=\"1\",\n",
+    "                        parameter=\"dirichlet0\")\n",
+    "model.processvars.add_bc(process_variable_name=\"displacement\",\n",
+    "                        geometrical_set=\"square_1x1_geometry\",\n",
+    "                        geometry=\"top\",\n",
+    "                        type=\"Dirichlet\",\n",
+    "                        component=\"1\",\n",
+    "                        parameter=\"dirichlet1\")\n",
+    "model.nonlinsolvers.add_non_lin_solver(name=\"basic_newton\",\n",
+    "                                    type=\"Newton\",\n",
+    "                                    max_iter=\"4\",\n",
+    "                                    linear_solver=\"general_linear_solver\")\n",
+    "model.linsolvers.add_lin_solver(name=\"general_linear_solver\",\n",
+    "                              kind=\"lis\",\n",
+    "                              solver_type=\"cg\",\n",
+    "                              precon_type=\"jacobi\",\n",
+    "                              max_iteration_step=\"10000\",\n",
+    "                              error_tolerance=\"1e-16\")\n",
+    "model.linsolvers.add_lin_solver(name=\"general_linear_solver\",\n",
+    "                              kind=\"eigen\",\n",
+    "                              solver_type=\"CG\",\n",
+    "                              precon_type=\"DIAGONAL\",\n",
+    "                              max_iteration_step=\"10000\",\n",
+    "                              error_tolerance=\"1e-16\")\n",
+    "model.linsolvers.add_lin_solver(name=\"general_linear_solver\",\n",
+    "                              kind=\"petsc\",\n",
+    "                              prefix=\"sd\",\n",
+    "                              solver_type=\"cg\",\n",
+    "                              precon_type=\"bjacobi\",\n",
+    "                              max_iteration_step=\"10000\",\n",
+    "                              error_tolerance=\"1e-16\")\n",
+    "model.write_input()\n",
+    "model.run_model(logfile=\"out.log\")\n",
+    "os.chdir(\"../..\")"
+   ],
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "/home/jovyan/work/code/ogs/ogs/Tests/Notebooks\n",
+      "OGS finished with project file simple_mechanics.prj.\n",
+      "Execution took 0.8449244499206543 s\n"
+     ]
+    }
+   ],
+   "metadata": {}
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "source": [
+    "import vtuIO\n",
+    "\n",
+    "pvdfile = vtuIO.PVDIO(f\"{out_dir}/blubb.pvd\", dim=2)\n",
+    "time = pvdfile.timesteps\n",
+    "points={'pt0': (0.3,0.5,0.0), 'pt1': (0.24,0.21,0.0)}\n",
+    "pressure_linear = pvdfile.read_time_series(\"displacement\", points)\n",
+    "pressure_nearest = pvdfile.read_time_series(\"displacement\", points, interpolation_method=\"nearest\")\n",
+    "\n",
+    "import matplotlib.pyplot as plt\n",
+    "plt.plot(time, pressure_linear[\"pt0\"], \"b-\", label=\"pt0 linear interpolated\")\n",
+    "plt.plot(time, pressure_nearest[\"pt0\"], \"b--\", label=\"pt0 closest point value\")\n",
+    "plt.plot(time, pressure_linear[\"pt1\"], \"r-\", label=\"pt1 linear interpolated\")\n",
+    "plt.plot(time, pressure_nearest[\"pt1\"], \"r--\", label=\"pt1 closest point value\")\n",
+    "plt.legend()\n",
+    "plt.xlabel(\"t\")\n",
+    "plt.ylabel(\"p\")"
+   ],
+   "outputs": [
+    {
+     "output_type": "execute_result",
+     "data": {
+      "text/plain": [
+       "Text(0, 0.5, 'p')"
+      ]
+     },
+     "metadata": {},
+     "execution_count": 3
+    },
+    {
+     "output_type": "display_data",
+     "data": {
+      "image/png": "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+PjjjwH473//y9y5c7PiMidPnmTnzp20aNGCiRMnsnLlSoKCgnI8qPv06VOseRrt2rUjNjY265rbt2/Ps8+GDRtYvXo1F154IQCnT5+mefPmWdtHjhyZY/9rrrmGatWq0alTJ9q3b8/69ev54YcfuOOOOwAVkDZt2uQRlpSUFEaPHs2mTZtwzpGenp5vmwv6PBYuXMidd94JQExMDDExMUXev2GUJkeOwHPPwcsvw549EBYG//gHjB5ddm0I6ARJEZkHzMu17hGf9yeBq/M57jHgsQJO28ufbYSiexalRe68g/zyEFq2bElCQkLWckJCAi1b5s6BKJwaNTShLigoKCtmISJ89NFHRERE5Nh36tSpNG3alFWrVpGZmUloaGjWttq1a/+m63mvmd/wkYgQGRnJokWL8j1H7msV57PKj4cffphBgwbxySefsH37dgYOHJjvfgV9HoZRXjh5Ev74R/i//4PTp6F/f5g9W/+WNRU6eF/Z2blzZ9aD9b333uPcc88FoG7duhw9ehSA5s2bU69ePRYvXoyI8Pbbb3P55bmztn87Q4YM4YUXXsjKMPv5558B/YXfvHlzqlWrxjvvvMPp06dLfC0vvvcVERFBcnJy1v2np6ezZs2aAo/917/+RWZmJlu2bGHr1q1ERETQv39/3n33XQA2btzIzp078whDSkpKlhDPmjUr37ZAwZ/HgAEDeO+99wBYvXo1v/zyS0k+AsP4zaSlwe23Q7168NZbEBoKf/87LFgQGFEBE5ZyTUREBNOnT6dr164cOnSI2267DYDx48czdOhQBg0aBMBLL73EuHHj6NixIx06dGDYsGElvvbDDz9Meno6MTExREZG8vDDDwMwYcIE3nrrLbp378769euL3UspDt4gfGxsLKdPn2bOnDncd999dO/endjY2KxEgfxo3bo1ffr0YdiwYbzyyiuEhoYyYcIEMjMziY6OZuTIkcyaNStHbwng3nvv5c9//jM9evTIkWE2aNAg1q5dmxW8L+jzuO222zh27Bhdu3blkUceoVcvv3eYDSNfRODjj6FdO3jpJQgKgoce0qGw+++HagF8urv85jxUNeLi4iT33IN169bRtWvXALVIs6+GDx/O6tWrA9aGisKYMWMYPnw4V5VFVLIEBPo7ZVQOMjPhscfg7bdhyxbo1ElThp98EoLLOLjhnFsuInG515sJ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",
+      "text/plain": [
+       "<Figure size 432x288 with 1 Axes>"
+      ]
+     },
+     "metadata": {
+      "needs_background": "light"
+     }
+    }
+   ],
+   "metadata": {}
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "---\n",
+    "\n",
+    "This website was created with\n",
+    "\n",
+    "```\n",
+    "nb2hugo --site-dir web --section docs/benchmarks/notebooks \\\n",
+    "  --template Tests/Notebooks/nbconvert_templates/collapsed.md.j2 \\\n",
+    "  Tests/Notebooks/SimpleMechanics.ipynb\n",
+    "```"
+   ],
+   "metadata": {}
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.9.6"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
\ No newline at end of file
diff --git a/Tests/Notebooks/nbconvert_templates/collapsed.md.j2 b/Tests/Notebooks/nbconvert_templates/collapsed.md.j2
new file mode 100644
index 00000000000..a71120e735c
--- /dev/null
+++ b/Tests/Notebooks/nbconvert_templates/collapsed.md.j2
@@ -0,0 +1,118 @@
+{% extends 'base/display_priority.j2' %}
+
+
+{% block in_prompt %}
+{% endblock in_prompt %}
+
+{% block output_prompt %}
+{%- endblock output_prompt %}
+
+{% block input %}
+{% if 'jupyter' in cell.metadata and 'source_hidden' in cell.metadata.jupyter and cell.metadata.jupyter.source_hidden == True  -%}
+<details>
+<summary>Click to toggle input cell</summary>
+<div>
+{% endif %}
+<div class="jupyter-input">
+
+```
+{%- if 'magics_language' in cell.metadata  -%}
+    {{ cell.metadata.magics_language}}
+{%- elif 'name' in nb.metadata.get('language_info', {}) -%}
+    {{ nb.metadata.language_info.name }}
+{%- endif %}
+{{ cell.source}}
+```
+
+</div>
+{% if 'jupyter' in cell.metadata and 'source_hidden' in cell.metadata.jupyter and cell.metadata.jupyter.source_hidden == True  %}
+</div>
+</details>
+{% endif %}
+{% endblock input %}
+
+{% block error %}
+{{ super() }}
+{% endblock error %}
+
+{% block traceback_line %}
+{{ line | indent | strip_ansi }}
+{% endblock traceback_line %}
+
+{% block execute_result %}
+
+{% block data_priority scoped %}
+{{ super() }}
+{% endblock %}
+{% endblock execute_result %}
+
+{% block stream %}
+{% if 'jupyter' in cell.metadata and 'outputs_hidden' in cell.metadata.jupyter and cell.metadata.jupyter.outputs_hidden == True  -%}
+<details>
+<summary>Click to toggle output cell</summary>
+<div>
+{% endif %}
+<div class="jupyter-output">
+
+{{ output.text | indent }}
+
+</div>
+{% if 'jupyter' in cell.metadata and 'outputs_hidden' in cell.metadata.jupyter and cell.metadata.jupyter.outputs_hidden == True  -%}
+</div>
+</details>
+{% endif %}
+{% endblock stream %}
+
+{% block data_svg %}
+    {% if "filenames" in output.metadata %}
+![svg]({{ output.metadata.filenames['image/svg+xml'] | path2url }})
+    {% else %}
+![svg](data:image/svg;base64,{{ output.data['image/svg+xml'] }})
+    {% endif %}
+{% endblock data_svg %}
+
+{% block data_png %}
+<div class="jupyter-output">
+    {% if "filenames" in output.metadata %}
+![png]({{ output.metadata.filenames['image/png'] | path2url }})
+    {% else %}
+![png](data:image/png;base64,{{ output.data['image/png'] }})
+    {% endif %}
+</div>
+{% endblock data_png %}
+
+{% block data_jpg %}
+    {% if "filenames" in output.metadata %}
+![jpeg]({{ output.metadata.filenames['image/jpeg'] | path2url }})
+    {% else %}
+![jpeg](data:image/jpeg;base64,{{ output.data['image/jpeg'] }})
+    {% endif %}
+{% endblock data_jpg %}
+
+{% block data_latex %}
+{{ output.data['text/latex'] }}
+{% endblock data_latex %}
+
+{% block data_html scoped %}
+{{ output.data['text/html'] }}
+{% endblock data_html %}
+
+{% block data_markdown scoped %}
+{{ output.data['text/markdown'] }}
+{% endblock data_markdown %}
+
+{% block data_text scoped %}
+<div class="jupyter-output">
+
+{{ output.data['text/plain'] | indent }}
+
+</div>
+{% endblock data_text %}
+
+{% block markdowncell scoped %}
+{{ cell.source }}
+{% endblock markdowncell %}
+
+{% block unknowncell scoped %}
+unknown type  {{ cell.type }}
+{% endblock unknowncell %}
diff --git a/web/.gitignore b/web/.gitignore
index 3d5ef346db2..7ba2037df51 100644
--- a/web/.gitignore
+++ b/web/.gitignore
@@ -14,3 +14,7 @@ data/bibliography.json
 
 # generated css
 static/css/all.css
+
+# Generated by nb2hugo
+content/docs/benchmarks/notebooks
+static/docs/benchmarks/notebooks
-- 
GitLab