{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from lbmpy.session import *\n", "from lbmpy.boundaries.boundaries_in_kernel import update_rule_with_push_boundaries\n", "from lbmpy.macroscopic_value_kernels import macroscopic_values_getter, macroscopic_values_setter\n", "from collections import OrderedDict\n", "from time import perf_counter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Version 1: compile-in boundaries" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "domain_size = (32, 32, 32)\n", "relaxation_rate = 1.8\n", "time_steps = 100\n", "lid_velocity = 0.05" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "dh = create_data_handling(domain_size, default_target='cpu')\n", "pdfs = dh.add_array('pdfs', values_per_cell=19)\n", "u = dh.add_array('u', values_per_cell=len(domain_size))\n", "streaming_pattern = 'aa'" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "boundaries = OrderedDict((\n", " ((0, 1, 0), UBB([lid_velocity, 0, 0])), \n", " ((1, 0, 0), NoSlip()),\n", " ((-1, 0, 0), NoSlip()),\n", " ((0, -1, 0), NoSlip()),\n", " ((0, 0, 1), NoSlip()),\n", " ((0, 0, -1), NoSlip()),\n", "))\n", "opt = {'symbolic_field': pdfs, 'cse_global': False, 'cse_pdfs': True}\n", "cr_even = create_lb_collision_rule(stencil=\"D3Q19\", relaxation_rate=relaxation_rate, compressible=False, optimization=opt)\n", "cr_odd = create_lb_collision_rule(stencil=\"D3Q19\", relaxation_rate=relaxation_rate, compressible=False, optimization=opt)\n", "update_rule_aa_even = update_rule_with_push_boundaries(cr_even, pdfs, boundaries, streaming_pattern, Timestep.EVEN)\n", "update_rule_aa_odd = update_rule_with_push_boundaries(cr_odd, pdfs, boundaries, streaming_pattern, Timestep.ODD)\n", "\n", "getter_assignments = macroscopic_values_getter(update_rule_aa_even.method, velocity=u.center_vector,\n", " pdfs=pdfs, density=None,\n", " streaming_pattern=streaming_pattern, \n", " previous_timestep=Timestep.EVEN)\n", "\n", "getter_kernel = ps.create_kernel(getter_assignments, target=dh.default_target).compile()\n", "even_kernel = ps.create_kernel(update_rule_aa_even, target=dh.default_target, ghost_layers=1).compile()\n", "odd_kernel = ps.create_kernel(update_rule_aa_odd, target=dh.default_target, ghost_layers=1).compile()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def init():\n", " dh.fill(pdfs.name, 0, ghost_layers=True)\n", "\n", "def aa_time_loop(steps=100):\n", " assert steps % 2 == 0, \"Works only for an even number of time steps\"\n", " dh.all_to_gpu()\n", " for i in range(steps // 2):\n", " dh.run_kernel(odd_kernel)\n", " dh.run_kernel(even_kernel)\n", " dh.run_kernel(getter_kernel) \n", " dh.all_to_cpu()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2020-10-27T11:39:57.760623\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.3.1, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "init()\n", "aa_time_loop(time_steps)\n", "vel_version1 = dh.gather_array(u.name, ghost_layers=False).copy()\n", "plt.vector_field_magnitude(vel_version1[:, :, domain_size[2]//2, :])\n", "plt.colorbar()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Version 2: Normal boundary handling" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA00AAAFlCAYAAAA3YwNeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAArMklEQVR4nO3df6xc5Z3f8c9nrq8xv7KG+MJ6DRQ2srbrRo1BloNE/8gmoWvYbQ2VUsGqBGUjOXSxlFRpK++u2k12tVUUhbBKl4KgsWLUbBBSQrGQd1nXTUQjLQSTEmLHIFyWDcaWf0D5YQi278y3f8xxd3JzZ+Z7zp25M3PP+yUd3ZlznvM8z5lz5sz9nuc5z3FECAAAAAAwv8aoKwAAAAAA44ygCQAAAAB6IGgCAAAAgB4ImgAAAACgB4ImAAAAAOiBoAkAAAAAeli2mIWtWrUqrrzyysUsEhg7+w4fTaWbvvBMKt2ly99Kl91MXieZUiuV7hzPJvPLP9ogm3LKTqVrKJduGEZXco5L1DCSe6ZMnoMsdxiyJbfSn83gnUpWshm57/60c999STpy5pdS6d55a0Uq3QdXX5ouG1iKnnnmmRMRMTPqepTxm79xfrz2erPy+s88d+rxiNg0wCoNzaIGTVdeeaX27t27mEUCY+cf/oe7U+ku/cirqXSfvXJPuux3Wuek0p3fOJVKt3b6eCrdhY38CbWZ/CfwwkbuX9DzPJ0uOyMbrEnSMk0NtOxBm3K+s0Ezcv9Ml8lzkOVK+eAlG0jPKnfcvt06nUo3XeKzmUrW8aXcdQu93jwvle5Xlr2dy1DSH7/6W6l0z/z1ulS6vf/x36TLBpYi23836jqUdeL1pp56/LLK60+v/j+rBlidoaJ7HgAAAAD0sKgtTQAAAACWiijVI2CSETQBAAAAKC2U7xo96QiaAAAAAFTSSg4eNem4pwkAAAAAeqClCQAAAEBpoVAz6J4HAAAAAF1xTxOAoWiemzu5HP7Br6TS/fl/+pfpsltTuWe/vLcq92yjn12c6+E7e34qmSSplTwrtZZn0+U+72y5yWeEtjVyZafzHOHTcmPAZTv7G1vmtziZNvv81sZsbqOdfQxZiW7/y36WK3s6+Vil6XdyH865JR5Sefi63HPI4n31uN8BqKOQ1CRoAgAAAIDu6tLS1Pf6pu0Vtn9g+0e299v+YjH/Ytu7bb9Y/L1o+NUFAAAAgMWV6RRyStJHI+JDktZL2mT7WknbJO2JiLWS9hTvAQAAANRASGpGVJ4mSd+gKdpOFm+niykkbZa0o5i/Q9JNw6ggAAAAgPHUWsA0SVK3H9uesv2spGOSdkfEU5IujYgjklT8vWRotQQAAAAwVkKh5gKmSZIaCCIimpLW214p6RHbH8wWYHuLpC2SdMUVV1SpIwAAAIBxE1JzsmKfysoMnquIeEPS9yRtknTU9mpJKv4e67LO/RGxISI2zMzMLKy2AAAAALDIMqPnzRQtTLJ9rqSPS3pe0k5JtxfJbpf06JDqCAAAAGDMhOpzT1Ome95qSTtsT6kdZD0cEY/Z/htJD9v+tKSfSvrEEOsJAAAAYKxYzVE+eX0R9Q2aIuI5SVfPM/81SR8bRqWApewDO46m0h34d+9Ppfvbf7Y8Xfbab72TSrfi1bdS6VbONnMFv3Wyf5qCzzs3lS6WTeUyTA5pGivOyaWbTpYr5TtAO/eDE40R/jBly27lPm8n+8BHiU12M3fdsvGzM7myG7kd6OQx5tfeSKWTJE3ljrN43/m5/JLb8vy/XpnLT9K5q3PniTV3pW6flj6XLhrAmAilT/sTr9Q9TQAAAABQN8nLPwAAAADw8+ieBwAAAABdhAiaAAAAAKCnVpmbTycYQRMAAACA0urU0sRAEAAAAADQAy1NAAAAAEoLWc2atMEQNAEAAACohHuaAAAAAKCLOt3TRNAEAAAAoAKrGXTPAzAMzl2Ref9Tua/nmQvyV3he++AFqXQXHFmRSrf89fdS6fy+c1PpJKnx7ulcnid/lsvwzJlcujfeypV7OpmfpGg2kwkjV3arlcwul59ayXRlNHLHo5PfAzfyP8ZelvxJm86la0xP5/I7N/d9ifevzOUnqbU8V8f3fvm8VLo3fzW3Lctfzx8TPvRLqXTL3jiRzhMAxhVBEwAAAIDSQlKrJgNB1GMrAQAAAAxcU648ZdjeZPsF2wdtb5tnuW1/rVj+nO1rivkrbP/A9o9s77f9xY51vmD7VdvPFtON/epBSxMAAACA0iKGe0+T7SlJ90i6XtIhSU/b3hkRP+lIdoOktcX0YUn3Fn9PSfpoRJy0PS3p+7b/MiKeLNa7OyK+kq0LLU0AAAAAxtFGSQcj4qWIOC3pIUmb56TZLOnBaHtS0krbq4v3J4s008VU+WZegiYAAAAAlbTkylPCGkmvdLw/VMxLpbE9ZftZScck7Y6IpzrSbS268223fVG/ihA0AQAAACit/ZymRuVJ0irbezumLXOKmC+ymtta1DVNRDQjYr2kyyRttP3BYvm9kj4gab2kI5Lu6ret3NMEAAAAoIIF39N0IiI29Fh+SNLlHe8vk3S4bJqIeMP29yRtkrQvIo6eXWb7AUmP9asoLU0AAAAASjs75HjVKeFpSWttX2V7uaRbJO2ck2anpE8Wo+hdK+nNiDhie8b2Skmyfa6kj0t6vni/umP9myXt61cRWpoAAAAAjJ2ImLW9VdLjkqYkbY+I/bbvKJbfJ2mXpBslHZT0rqRPFauvlrSjGIGvIenhiDjbovRl2+vVjvtelvSZfnUhaAIWWevCFal07/u706l0sSzfYPzOpbmv/OkLc3kuOzmVSudmvo6tFdOpdI0Vy3Pp3j2VLjul1Uonbcw2cwmj8mA+i5OfJDn3PI102cn8YrrEz1S2jkmt885JpWuelztmS5V9Tu679bOZ3OfTSn6MFx3IHzvLTuW+C63zc58jgMnUjMGee+eKiF1qB0ad8+7reB2S7pxnveckXd0lz9vK1oOgCQAAAEBpIZ8d0GHJI2gCAAAAUElriA+3HScETQAAAABKOzvkeB3UYysBAAAAoCJamgAAAACUFvLQB4IYFwRNAAAAACpJPm9p4hE0AQAAACgtQmrWZCCIemwlAAAAAFRESxMAAACACqyWuKcJwBBMnXgrlc4rV6TSRYmyLzx0Opdn8vzXXDGVSrfs3dlchpIa751Jp82IFdOpdD7TTGaY/8RjOnmKzeZZouyRcfLgyaYrY1nueIzpZLqpXB0bZ1qpdM3z8j+5Zy7IpV3+dq7sc97KHTtRYr9MncqV3fi/J9N5Apgsofp0zyNoAgAAAFBJXZ7TRNAEAAAAoLSQ1arJkOP1CA0BAAAAoCJamgAAAABUQvc8AAAAAOgiJLUYCAIAAAAAurGaDDkOAAAAAPOrU0tTPbYSAAAAACqipQkAAABAJXTPAzAUrROvp9JNX7Iyle70Ly1Plz317mwqnSNS6VrLco3Vnm2l0kmSzzTTaVOyRTeTCZOfTSnJPN3KpYvG4H/A8mUPvOi87D7MHrfN5Da3cuV6Nn/sTP0s9z2YLpFnxuz5U+m0y988k0t47LWKtQEw7iJcm+55BE0AAAAAKmnWJGjqu5W2L7f9XdsHbO+3/dli/hdsv2r72WK6cfjVBQAAAIDFlWlpmpX0+Yj4oe0LJT1je3ex7O6I+MrwqgcAAABgHIWkFvc0tUXEEUlHitdv2z4gac2wKwYAAABgnJnuefOxfaWkqyU9Vczaavs529ttXzToygEAAAAYT+3nNLnyNEnSQZPtCyR9W9LnIuItSfdK+oCk9Wq3RN3VZb0ttvfa3nv8+PGF1xgAAADAWGiqUXmaJKna2p5WO2D6ZkR8R5Ii4mhENCOiJekBSRvnWzci7o+IDRGxYWZmZlD1BgAAAIBF0feeJtuW9HVJByLiqx3zVxf3O0nSzZL2DaeKAAAAAMZNaPK62VWVGT3vOkm3Sfqx7WeLeX8g6Vbb69XuzviypM8MoX4AAAAAxlRrwrrZVZUZPe/70rxjCe4afHUAAAAATIIIqUlLE4Bh8IpzcuneeCeV7pxTZ9Jlt85bnit7tpVKt+zk6VzBZS5COXfy9enZXH6zzRKFJ0Skk7qVTFsiz1S5zcHm1840uV+auWMnm19MlTh4kp+j30t+Z6ZzP5GxIpeucSp5zEpa/m6ujq1k2TGV+7xXHMufTxon38slTH6OACZTXbrn1aM9DQAAAAAq4vIPAAAAgNLaA0HUow2mHlsJAAAAYOCacuUpw/Ym2y/YPmh72zzLbftrxfLnbF9TzF9h+we2f2R7v+0vdqxzse3dtl8s/l7Urx4ETQAAAABKC7Xvaao69WN7StI9km6QtE7t0bvXzUl2g6S1xbRF0r3F/FOSPhoRH5K0XtIm29cWy7ZJ2hMRayXtKd73RNAEAAAAYBxtlHQwIl6KiNOSHpK0eU6azZIejLYnJa0snicbEXGySDNdTNGxzo7i9Q5JN/WrCEETAAAAgAra9zRVnSStsr23Y9oyp4A1kl7peH+omJdKY3uqeM7sMUm7I+KpIs2lEXFEkoq/l/TbUgaCAAAAAFBJK3lvUhcnImJDj+XzZT73+RJd00REU9J62yslPWL7gxGxr0pFaWkCAAAAUNrZh9tWnRIOSbq84/1lkg6XTRMRb0j6nqRNxayjtldLUvH3WL+KEDQBAAAAqGSB3fP6eVrSWttX2V4u6RZJO+ek2Snpk8UoetdKejMijtieKVqYZPtcSR+X9HzHOrcXr2+X9Gi/itA9D1hsrbmtyvPz6TO5/CKXnzT4qyRuNnMJk8lKmc1l6mZrsOWW+LxLpR2kYZTrAT/xPVlHl9iWmEoe4dltSR5jjfdy2ZURyTo2Bvylbryd35jsOSqS5zwAmCsiZm1vlfS4pClJ2yNiv+07iuX3Sdol6UZJByW9K+lTxeqrJe0oRuBrSHo4Ih4rln1J0sO2Py3pp5I+0a8uBE0AAAAASms/3HbAF9XmlhGxS+3AqHPefR2vQ9Kd86z3nKSru+T5mqSPlakHQRMAAACAShY4EMTEIGgCAAAAUNrZh9vWAQNBAAAAAEAPtDQBAAAAqCQ5Ct7EI2gCAAAAUF4MfyCIcUHQBAAAAKC0EANBAAAAAEBPdWlpqkcnRAAAAACoiJYmYJG1Tr6TSjd13rm5DKfzX+PGyfdS6aKRvGo0NZVL12zm0klys5VMOOArW9k6tiKfZ/ZzzMqWPehyJSm7XwZdduQ/b2fTNnLXCyObX/bYSZYrSV6W+2755Gwuw9YQvlfJY6L17rv5PAFMlDoNOU7QBAAAAKASgiYAAAAA6CLE6HkAAAAA0FNdRs9jIAgAAAAA6IGWJgAAAADlBfc0AQAAAEBXjJ4HAAAAAH3UJWjiniYAAAAA6IGWJgAAAAClMeQ4gJGLU6dS6dwo0WDcyJ3Y3EzmN5tNWELEYPNrDTi/MvVrDrjscS93GGW7zI9xsuzkPnQrWXa2jiWOxWi1ckU3c+kG/r2SFO/lzlED/w4CGCtB0AQAAAAA3dXlOU0ETQAAAABKixoNOc5AEAAAAADQAy1NAAAAACrhniYAAAAA6IrR8wAAAACgJ1qaAAAAAKCLEANBAAAAAABESxMAAACAKmIoz84eSwRNwGJr5Jqx49TpgRftFSsGm2H2TOkSTffZtNmyB13HMr8OrVYuXaOGjf7D+Gyy+7A54GMi+Z1WK3/sOHucTSU/n2TZ8d6pXH6SdCqZNvv5AJhIPNwWAAAAALoI1WcgiL6XqGxfbvu7tg/Y3m/7s8X8i23vtv1i8fei4VcXAAAAABZXpl1/VtLnI+LXJV0r6U7b6yRtk7QnItZK2lO8BwAAAFAL7ec0VZ0mSd+gKSKORMQPi9dvSzogaY2kzZJ2FMl2SLppSHUEAAAAMIYiqk8ZtjfZfsH2Qdu/0Ejjtq8Vy5+zfU0xf97ecsWyL9h+1fazxXRjv3qUuqfJ9pWSrpb0lKRLI+KI1A6sbF9SJi8AAAAAk22Y9zTZnpJ0j6TrJR2S9LTtnRHxk45kN0haW0wflnRv8fdsb7kf2r5Q0jO2d3ese3dEfCVbl/SwRLYvkPRtSZ+LiLdKrLfF9l7be48fP55dDQAAAMAYa7cYufKUsFHSwYh4KSJOS3pI7d5unTZLejDanpS00vbqHr3lKkkFTban1Q6YvhkR3ylmH7W9uli+WtKx+daNiPsjYkNEbJiZmalaTwAAAAD1skbSKx3vD+kXA5++aeb0ljtra9Gdb3tmQLvM6HmW9HVJByLiqx2Ldkq6vXh9u6RH++UFAAAAYOlY4EAQq872SCumLXOyn685au7dUD3TdOktd6+kD0haL+mIpLv6bWfmnqbrJN0m6ce2ny3m/YGkL0l62PanJf1U0icSeQEAAABYIso8830eJyJiQ4/lhyRd3vH+MkmHs2m69JZTRBw9+9r2A5Ie61fRvkFTRHxf80dwkvSxfusDAAAAWJqG/HDbpyWttX2VpFcl3SLpd+ak2al2V7uH1B4A4s1ikLpuveV09p6n4u3Nkvb1q0ip0fMADECzmUvXaiXzS6aTFGfOpNK1zzOphOmyB66RHMcm+zlmLfCS2ryyx8QoP++sQX8+g95/Uv7YyW7LEKqYdjr3nc5vS/JYlBTZPLPHN4CJE0oP6FAt/4hZ21slPS5pStL2iNhv+45i+X2Sdkm6UdJBSe9K+lSx+ry95SJil6Qv216vdje+lyV9pl9dCJoAAAAAjKUiyNk1Z959Ha9D0p3zrNe1t1xE3Fa2HgRNAAAAACoZQv+LsUTQBAAAAKC8GPo9TWODoAkAAABANTVpakreDQsAAAAA9URLEwAAAIBK6J4HAAAAAD0M40kc44igCQAAAEBpIVqaAAAAAKC7kETQBGAYotlMpfMw2rtnZ1PJwrkToJcN/hQSye0e9OeTLXeksp9Ncv+VK3pEn0+JctPb3WpVrEwXw/hsktsSs7nziSK5za0S25I8l2XPeQAwzgiaAAAAAFQyCdccB4GgCQAAAEA1BE0AAAAA0I0ZCAIAAAAAeqpJS1Nj1BUAAAAAgHFGSxMAAACA8oLnNAEAAABAbzXpnkfQBAAAAKCierQ0cU8TAAAAAPRASxOw2Jy7VhHNZi6/2dl80cuSX/nk5ZTIlp3c5nbZuStWMaqn6bXGvx9C1KWvxByRPcwGfOzYQzhmm61cusimS5adPe+oxDmqzPcfwOSpyU8OQRMAAACAagiaAAAAAKCLkMToeQAAAADQ3ah6yy82OhoDAAAAQA+0NAEAAACopiYtTQRNAAAAAKrhniYAAAAA6M60NAEAAABAF6HadM9jIAgAAAAA6IGWJmDStVr5tJFNO5XML3t5qUQdWyO6lpP+bMrkmfx8XI/+4EM3omMnssW2SlyOzR6P2WMsWXY0m7n8AECSZO5pAgAAAICeatI9j6AJAAAAQDU1CZq4pwkAAAAAeqClCQAAAEA1tDQBAAAAQBeh9kAQVacE25tsv2D7oO1t8yy37a8Vy5+zfU0x/3Lb37V9wPZ+25/tWOdi27ttv1j8vahfPQiaAAAAAFTiqD71zdueknSPpBskrZN0q+11c5LdIGltMW2RdG8xf1bS5yPi1yVdK+nOjnW3SdoTEWsl7Sne90TQBAAAAKCaWMDU30ZJByPipYg4LekhSZvnpNks6cFoe1LSSturI+JIRPxQkiLibUkHJK3pWGdH8XqHpJv6VYSgCQAAAMAorLK9t2PaMmf5GkmvdLw/pL8PfNJpbF8p6WpJTxWzLo2II5JU/L2kX0UZCAIAAADAKJyIiA09ls9349PcNqqeaWxfIOnbkj4XEW+Vr2IbLU0AAAAAKhnmPU1qtxpd3vH+MkmHs2lsT6sdMH0zIr7Tkeao7dVFmtWSjvWrCC1NwJiyc6PKlNJKjguaPJOpkaxjlBmPtFUi7QCVquMSKnspiWYu3aC/W8liS8keE9nvdHPwlcyeozi6gSUuOQpeRU9LWmv7KkmvSrpF0u/MSbNT0lbbD0n6sKQ3I+KI2yepr0s6EBFfnWed2yV9qfj7aL+K9G1psr3d9jHb+zrmfcH2q7afLaYb++UDAAAAYAlZyCAQiSsqETEraaukx9UeyOHhiNhv+w7bdxTJdkl6SdJBSQ9I+r1i/nWSbpP00Xlili9Jut72i5KuL973lGlp+oakP5f04Jz5d0fEVxLrAwAAAEBpEbFL7cCoc959Ha9D0p3zrPd9zX+/kyLiNUkfK1OPvi1NEfGEpNfLZAoAAACgBoY75PjYWMhAEFuLp+5uzzxFFwAAAMDSMuSBIMZG1aDpXkkfkLRe0hFJd3VLaHvL2bHXjx8/XrE4AAAAAGOHlqbuIuJoRDQjoqX2DVcbe6S9PyI2RMSGmZmZqvUEAAAAgJGoFDSdHde8cLOkfd3SAgAAAFiiatLS1Hf0PNvfkvQRSatsH5L0R5I+Ynu92pv7sqTPDK+KAAAAAMbNJN6bVFXfoCkibp1n9teHUBcAAAAAk2S4D7cdG5nnNAEYgfZjB/obyqkqWrl0rYUMwNnFELJMadXkUtlS1kh+G5LfrZHKHo/Z7yoADMsEnFIHYVT/ngAAAADARKClCQAAAEAl3NMEAAAAAL0QNAEAAABAFzUaPY97mgAAAACgB1qaAAAAAFRTk5YmgiYAAAAA1RA0AQAAAEB33NMEAAAAAKClCVhsbniwGUb+Ek8k07qVzbGZS1Zmm1tjfi0n0h8OBsEljofWmF/uHMaxk9zm7Hd/KOeTQZ/zAGAECJoAAAAAVDPm16sGhaAJAAAAQHk1ek4TQRMAAACAagiaAAAAAKCHmgRNY37HNQAAAACMFi1NAAAAAEqzuKcJAAAAAHojaAIAAACALmo0eh73NAEAAABAD7Q0AZOu1cqntVPJojHY6ykuUUU1yiReIlpL6DJdI3eMpcUSOh6GsJ8jknlmzxNlzicAINE9DwAAAAB6ImgCAAAAgO7qck8TQRMAAACAamoSNDEQBAAAAAD0QNAEAAAAoLxY4JRge5PtF2wftL1tnuW2/bVi+XO2r+lYtt32Mdv75qzzBduv2n62mG7sVw+CJgAAAACVOKpPffO2pyTdI+kGSesk3Wp73ZxkN0haW0xbJN3bsewbkjZ1yf7uiFhfTLv61YWgCQAAAEA1w21p2ijpYES8FBGnJT0kafOcNJslPRhtT0paaXu1JEXEE5JeX8jmnUXQBAAAAKCSYbY0SVoj6ZWO94eKeWXTzGdr0Z1vu+2L+iUmaAIAAAAwCqts7+2YtsxZPt8T0+eGW5k0c90r6QOS1ks6IumufhVlyHFgkUUrd2nFU8MoPHnXZas12GIb+eszHmzRUmO+c+kiSe7rJWXQ2zzK/ZeV3ObIfv9KlZ38wgyj7KTsOQ/AhFrYV/xERGzosfyQpMs73l8m6XCFND8nIo6efW37AUmP9asoLU0AAAAAyhv+6HlPS1pr+yrbyyXdImnnnDQ7JX2yGEXvWklvRsSRXpmeveepcLOkfd3SnkVLEwAAAIDSrPn7xg1KRMza3irpcUlTkrZHxH7bdxTL75O0S9KNkg5KelfSp/5//exvSfqI2t0AD0n6o4j4uqQv216vduj2sqTP9KsLQRMAAACAsVQMB75rzrz7Ol6HpDu7rHtrl/m3la0HQRMAAACAampy2yJBEwAAAIBKkkOHTzyCJgAAAADVEDQBAAAAQA81CZoYchwAAAAAeqClCQAAAEB5wT1NAAAAANAbQROASdB+PEGOW61cwsaAe+5my5UUybLt5OP0WkvnbF5mX49Ker9kldl/jdEcE0PZL9nvTLbsZH6TcIwBGC91aWnq+9+J7e22j9ne1zHvYtu7bb9Y/L1ouNUEAAAAMHZiAdMEyVzS/YakTXPmbZO0JyLWStpTvAcAAACAJadv0BQRT0h6fc7szZJ2FK93SLppsNUCAAAAMO4c1adJUvWepksj4ogkRcQR25cMsE4AAAAAxt0EdrOraujPabK9xfZe23uPHz8+7OIAAAAALBbuaerpqO3VklT8PdYtYUTcHxEbImLDzMxMxeIAAAAAYDSqBk07Jd1evL5d0qODqQ4AAACASWDV556mzJDj35L0N5J+zfYh25+W9CVJ19t+UdL1xXsAAAAAdVKT7nl9B4KIiFu7LPrYgOsCAAAAYIK4Jg/Frjp6HoBhaw3+JBTJDrlutXIJG8kMy5xQk2VHsmzb+bJHJJbQD052W4ayXwb8nRn4fsl+r9qFDzTP9LYM4bwDYAmbwBajqoY+eh4AAAAATDJamgAAAABUMmkDOlRF0AQAAACgGoImAAAAAOiOliYAAAAA6KUmQRMDQQAAAABAD7Q0AQAAACgv6J4HAAAAAL0RNAEAAADA/CxamgAMS7SS6ZxL5xK3JrZyZ7ZIZulWclsao7t9MiK3zXby854E2f1Sxgj34aBlj4m07OddptxkngPfFgDAvAiaAAAAAFRTk4s3BE0AAAAAKqF7HgAAAAB0E2IgCAAAAADoxUO4jXYcLZ07ewEAAABgCAiaAAAAAFQTC5gSbG+y/YLtg7a3zbPctr9WLH/O9jUdy7bbPmZ735x1Lra92/aLxd+L+tWDoAkAAABAJY7qU9+87SlJ90i6QdI6SbfaXjcn2Q2S1hbTFkn3diz7hqRN82S9TdKeiFgraU/xvieCJgAAAADlhdpDjled+tso6WBEvBQRpyU9JGnznDSbJT0YbU9KWml7tSRFxBOSXp8n382SdhSvd0i6qV9FCJoAAAAAVLLAlqZVtvd2TFvmZL9G0isd7w8V88qmmevSiDgiScXfS/ptJ6PnAZMuSgxb48FeJ4nkA+3cKlHHRrKO2TyT+aW3xc6Vi8mXPcayD3Ys8T3IHo9prWR+Zc4nWcPIE8BScSIiNvRYPt+P7twTWibNgtHSBAAAAKCa4Q4EcUjS5R3vL5N0uEKauY6e7cJX/D3WryIETQAAAABKs4Y7EISkpyWttX2V7eWSbpG0c06anZI+WYyid62kN892vethp6Tbi9e3S3q0X0UImgAAAACUt5BBIBLdkCNiVtJWSY9LOiDp4YjYb/sO23cUyXZJeknSQUkPSPq9s+vb/pakv5H0a7YP2f50sehLkq63/aKk64v3PXFPEwAAAICxFBG71A6MOufd1/E6JN3ZZd1bu8x/TdLHytSDoAkAAABAJcludhOPoAkAAABANQRNAAAAANAdLU0AAAAA0E0o/xy4CcfoeQAAAADQAy1NwJiK5JUbN+Z7EHbXTHPpWsnrKWXKHrTEUKWSpFZymxu5bY5sueiJz3FAsld4s9/9ErLnKABLXE1OBQRNAAAAACrhniYAAAAA6KUmPQcImgAAAABUUpeWJgaCAAAAAIAeaGkCAAAAUF6IgSAAAAAAoBtLMvc0AQAAAEAPg3+iwVjiniYAAAAA6IGWJgAAAACV0D0PAAAAALphIAgAkyJa+bOVGx5s4cmyo0RHYLeSnaMb9C7uis+mt+wxlr16mswvylyNLfG9HqQy5xMAkIKH22bYflnS25KakmYjYsMgKgUAAABg/NXl4baDaGn6jYg4MYB8AAAAAGDs0D0PAAAAQDU16Z630I7vIemvbT9je8sgKgQAAABgAoTkVvVpkiy0pem6iDhs+xJJu20/HxFPdCYogqktknTFFVcssDgAAAAAY4OWpv4i4nDx95ikRyRtnCfN/RGxISI2zMzMLKQ4AAAAAFh0lYMm2+fbvvDsa0n/VNK+QVUMAAAAwJiLBUwTZCHd8y6V9Ijts/n8RUT81UBqBQAAAGDsuSbd8yoHTRHxkqQPDbAuAAAAACYJQROAoUifXJLDyjjfyzZaubLdGHzZI5P9vFvJbW5MwDbXVXYfLiWR2+bsd38YZQNYwkLpf1cmHb/+AAAAANADLU0AAAAASrOCe5oAAAAAoCeCJgAAAADogaAJAAAAALpgIAgAAAAAGC3bm2y/YPug7W3zLLftrxXLn7N9Tb91bX/B9qu2ny2mG/vVg5YmAAAAAJUMcyAI21OS7pF0vaRDkp62vTMiftKR7AZJa4vpw5LulfThxLp3R8RXsnWhpQkAAABANRHVp/42SjoYES9FxGlJD0naPCfNZkkPRtuTklbaXp1cN42gCQAAAEAFCwiY2kHTKtt7O6YtcwpYI+mVjveHinmZNP3W3Vp059tu+6J+W0r3PGDSRYk7MD2i6yStfNN9JKvoVnK7GwPe5my5wygbg5HtSlJmXy8VZc4n6TzrMbIWgEpORMSGHss9z7y5J5VuaXqte6+kPyne/4mkuyT9bq+KEjQBAAAAKC807AsjhyRd3vH+MkmHk2mWd1s3Io6enWn7AUmP9asIl0EBAAAAVNNawNTf05LW2r7K9nJJt0jaOSfNTkmfLEbRu1bSmxFxpNe6xT1PZ90saV+/itDSBAAAAKCSYY6eFxGztrdKelzSlKTtEbHf9h3F8vsk7ZJ0o6SDkt6V9Kle6xZZf9n2erXbyl6W9Jl+dSFoAgAAAFDNkO9bjIhdagdGnfPu63gdku7MrlvMv61sPeieBwAAAAA90NIEAAAAoLxQqRFyJxlBEwAAAIAK0g+pnXgETQAAAACqIWgCAAAAgB4ImgCMVPYk5PkeeL3AopP9k93IPWRBHvyYM5H8fNxK1rGRrGOZz3vQZSd5GMfEoH8Us59NGdk6Jsse/DaXyC+SdRzlvQQ1+UcJACSCJgAAAABVMBAEAAAAAPQS6ZbxSUfQBAAAAKCamnTV5eG2AAAAANADLU0AAAAAyuOeJgAAAADooybd8wiaAAAAAFRD0AQAAAAA3URtgiYGggAAAACAHmhpAgAAAFBeSGrxnCYAk6BUs/hgT2zRTCZ0iTom83TDqXQD7zTgEg30yTqmi/aItrmEGHQ3jTKjMo3oAYsxjJGjRvWwyJp0swEwQDU5bxA0AQAAAKiGoAkAAAAAuonaPKeJgSAAAAAAoAdamgAAAACUF1KM6h7MRUbQBAAAAKCamnTPI2gCAAAAUE1NBoLgniYAAAAA6IGWJgAAAADlRfBwWwAAAADoqSbd8wiagDoZ1YktmoPPcild2LJTyerxszRHTX6MAWBSRU1amhZ0T5PtTbZfsH3Q9rZBVQoAAADAuIv2xa2q0wSpHDTZnpJ0j6QbJK2TdKvtdYOqGAAAAACMg4V0z9so6WBEvCRJth+StFnSTwZRMQAAAABjLMRzmhLWSHql4/0hSR9eWHUAAAAATIwldZNxdwsJmua7c/kXQk3bWyRtkaQrrrhiAcUBAAAAGBchKWrS0rSQgSAOSbq84/1lkg7PTRQR90fEhojYMDMzs4DiAAAAAIyNiHZLU9VpgiwkaHpa0lrbV9leLukWSTsHUy0AAAAAGA+Vu+dFxKztrZIelzQlaXtE7B9YzQAAAACMtbp0z1vQw20jYpekXQOqCwAAAIBJMmHd7KpyLOKDpWwfl/R3i1Yg5rNK0olRVwK/gP0yntgv44n9Mp7YL+OJ/TKe5tsv/yAiJmoAANt/pfa2VHUiIjYNqj7DtKhBE0bP9t6I2DDqeuDnsV/GE/tlPLFfxhP7ZTyxX8YT+2XyLGQgCAAAAABY8giaAAAAAKAHgqb6uX/UFcC82C/jif0yntgv44n9Mp7YL+OJ/TJhuKcJAAAAAHqgpQkAAAAAeiBoqgnbn7C933bL9oY5y37f9kHbL9j+zVHVsa5sbyo++4O2t426PnVle7vtY7b3dcy72PZu2y8Wfy8aZR3rxvbltr9r+0Bx/vpsMZ/9MkK2V9j+ge0fFfvli8V89ssYsD1l+3/bfqx4z34ZMdsv2/6x7Wdt7y3msV8mDEFTfeyT9C8kPdE50/Y6SbdI+keSNkn6L7anFr969VR81vdIukHSOkm3FvsEi+8ban8HOm2TtCci1kraU7zH4pmV9PmI+HVJ10q6s/h+sF9G65Skj0bEhyStl7TJ9rViv4yLz0o60PGe/TIefiMi1ncMM85+mTAETTUREQci4oV5Fm2W9FBEnIqIv5V0UNLGxa1drW2UdDAiXoqI05IeUnufYJFFxBOSXp8ze7OkHcXrHZJuWsw61V1EHImIHxav31b7H8E1Yr+MVLSdLN5OF1OI/TJyti+T9FuS/mvHbPbLeGK/TBiCJqyR9ErH+0PFPCwOPv/xdmlEHJHa/8BLumTE9akt21dKulrSU2K/jFzRBexZScck7Y4I9st4+DNJ/15Sq2Me+2X0QtJf237G9pZiHvtlwiwbdQUwOLb/h6RfnmfRH0bEo91Wm2ceQyouHj5/oA/bF0j6tqTPRcRb9nxfGyymiGhKWm97paRHbH9wxFWqPdu/LelYRDxj+yMjrg5+3nURcdj2JZJ2235+1BVCeQRNS0hEfLzCaockXd7x/jJJhwdTIyTw+Y+3o7ZXR8QR26vVvqqORWR7Wu2A6ZsR8Z1iNvtlTETEG7a/p/b9gOyX0bpO0j+3faOkFZLeZ/u/if0ychFxuPh7zPYjanfNZ79MGLrnYaekW2yfY/sqSWsl/WDEdaqTpyWttX2V7eVqD8qxc8R1wt/bKen24vXtkrq12GII3G5S+rqkAxHx1Y5F7JcRsj1TtDDJ9rmSPi7pebFfRioifj8iLouIK9X+LfmfEfGvxH4ZKdvn277w7GtJ/1TtwbnYLxOGh9vWhO2bJf1nSTOS3pD0bET8ZrHsDyX9rtojVX0uIv5yVPWso+Kq4J9JmpK0PSL+dLQ1qifb35L0EUmrJB2V9EeS/rukhyVdIemnkj4REXMHi8CQ2P4nkv6XpB/r7+/R+AO172tiv4yI7X+s9o3rU2pffH04Iv7Y9vvFfhkLRfe8fxsRv81+GS3bvyrpkeLtMkl/ERF/yn6ZPARNAAAAANAD3fMAAAAAoAeCJgAAAADogaAJAAAAAHogaAIAAACAHgiaAAAAAKAHgiYAAAAA6IGgCQAAAAB6IGgCAAAAgB7+H65BPrZMniHPAAAAAElFTkSuQmCC\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2020-10-27T11:40:00.139854\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.3.1, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ldc = create_lid_driven_cavity(domain_size, relaxation_rate=relaxation_rate, lid_velocity=lid_velocity)\n", "ldc.run(time_steps)\n", "vel_version2 = ldc.velocity[:, :, :, :]\n", "\n", "plt.vector_field_magnitude(vel_version2[:, :, domain_size[2]//2, :])\n", "plt.colorbar()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.2" } }, "nbformat": 4, "nbformat_minor": 4 }