{ "cells": [ { "cell_type": "markdown", "id": "23f1215b", "metadata": {}, "source": [ "# How to use the VoxelFields class" ] }, { "cell_type": "markdown", "id": "e1916200", "metadata": {}, "source": [ "## What are VoxelFields?\n", "From a high-level perspective, evoxels is organized around two core abstractions: VoxelFields and VoxelGrid. VoxelFields provides a uniform, NumPy-based container for any number of 3D fields on the same regular grid, maximizing interoperability with image I/O libraries (e.g. tifffile, h5py, napari, scikit-image) and visualization tools (PyVista, VTK). VoxelGrid couples these fields to either a PyTorch or JAX backend, offering pre-defined boundary conditions, finite difference stencils and FFT libraries.\n", "\n", "It is meant to organize, plot and export multiple fields on the same underlying grid (i.e. same shape, origin, spacing and grid convention).\n" ] }, { "cell_type": "markdown", "id": "edb30356", "metadata": {}, "source": [ "## Getting started\n", "Import the evoxels library together with numpy" ] }, { "cell_type": "code", "execution_count": 1, "id": "8c4b8ded", "metadata": {}, "outputs": [], "source": [ "import evoxels as evo\n", "import numpy as np" ] }, { "cell_type": "markdown", "id": "6e3b9646", "metadata": {}, "source": [ "Create a voxel fields object and explore some of its properties" ] }, { "cell_type": "code", "execution_count": 2, "id": "92f802c5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "VoxelFields object is now defined as\n", " - grid with 20 x 10 x 5 points,\n", " - defined with cell_center grid convention.\n", " - Physical domain size (20, 10, 5)\n", " - and the resulting grid spacing (1.0, 1.0, 1.0)\n", " - First grid point (origin) is located at (0.5, 0.5, 0.5)\n", " - Float precision of data is set to float32\n" ] } ], "source": [ "Nx, Ny, Nz = [20, 10, 5]\n", "vf = evo.VoxelFields((Nx, Ny, Nz), domain_size=(Nx, Ny, Nz))\n", "print(\"VoxelFields object is now defined as\")\n", "print(f\" - grid with {vf.Nx} x {vf.Ny} x {vf.Nz} points,\")\n", "print(f\" - defined with {vf.convention} grid convention.\")\n", "print(f\" - Physical domain size {vf.domain_size}\")\n", "print(f\" - and the resulting grid spacing {vf.spacing}\")\n", "print(f\" - First grid point (origin) is located at {vf.origin}\")\n", "print(f\" - Float precision of data is set to {vf.precision}\")" ] }, { "cell_type": "markdown", "id": "4af60d98", "metadata": {}, "source": [ "The ``cell_center`` grid convention assumes that field values 'live' at the center of each voxel (denoted by red dots in the figure below). Fluxes between two voxels are computed at so-called staggered field positions, i.e.\n", "- x fluxes live on sides staggered to the right (blue)\n", "- y fluxes live staggered to the top (green)\n", "\n", "" ] }, { "cell_type": "markdown", "id": "5e06d071", "metadata": {}, "source": [ "Initialize field with random noise" ] }, { "cell_type": "code", "execution_count": 3, "id": "709ed67d", "metadata": {}, "outputs": [], "source": [ "noise = 0.5 + 0.1*np.random.rand(Nx, Ny, Nz)\n", "noise[0,:,:] = 0.1\n", "vf.add_field(\"c\", noise)" ] }, { "cell_type": "markdown", "id": "8155ef06", "metadata": {}, "source": [ "Explore plotting utilities of voxelFields class" ] }, { "cell_type": "code", "execution_count": 4, "id": "1a690734", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "vf.plot_slice('c', 2, direction='z')" ] }, { "cell_type": "markdown", "id": "4d168815", "metadata": {}, "source": [ "Interactive plotting to scroll through slices" ] }, { "cell_type": "code", "execution_count": 5, "id": "6b4b53fa", "metadata": {}, "outputs": [], "source": [ "# %matplotlib widget\n", "# vf.plot_field_interactive(\"c\", direction='x', colormap='turbo')" ] }, { "cell_type": "markdown", "id": "c6c2df95", "metadata": {}, "source": [ "We can now plug the initial concentration field into the Periodic Cahn-Hilliard solver" ] }, { "cell_type": "code", "execution_count": 6, "id": "e853dab3", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Wall time: 8.4107 s after 100 iterations (0.0841 s/iter)\n", "GPU-RAM (nvidia-smi) current: 119 MB (119.0 MB max)\n", "GPU-RAM (torch) current: 8.13 MB (8.18 MB max, 22.00 MB reserved)\n" ] } ], "source": [ "%matplotlib inline\n", "vf.add_field(\"c\", noise)\n", "\n", "end_time = 100\n", "dt = 1\n", "evo.run_cahn_hilliard_solver(\n", " vf, 'c', 'torch', jit='False', device='cuda',\n", " time_increment=dt, frames=10, max_iters=int(end_time/dt),\n", " verbose='plot', vtk_out=False, plot_bounds=(0,1))" ] }, { "cell_type": "markdown", "id": "85d7d173", "metadata": {}, "source": [ "Export the final concentration field after solve to vtk" ] }, { "cell_type": "code", "execution_count": 7, "id": "3549b716", "metadata": {}, "outputs": [], "source": [ "vf.export_to_vtk(filename='test.vtk')" ] }, { "cell_type": "markdown", "id": "57d30d94", "metadata": {}, "source": [ "## Staggered grid positions" ] }, { "cell_type": "markdown", "id": "b227729d", "metadata": {}, "source": [ "For some FFT solvers with mixed boundary conditions it is preferable to work with a staggered grid i.e. the node positions are shifted in a specific direction. To compute tortuosity, we utilize Dirichlet BCs in x-direction while the y- and z-direction are governed by zero-flux or periodic boundary conditions." ] }, { "cell_type": "markdown", "id": "9ef26826", "metadata": {}, "source": [ "The VoxelFields object has the grid convention as an attribute which can be set to ``staggered_x``. Note that there are now nodes located at the left and right boundary i.e. the grid spacing equals ``dx = Lx/(Nx-1)`` as exemplified below.\n", "\n", "The field values are now stored at the blue positions.\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 8, "id": "c99d906e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "VoxelFields object is now defined as\n", " - grid with 21 x 10 x 5 points,\n", " - defined with staggered_x grid convention.\n", " - Physical domain size (20, 10, 5)\n", " - and the resulting grid spacing (1.0, 1.0, 1.0)\n", " - First grid point (origin) is located at (0, 0.5, 0.5)\n", " - Float precision of data is set to float32\n" ] } ], "source": [ "Nx, Ny, Nz = [21, 10, 5]\n", "vf = evo.VoxelFields((Nx, Ny, Nz), domain_size=(Nx-1, Ny, Nz), convention='staggered_x')\n", "print(\"VoxelFields object is now defined as\")\n", "print(f\" - grid with {vf.Nx} x {vf.Ny} x {vf.Nz} points,\")\n", "print(f\" - defined with {vf.convention} grid convention.\")\n", "print(f\" - Physical domain size {vf.domain_size}\")\n", "print(f\" - and the resulting grid spacing {vf.spacing}\")\n", "print(f\" - First grid point (origin) is located at {vf.origin}\")\n", "print(f\" - Float precision of data is set to {vf.precision}\")" ] }, { "cell_type": "markdown", "id": "a0d17d98", "metadata": {}, "source": [ "As this staggered grid positions are rather unusual, there is no 100% consistent way to visualize these fields. In a general sense, our data is still zonal data and will therefore be visualized with ``imshow`` in python and be exported using ``cell_data`` for the ``.vtk`` format. However, to highlight the difference, the origin is now shifted such that the first datapoints correlate with x=0 and the last with x=Lx." ] }, { "cell_type": "code", "execution_count": 9, "id": "21896ed8", "metadata": {}, "outputs": [], "source": [ "noise = 0.5 + 0.1*np.random.rand(Nx, Ny, Nz)\n", "noise[0,:,:] = 0.1\n", "vf.add_field(\"c\", noise)" ] }, { "cell_type": "code", "execution_count": 10, "id": "3f190f8c", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhEAAAESCAYAAABD4ochAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAM/5JREFUeJzt3XtcVNXeP/DPDJcZ7qIIiCLgpfCOiRKWpUlSWXnpYv58Eqmso1Ia9RzzKcFLhV1expPHRz2evJzsYp1jdo55NCWxY5KoiNciNfKSAt4QAWFg9vr9YcxpZA/MjAv2IJ/367VfL2fN3t/9neXs8evaa++tE0IIEBERETlIr3UCRERE1DKxiCAiIiKnsIggIiIip7CIICIiIqewiCAiIiKnsIggIiIip7CIICIiIqewiCAiIiKnsIggIiIip7CIIHJQZGQkJk2aZHmdnZ0NnU6H7OxszXJqSuXl5XjmmWcQGhoKnU6HGTNmSN/HnDlzoNPppMcloqbFIoLoNwcPHsSjjz6KiIgIGI1GdOzYEffeey8WLVqkdWr1XLhwAe+88w7uuusutG/fHm3atMHtt9+OtWvXSt/Xm2++iVWrVmHKlCn48MMP8eSTT0rfBxG1TDo+O4MI2LlzJ4YNG4bOnTsjKSkJoaGhOHXqFL7//nscP34cx44ds6wbGRmJoUOHYtWqVQAARVFgMpng6ekJvb556vINGzZg7NixeOCBBzBs2DC4u7vj73//O7Zt24a0tDTMnTtX2r5uv/12uLu7Y8eOHdJiXq+2tha1tbUwGo1Ntg8iko9FBBGAkSNHYvfu3fjpp5/Qpk0bq/dKSkoQHBxseX19EaGFwsJC6PV6REREWNqEEEhISMB3332HCxcuwMfHR8q+unTpgp49e2LDhg1S4hHRzYOnM4gAHD9+HL169apXQACwKiDU2JoTsWvXLjzwwAMIDAyEj48P+vbti//93/+1WufHH3/Eo48+irZt28JoNCI2Nhb/+Mc/Gs03KirKqoAAAJ1Oh9GjR6O6uho///xzozFKSkrw9NNPIyQkBEajEf369cPq1avrfa7CwkJ89dVX0Ol00Ol0+OWXXxqMu2bNGgwaNAje3t4IDAzEXXfdha+//rrBbdTmROh0OqSkpGD9+vXo3bs3DAYDevXqhU2bNjX62SIjIy35Xr/crHNXiLTgrnUCRK4gIiICOTk5OHToEHr37n3D8bZs2YIHH3wQHTp0wPTp0xEaGooffvgBGzZswPTp0wEAhw8fxh133IGOHTvilVdegY+PDz777DOMHj0af//73zFmzBiH91tUVAQACAoKanC9q1evYujQoTh27BhSUlIQFRWFzz//HJMmTUJpaSmmT5+OHj164MMPP8SLL76ITp064aWXXgIAtG/f3mbcuXPnYs6cORg8eDDmzZsHT09P7Nq1C9988w1GjBjh8OfZsWMH1q1bh6lTp8LPzw/vv/8+HnnkEZw8eRLt2rWzuV1mZibKy8ut2t577z3k5+c3uB0ROUgQkfj666+Fm5ubcHNzE/Hx8eKPf/yj2Lx5szCZTPXWjYiIEElJSZbX27ZtEwDEtm3bhBBC1NbWiqioKBERESEuXbpkta2iKJY/Dx8+XPTp00dUVVVZvT948GDRvXt3hz/DhQsXRHBwsBgyZEij62ZmZgoAYs2aNZY2k8kk4uPjha+vrygrK7O0R0REiJEjRzYa8+jRo0Kv14sxY8YIs9ls9d7vP7ea9PR0cf3PEQDh6ekpjh07Zmnbv3+/ACAWLVrUaD6/99lnnwkAYt68eQ5tR0QN4+kMIgD33nsvcnJy8PDDD2P//v14++23kZiYiI4dO9p1euH39u3bh8LCQsyYMaPe6ZG6IfuLFy/im2++weOPP44rV67g/PnzOH/+PC5cuIDExEQcPXoUv/76q937VBQFEyZMQGlpqV1Xk2zcuBGhoaEYP368pc3DwwMvvPACysvLsX37drv3XWf9+vVQFAVpaWn1Jpg6e/lmQkICunbtanndt29f+Pv723W6ps6RI0fw1FNPYdSoUXjttdecyoOI1LGIIPrNwIEDsW7dOly6dAm5ubmYNWsWrly5gkcffRRHjhyxO87x48cBoMHTIseOHYMQArNnz0b79u2tlvT0dADX5izY6/nnn8emTZvwl7/8Bf369Wt0/RMnTqB79+71/rHv0aOH5X1HHT9+HHq9Hj179nR4W1s6d+5cry0wMBCXLl2ya/uysjKMHTsWHTt2xF//+lfei4JIMs6JILqOp6cnBg4ciIEDB+KWW25BcnIyPv/8c8s/7jIoigIAePnll5GYmKi6Trdu3eyKNXfuXPzf//0fFixYcNPdw8HNzU21Xdh5UdmkSZNw5swZ5Obmwt/fX2ZqRAQWEUQNio2NBQCcPXvW7m3qht8PHTqEhIQE1XW6dOkC4NopBFvr2GPx4sWYM2cOZsyYgZkzZ9q9XUREBA4cOABFUaxGI3788UfL+47q2rUrFEXBkSNHEBMT4/D2si1YsADr16/HunXrEB0drXU6RDclns4gArBt2zbV/91u3LgRAHDrrbfaHeu2225DVFQUMjMzUVpaavVe3T6Cg4MxdOhQLFu2TLVAOXfuXKP7Wbt2LV544QVMmDABCxcutDs/AHjggQdQVFRkdYfL2tpaLFq0CL6+vrj77rsdigcAo0ePhl6vx7x58ywjLXXsHTmQZevWrXjttdfw6quvYvTo0c26b6LWhCMRRLg2p6CyshJjxoxBdHQ0TCYTdu7cibVr1yIyMhLJycl2x9Lr9ViyZAkeeughxMTEIDk5GR06dMCPP/6Iw4cPY/PmzQCujSLceeed6NOnDyZPnowuXbqguLgYOTk5OH36NPbv329zH7m5uZg4cSLatWuH4cOH46OPPrJ6f/DgwZbRDjXPPvssli1bhkmTJmHv3r2IjIzE3/72N3z33XfIzMyEn5+f3Z+3Trdu3fDqq69i/vz5GDJkCMaOHQuDwYDdu3cjLCwMGRkZDsd01vjx49G+fXt0794da9assXrv3nvvRUhISLPlQnRT0/TaECIX8a9//Us89dRTIjo6Wvj6+gpPT0/RrVs38fzzz4vi4mKrdRu7xLPOjh07xL333iv8/PyEj4+P6Nu3b71LE48fPy4mTpwoQkNDhYeHh+jYsaN48MEHxd/+9rcG8125cqUAYHNZuXJlo5+5uLhYJCcni6CgIOHp6Sn69Omjup29l3jWWbFihejfv78wGAwiMDBQ3H333WLLli0NbmPrEs9p06ap5vP7/lfTUN9c//dERM7jba+JiIjIKZwTQURERE5hEUFEREROYRFBRERETtG0iPj222/x0EMPISwsDDqdDuvXr7d6XwiBtLQ0dOjQAV5eXkhISMDRo0e1SZaIiIisaFpEVFRUoF+/fli8eLHq+2+//Tbef/99LF26FLt27YKPjw8SExNRVVXVzJkSERHR9Vzm6gydTocvvvjCcmMYIQTCwsLw0ksv4eWXXwYAXL58GSEhIVi1ahWeeOIJDbMlIiIil73ZVGFhIYqKiqxuCRwQEIC4uDjk5OTYLCKqq6tRXV1tea0oCi5evIh27drx4TtERNQgIQSuXLmCsLCweg+oo/pctogoKioCgHp3lgsJCbG8pyYjIwNz585t0tyIiOjmdurUKXTq1EnrNFyeyxYRzpo1axZSU1Mtry9fvozOnTvjTjwAd3jccPy5B/fccIw6ZsgbGWmjN0mL9XlZfylxJgbskxIHAL6tCpcWa7jXaWmxll+6TVosmfzdr0qLNdH/J2mxll6y/Xh0R432t31bcEflV3eUFuvn6vZS4jwXeEBKHAA4UystFHp4ekmLVWCqlBbrkmKUEqeiXMGjg086dev31shli4jQ0FAAQHFxMTp06GBpLy4ubvAJgQaDAQaDoV67OzzgrrvxIsLXT97wlswiwlfisJtRufF+AgA/iX3l5S7vq+rnLS8vQ42cvpLN6F4jLZa/xL9Ho8T+knksenuoP3LcGUYPOZ9RZr+XSSwi/D3l5eVrkhfLpMg99cDT3/Zx2RM+UVFRCA0NRVZWlqWtrKwMu3btQnx8vIaZEREREaDxSER5eTmOHTtmeV1YWIj8/Hy0bdsWnTt3xowZM/D666+je/fuiIqKwuzZsxEWFsZH+xIREbkATYuIPXv2YNiwYZbXdXMZkpKSsGrVKvzxj39ERUUFnn32WZSWluLOO+/Epk2bYDTKOfdFRESkhaqqKphMtueyeXp6toh/6zQtIoYOHYqGblOh0+kwb948zJs3rxmzIiIiajpVVVWIivBFUYnZ5jqhoaEoLCx0+ULCZSdWEhER3YxMJhOKSswo3BuhOoG27IqCqAEnYDKZWEQQERFRfV6+Al6+9Ufja1zjRtJ2YRFBRESkAQUKFBvtLQWLCCIiIg3UCAU1KoMONYJFBBERETVAgYAZ9asIRaXNVbGIICIi0gBHIoiIiMgpym+LWntLwSKCiIhIAyYhYFK5EkOtzVWxiCAiItIARyKIiIjIKQp0qk9zViQ+4bmpsYggIiLSQI3QoUbULxjU2lwViwgiIiINmG2MRKi1uSoWEQ4K0NdIi/XR5Vhpse73OyAt1h8C90qJs7UyXEocALhY6ystVpXESUtxPselxdpTGSUt1hDvn6TF2lgZIi1WhOG8tFhGnby/x7u9TkmL1catUkqcL8vlHT81Qt5P/WHTVWmxfPTyngvR00POd+uKW/PNSKgRetSI+s/OULvs01WxiCAiItKAGXqYUb+IsP1sT9fDIoKIiEgDtTZGImo5EkFEREQNMQs9zCpFhJlFBBERETWkBnrUwE2lveVgEUFERKQB2yMRLWcogkUEERGRBmrhpjoSUatBLs5iEUFERKQBjkQQERGRUxTooahc4qmARQQRERE1wCTc4C7qn84wtZwagkUEERGRFhShh6JyOkPh6QwiIiJqSA30MKmMRNTwdAYRERE1xPaciPptropFBBERkQZqbMyJqOHpDCIiImqI7Us8W85IhEtnajabMXv2bERFRcHLywtdu3bF/PnzIVpQlUZERKSmRrjZXFoKlx6JeOutt7BkyRKsXr0avXr1wp49e5CcnIyAgAC88MILWqdHRETkNMXGo8A5J0KSnTt3YtSoURg5ciQAIDIyEp988glyc3M1zoyIiOjG1Ag3uLXwOREuXe4MHjwYWVlZ+OmnnwAA+/fvx44dO3D//ffb3Ka6uhplZWVWCxERkaupu0+E2uKMxYsXIzIyEkajEXFxcQ3+h3vVqlXQ6XRWi9FodHifLj0S8corr6CsrAzR0dFwc3OD2WzGG2+8gQkTJtjcJiMjA3Pnzm2ynL4s7y0tVpD7FWmxTtW2lRari3uJlDgVikFKHACoEvK+qqdrvaTFKlMcP+hsGeO/T1qsg9Vh0mI95ntBWqz/K42SFkum7VfDpcW6x/u0lDh/rpTXVwa9vIdLj/c7KS3W0tJoabHcJN1bobLGDEDOb2BjzADM0Km2O2rt2rVITU3F0qVLERcXh8zMTCQmJqKgoADBwcGq2/j7+6OgoMDyWqern0tjXHok4rPPPsNHH32Ejz/+GHl5eVi9ejXeffddrF692uY2s2bNwuXLly3LqVOnmjFjIiIi+9Qo7jYXRy1cuBCTJ09GcnIyevbsiaVLl8Lb2xsrVqywuY1Op0NoaKhlCQkJcXi/Lj0S8d///d945ZVX8MQTTwAA+vTpgxMnTiAjIwNJSUmq2xgMBhgM8v4HTERE1BQEdFBURiLEb23Xn4639e+byWTC3r17MWvWLEubXq9HQkICcnJybO6/vLwcERERUBQFt912G95880306tXLoc/g0iMRlZWV0OutU3Rzc4OiKBplREREJEeN4mZzAYDw8HAEBARYloyMDNU458+fh9lsrjeSEBISgqKiItVtbr31VqxYsQJffvkl1qxZA0VRMHjwYJw+7djpOJceiXjooYfwxhtvoHPnzujVqxf27duHhQsX4qmnntI6NSIiohtitnGJZ13bqVOn4O/vb2mXOcoeHx+P+Ph4y+vBgwejR48eWLZsGebPn293HJcuIhYtWoTZs2dj6tSpKCkpQVhYGJ577jmkpaVpnRoREdENqbVxiWetuDba7u/vb1VE2BIUFAQ3NzcUFxdbtRcXFyM0NNSuXDw8PNC/f38cO3bMrvXruPTpDD8/P2RmZuLEiRO4evUqjh8/jtdffx2enp5ap0ZERHRDzEJnc3GEp6cnBgwYgKysLEuboijIysqyGm1oMBezGQcPHkSHDh0c2rdLj0QQERHdrMyKG2qV+iMRZifm/aWmpiIpKQmxsbEYNGgQMjMzUVFRgeTkZADAxIkT0bFjR8u8innz5uH2229Ht27dUFpainfeeQcnTpzAM88849B+WUQQERFpwAydjftEOH6/hnHjxuHcuXNIS0tDUVERYmJisGnTJstky5MnT1pdqHDp0iVMnjwZRUVFCAwMxIABA7Bz50707NnTof2yiCAiItJAraKHXmUkolZx5nZTQEpKClJSUlTfy87Otnr93nvv4b333nNqP7/HIoKIiEgDio37RKi1uSoWEURERBqwNYnS0YmVWmIRQUREpIFa4aZ+OkPlsk9XxSKCiIhIA43d9rolYBFBRESkgVrFDTrViZUciSAiIqIGKEIHRWX+g1qbq2IRQUREpIFaoYdO1L9xdK1Km6tiEUFERKQBjkQQERGRU2oVPXSKykiESpurYhHhoEf9DkmLtafavqer2aPMbJQWa+Xl3lLijPE7ICUOABypCZIWy0Pn3N3g1Awx/iotVkFN40/rs5dRXyMt1odX5H1Pnbmdry351cHSYl0w+0qLtbI0Rkocs8Qh7du8fpEWq1rUSov1hzY/SovlrZfzYMYys+PPrXCWgPqNpUSzZXDjWEQQERFpoFbRAxyJICIiIkdxTgQRERE5hUUEEREROcVs4xJPmfNhmhqLCCIiIg1wJIKIiIicYrZxiaeZEyuJiIioIULoIFRGHdTaXBWLCCIiIg0oQgezwtMZRERE5CAFOuhUbjaldgMqV8UigoiISANmGzeb4pwIIiIiapAQ1xa19paCRQQREZEGFBtXZygciSAiIqKGKEIHXQu/T4TLlzu//vor/uu//gvt2rWDl5cX+vTpgz179midFhER0Q2pO52htrQULj0ScenSJdxxxx0YNmwY/vWvf6F9+/Y4evQoAgMDtU6NiIjohiiKzsbpDI5ESPHWW28hPDwcK1euxKBBgxAVFYURI0aga9euWqdGRER0Q0QDizMWL16MyMhIGI1GxMXFITc3167tPv30U+h0OowePdrhfbp0EfGPf/wDsbGxeOyxxxAcHIz+/ftj+fLlDW5TXV2NsrIyq4WIiMjVCEVnc3HU2rVrkZqaivT0dOTl5aFfv35ITExESUlJg9v98ssvePnllzFkyBCnPoNLFxE///wzlixZgu7du2Pz5s2YMmUKXnjhBaxevdrmNhkZGQgICLAs4eHhzZgxERGRnX677fX1C5yYWLlw4UJMnjwZycnJ6NmzJ5YuXQpvb2+sWLHC5jZmsxkTJkzA3Llz0aVLF6c+gkvPiVAUBbGxsXjzzTcBAP3798ehQ4ewdOlSJCUlqW4za9YspKamWl6XlZVJLSSMOnnnqgYbi6XFCtB7Sov1c81JabFkGWy4KC3W0VoPabE+KesrLVaYxyVpsSI9zkuLNczrnLRYn5R1kxbLqKuRFqtSkXf81Ag3KXE8dGYpcQBgV4W8fs+7Wist1qN++6XFKqjykxKnslJevzdGUXSA2m2vf2u7fiTdYDDAYDDUW99kMmHv3r2YNWuWpU2v1yMhIQE5OTk29z9v3jwEBwfj6aefxr///W+nPoNLj0R06NABPXv2tGrr0aMHTp60/Y+cwWCAv7+/1UJERORy6kYd1BYA4eHhViPrGRkZqmHOnz8Ps9mMkJAQq/aQkBAUFRWpbrNjxw588MEHjU4RaIxLj0TccccdKCgosGr76aefEBERoVFGREREcgjl2qLWDgCnTp2y+o+w2iiEM65cuYInn3wSy5cvR1BQ0A3Fcuki4sUXX8TgwYPx5ptv4vHHH0dubi7+/Oc/489//rPWqREREd2Qxh4Fbu9oelBQENzc3FBcbH2KvLi4GKGhofXWP378OH755Rc89NBDljZFuVa5uLu7o6CgwO6rIF36dMbAgQPxxRdf4JNPPkHv3r0xf/58ZGZmYsKECVqnRkREdEOEsHF1hoMTKz09PTFgwABkZWVZ2hRFQVZWFuLj4+utHx0djYMHDyI/P9+yPPzwwxg2bBjy8/Mdmkfo0iMRAPDggw/iwQcf1DoNIiIiuWzdFMKJG0WkpqYiKSkJsbGxGDRoEDIzM1FRUYHk5GQAwMSJE9GxY0dkZGTAaDSid+/eVtu3adMGAOq1N8bliwgiIqKbk+63Ra3dMePGjcO5c+eQlpaGoqIixMTEYNOmTZbJlidPnoReL//kA4sIIiIiLSi/LWrtTkhJSUFKSorqe9nZ2Q1uu2rVKqf2ySKCiIhIC7ZuLNWCnuLJIoKIiEgDjV3i2RKwiCAiItICRyKIiIjIGTrl2qLW3lKwiCAiItICRyKIiIjIKZKvztCC3ReNnjlzpinzICIial1EA0sLYXcR0atXL3z88cdNmQsREVGroVN0NpeWwu4i4o033sBzzz2Hxx57DBcvXmzKnIiIiG5+rWkkYurUqThw4AAuXLiAnj174p///GdT5kVEREQuzqGJlVFRUfjmm2/wpz/9CWPHjkWPHj3g7m4dIi8vT2qCRERENyOdUD91obuZr844ceIE1q1bh8DAQIwaNapeEXGz21EVIi3W3cYSabEKaszSYt3q4SElzpnaailxAODnWnnfsxrhJi1WnPcxabF6elRJi3XGLO9HaEdVoLRYbd3LpcWqFAZpsRQh78FED/vnS4nTzV1eTntMntJidZH4d5hXHSwtVqnZW0qcq+ZaKXHsIvEpnlpx6Jd5+fLleOmll5CQkIDDhw+jffv2TZUXERHRTa1V3WzqvvvuQ25uLv70pz9h4sSJTZkTERHRza81jUSYzWYcOHAAnTp1asp8iIiIWoVWNRKxZcuWpsyDiIiodeFtr4mIiMgZrWokgoiIiCRqTXMiiIiISCIbIxEt6QFcLCKIiIi0wJEIIiIicoZOXFvU2lsKFhFERERa4EgEEREROYMjEUREROQcAfVJlC2oiJD3hBciIiKyW91IhNrijMWLFyMyMhJGoxFxcXHIzc21ue66desQGxuLNm3awMfHBzExMfjwww8d3meLKiIWLFgAnU6HGTNmaJ0KERHRDam72ZTa4qi1a9ciNTUV6enpyMvLQ79+/ZCYmIiSEvWnRbdt2xavvvoqcnJycODAASQnJyM5ORmbN292aL8tpojYvXs3li1bhr59+2qdChER0Y0TDSwOWrhwISZPnozk5GT07NkTS5cuhbe3N1asWKG6/tChQzFmzBj06NEDXbt2xfTp09G3b1/s2LHDof22iCKivLwcEyZMwPLlyxEYGKh1OkRERDessZGIsrIyq6W6ulo1jslkwt69e5GQkGBp0+v1SEhIQE5OTqN5CCGQlZWFgoIC3HXXXQ59hhZRREybNg0jR4606iBbqqur63U8ERGRy2lkJCI8PBwBAQGWJSMjQzXM+fPnYTabERISYtUeEhKCoqIim7u/fPkyfH194enpiZEjR2LRokW49957HfoILn91xqeffoq8vDzs3r3brvUzMjIwd+7cJsunjb5SWqxzirwpuBHu8mL9rTxUSpwT1UFS4gBAN6PtA8FRNULe194s8Wl7u6/6Sos1xPsnabF+MbWXFusOr2PSYn13tZu0WNMCD0qLtafaW0qcDSY/KXEA4GKtvO+Wj1ehtFieOrO0WJ09LkqJU+EuL6fGNPYArlOnTsHf39/SbjAYpO7fz88P+fn5KC8vR1ZWFlJTU9GlSxcMHTrU7hguXUScOnUK06dPx5YtW2A0Gu3aZtasWUhNTbW8LisrQ3h4eFOlSERE5JxGbjbl7+9vVUTYEhQUBDc3NxQXF1u1FxcXIzTU9n8K9Xo9unW7VozHxMTghx9+QEZGhkNFhEufzti7dy9KSkpw2223wd3dHe7u7ti+fTvef/99uLu7w2yuXzEaDAZLx9v7F0BERNTcZF3i6enpiQEDBiArK8vSpigKsrKyEB8fb3ccRVFszruwxaVHIoYPH46DB62HGZOTkxEdHY2ZM2fCzc1No8yIiIhukAL1m005cYlnamoqkpKSEBsbi0GDBiEzMxMVFRVITk4GAEycOBEdO3a0zKvIyMhAbGwsunbtiurqamzcuBEffvghlixZ4tB+XbqI8PPzQ+/eva3afHx80K5du3rtRERELYnut0Wt3VHjxo3DuXPnkJaWhqKiIsTExGDTpk2WyZYnT56EXv+fkw8VFRWYOnUqTp8+DS8vL0RHR2PNmjUYN26cQ/t16SKCiIjoZtXYxEpHpaSkICUlRfW97Oxsq9evv/46Xn/9ded29Dstroi4viOIiIhaJD7Fk4iIiJyhEzZGIlhEEBERUYM4EkFERETOkD0nQgssIoiIiDRg654QPJ1BREREDZN4nwitsIggIiLSAEciiIiIyDmcWElERETO0CkCOpWnOau1uSoWEURERBrg6QwiIiJyCi/xJCIiIudwTgQRERE5gyMRrZDZqYe0qttSES0t1kO+P0iLNdB4UkqcGMNpKXFka6s3S4tl1OkbX8lOFULeL8d+U5C0WAO9fpYWq5uHvP9ilZiLpMXaURUgLVYbfaWUOD9VdZASBwDu9PlJWqwis7+0WH76KmmxKhWDlDjVQt4xbY+WNP9BDYsIIiIiDfDqDCIiInIO50QQERGRM3RmQO2MqE7eGdcmxyKCiIhIA7xPBBERETlHiGuLWnsLwSKCiIhIA7zEk4iIiJzC0xlERETkFF7iSURERM7hJZ5ERETkDJ1ZQKdXGYkwt5wqonnv70lERETXiAYWJyxevBiRkZEwGo2Ii4tDbm6uzXWXL1+OIUOGIDAwEIGBgUhISGhwfVtYRBAREWlAJ4RlXoTV4sQlnmvXrkVqairS09ORl5eHfv36ITExESUlJarrZ2dnY/z48di2bRtycnIQHh6OESNG4Ndff3VovywiiIiINFB3dYba4qiFCxdi8uTJSE5ORs+ePbF06VJ4e3tjxYoVqut/9NFHmDp1KmJiYhAdHY2//OUvUBQFWVlZDu2XRQQREZEGVEchfnfFRllZmdVSXV2tGsdkMmHv3r1ISEiwtOn1eiQkJCAnJ8euXCorK1FTU4O2bds69BlcuojIyMjAwIED4efnh+DgYIwePRoFBQVap0VERHTjlAYWAOHh4QgICLAsGRkZqmHOnz8Ps9mMkJAQq/aQkBAUFRXZlcrMmTMRFhZmVYjYw6Wvzti+fTumTZuGgQMHora2Fv/zP/+DESNG4MiRI/Dx8dE6PSIiIqfphPr8h7q2U6dOwd/f39JuMBiaJI8FCxbg008/RXZ2NoxGo0PbunQRsWnTJqvXq1atQnBwMPbu3Yu77rpLo6yIiIgkUMS1Ra0dgL+/v1URYUtQUBDc3NxQXFxs1V5cXIzQ0NAGt3333XexYMECbN26FX379rU/99+49OmM612+fBkAGjxnU11dXe88EhERkauRNbHS09MTAwYMsJoUWTdJMj4+3uZ2b7/9NubPn49NmzYhNjbWqc/g0iMRv6coCmbMmIE77rgDvXv3trleRkYG5s6d22R5xBrKpcXKqZB3SsZP7aH0TtpY3l1KnIu1vlLiAMD4gL3SYrV1kzck+K/KQGmxRnhdlBZrT0UXabGG+R2RFutEba20WD569UlmzmjvdlVarJ1Xo6TECXSvkBIHAGINldJi7arWSYvV0U3e72kR5Dy1Sq9vvqdf6cwCOpWKwZmbTaWmpiIpKQmxsbEYNGgQMjMzUVFRgeTkZADAxIkT0bFjR8u8irfeegtpaWn4+OOPERkZaZk74evrC19f+3+7W0wRMW3aNBw6dAg7duxocL1Zs2YhNTXV8rqsrAzh4eFNnR4REZFjJD4KfNy4cTh37hzS0tJQVFSEmJgYbNq0yTLZ8uTJk9Dr//OfzSVLlsBkMuHRRx+1ipOeno45c+bYvd8WUUSkpKRgw4YN+Pbbb9GpU6cG1zUYDE02+YSIiEgW2Q/gSklJQUpKiup72dnZVq9/+eUXp/ZxPZcuIoQQeP755/HFF18gOzsbUVFyhgmJiIg0J3EkQisuXURMmzYNH3/8Mb788kv4+flZztkEBATAy8tL4+yIiIicp1OE6vyHlvQocJe+OmPJkiW4fPkyhg4dig4dOliWtWvXap0aERHRjRH4z2iE1aJ1YvZz6ZEI0YKGdIiIiBxitvHIzhb0KHCXLiKIiIhuVo3dsbIlYBFBRESkBU6sJCIiIqcoCqBTubmV0nw3vLpRLCKIiIi0oABQuwFoy6khWEQQERFpQaco0KmMROg4EkFEREQNUmw8basF3SeCRQQREZEWhKI+/0FwJIKIiIgawqsziIiIyClmMyDM9dsVlTYXxSKCiIhICxyJICIiIqeYFfX5D7w6g4iIiBpU9wAutfYWgkWEg9aU3aJ1Cqr+XNpPWqwx/vlS4nhIPBLC3A3SYm2oaCctVo1wkxbr66ttpcX6n6CD0mJVCpO0WIsu9pcWK8DtqrRYyQEF0mKZhZyHI/8/P3k5+eq9pcUKdSuXFuuCIu+4rpAUq6I55yPwdAYRERE5hRMriYiIyCkciSAiIiJnCLMZQmUkQnAkgoiIiBokhPotrjkSQURERA0ymwGdyqiD2jwJF8UigoiISAtCQPV6To5EEBERUUOE2QyhMhKhNk/CVcm5oJmIiIgcowjbixMWL16MyMhIGI1GxMXFITc31+a6hw8fxiOPPILIyEjodDpkZmY6tU8WEURERBoQZuXaaES9xfHbXq9duxapqalIT09HXl4e+vXrh8TERJSUlKiuX1lZiS5dumDBggUIDQ11+jOwiCAiItKCUGwvDlq4cCEmT56M5ORk9OzZE0uXLoW3tzdWrFihuv7AgQPxzjvv4IknnoDB4PzdPjkngoiISAM1iglCZWJlLWoAAGVlZVbtBoNB9R98k8mEvXv3YtasWZY2vV6PhIQE5OTkSM7aGosIIiKiZuTp6YnQ0FDsKNpgcx1fX1+Eh4dbtaWnp2POnDn11j1//jzMZjNCQkKs2kNCQvDjjz9KydkWFhFERETNyGg0orCwECaT7YfbCSGg0+ms2m7ktENTYRFBRETUzIxGI4xGo5RYQUFBcHNzQ3FxsVV7cXHxDU2atEeLmFjpyGUrRERErYmnpycGDBiArKwsS5uiKMjKykJ8fHyT7tvliwhHL1shIiJqbVJTU7F8+XKsXr0aP/zwA6ZMmYKKigokJycDACZOnGg18dJkMiE/Px/5+fkwmUz49ddfkZ+fj2PHjjm0X5cvIhy9bIWIiKi1GTduHN59912kpaUhJiYG+fn52LRpk2Wy5cmTJ3H27FnL+mfOnEH//v3Rv39/nD17Fu+++y769++PZ555xqH9uvScCGcuW6murkZ1dbXl9eXLlwH8dsmMhNuRXy2vvfEgv6mqrZEWy6z2EBcnlescv0ZZjbuMDv9NmbucnACgskJeX8n7GwQUiX+HZU7crMaWSieuWbelqlxejxnc5B2LZXp5n1HWb8QVif3u5iYvVrnJNb9bFWY5x09l+bU4ogU9v6JOSkoKUlJSVN/Lzs62eh0ZGSnlM7p0EeHMZSsZGRmYO3duvfYd2Cglp+yBUsK4tHlaJ9DkTmmdQCt2tvFVNPCK1GhnpESZLiUKOevKlSsICAjQOg2X59JFhDNmzZqF1NRUy2tFUXDx4kW0a9eu3uUydcrKyhAeHo5Tp07B39+/uVKVpiXnz9y10ZJzB1p2/sxdG/bmLoTAlStXEBYW1ozZtVwuXUQ4c9mK2h292rRpY9f+/P39W9yB8XstOX/mro2WnDvQsvNn7tqwJ3eOQNjPpSdWannZChERETXMpUcigGuXrSQlJSE2NhaDBg1CZmam1WUrREREpA2XLyLGjRuHc+fOIS0tDUVFRYiJibG6bEUGg8GA9PR0l7ylqD1acv7MXRstOXegZefP3LXRknN3ZTrREq9jISIiIs259JwIIiIicl0sIoiIiMgpLCKIiIjIKSwiiIiIyCmtpohw9HHin3/+OaKjo2E0GtGnTx9s3CjnttmOysjIwMCBA+Hn54fg4GCMHj0aBQUFDW6zatUq6HQ6q0XWc+sdMWfOnHp5REdHN7iNq/R7ZGRkvdx1Oh2mTZumur6Wff7tt9/ioYceQlhYGHQ6HdavX2/1vhACaWlp6NChA7y8vJCQkICjR482GtfRY6Yp8q+pqcHMmTPRp08f+Pj4ICwsDBMnTsSZMw3fWtqZ757s3AFg0qRJ9fK47777Go3bHH3fWO5q33+dTod33nnHZszm6nd7fherqqowbdo0tGvXDr6+vnjkkUfq3bjwes4eK61ZqygiHH2c+M6dOzF+/Hg8/fTT2LdvH0aPHo3Ro0fj0KFDzZw5sH37dkybNg3ff/89tmzZgpqaGowYMQIVFRUNbufv74+zZ89alhMnTjRTxtZ69epllceOHTtsrutK/b57926rvLds2QIAeOyxx2xuo1WfV1RUoF+/fli8eLHq+2+//Tbef/99LF26FLt27YKPjw8SExNRVVVlM6ajx0xT5V9ZWYm8vDzMnj0beXl5WLduHQoKCvDwww83GteR715T5F7nvvvus8rjk08+aTBmc/V9Y7n/PuezZ89ixYoV0Ol0eOSRRxqM2xz9bs/v4osvvoh//vOf+Pzzz7F9+3acOXMGY8eObTCuM8dKqydagUGDBolp06ZZXpvNZhEWFiYyMjJU13/88cfFyJEjrdri4uLEc88916R52qOkpEQAENu3b7e5zsqVK0VAQEDzJWVDenq66Nevn93ru3K/T58+XXTt2lUoiqL6vqv0OQDxxRdfWF4riiJCQ0PFO++8Y2krLS0VBoNBfPLJJzbjOHrMyHJ9/mpyc3MFAHHixAmb6zj63ZNBLfekpCQxatQoh+Jo0ff29PuoUaPEPffc0+A6WvS7EPV/F0tLS4WHh4f4/PPPLev88MMPAoDIyclRjeHssdLa3fQjEXWPE09ISLC0NfY48ZycHKv1ASAxMdHm+s2p7tHmbdu2bXC98vJyREREIDw8HKNGjcLhw4ebI716jh49irCwMHTp0gUTJkzAyZMnba7rqv1uMpmwZs0aPPXUUzYf4ga4Tp//XmFhIYqKiqz6NSAgAHFxcTb71ZljpjldvnwZOp2u0WfiOPLda0rZ2dkIDg7GrbfeiilTpuDChQs213XVvi8uLsZXX32Fp59+utF1tej3638X9+7di5qaGqt+jI6ORufOnW32ozPHCrWC0xkNPU68qKhIdZuioiKH1m8uiqJgxowZuOOOO9C7d2+b6916661YsWIFvvzyS6xZswaKomDw4ME4ffp0M2YLxMXFYdWqVdi0aROWLFmCwsJCDBkyBFeuXFFd31X7ff369SgtLcWkSZNsruMqfX69ur5zpF+dOWaaS1VVFWbOnInx48c3+BAlR797TeW+++7DX//6V2RlZeGtt97C9u3bcf/998NsNquu76p9v3r1avj5+TV6OkCLflf7XSwqKoKnp2e9QrOx3/26dezdhlrAba/pP6ZNm4ZDhw41eo4xPj7e6gFlgwcPRo8ePbBs2TLMnz+/qdO0uP/++y1/7tu3L+Li4hAREYHPPvvMrv/RuIoPPvgA999/f4OPBnaVPr+Z1dTU4PHHH4cQAkuWLGlwXVf57j3xxBOWP/fp0wd9+/ZF165dkZ2djeHDhzdbHjdqxYoVmDBhQqOThbXod3t/F6lp3PQjEc48Tjw0NNSh9ZtDSkoKNmzYgG3btqFTp04Obevh4YH+/fvj2LFjTZSdfdq0aYNbbrnFZh6u2O8nTpzA1q1b8cwzzzi0nav0eV3fOdKvzhwzTa2ugDhx4gS2bNni8GOoG/vuNZcuXbogKCjIZh6u2Pf//ve/UVBQ4PAxADR9v9v6XQwNDYXJZEJpaanV+o397tetY+821AqKCGceJx4fH2+1PgBs2bJFk8ePCyGQkpKCL774At988w2ioqIcjmE2m3Hw4EF06NChCTK0X3l5OY4fP24zD1fq9zorV65EcHAwRo4c6dB2rtLnUVFRCA0NterXsrIy7Nq1y2a/OnPMNKW6AuLo0aPYunUr2rVr53CMxr57zeX06dO4cOGCzTxcre+BayNxAwYMQL9+/Rzetqn6vbHfxQEDBsDDw8OqHwsKCnDy5Emb/ejMsUJoHVdnfPrpp8JgMIhVq1aJI0eOiGeffVa0adNGFBUVCSGEePLJJ8Urr7xiWf+7774T7u7u4t133xU//PCDSE9PFx4eHuLgwYPNnvuUKVNEQECAyM7OFmfPnrUslZWVlnWuz3/u3Lli8+bN4vjx42Lv3r3iiSeeEEajURw+fLhZc3/ppZdEdna2KCwsFN99951ISEgQQUFBoqSkRDVvV+p3Ia7Niu/cubOYOXNmvfdcqc+vXLki9u3bJ/bt2ycAiIULF4p9+/ZZrl5YsGCBaNOmjfjyyy/FgQMHxKhRo0RUVJS4evWqJcY999wjFi1aZHnd2DHTXPmbTCbx8MMPi06dOon8/HyrY6C6utpm/o1995oj9ytXroiXX35Z5OTkiMLCQrF161Zx2223ie7du4uqqiqbuTdX3zf2vRFCiMuXLwtvb2+xZMkS1Rha9bs9v4t/+MMfROfOncU333wj9uzZI+Lj40V8fLxVnFtvvVWsW7fO8tqeY4WstYoiQgghFi1aJDp37iw8PT3FoEGDxPfff2957+677xZJSUlW63/22WfilltuEZ6enqJXr17iq6++auaMrwGguqxcudKyzvX5z5gxw/JZQ0JCxAMPPCDy8vKaPfdx48aJDh06CE9PT9GxY0cxbtw4cezYMZt5C+E6/S6EEJs3bxYAREFBQb33XKnPt23bpvodqctPURQxe/ZsERISIgwGgxg+fHi9zxQRESHS09Ot2ho6Zpor/8LCQpvHwLZt22zm39h3rzlyr6ysFCNGjBDt27cXHh4eIiIiQkyePLleMaBV3zf2vRFCiGXLlgkvLy9RWlqqGkOrfrfnd/Hq1ati6tSpIjAwUHh7e4sxY8aIs2fP1ovz+23sOVbIGh8FTkRERE656edEEBERUdNgEUFEREROYRFBRERETmERQURERE5hEUFEREROYRFBRERETmERQURERE5hEUFEREROYRFBRERETmERQdRKmM1mDB48GGPHjrVqv3z5MsLDw/Hqq69qlBkRtVS87TVRK/LTTz8hJiYGy5cvx4QJEwAAEydOxP79+7F79254enpqnCERtSQsIohamffffx9z5szB4cOHkZubi8ceewy7d+926lHPRNS6sYggamWEELjnnnvg5uaGgwcP4vnnn8drr72mdVpE1AKxiCBqhX788Uf06NEDffr0QV5eHtzd3bVOiYhaIE6sJGqFVqxYAW9vbxQWFuL06dNap0NELRRHIohamZ07d+Luu+/G119/jddffx0AsHXrVuh0Oo0zI6KWhiMRRK1IZWUlJk2ahClTpmDYsGH44IMPkJubi6VLl2qdGhG1QByJIGpFpk+fjo0bN2L//v3w9vYGACxbtgwvv/wyDh48iMjISG0TJKIWhUUEUSuxfft2DB8+HNnZ2bjzzjut3ktMTERtbS1PaxCRQ1hEEBERkVM4J4KIiIicwiKCiIiInMIigoiIiJzCIoKIiIicwiKCiIiInMIigoiIiJzCIoKIiIicwiKCiIiInMIigoiIiJzCIoKIiIicwiKCiIiInPL/AWqAKqwTgN7TAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "vf.plot_slice('c', 2, direction='z')" ] } ], "metadata": { "kernelspec": { "display_name": "voxenv", "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.12.11" } }, "nbformat": 4, "nbformat_minor": 5 }