{ "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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+/3w4cOIjY01W6dbt24Arv9VKFfHGsuXL8eCBQswZ84czJ071+rtQkND8cMPP0CSJJPeiGPHjhnX26p79+6QJAlHjx5FZGSkzdsrbfHixdiyZQs2bdqEiIgIq7bZuHEjunXrhk2bNpn0WtyYQNo6PNOcd+Ps3r07hBAIDw9Hz549bd4+MjISO3fuRGVlpUnitXfvXuN6opaCcyKoWezcudPsX7dffvklAOD222+3OtYdd9yB8PBwZGZmory83GRdwz78/f0xatQorFy50myCcuHChSb3s379ejz33HOYOnUqli5danX7AOCBBx5ASUmJyR0u6+vrsWzZMnh5eWHkyJE2xQOA+Ph4qNVqLFy40NjT0sDangOl7NixA6+++ipeeeUVxMfHW71dw1/uf2zv3r17kZeXZ1LPw8MDABqdXzkN9+ywtv7NmDBhAjQaDdLT0xu970IIXLp0yeL2EydOhMFgwN/+9jdjWW1tLdasWYPo6GhemUEtCnsiqFk8++yzqK6uxvjx4xEREQG9Xo89e/Zg/fr1CAsLQ2JiotWx1Go1VqxYgYceegiRkZFITExE586dcezYMRw5cgTbtm0DcL0XYdiwYejXrx9mzJiBbt26obS0FHl5eTh37hwOHjwou4/8/HxMmzYNHTp0wJgxY/Dhhx+arB86dKixt8Ocp59+GitXrsT06dOxf/9+hIWFYePGjfj222+RmZkJb29vq4+3wW233YZXXnkFr732GoYPH44JEyZAp9Nh3759CAoKQkZGhs0x7TVlyhR06tQJPXr0wLp160zW3XPPPQgICDC73YMPPohNmzZh/PjxGDt2LIqKipCVlYXevXubXDLq7u6O3r17Y/369ejZsyfat2+Pvn37ys6DiYyMhEajwZtvvomKigrodDrcfffdTd6DxB7du3fH66+/jnnz5uH06dOIj4+Ht7c3ioqKsHnzZjz99NPGm0iZEx0djUmTJmHevHkoKyvDbbfdhrVr1+L06dN47733FG8v0S3lmItCqK356quvxBNPPCEiIiKEl5eX0Gq14rbbbhPPPvusKC0tNanb1CWeDXbv3i3uuece4e3tLTw9PUX//v0bXZp46tQpMW3aNBEYGChcXV1FcHCwePDBB8XGjRsttnfNmjUCgOyyZs2aJo+5tLRUJCYmio4dOwqtViv69etndjtrL/FssHr1ajFw4ECh0+mEn5+fGDlypNi+fbvFbeQu8UxKSjLbnj++/+ZYem/MXWbZQJIk8cYbb4jQ0FCh0+nEwIEDxeeffy4SEhJMLqMUQog9e/aIQYMGCa1Wa9XlnqtWrRLdunUTGo3GpB1yl3hu2LDBZPuGc75v3z6T8ob37sKFCybl//jHP8SwYcOEp6en8PT0FBERESIpKUkcP37cYjuFEOLatWvixRdfFIGBgUKn04nBgweLrVu3NrkdkbPhszOIiIjILpwTQURERHZhEkFERER2YRJBREREdnFoEvHNN9/goYceQlBQEFQqFbZs2WKyXgiB1NRUdO7cGe7u7oiNjcWJEycc01giIiIy4dAkoqqqCgMGDMDy5cvNrn/rrbfw7rvvIisrC3v37oWnpyfi4uKMt4clIiIix3GaqzNUKhU2b95svHGNEAJBQUF44YUXjNdcV1RUICAgANnZ2Xjssccc2FoiIiJy2ptNFRUVoaSkxOSWxb6+voiOjkZeXp5sElFbW2vycJuGJwV26NChWW+NS0RELY8QAleuXEFQUFCjB+hRY06bRJSUlABAozvfBQQEGNeZk5GRgfT09FvaNiIiat2Ki4vRpUsXRzfD6TltEmGvefPmISUlxfi6oqICXbt2xTA8ABdYfkSvtR7cd1GROA081I0fC3wzHvL8VbFYxfXKjnb10ir7mOMd1VpF4w13r1I03v/8ptxjuwFgqu8BxWKtvjxEsVgAMNF3v6LxlP6svF+p7C2wa4QyvycNnvZt/GTPm/HGReseimaNZ/yUPbdlBmX/wq+QdIrFqroqYeLQs3bdmr4tctokIjAwEABQWlqKzp07G8tLS0stPuVOp9NBp2v8gXKBK1xUynzp3b2Ufdvc1QZF4/l4KfcF9VI4ifDRKvvj4SHz2GZ7+bgr2z43vbL/0Hh7K9c+XZ2ybfNSsG2A8p8Vd0nZ761KKBvPR+H3T1ej3PlV8nMHANUKJxH1kvLDDhz+to7TDviEh4cjMDAQOTk5xrLKykrs3bsXMTExDmwZERERAQ7uibh69SpOnjxpfF1UVITCwkK0b98eXbt2xZw5c/D666+jR48eCA8Px/z58xEUFGTTo4eJiIjo1nBoEvH9999j9OjRxtcNcxkSEhKQnZ2Nl156CVVVVXj66adRXl6OYcOGYevWrXBzc3NUk4mIiOh3Dk0iRo0aBUu3qVCpVFi4cCEWLlzYjK0iIiK6tWpqaqDX6y3W0Wq1Tv9Hs9NOrCQiImqNampqEB7qhZIyy5PqAwMDUVRU5NSJBJMIIiKiZqTX61FSZkDR/lDZq3Iqr0gIH3QGer2eSQQRERGZcvcScPcyP6Rf5xxPpGgSkwgiIiIHkCBBsrCuJWASQURE5AB1QkKdTIdDnWASQURERDIkCBhgPouQZMqdDZMIIiIiB5AgZJMFJhFEREQkq04I2QmUnFhJREREsgwWhjPkyp0NkwgiIiIHMIjri9y6loBJBBERkQPUQ4U6mH/keL1MubNhEkFEROQAkri+yK1rCZhEEBEROYAeauhh/rbXlh/N5TyYRNghzvO4ovGO1nVUNN7fynsrFmuizw+KxQKAb2oUDYcRblcUjbe7xl3ReMM8f1I03o7qborFSvTLUywWAORU91Q0XoDmhKLxDDI/1va6WOetaLxaUadovEd89ysW6/2KforFAoBhCv+GVkk6BWNZfiiWkiShgiTMD1vIlTsbJhFEREQOYIAKBpm5D3LlzoZJBBERkQPUCw3qhPkesnr2RBAREZEc9kQQERGRXeqEBnVCI7Ou+eZm3AwmEURERA7AnggiIiKyi0GoYZCZE2HgszOIiIhITj00qIP54Yz6Zm6LvZhEEBEROQB7IoiIiMguEtSQZG6CJvEpnkRERCRHLzRwkbk6Q98ycggmEURERI4gCTUkmeEMicMZREREJKcOaujl7hPB4QwiIiKSY3lOhLIPjLtVmEQQERE5gOWrM5hEEBERkYw6CxMr61rInAinTnUMBgPmz5+P8PBwuLu7o3v37njttdcgWsibS0REJMcAtcWlJXDqnog333wTK1aswNq1a9GnTx98//33SExMhK+vL5577jlHN4+IiMhu9RYewFXfQv5YduokYs+ePRg3bhzGjh0LAAgLC8PHH3+M/Px8B7eMiIjo5li+xLNl9EQ4dSuHDh2KnJwc/PTTTwCAgwcPYvfu3bj//vtlt6mtrUVlZaXJQkRE5GwanuIpt7QETt0T8fLLL6OyshIRERHQaDQwGAxYtGgRpk6dKrtNRkYG0tPTb2m7fjV4KBovWFOhaLwarVaxWCUGnWKxAEADSdF4ayq7KxpvgtePisbbWxuoaLwHPIsUi7XityGKxQKAAFdlP8drKvorGi/O64ii8UpcvRWNt+RSP0Xj6dR1isUa7K7c5w4AOqlrFY33VeUAxWLVVtcB+EmxeJbUCTU0shMrbf+tXL58OZYsWYKSkhIMGDAAy5Ytw5Ah5r/n2dnZSExMNCnT6XSoqamxaZ9O3RPx6aef4sMPP8RHH32EgoICrF27Fm+//TbWrl0ru828efNQUVFhXIqLi5uxxURERNZpGM6QW2yxfv16pKSkIC0tDQUFBRgwYADi4uJQVlYmu42Pjw/Onz9vXM6cOWPzMTh1T8Sf/vQnvPzyy3jssccAAP369cOZM2eQkZGBhIQEs9vodDrodMr+9UxERKQ0yxMrbeuJWLp0KWbMmGHsXcjKysIXX3yB1atX4+WXXza7jUqlQmDgzfWWOnVPRHV1NdRq0yZqNBpIkrJd4kRERM2t4WZTcguARnP8amsbDwXp9Xrs378fsbGxxjK1Wo3Y2Fjk5eXJ7v/q1asIDQ1FSEgIxo0bhyNHbB/yc+ok4qGHHsKiRYvwxRdf4PTp09i8eTOWLl2K8ePHO7ppREREN0USKosLAISEhMDX19e4ZGRkNIpz8eJFGAwGBAQEmJQHBASgpKTE7L5vv/12rF69Gp999hnWrVsHSZIwdOhQnDt3zqZjcOrhjGXLlmH+/PmYNWsWysrKEBQUhGeeeQapqamObhoREdFNqRMaqJuYWFlcXAwfHx9juVLD9TExMYiJiTG+Hjp0KHr16oWVK1fitddeszqOUycR3t7eyMzMRGZmpqObQkREpChrHsDl4+NjkkSY07FjR2g0GpSWlpqUl5aWWj3nwdXVFQMHDsTJkyetqt/AqYcziIiIWiuDUFlcrKXVajFo0CDk5OQYyyRJQk5Ojklvg8W2GAw4dOgQOnfubNMxOHVPBBERUWtlkDSol8wPZxhsvIAgJSUFCQkJiIqKwpAhQ5CZmYmqqirj1RrTpk1DcHCwcU7FwoULceedd+K2225DeXk5lixZgjNnzuCpp56yab9MIoiIiBzA0p0pbb1j5eTJk3HhwgWkpqaipKQEkZGR2Lp1q3Gy5dmzZ02udrx8+TJmzJiBkpIS+Pn5YdCgQdizZw969+5t036ZRBARETlAvaSGWqYnol4y2BwvOTkZycnJZtfl5uaavH7nnXfwzjvv2LyPGzGJICIicgAJKkgyPQ5y5c6GSQQREZEDWJpAacvESkdiEkFEROQA9UIjP5whc/8IZ8MkgoiIyAGEheEMweEMIiIiklMvaaCSnVjJnggiIiKS8cdnZJhb1xIwiSAiInIAXp1BREREdqmX1FBJ5p8+US9T7myYRBARETkAhzPaKG+1XtF4oS5C0XibK0MUi1UjXBWLBQBnajsqGu9Bn4OKxttX669oPKWV23Y7fYuiPH9WLhiAdupqRePtqe6haLxyyU3ReKPdaxSN10Hzg6Lx2in4O/XZlf6KxQKAI+o6ReOF68oUi3Wtrl6xWE1hEkFERER2MQgVVML8sAVvNkVERESy2BNBREREdqmX1AAnVhIREZGthFBByPQ4yJU7GyYRREREDsD7RBAREZFdDBbuE2HgcAYRERHJ4cRKIiIisoskqWV7HCT2RBAREZEcAUDI3GtQ2VsQ3jpMIoiIiBxAggoqTqwkIiIiWxks3CeCEyuJiIhIlhAWhjNayHgGkwgiIiIH4M2miIiIyC6tYTjD6Vv5yy+/4L/+67/QoUMHuLu7o1+/fvj+++8d3SwiIqKb0jCcIbe0BE6dRFy+fBl33XUXXF1d8dVXX+Ho0aP4y1/+Aj8/P0c3jYiI6KZIkgqSpJZZbB/OWL58OcLCwuDm5obo6Gjk5+dbtd0nn3wClUqF+Ph4m/fp1MMZb775JkJCQrBmzRpjWXh4uANbREREpAwB+ftB2NoRsX79eqSkpCArKwvR0dHIzMxEXFwcjh8/Dn9/f9ntTp8+jRdffBHDhw+3cY/XOXVPxD//+U9ERUVh0qRJ8Pf3x8CBA7Fq1SpHN4uIiOimNUyslFtssXTpUsyYMQOJiYno3bs3srKy4OHhgdWrV8tuYzAYMHXqVKSnp6Nbt252HYNTJxE///wzVqxYgR49emDbtm2YOXMmnnvuOaxdu1Z2m9raWlRWVposRERETkdSQcgssGE4Q6/XY//+/YiNjTWWqdVqxMbGIi8vT3a7hQsXwt/fH08++aTdh+DUwxmSJCEqKgpvvPEGAGDgwIE4fPgwsrKykJCQYHabjIwMpKen39J2/bMyUtF48zocVTTeWJ9CxWIN0CoW6jqvEkXDbbwarGi80jpfReMZFL7r3DC3UsVi3etepVgsAFArfKxXpHOKxlNaVrl9f7nJudvzmKLxPq6IUiyWr+aaYrEAwFutbLwOLlcVi1WtMSgWqynW3Cfixj+EdToddDqdSdnFixdhMBgQEBBgUh4QEIBjx8x/rnbv3o333nsPhYWFdrW9gVP3RHTu3Bm9e/c2KevVqxfOnj0ru828efNQUVFhXIqLi291M4mIiGwmJLXFBQBCQkLg6+trXDIyMm56v1euXMHjjz+OVatWoWPHjjcVy6l7Iu666y4cP37cpOynn35CaGio7DbmsjQiIiJnY01PRHFxMXx8fIzl5v5969ixIzQaDUpLTXsqS0tLERgY2Kj+qVOncPr0aTz00EPGMkmSAAAuLi44fvw4unfvbtUxOHVPxPPPP4/vvvsOb7zxBk6ePImPPvoIf/vb35CUlOTophEREd0c0cQCwMfHx2Qxl0RotVoMGjQIOTk5xjJJkpCTk4OYmJhG9SMiInDo0CEUFhYal4cffhijR49GYWEhQkJCrD4Ep+6JGDx4MDZv3ox58+Zh4cKFCA8PR2ZmJqZOnerophEREd0UIX6fRCmzzhYpKSlISEhAVFQUhgwZgszMTFRVVSExMREAMG3aNAQHByMjIwNubm7o27evyfbt2rUDgEblTXHqJAIAHnzwQTz44IOObgYREZGilHx2xuTJk3HhwgWkpqaipKQEkZGR2Lp1q3Gy5dmzZ6FWKz/44PRJBBERUauk5N2mACQnJyM5OdnsutzcXIvbZmdn275DMIkgIiJyDKG6vsitawGYRBARETmCwj0RjsAkgoiIyAGMd6eUWdcSMIkgIiJyBPZEEBERkV04J4KIiIjsoZKuL3LrWgImEURERI7AnggiIiKyi/T7IreuBbD69lW//vrrrWwHERFR22LFszOcndVJRJ8+ffDRRx/dyrYQERG1HQ3DGXJLC2B1ErFo0SI888wzmDRpEn777bdb2SYiIqJWr2FipdzSElidRMyaNQs//PADLl26hN69e+Nf//rXrWwXEREROTmbJlaGh4fj66+/xl//+ldMmDABvXr1gouLaYiCggJFG0hERNQaqQCoZOY+tIzBDDuuzjhz5gw2bdoEPz8/jBs3rlES0Rb8t99+RePtq3VTNN6dbq6KxlPSliovReON8/xF0Xi/SWcUjZdbHaZovKzLgxSNp6SBHqcVjRfmclnReErrpitVNN4v9T6KxjMI5R77PM77iGKxAKDEoFM0XrnBQ7FYLjAoFqtJkur6IreuBbApA1i1ahVeeOEFxMbG4siRI+jUqdOtahcREVHr1pZue33fffchPz8ff/3rXzFt2rRb2SYiIqJWr03dsdJgMOCHH35Aly5dbmV7iIiI2oa21BOxffv2W9kOIiKiNkUlLEysbG1JBBERESmorU2sJCIiImWwJ4KIiIjsY+nOlK1tYiUREREpqC1NrCQiIiIFMYkgIiIie3BOBBEREdmHPRFERERkj9bQE6HcE1qIiIjIegLXr8Iwt9iRRCxfvhxhYWFwc3NDdHQ08vPzZetu2rQJUVFRaNeuHTw9PREZGYkPPvjA5n0yiSAiInKAhp4IucUW69evR0pKCtLS0lBQUIABAwYgLi4OZWVlZuu3b98er7zyCvLy8vDDDz8gMTERiYmJ2LZtm037bVFJxOLFi6FSqTBnzhxHN4WIiOimNDyAS26xxdKlSzFjxgwkJiaid+/eyMrKgoeHB1avXm22/qhRozB+/Hj06tUL3bt3x+zZs9G/f3/s3r3bpv22mCRi3759WLlyJfr37+/ophAREd080cRiJb1ej/379yM2NtZYplarERsbi7y8vKabIQRycnJw/PhxjBgxwqZDaBFJxNWrVzF16lSsWrUKfn5+jm4OERHRzbMiiaisrDRZamtrG4W5ePEiDAYDAgICTMoDAgJQUlIiu/uKigp4eXlBq9Vi7NixWLZsGe655x6bDqFFJBFJSUkYO3asSZYlp7a2ttGbTkRE5GysGc4ICQmBr6+vccnIyFBs/97e3igsLMS+ffuwaNEipKSkIDc316YYTn+J5yeffIKCggLs27fPqvoZGRlIT0+/pW3aW9tB0XjlBk9F47mqzisWq05oFIsFACPdzE/ysZdOpVM03qYrEYrGe8r3mKLxSg2nFYv1f9e6KRYLAII1FYrGO6IPVDTeeM/fFI3nrb6oaLz3LkcrGm+M9xHFYhXW+isWCwDiPJT9rOytrVMslkHdjA+tsOI+EcXFxfDx8TEW63SNf/M6duwIjUaD0tJSk/LS0lIEBsp/j9RqNW677TYAQGRkJH788UdkZGRg1KhRVh+CU/dEFBcXY/bs2fjwww/h5uZm1Tbz5s1DRUWFcSkuLr7FrSQiIrKdNT0RPj4+Jou5JEKr1WLQoEHIyckxlkmShJycHMTExFjdHkmSzA6XWOLUPRH79+9HWVkZ7rjjDmOZwWDAN998g7/+9a+ora2FRmP6l7JOpzP7JhMRETkTJW82lZKSgoSEBERFRWHIkCHIzMxEVVUVEhMTAQDTpk1DcHCwcTgkIyMDUVFR6N69O2pra/Hll1/igw8+wIoVK2zar1MnEWPGjMGhQ4dMyhITExEREYG5c+c2SiCIiIhaDAVvez158mRcuHABqampKCkpQWRkJLZu3WqcbHn27Fmo1f8ZfKiqqsKsWbNw7tw5uLu7IyIiAuvWrcPkyZNt2q9TJxHe3t7o27evSZmnpyc6dOjQqJyIiKglUfq218nJyUhOTja77sYJk6+//jpef/1123dyA6dOIoiIiFotPoCr+dl6+QkREZEzag0P4GpxSQQREVGr0PAALrl1LQCTCCIiIgdgTwQRERHZxdKDtmx9AJejMIkgIiJyBE6sJCIiIntwOIOIiIjsI0F+YiWHM4iIiEgOeyKIiIjILipJQCWZzxbkyp0NkwgiIiJH4MRKIiIisgeHM4iIiMguvE8EERER2YfDGURERGQPDme0Uaf1nRSNl9SuWNF4yy73UDSektxUPykar5dW2T6/aoNO0XgGhf+c+NfVvorFusP9tGKxAOAXg6+i8Y5c66JovHKDp6LxIt3OKBrvYZ8Disb7uqqXYrHaa6oUiwUA26oVDYeHPZULWFmnWKimCQvDFkwiiIiISJYQ1xe5dS0AkwgiIiIH4MRKIiIisguTCCIiIrIPr84gIiIie/C210RERGQXXuJJREREduGcCCIiIrIPL/EkIiIie3A4g4iIiOzSGoYz1I5uABERUZskCcuLjZYvX46wsDC4ubkhOjoa+fn5snVXrVqF4cOHw8/PD35+foiNjbVYXw6TCCIiIgdQif/0RjRabMwh1q9fj5SUFKSlpaGgoAADBgxAXFwcysrKzNbPzc3FlClTsHPnTuTl5SEkJAT33nsvfvnlF5v2yySCiIjIERomVsotNli6dClmzJiBxMRE9O7dG1lZWfDw8MDq1avN1v/www8xa9YsREZGIiIiAn//+98hSRJycnJs2i+TCCIiIgdomFgpt1hLr9dj//79iI2NNZap1WrExsYiLy/PqhjV1dWoq6tD+/btbToGTqwkIiJyAGvuWFlZWWlSrtPpoNPpTMouXrwIg8GAgIAAk/KAgAAcO3bMqrbMnTsXQUFBJomINZy6JyIjIwODBw+Gt7c3/P39ER8fj+PHjzu6WURERDdPamIBEBISAl9fX+OSkZGheDMWL16MTz75BJs3b4abm5tN2zp1T8SuXbuQlJSEwYMHo76+Hn/+859x77334ujRo/D09HR084iIiOymEgIqmbkPDeXFxcXw8fExlt/YCwEAHTt2hEajQWlpqUl5aWkpAgMDLbbh7bffxuLFi7Fjxw7079/f1kNw7iRi69atJq+zs7Ph7++P/fv3Y8SIEQ5qFRERkQIsXcr5e7mPj49JEmGOVqvFoEGDkJOTg/j4+Oub/z5JMjk5WXa7t956C4sWLcK2bdsQFRVl1yE4dRJxo4qKCgCwOPGjtrYWtbW1xtc3jicRERE5AyXvWJmSkoKEhARERUVhyJAhyMzMRFVVFRITEwEA06ZNQ3BwsHE45M0330Rqaio++ugjhIWFoaSkBADg5eUFLy8vq/fbYpIISZIwZ84c3HXXXejbt69svYyMDKSnp9/Sttzjad1EFWt9Ud1B0XhPtzupWKwf9creNq2jpk7ReH8r76NovPE+BxSNV6fw/e8j3c4qFksSyk6JOnwtRNF4vpprisarMLgrGq9OaBSN56mubbqSDYJcyxWL9VON5S5xW3VyUfaPu39WeSgWq7rKoFispqgMAiqZbEFlsO23Y/Lkybhw4QJSU1NRUlKCyMhIbN261TjZ8uzZs1Cr//OdX7FiBfR6PSZOnGgSJy0tDQsWLLB6vy0miUhKSsLhw4exe/dui/XmzZuHlJQU4+vKykqEhCj740ZERHTTFH4AV3JysuzwRW5ursnr06dP2xzfnBaRRCQnJ+Pzzz/HN998gy5dulisa+7yFyIiIqcjfl/k1rUATp1ECCHw7LPPYvPmzcjNzUV4eLijm0RERKQIlSRBJZkfMpYrdzZOnUQkJSXho48+wmeffQZvb2/jxA9fX1+4uys7vklERNSsBIz3gzC7rgVw6ptNrVixAhUVFRg1ahQ6d+5sXNavX+/ophEREd2U63eslGSWlpFFOHVPhFB4ZjsREZHTUHhipSM4dRJBRETUakkAVBbWtQBMIoiIiBxAJUlQqTixkoiIiGzF4QwiIiKyC5MIIiIisofKIKCSuZbT1tteOwqTCCIiIkdgTwQRERHZxSBB9jIMAydWEhERkSwLPREt5JaVTCKIiIgcgcMZREREZBeDARAG8+skmXInwySCiIjIEdgTQURERHYxSICQmUDJO1YSERGRLAELPRHN2hK7MYmww76arorG+63eS9F4Gw2eisW6UO+tWCwAGOz+s6Lx7nAvUjSe0v52+Q5F4z3lV6BYLH+Ncp8TADilv6JovOEepxSNZxByTzqyTweNsr/yH1X2UTTeBO/DisUKdClXLBYA9NNWKhrv5zo3xWJVaZqxB4DDGURERGQXTqwkIiIiu7AngoiIiOwiCchOfpCYRBAREZEMIRkgZIYz5MqdDZMIIiIiRxAWeiI4nEFERESyDAZAJdPjwJ4IIiIikiMkCUJl/pJSIXcTKiejdnQDiIiI2qSGqzPkFhstX74cYWFhcHNzQ3R0NPLz82XrHjlyBI888gjCwsKgUqmQmZlp1yEwiSAiInIEg3R9SMPsYltPxPr165GSkoK0tDQUFBRgwIABiIuLQ1lZmdn61dXV6NatGxYvXozAwEC7D4FJBBERkQMISVhcbLF06VLMmDEDiYmJ6N27N7KysuDh4YHVq1ebrT948GAsWbIEjz32GHQ6nd3HwCSCiIjIAYTBYHGxll6vx/79+xEbG2ssU6vViI2NRV5e3q1ouhEnVhIRETlAvaiVfYpnPeoAAJWVps8Z0el0jXoOLl68CIPBgICAAJPygIAAHDt2TMEWN8YkgoiIqBlptVoEBgZid8mXFut5eXkhJCTEpCwtLQ0LFiy4ha2zDZMIIiKiZuTm5oaioiLo9XqL9YQQUKlMnz5rbv5Cx44dodFoUFpaalJeWlp6U5MmrdEi5kTYctkKERGRs3Nzc4OPj4/FxdfXt1GZuSRCq9Vi0KBByMnJMZZJkoScnBzExMTc0uNw+iTC1stWiIiI2pqUlBSsWrUKa9euxY8//oiZM2eiqqoKiYmJAIBp06Zh3rx5xvp6vR6FhYUoLCyEXq/HL7/8gsLCQpw8edKm/Tp9EmHrZStERERtzeTJk/H2228jNTUVkZGRKCwsxNatW42TLc+ePYvz588b6//6668YOHAgBg4ciPPnz+Ptt9/GwIED8dRTT9m0X6eeE9Fw2cofs6fmumyFiIioJUlOTkZycrLZdbm5uSavw8LCIBR4yJdTJxH2XLZSW1uL2tpa4+uKigoAv18uo9BD0a5drVcm0O9q6pWNd81FuXhKt62q3rnvB69VK9u+mqt1isa74qJc+9w0yh6r0t+Lqzbesa8pBqFqupINtBpln7JYo/D7dwXKvX9Vdco+DOqKVtlzW1Wn4LFevR5LiX9g2wKnTiLskZGRgfT09Eblu2H5Uhpb5N6hWChq9UoUjbZI0WhK+9nRDWjhSpuuYoNXFI3W9uagXbp0Cb6+vo5uhtNz6iTCnstW5s2bh5SUFOPr8vJyhIaG4uzZsy36A1FZWYmQkBAUFxfDx8fH0c2xS2s4BqB1HEdrOAaAx+FMWsMxANd7r7t27Yr27ds7uiktglMnEX+8bCU+Ph7Afy5bkRv3MXc3LwDGS2VauobLfFqy1nAMQOs4jtZwDACPw5m0hmMArs+/o6Y5dRIBXL9sJSEhAVFRURgyZAgyMzNNLlshIiIix3D6JGLy5Mm4cOECUlNTUVJSgsjISJPLVoiIiMgxnD6JACxfttIUnU6HtLS0m3rUqTNoDcfRGo4BaB3H0RqOAeBxOJPWcAxA6zmO5qISvI6FiIiI7MCZI0RERGQXJhFERERkFyYRREREZJdWkUTY+qjwDRs2ICIiAm5ubujXrx++/FK5u1naIyMjA4MHD4a3tzf8/f0RHx+P48ePW9wmOzsbKpXKZHFzc2umFje2YMGCRu2JiIiwuI2znQfg+v3kbzwOlUqFpKQks/Wd4Tx88803eOihhxAUFASVSoUtW7aYrBdCIDU1FZ07d4a7uztiY2Nx4sSJJuPa+r26WZaOo66uDnPnzkW/fv3g6emJoKAgTJs2Db/++qvFmPZ8Lm/lcQDA9OnTG7XpvvvuazJuc56Ppo7B3HdEpVJhyZIlsjGb+1xY87taU1ODpKQkdOjQAV5eXnjkkUca3dzwRvZ+n1qrFp9E2Pqo8D179mDKlCl48sknceDAAcTHxyM+Ph6HDx9u5pb/x65du5CUlITvvvsO27dvR11dHe69915UVVVZ3M7Hxwfnz583LmfOnGmmFpvXp08fk/bs3r1btq4zngcA2Ldvn8kxbN++HQAwadIk2W0cfR6qqqowYMAALF++3Oz6t956C++++y6ysrKwd+9eeHp6Ii4uDjU1NbIxbf1eKcHScVRXV6OgoADz589HQUEBNm3ahOPHj+Phhx9uMq4tn0slNHU+AOC+++4zadPHH39sMWZzn4+mjuGPbT9//jxWr14NlUqFRx55xGLc5jwX1vyuPv/88/jXv/6FDRs2YNeuXfj1118xYcIEi3Ht+T61aqKFGzJkiEhKSjK+NhgMIigoSGRkZJit/+ijj4qxY8ealEVHR4tnnnnmlrbTFmVlZQKA2LVrl2ydNWvWCF9f3+ZrVBPS0tLEgAEDrK7fEs6DEELMnj1bdO/eXUiSZHa9s50HAGLz5s3G15IkicDAQLFkyRJjWXl5udDpdOLjjz+WjWPr90ppNx6HOfn5+QKAOHPmjGwdWz+XSjN3HAkJCWLcuHE2xXHk+bDmXIwbN07cfffdFus4+lzc+LtaXl4uXF1dxYYNG4x1fvzxRwFA5OXlmY1h7/epNWvRPRENjwqPjY01ljX1qPC8vDyT+gAQFxfnVI8Wb3jyaFP3br969SpCQ0MREhKCcePG4ciRI83RPFknTpxAUFAQunXrhqlTp+Ls2bOydVvCedDr9Vi3bh2eeOIJqFTyT4B0tvPwR0VFRSgpKTF5r319fREdHS37XtvzvXKEiooKqFQqtGvXzmI9Wz6XzSU3Nxf+/v64/fbbMXPmTFy6dEm2rrOfj9LSUnzxxRd48sknm6zryHNx4+/q/v37UVdXZ/K+RkREoGvXrrLvqz3fp9auRScRlh4VXlJi/umJJSUlNtVvbpIkYc6cObjrrrvQt29f2Xq33347Vq9ejc8++wzr1q2DJEkYOnQozp0714yt/Y/o6GhkZ2dj69atWLFiBYqKijB8+HBcuXLFbH1nPw8AsGXLFpSXl2P69OmydZztPNyo4f205b2253vV3GpqajB37lxMmTLF4nMabP1cNof77rsP77//PnJycvDmm29i165duP/++2EwmH/ctrOfj7Vr18Lb27vJYQBHngtzv6slJSXQarWNktCm/v1oqGPtNq1di7hjZVuSlJSEw4cPNzlWGBMTg5iYGOProUOHolevXli5ciVee+21W93MRu6//37j//fv3x/R0dEIDQ3Fp59+atVfKM7ovffew/3334+goCDZOs52HtqCuro6PProoxBCYMWKFRbrOuPn8rHHHjP+f79+/dC/f390794dubm5GDNmjEPadDNWr16NqVOnNjmh2JHnwtrfVbJdi+6JsOdR4YGBgTbVb07Jycn4/PPPsXPnTnTp0sWmbV1dXTFw4ECcPHnyFrXONu3atUPPnj1l2+PM5wEAzpw5gx07duCpp56yaTtnOw8N76ct77U936vm0pBAnDlzBtu3b7f5aZFNfS4doVu3bujYsaNsm5z5fPzf//0fjh8/bvP3BGi+cyH3uxoYGAi9Xo/y8nKT+k39+9FQx9ptWrsWnUT88VHhDRoeFf7Hvw7/KCYmxqQ+AGzfvl22fnMQQiA5ORmbN2/G119/jfDwcJtjGAwGHDp0CJ07d74FLbTd1atXcerUKdn2OON5+KM1a9bA398fY8eOtWk7ZzsP4eHhCAwMNHmvKysrsXfvXtn32p7vVXNoSCBOnDiBHTt2oEOHDjbHaOpz6Qjnzp3DpUuXZNvkrOcDuN5bN2jQIAwYMMDmbW/1uWjqd3XQoEFwdXU1eV+PHz+Os2fPyr6v9nyfWj0HT+y8aZ988onQ6XQiOztbHD16VDz99NOiXbt2oqSkRAghxOOPPy5efvllY/1vv/1WuLi4iLffflv8+OOPIi0tTbi6uopDhw456hDEzJkzha+vr8jNzRXnz583LtXV1cY6Nx5Henq62LZtmzh16pTYv3+/eOyxx4Sbm5s4cuSIIw5BvPDCCyI3N1cUFRWJb7/9VsTGxoqOHTuKsrIys+13xvPQwGAwiK5du4q5c+c2WueM5+HKlSviwIED4sCBAwKAWLp0qThw4IDxqoXFixeLdu3aic8++0z88MMPYty4cSI8PFxcu3bNGOPuu+8Wy5YtM75u6nvV3Meh1+vFww8/LLp06SIKCwtNvie1tbWyx9HU57K5j+PKlSvixRdfFHl5eaKoqEjs2LFD3HHHHaJHjx6ipqZG9jia+3w09ZkSQoiKigrh4eEhVqxYYTaGo8+FNb+r//3f/y26du0qvv76a/H999+LmJgYERMTYxLn9ttvF5s2bTK+tub71Ja0+CRCCCGWLVsmunbtKrRarRgyZIj47rvvjOtGjhwpEhISTOp/+umnomfPnkKr1Yo+ffqIL774oplbbAqA2WXNmjXGOjcex5w5c4zHHBAQIB544AFRUFDQ/I3/3eTJk0Xnzp2FVqsVwcHBYvLkyeLkyZPG9S3hPDTYtm2bACCOHz/eaJ0znoedO3ea/fw0tFOSJDF//nwREBAgdDqdGDNmTKNjCw0NFWlpaSZllr5XzX0cRUVFst+TnTt3yh5HU5/L5j6O6upqce+994pOnToJV1dXERoaKmbMmNEoGXD0+WjqMyWEECtXrhTu7u6ivLzcbAxHnwtrflevXbsmZs2aJfz8/ISHh4cYP368OH/+fKM4f9zGmu9TW8KneBIREZFdWvScCCIiInIcJhFERERkFyYRREREZBcmEURERGQXJhFERERkFyYRREREZBcmEURERGQXJhFERERkFyYRREREZBcmEURthMFgwNChQzFhwgST8oqKCoSEhOCVV15xUMuIqKXiba+J2pCffvoJkZGRWLVqFaZOnQoAmDZtGg4ePIh9+/ZBq9U6uIVE1JIwiSBqY959910sWLAAR44cQX5+PiZNmoR9+/bZ9ThnImrbmEQQtTFCCNx9993QaDQ4dOgQnn32Wbz66quObhYRtUBMIojaoGPHjqFXr17o168fCgoK4OLi4ugmEVELxImVRG3Q6tWr4eHhgaKiIpw7d87RzSGiFoo9EURtzJ49ezBy5Ej8+9//xuuvvw4A2LFjB1QqlYNbRkQtDXsiiNqQ6upqTJ8+HTNnzsTo0aPx3nvvIT8/H1lZWY5uGhG1QOyJIGpDZs+ejS+//BIHDx6Eh4cHAGDlypV48cUXcejQIYSFhTm2gUTUojCJIGojdu3ahTFjxiA3NxfDhg0zWRcXF4f6+noOaxCRTZhEEBERkV04J4KIiIjswiSCiIiI7MIkgoiIiOzCJIKIiIjswiSCiIiI7MIkgoiIiOzCJIKIiIjswiSCiIiI7MIkgoiIiOzCJIKIiIjswiSCiIiI7MIkgoiIiOzy/4OQiUtB5UddAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "vf.plot_slice('c', 2, direction='z', time='0')" ] }, { "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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c+YMJk6ciFmzZmH69OkGl2PVQUSdOnWQnJyM5ORkS1eFiIjIrAx5AJerq6tWEKFLw4YNoVQqkZeXp5Wel5cHT09PncdMnz4dL774Il5++WUA9+Yc3rp1C+PGjcM777xTYSqBHKueE0FERFRTqYVC72YoBwcHdOzYEWlpaZo0SZKQlpaG0NBQncfIzTkEYNSjJay6J4KIiKimUktKlEm6hzPURt5AEBcXh1GjRqFTp07o0qULkpOTcevWLc3dGpGRkfDx8UFSUhKAe3MO58+fj/bt22uGM6ZPn46BAwdqgglDMIggIiKyAH0rUxq7YuXw4cNx9epVxMfHIzc3F8HBwdi6datmsuXFixe1eh6mTZsGhUKBadOm4fLly2jUqJHmZgZjMIggIiKygDLJDnYyPRFlktro8mJiYhATE6NzX3p6utbrWrVqISEhAQkJCUafR6ucKh1NREREJpGggCTT4yCXbm0YRBAREVmAvgmUxkystCQGEURERBZQJpTywxky60dYGwYRREREFiD0DGcIDmcQERGRnDJJCYXsxEr2RBAREZEMQ56dYe0YRBAREVkA784gIiIik5RJdlBIup8+USaTbm0YRBAREVkAhzOIiIjIJAwiiIiIyCRqoYBC6B624GJTREREJIs9EURERGSSMskO4MRKIiIiMpYQCgiZHge5dGvDIIKIiMgCuE4EERERmUStZ50INYcziIiISA4nVhIREZFJJMlOtsdBYk8EERERyREAhJDfZwsYRBAREVmABAUUnFhJRERExlLrWSeCEyuJiIhIlhB6hjNsZDyDQQQREZEFcLEpIiIiMklNGM6w+lpevnwZ//d//4cGDRrAyckJbdu2xf79+y1dLSIioiopH86Q22yBVfdE/P333+jWrRt69+6NH3/8EY0aNcLp06dRr149S1eNiIioSiRJIbtipSTZxnCGVfdEvPfee/D19cXy5cvRpUsXBAQEoG/fvmjWrJmlq0ZERFQlopLNWIsWLYK/vz8cHR0REhKCzMxMvflv3LiB6OhoeHl5QaVSoUWLFtiyZYtR57TqIOK7775Dp06dMHToULi7u6N9+/ZISUmxdLWIiIiqrHxipdxmjDVr1iAuLg4JCQnIyspCUFAQwsPDkZ+frzN/SUkJnnrqKZw/fx7r16/HyZMnkZKSAh8fH6POa9XDGefOncPixYsRFxeH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sSPS0tI0t2lKkoS0tDTExMRUyB8YGIgjR45opU2bNg03b97Exx9/bNQf3lYdRPTp06dCQ6OiohAYGIjJkydXCCCIiIhshhmXvY6Li8OoUaPQqVMndOnSBcnJybh16xaioqIAAJGRkfDx8UFSUhIcHR3Rpk0brePr1q0LABXSK2PVQUSdOnUqNMjZ2RkNGjQwuqFERETWxJzLXg8fPhxXr15FfHw8cnNzERwcjK1bt2omW168eBF2dua/l8KqgwgiIqIay8wP4IqJidE5fAEA6enpeo9NTU01/oSwwSCisjeCiIjIFvABXERERGSaGvAALgYRREREFsCeCCIiIjKJIetEWDsGEURERJZg5omVlsAggoiIyAI4nEFERESmkSA/sZLDGURERCSHPRFERERkEoUkoJB0Rwty6daGQQQREZElcGIlERERmYLDGURERGQSrhNBREREpuFwBhEREZmCwxlERERkGqFn2IJBBBEREckS4t4mt88GMIggIiKyAE6sJCIiIpMwiCAiIiLT8O4MIiIiMgWXvSYiIiKT8BZPIiIiMgnnRBAREZFpeIsnERERmYLDGURERGSSmjCcYWfpChARET2SJKF/M9KiRYvg7+8PR0dHhISEIDMzUzZvSkoKevTogXr16qFevXoICwvTm18OgwgiIiILUIj/9UZU2IyMIdasWYO4uDgkJCQgKysLQUFBCA8PR35+vs786enpGDFiBHbu3ImMjAz4+vqib9++uHz5slHnZRBBRERkCeUTK+U2I8yfPx9jx45FVFQUWrVqhSVLlqB27dpYtmyZzvxfffUVJkyYgODgYAQGBuLzzz+HJElIS0sz6rwMIoiIiCygfGKl3GaokpISHDhwAGFhYZo0Ozs7hIWFISMjw6Aybt++jdLSUtSvX9+oNnBiJRERkQUYsmJlYWGhVrpKpYJKpdJKu3btGtRqNTw8PLTSPTw8cOLECYPqMnnyZHh7e2sFIoaw6p6IpKQkdO7cGXXq1IG7uzsiIiJw8uRJS1eLiIio6qRKNgC+vr5wc3PTbElJSWavxty5c/H1119j48aNcHR0NOpYq+6J2LVrF6Kjo9G5c2eUlZXh7bffRt++ffHHH3/A2dnZ0tUjIiIymUIIKGTmPpSn5+TkwNXVVZP+YC8EADRs2BBKpRJ5eXla6Xl5efD09NRbhw8++ABz587Fjh07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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Wall time: 18.3363 s after 100 iterations (0.1834 s/iter)\n", "GPU-RAM (nvidia-smi) current: 135 MB (135.0 MB max)\n", "GPU-RAM (torch) current: 8.14 MB (24.19 MB max, 38.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": "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XYPRaLT6vl6vbxV/65xaRIwaNQqN3aZCo9Fg8eLFWLx4cQtmRURE1HyuXbuGiDAfFJdan28UFBSEoqIily8kXHOWIBER0U3KaDSiuNSEogNh8PNtODWxvEJBxJDTMBqNLCKIiIioIU8fAU+fhqPxta5xI2mbsIggIiJyAgWK6h1K1FtdE4sIIiIiJ6gVCmpVBh1qBYsIIiIiaoQCARMaVhGKSpurYhFBRETkBByJICIiIocovy5q7a0FiwgiIiInMAoBo8qVGGptropFBBERkRNwJIKIiIgcokCj+oRVReJTV5sbiwgiIiInqBUa1IqGBYNam6tiEUFEROQEJisjEWptropFhJ2Gex2XFquzzvoT3OyldpmQo4LcrkiJo5N4rfOPpvbSYoW6X5IWq1ropMUK01+UFsuEhvfjd1S4+wVpsXZV95YWa4rvMWmxtlT0khYr0nBeWixZvLQ10mL10JdKi9VOWyctVke3SilxqnXWH4olW63QolY0/K7K/D1vbiwiiIiInMAErWrB33JlzI1jEUFEROQEdVZGIuo4EkFERESNMQktTCpFhIlFBBERETWmFlrUouG8qlon5OIoFhFEREROYH0kovUMRbCIICIicoI66FRHIuRds9L8WEQQERE5AUciiIiIyCEKtFBULvFUJN5jp7mxiCAiInICo9DBTeWGdcbWU0OwiCAiInIGRWihqJzOUHg6g4iIiBpTCy2MKiMRtTydQURERI2xPidC3rNvmhuLCCIiIieotTInopanM4iIiKgx1i/xbD0jES6dqclkwsKFCxEREQFPT0/06NEDL774IkQrqtKIiIjU1Aqd1aW1cOmRiKVLl2LVqlXYsGED+vXrh2+++QaJiYnw9/fH008/7ez0iIiIHKZYeRQ450RIsnfvXowbNw5jx44FAISHh+P9999HXl6ekzMjIiK6MbVCB10rnxPh0uXO8OHDkZWVhR9++AEAcOjQIezZswf33Xef1XVqampQXl5usRAREbma+vtEqC2OWLlyJcLDw+Hh4YGYmJhG/8GdmZkJjUZjsXh4eNi9TZceiXj++edRXl6OyMhI6HQ6mEwmvPzyy5g2bZrVddLT05GWltZsOfVxlxfroiIvlr9WIy1WNzc5VfBn1f5S4gBAlOEnabF+NPlIi3XcGCQt1gjP09JiXTDppcX6sa6dtFi+2qvSYr1dNkBarHG+30qLdby2o5Q4Iz0qpMQBgD3XvKXFivGQ9w+zc3Xyzv3LOra0WpOUOLYwATCh4W+3Ixls2rQJycnJWL16NWJiYpCRkYH4+HgUFhYiICBAdR0/Pz8UFhaaX2s09v8dcemRiA8//BDvvvsu3nvvPeTn52PDhg147bXXsGHDBqvrLFiwAGVlZebl7NmzLZgxERGRbWoVN6uLvZYvX46ZM2ciMTERffv2xerVq+Hl5YV169ZZXUej0SAoKMi8BAYG2r1dlx6J+OMf/4jnn38ejz76KABgwIABOH36NNLT05GQkKC6jsFggMFgaMk0iYiI7CaggaIyEiF+bbv+dLy1v29GoxEHDhzAggULzG1arRZxcXHIzc21uv3KykqEhYVBURTceuuteOWVV9CvXz+7PoNLj0RUV1dDq7VMUafTQVEkngcgIiJyglpFZ3UBgNDQUPj7+5uX9PR01TgXL16EyWRqMJIQGBiI4uJi1XV69+6NdevW4ZNPPsHGjRuhKAqGDx+Oc+fO2fUZXHok4sEHH8TLL7+Mbt26oV+/fjh48CCWL1+Oxx57zNmpERER3RCTlUs869vOnj0LPz8/c7vMUfbY2FjExsaaXw8fPhx9+vTBmjVr8OKLL9ocx6WLiBUrVmDhwoWYPXs2SktLERwcjN///vdISUlxdmpEREQ3pM7KJZ514pfRdj8/P4siwppOnTpBp9OhpKTEor2kpARBQbZN/nZ3d8fgwYNx4sQJm/rXc+nTGb6+vsjIyMDp06dx9epVnDx5Ei+99BL0enkzz4mIiJzBJDRWF3vo9XoMGTIEWVlZ5jZFUZCVlWUx2tBoLiYTDh8+jC5duti1bZceiSAiIrpZmRQd6pSGIxEmB+b9JScnIyEhAdHR0Rg2bBgyMjJQVVWFxMREAMD06dMREhJinlexePFi3Hbbbbjllltw5coVLFu2DKdPn8YTTzxh13ZZRBARETmBCRor94mw/34NU6ZMwYULF5CSkoLi4mJERUVh+/bt5smWZ86csbhQ4fLly5g5cyaKi4vRvn17DBkyBHv37kXfvn3t2i6LCCIiIieoU7TQqoxE1CmO3fAqKSkJSUlJqu/l5ORYvH799dfx+uuvO7Sd32IRQURE5ASKlftEqLW5KhYRRERETmBtEqW9EyudiUUEERGRE9QJnfrpDJXLPl0ViwgiIiInaOq2160BiwgiIiInqFN00KhOrORIBBERETVCERooKvMf1NpcFYsIIiIiJ6gTWmhEwxtH16m0uSoWEURERE7AkQgiIiJySJ2ihUZRGYlQaXNVLCLstPzngdJimSQOWT3gVyAtVn+9/fdtV/NjbXspcQCg3OQhLVY395+lxTpn7CAt1l7I2e8AMMjwo7RYHXWV0mIF6CqkxYryOCct1gWTp7RY/fWXpMS5KO9wwM+mQGmx3rzSTVqsBP9vpcWKdK+VEqe8VuKOb4KA+o2lRItlcONYRBARETlBnaIFOBJBRERE9uKcCCIiInIIiwgiIiJyiMnKJZ4y58s1NxYRRERETsCRCCIiInKIycolniZOrCQiIqLGCKGBUBl1UGtzVSwiiIiInEARGpgUns4gIiIiOynQQKNysym1G1C5KhYRRERETmCycrMpzokgIiKiRgnxy6LW3lqwiCAiInICxcrVGQpHIoiIiKgxitBA08rvE+Hy5c6PP/6I//qv/0LHjh3h6emJAQMG4JtvvnF2WkRERDek/nSG2tJauPRIxOXLl3H77bdj9OjR+OKLL9C5c2ccP34c7dvLe8Q0ERGRMyiKxsrpDI5ESLF06VKEhoZi/fr1GDZsGCIiIjBmzBj06NHD2akRERHdENHI4oiVK1ciPDwcHh4eiImJQV5enk3rffDBB9BoNBg/frzd23TpIuJvf/sboqOjMXnyZAQEBGDw4MFYu3Zto+vU1NSgvLzcYiEiInI1QtFYXey1adMmJCcnIzU1Ffn5+Rg0aBDi4+NRWlra6HqnTp3Cs88+ixEjRjj0GVy6iPj3v/+NVatWoWfPntixYwdmzZqFp59+Ghs2bLC6Tnp6Ovz9/c1LaGhoC2ZMRERko19ve339AgcmVi5fvhwzZ85EYmIi+vbti9WrV8PLywvr1q2zuo7JZMK0adOQlpaG7t27O/QRXHpOhKIoiI6OxiuvvAIAGDx4MI4cOYLVq1cjISFBdZ0FCxYgOTnZ/Lq8vFxqITHG97C0WN6aOmmxzta1kxZrR7VOSpx+hh+lxAGA/voKabEOGf2kxRrt8520WKG6Gmmx/l3nJS1WO628vMLc5J3r3VDeU1qsKb7HpMU6Iun4GqSvlBJHthivk9Ji7aruKi3W99eCpcSpqawFcEpKrKYoigZQu+31r23Xj6QbDAYYDIYG/Y1GIw4cOIAFCxaY27RaLeLi4pCbm2t1+4sXL0ZAQAAef/xx/POf/3ToM7j0SESXLl3Qt29fi7Y+ffrgzJkzVtcxGAzw8/OzWIiIiFxO/aiD2gIgNDTUYmQ9PT1dNczFixdhMpkQGBho0R4YGIji4mLVdfbs2YO33nqrySkCTXHpkYjbb78dhYWFFm0//PADwsLCnJQRERGRHEL5ZVFrB4CzZ89a/ENYbRTCERUVFfjd736HtWvXolOnTjcUy6WLiD/84Q8YPnw4XnnlFTzyyCPIy8vDm2++iTfffNPZqREREd2Qph4FbutoeqdOnaDT6VBSUmLRXlJSgqCgoAb9T548iVOnTuHBBx80tynKL5WLm5sbCgsLbb4K0qVPZwwdOhTbtm3D+++/j/79++PFF19ERkYGpk2b5uzUiIiIbogQVq7OsHNipV6vx5AhQ5CVlWVuUxQFWVlZiI2NbdA/MjIShw8fRkFBgXl56KGHMHr0aBQUFNg1j9ClRyIA4IEHHsADDzzg7DSIiIjksnZTCAduFJGcnIyEhARER0dj2LBhyMjIQFVVFRITEwEA06dPR0hICNLT0+Hh4YH+/ftbrN+uXTsAaNDeFJcvIoiIiG5Oml8XtXb7TJkyBRcuXEBKSgqKi4sRFRWF7du3mydbnjlzBlqt/JMPLCKIiIicQfl1UWt3QFJSEpKSklTfy8nJaXTdzMxMh7bJIoKIiMgZrN1YqhU9xZNFBBERkRM0dYlna8AigoiIyBk4EkFERESO0Ci/LGrtrQWLCCIiImfgSAQRERE5RPLVGc5g80WjP/30U3PmQURE1LaIRpZWwuYiol+/fnjvvfeaMxciIqI2Q6NorC6thc1FxMsvv4zf//73mDx5Mn7++efmzImIiOjm15ZGImbPno1vv/0Wly5dQt++ffH3v/+9OfMiIiIiF2fXxMqIiAjs2rULf/nLXzBx4kT06dMHbm6WIfLz86UmSEREdDPSCPVTF5qb+eqM06dPY+vWrWjfvj3GjRvXoIi42ekkjjN5aEzSYvV2vyQt1o6q3lLiFCoeUuIAQH/9t9JixRquSov1t6pAabEU94vSYt1mkBYK71bY/ljgpvh7nZIWq9Ik7/j6pLKHtFg6SRf5h7qVS4kDAMV1/tJiGYVOWqwHvc9IixWpL5YSp1KjYJmUSDaQ+BRPZ7GrAli7di2eeeYZxMXF4ejRo+jcuXNz5UVERHRTa1M3m7r33nuRl5eHv/zlL5g+fXpz5kRERHTza0sjESaTCd9++y26du3anPkQERG1CW1qJGLnzp3NmQcREVHbwtteExERkSPa1EgEERERSdSW5kQQERGRRFZGIlrTA7hYRBARETkDRyKIiIjIERrxy6LW3lqwiCAiInIGjkQQERGRIzgSQURERI4RUJ9E2YqKCJsfBU5ERETy1I9EqC2OWLlyJcLDw+Hh4YGYmBjk5eVZ7bt161ZER0ejXbt28Pb2RlRUFN555x27t9mqioglS5ZAo9Fg3rx5zk6FiIjohtTfbEptsdemTZuQnJyM1NRU5OfnY9CgQYiPj0dpaalq/w4dOuCFF15Abm4uvv32WyQmJiIxMRE7duywa7utpojYv38/1qxZg4EDBzo7FSIiohsnGlnstHz5csycOROJiYno27cvVq9eDS8vL6xbt061/6hRozBhwgT06dMHPXr0wNy5czFw4EDs2bPHru22iiKisrIS06ZNw9q1a9G+fXtnp0NERHTDmhqJKC8vt1hqampU4xiNRhw4cABxcXHmNq1Wi7i4OOTm5jaZhxACWVlZKCwsxMiRI+36DK2iiJgzZw7Gjh1rsYOsqampabDjiYiIXE4TIxGhoaHw9/c3L+np6aphLl68CJPJhMDAQIv2wMBAFBcXW918WVkZfHx8oNfrMXbsWKxYsQL33HOPXR/B5a/O+OCDD5Cfn4/9+/fb1D89PR1paWnNlk+YW620WF4avbRYyy5FSYv1gF+BlDgVioeUOABQK+RNV864PEBarK76S9Ji7arsKy2WVnNEWqxJPj9Ji/V9rbxj/g7vQmmxwtyqpcVqp5Xzs7qxvLeUOABwj/f30mJ10Jqkxfq8OkxarBC3y1LiVCnyPl9TmnoA19mzZ+Hn52duNxgMUrfv6+uLgoICVFZWIisrC8nJyejevTtGjRplcwyXLiLOnj2LuXPnYufOnfDwsO0P0oIFC5CcnGx+XV5ejtDQ0OZKkYiIyDFN3GzKz8/PooiwplOnTtDpdCgpKbFoLykpQVBQkNX1tFotbrnlFgBAVFQUvv/+e6Snp9tVRLj06YwDBw6gtLQUt956K9zc3ODm5obdu3fjjTfegJubG0ymhhWjwWAw73hb/wMQERG1NFmXeOr1egwZMgRZWVnmNkVRkJWVhdjYWJvjKIpidd6FNS49EnH33Xfj8OHDFm2JiYmIjIzE/PnzodPpnJQZERHRDVKgfrMpBy7xTE5ORkJCAqKjozFs2DBkZGSgqqoKiYmJAIDp06cjJCTEPK8iPT0d0dHR6NGjB2pqavD555/jnXfewapVq+zarksXEb6+vujfv79Fm7e3Nzp27NignYiIqDXR/LqotdtrypQpuHDhAlJSUlBcXIyoqChs377dPNnyzJkz0Gr/c/KhqqoKs2fPxrlz5+Dp6YnIyEhs3LgRU6ZMsWu7Ll1EEBER3ayamlhpr6SkJCQlJam+l5OTY/H6pZdewksvveTYhn6j1RUR1+8IIiKiVolP8SQiIiJHaISVkQgWEURERNQojkQQERGRI2TPiXAGFhFEREROYO2eEDydQURERI2TeJ8IZ2ERQURE5AQciSAiIiLHcGIlEREROUKjCGiUhhWDWpurYhFBRETkBDydQURERA7hJZ5ERETkGM6JICIiIkdwJKINertsgLRYXfWXpMUa53dQWixZeruXS4u1vyZAWqwObpXSYpXU+UuL9UT7fGmxNpX3lRbLw7tQWqyjNV2lxZrie15aLJPQS4uVfc1PSpzbPP8tJQ4A7L8WJi3WcM8iabFqhU5arJNGOb8RV2vrAJyUEssWrWn+gxoWEURERE7AqzOIiIjIMZwTQURERI7QmACNVr29tWARQURE5AS8TwQRERE5RohfFrX2VoJFBBERkRPwEk8iIiJyCE9nEBERkUN4iScRERE5hpd4EhERkSM0JgGNVmUkwtR6qgiVK1SJiIio2YlGFgesXLkS4eHh8PDwQExMDPLy8qz2Xbt2LUaMGIH27dujffv2iIuLa7S/NSwiiIiInEAjhHlehMXiwCWemzZtQnJyMlJTU5Gfn49BgwYhPj4epaWlqv1zcnIwdepUZGdnIzc3F6GhoRgzZgx+/PFHu7bLIoKIiMgJ6q/OUFvstXz5csycOROJiYno27cvVq9eDS8vL6xbt061/7vvvovZs2cjKioKkZGR+Otf/wpFUZCVlWXXdllEEBEROYHqKMRvrtgoLy+3WGpqalTjGI1GHDhwAHFxceY2rVaLuLg45Obm2pRLdXU1amtr0aFDB7s+g0sXEenp6Rg6dCh8fX0REBCA8ePHo7BQ3mOJiYiInEZpZAEQGhoKf39/85Kenq4a5uLFizCZTAgMDLRoDwwMRHFxsU2pzJ8/H8HBwRaFiC1c+uqM3bt3Y86cORg6dCjq6urwpz/9CWPGjMF3330Hb29vZ6dHRETkMI1Qn/9Q33b27Fn4+fmZ2w0GQ7PksWTJEnzwwQfIycmBh4eHXeu6dBGxfft2i9eZmZkICAjAgQMHMHLkSCdlRUREJIEiflnU2gH4+flZFBHWdOrUCTqdDiUlJRbtJSUlCAoKanTd1157DUuWLMFXX32FgQMH2p77r1z6dMb1ysrKAKDRczY1NTUNziMRERG5GlkTK/V6PYYMGWIxKbJ+kmRsbKzV9V599VW8+OKL2L59O6Kjox36DC49EvFbiqJg3rx5uP3229G/f3+r/dLT05GWltZseXRwq5QWq5e7+qU3jvj6andpse7xljPvxF2jkRIHAILcyqTFCnf/WVqsgmtdpcWSKdj9srRY14ROWiydxIcClClGabEqJN5muLOuQkqcK4qnlDgAoIW8Jzp9fTVMWqxriru0WCO8TkiJU1nXck+/0pgENCrfCUduNpWcnIyEhARER0dj2LBhyMjIQFVVFRITEwEA06dPR0hIiHlexdKlS5GSkoL33nsP4eHh5rkTPj4+8PHxsXm7raaImDNnDo4cOYI9e/Y02m/BggVITk42vy4vL0doaGhzp0dERGQfiY8CnzJlCi5cuICUlBQUFxcjKioK27dvN0+2PHPmDLTa/5x8WLVqFYxGIyZNmmQRJzU1FYsWLbJ5u62iiEhKSsKnn36Kf/zjH+jatfF/+RkMhmabfEJERCSL7AdwJSUlISkpSfW9nJwci9enTp1yaBvXc+kiQgiBp556Ctu2bUNOTg4iIiKcnRIREZEcEkcinMWli4g5c+bgvffewyeffAJfX1/zORt/f394eso7X0hERNTSNIpQnf/Qmh4F7tJXZ6xatQplZWUYNWoUunTpYl42bdrk7NSIiIhujMB/RiMsFmcnZjuXHokQrWhIh4iIyC4mK4/sbEWPAnfpIoKIiOhm1dQdK1sDFhFERETOwImVRERE5BBFATQqN7dSWu6GVzeKRQQREZEzKADUbuzbemoIFhFERETOoFEUaFRGIjQciSAiIqJGKVaettWK7hPBIoKIiMgZhKI+/0FwJIKIiIgaw6sziIiIyCEmEyBMDdsVlTYXxSKCiIjIGTgSQURERA4xKerzH3h1BhERETWq/gFcau2tBIsIO0Xqz0uL1UlXKy3WAz6F0mLtqg6XEmecz1kpcQCgu5tRWqyVPw+VFiu183fSYhXVyvvliPH4SVqswlp/abFkfn8qJF4GF6iT91Poq5VzrFYoNVLiAIBR6KTFGuMl73frlYu9pcW6ohikxKlqyVEAns4gIiIih3BiJRERETmEIxFERETkCGEyQaiMRAiORBAREVGjhFC/xTVHIoiIiKhRJhOgURl1UJsn4aJYRBARETmDEFC9npMjEURERNQYYTJBqIxEqM2TcFVaZydARETUJinC+uKAlStXIjw8HB4eHoiJiUFeXp7VvkePHsXDDz+M8PBwaDQaZGRkOLRNFhFEREROIEzKL6MRDRb7b3i1adMmJCcnIzU1Ffn5+Rg0aBDi4+NRWlqq2r+6uhrdu3fHkiVLEBQU5PBnYBFBRETkDEKxvthp+fLlmDlzJhITE9G3b1+sXr0aXl5eWLdunWr/oUOHYtmyZXj00UdhMDh+t0/OiSAiInKCWsUIoTKxsg6/3Fq8vLzcot1gMKj+wTcajThw4AAWLFhgbtNqtYiLi0Nubq7krC2xiCAiImpBer0eQUFB2FP8qdU+Pj4+CA0NtWhLTU3FokWLGvS9ePEiTCYTAgMDLdoDAwNx7NgxKTlbwyKCiIioBXl4eKCoqAhGo/WHtQkhoNFoLNpu5LRDc2ERQURE1MI8PDzg4eEhJVanTp2g0+lQUlJi0V5SUnJDkyZt0SomVtpz2QoREVFbotfrMWTIEGRlZZnbFEVBVlYWYmNjm3XbLl9E2HvZChERUVuTnJyMtWvXYsOGDfj+++8xa9YsVFVVITExEQAwffp0i4mXRqMRBQUFKCgogNFoxI8//oiCggKcOHHCru26fBFh72UrREREbc2UKVPw2muvISUlBVFRUSgoKMD27dvNky3PnDmD8+fPm/v/9NNPGDx4MAYPHozz58/jtddew+DBg/HEE0/YtV2XnhPhyGUrNTU1qKmpMb8uKysD8OslMxJuR15VYf/1u9ZUuMmLJdPVq3VS4pQ7cK2zNXUSY9VU1kqLVe4h8XiolRfLXdN0H1tV1cq7Ba+bVt5nlBnLUycv1lVJx2qlg3ctVCPzv2G5AzdCsuaaxO9ilaT9XlX5SxzRip5fUS8pKQlJSUmq7+Xk5Fi8Dg8Pl/IZXbqIcOSylfT0dKSlpTVo34PPpeSUM1BKGBd3s58q+kJapKXSIrmym/14aAtc9b/hv52dgFUVFRXw9/d3dhouz6WLCEcsWLAAycnJ5teKouDnn39Gx44dG1wuU6+8vByhoaE4e/Ys/Pz8WipVaVpz/szdOVpz7kDrzp+5O4etuQshUFFRgeDg4BbMrvVy6SLCkctW1O7o1a5dO5u25+fn1+q+GL/VmvNn7s7RmnMHWnf+zN05bMmdIxC2c+mJlc68bIWIiIga59IjEcAvl60kJCQgOjoaw4YNQ0ZGhsVlK0REROQcLl9ETJkyBRcuXEBKSgqKi4sRFRVlcdmKDAaDAampqS55S1FbtOb8mbtztObcgdadP3N3jtacuyvTiNZ4HQsRERE5nUvPiSAiIiLXxSKCiIiIHMIigoiIiBzCIoKIiIgc0maKCHsfJ75582ZERkbCw8MDAwYMwOefy7lttr3S09MxdOhQ+Pr6IiAgAOPHj0dhYWGj62RmZkKj0Vgssp5bb49FixY1yCMyMrLRdVxlv4eHhzfIXaPRYM6cOar9nbnP//GPf+DBBx9EcHAwNBoNPv74Y4v3hRBISUlBly5d4Onpibi4OBw/frzJuPZ+Z5oj/9raWsyfPx8DBgyAt7c3goODMX36dPz000+NxnTk2JOdOwDMmDGjQR733ntvk3FbYt83lbva8a/RaLBs2TKrMVtqv9vyu3jt2jXMmTMHHTt2hI+PDx5++OEGNy68nqPflbasTRQR9j5OfO/evZg6dSoef/xxHDx4EOPHj8f48eNx5MiRFs4c2L17N+bMmYOvv/4aO3fuRG1tLcaMGYOqqqpG1/Pz88P58+fNy+nTp1soY0v9+vWzyGPPnj1W+7rSft+/f79F3jt37gQATJ482eo6ztrnVVVVGDRoEFauXKn6/quvvoo33ngDq1evxr59++Dt7Y34+Hhcu3bNakx7vzPNlX91dTXy8/OxcOFC5OfnY+vWrSgsLMRDDz3UZFx7jr3myL3evffea5HH+++/32jMltr3TeX+25zPnz+PdevWQaPR4OGHH240bkvsd1t+F//whz/g73//OzZv3ozdu3fjp59+wsSJExuN68h3pc0TbcCwYcPEnDlzzK9NJpMIDg4W6enpqv0feeQRMXbsWIu2mJgY8fvf/75Z87RFaWmpACB2795ttc/69euFv79/yyVlRWpqqhg0aJDN/V15v8+dO1f06NFDKIqi+r6r7HMAYtu2bebXiqKIoKAgsWzZMnPblStXhMFgEO+//77VOPZ+Z2S5Pn81eXl5AoA4ffq01T72HnsyqOWekJAgxo0bZ1ccZ+x7W/b7uHHjxF133dVoH2fsdyEa/i5euXJFuLu7i82bN5v7fP/99wKAyM3NVY3h6HelrbvpRyLqHyceFxdnbmvqceK5ubkW/QEgPj7eav+WVP9o8w4dOjTar7KyEmFhYQgNDcW4ceNw9OjRlkivgePHjyM4OBjdu3fHtGnTcObMGat9XXW/G41GbNy4EY899pjVh7gBrrPPf6uoqAjFxcUW+9Xf3x8xMTFW96sj35mWVFZWBo1G0+Qzcew59ppTTk4OAgIC0Lt3b8yaNQuXLl2y2tdV931JSQk+++wzPP744032dcZ+v/538cCBA6itrbXYj5GRkejWrZvV/ejId4XawOmMxh4nXlxcrLpOcXGxXf1biqIomDdvHm6//Xb079/far/evXtj3bp1+OSTT7Bx40YoioLhw4fj3LlzLZgtEBMTg8zMTGzfvh2rVq1CUVERRowYgYqKCtX+rrrfP/74Y1y5cgUzZsyw2sdV9vn16vedPfvVke9MS7l27Rrmz5+PqVOnNvoQJXuPveZy77334u2330ZWVhaWLl2K3bt347777oPJZFLt76r7fsOGDfD19W3ydIAz9rva72JxcTH0en2DQrOp3/36PrauQ63gttf0H3PmzMGRI0eaPMcYGxtr8YCy4cOHo0+fPlizZg1efPHF5k7T7L777jP//4EDByImJgZhYWH48MMPbfoXjat46623cN999zX6aGBX2ec3s9raWjzyyCMQQmDVqlWN9nWVY+/RRx81//8BAwZg4MCB6NGjB3JycnD33Xe3WB43at26dZg2bVqTk4Wdsd9t/V2k5nHTj0Q48jjxoKAgu/q3hKSkJHz66afIzs5G165d7VrX3d0dgwcPxokTJ5opO9u0a9cOvXr1spqHK+7306dP46uvvsITTzxh13quss/r9509+9WR70xzqy8gTp8+jZ07d9r9GOqmjr2W0r17d3Tq1MlqHq647//5z3+isLDQ7u8A0Pz73drvYlBQEIxGI65cuWLRv6nf/fo+tq5DbaCIcORx4rGxsRb9AWDnzp1Oefy4EAJJSUnYtm0bdu3ahYiICLtjmEwmHD58GF26dGmGDG1XWVmJkydPWs3DlfZ7vfXr1yMgIABjx461az1X2ecREREICgqy2K/l5eXYt2+f1f3qyHemOdUXEMePH8dXX32Fjh072h2jqWOvpZw7dw6XLl2ymoer7Xvgl5G4IUOGYNCgQXav21z7vanfxSFDhsDd3d1iPxYWFuLMmTNW96Mj3xVC27g644MPPhAGg0FkZmaK7777Tjz55JOiXbt2ori4WAghxO9+9zvx/PPPm/v/61//Em5ubuK1114T33//vUhNTRXu7u7i8OHDLZ77rFmzhL+/v8jJyRHnz583L9XV1eY+1+eflpYmduzYIU6ePCkOHDggHn30UeHh4SGOHj3aork/88wzIicnRxQVFYl//etfIi4uTnTq1EmUlpaq5u1K+12IX2bFd+vWTcyfP7/Be660zysqKsTBgwfFwYMHBQCxfPlycfDgQfPVC0uWLBHt2rUTn3zyifj222/FuHHjREREhLh69ao5xl133SVWrFhhft3Ud6al8jcajeKhhx4SXbt2FQUFBRbfgZqaGqv5N3XstUTuFRUV4tlnnxW5ubmiqKhIfPXVV+LWW28VPXv2FNeuXbOae0vt+6aOGyGEKCsrE15eXmLVqlWqMZy13235Xfzv//5v0a1bN7Fr1y7xzTffiNjYWBEbG2sRp3fv3mLr1q3m17Z8V8hSmygihBBixYoVolu3bkKv14thw4aJr7/+2vzenXfeKRISEiz6f/jhh6JXr15Cr9eLfv36ic8++6yFM/4FANVl/fr15j7X5z9v3jzzZw0MDBT333+/yM/Pb/Hcp0yZIrp06SL0er0ICQkRU6ZMESdOnLCatxCus9+FEGLHjh0CgCgsLGzwnivt8+zsbNVjpD4/RVHEwoULRWBgoDAYDOLuu+9u8JnCwsJEamqqRVtj35mWyr+oqMjqdyA7O9tq/k0dey2Re3V1tRgzZozo3LmzcHd3F2FhYWLmzJkNigFn7fumjhshhFizZo3w9PQUV65cUY3hrP1uy+/i1atXxezZs0X79u2Fl5eXmDBhgjh//nyDOL9dx5bvClnio8CJiIjIITf9nAgiIiJqHiwiiIiIyCEsIoiIiMghLCKIiIjIISwiiIiIyCEsIoiIiMghLCKIiIjIISwiiIiIyCEsIoiIiMghLCKI2giTyYThw4dj4sSJFu1lZWUIDQ3FCy+84KTMiKi14m2vidqQH374AVFRUVi7di2mTZsGAJg+fToOHTqE/fv3Q6/XOzlDImpNWEQQtTFvvPEGFi1ahKNHjyIvLw+TJ0/G/v37HXrUMxG1bSwiiNoYIQTuuusu6HQ6HD58GE899RT+/Oc/OzstImqFWEQQtUHHjh1Dnz59MGDAAOTn58PNzc3ZKRFRK8SJlURt0Lp16+Dl5YWioiKcO3fO2ekQUSvFkQiiNmbv3r2488478eWXX+Kll14CAHz11VfQaDROzoyIWhuORBC1IdXV1ZgxYwZmzZqF0aNH46233kJeXh5Wr17t7NSIqBXiSARRGzJ37lx8/vnnOHToELy8vAAAa9aswbPPPovDhw8jPDzcuQkSUavCIoKojdi9ezfuvvtu5OTk4I477rB4Lz4+HnV1dTytQUR2YRFBREREDuGcCCIiInIIiwgiIiJyCIsIIiIicgiLCCIiInIIiwgiIiJyCIsIIiIicgiLCCIiInIIiwgiIiJyCIsIIiIicgiLCCIiInIIiwgiIiJyyP8DEz4RGAq1txoAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "vf.plot_slice('c', 2, direction='z', time='0')" ] } ], "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 }