{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Flow Over Stationary Sphere\n", "\n", "The simulation of a laminar flow over a stationary sphere is used for the validation of force spreading aspects of the immersed boundary method (IBM). For that purpose, the drag coefficient is measured through the forces calculated at the Lagrangian mesh." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from nassu.cfg.model import ConfigScheme\n", "\n", "filename = \"tests/validation/cases/07_flow_over_sphere.nassu.yaml\"\n", "\n", "sim_cfgs = ConfigScheme.sim_cfgs_from_file_dct(filename)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "A multilevel configuration is adopted to allow a large ratio between the sphere's and domain's sizes." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "sim_laminar = [sim_cfg for (name, _), sim_cfg in sim_cfgs.items() if name.startswith(\"laminar\")]\n", "sim_turb = next(\n", " sim_cfg for (name, _), sim_cfg in sim_cfgs.items() if name == \"turbulentFlowOverSphere\"\n", ")\n", "sim_turb_les = next(sim_cfg for (name, _), sim_cfg in sim_cfgs.items() if name.endswith(\"LES\"))\n", "sim_cfgs_use = sim_laminar + [sim_turb] + [sim_turb_les]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Functions to use for flow over sphere processing" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import pathlib\n", "\n", "from nassu.cfg.schemes.simul import SimulationConfigs\n", "\n", "\n", "def get_experimental_profile_Cp(reynolds: float) -> pd.DataFrame:\n", " files_tau: dict[float, str] = {\n", " 4200: \"Flow_over_sphere/Re_4200/Cp_vs_theta.csv\",\n", " 50000: \"Flow_over_sphere/Re_50000/Cp_vs_theta.csv\",\n", " 300000: \"Flow_over_sphere/Re_300000/Cp_vs_theta.csv\",\n", " 400000: \"Flow_over_sphere/Re_400000/Cp_vs_theta.csv\",\n", " 1140000: \"Flow_over_sphere/Re_1140000/Cp_vs_theta.csv\",\n", " }\n", " file_get = files_tau[reynolds]\n", "\n", " filename = pathlib.Path(\"tests/validation/comparison\") / file_get\n", "\n", " # ([theta], [Cp])\n", " df = pd.read_csv(filename, delimiter=\",\")\n", " return df\n", "\n", "\n", "def get_experimental_profile_Cd() -> pd.DataFrame:\n", " file_get = \"Flow_over_sphere/drag_coefficient.csv\"\n", " filename = pathlib.Path(\"tests/validation/comparison\") / file_get\n", " # ([Author], [Re], [Cd])\n", " df = pd.read_csv(filename, delimiter=\",\")\n", " return df\n", "\n", "\n", "u_reference = 0.00549\n", "\n", "\n", "def get_height_scale(sim_cfg: SimulationConfigs, reynolds: float) -> float:\n", " global u_reference\n", " kin_visc = sim_cfg.models.LBM.kinematic_viscosity\n", " return u_reference / kin_visc" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Results\n", "\n", "Good agreement with correlations found in literature is found for the drag coefficient, with better results achieved at higher Reynolds number. For such cases, the boundary proximity is expected to have smaller effect in the result of drag coefficient." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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IafX9fTr8KJFi8xFF11kGjdubC6//HKTnJxsvvnmG2OMMcuXLzdeXl5m27ZtJ133zTffNJJMdna2Y968efNMcHCw4/HIkSPNwIEDHY+vvPJK8+CDDzoet2rVyjz//PPGGGPWrl1r/Pz8zOHDh6vsp02bNuavf/2rMcaYKVOmmIYNG5qioqIzHtvp/l2q+x7q9DUEzkpJSVHv3r318MMPS5I6d+6sCy64QH369NFf/vIX2Ww2V5cgSY5hnU6dOp10+fH5vx/+AQDUHk+/Dt9www267rrrtHbtWm3YsEEff/yxZs6cqddff11FRUVq2bKl2rdvf8r1fXx81KZNG8djm82moqKiGtXyzTff6ODBg7r44ourzD906JB++uknx+NWrVqpWbNmNdqHs1weCMrKytSgQdXdHB+CMca4evcOx4PH1q1b1atXrxOWb926tUo7AEDtqguvw40bN9Y111yja665RpMmTdIdd9yhKVOmVGvov2HDhlUeWyyWGr+PHTx4UDabTatXrz5h2e+/3njBBRfUaPs14fQ1BAcPHlRmZqbjXEZOTo4yMzOVm5sr6dj5/xEjRjjaJyYmKjU1Va+88op27NihdevW6YEHHlCPHj3UvHnz2jmKaujTp4/Cw8P19NNPy263V1lmt9uVkpKiiIgI9enTx201AUB9Uhdfhzt27KjS0lJ17txZu3bt0vbt292y365du6qgoEANGjRQ27Ztq0yBgYFuqeF/OR0INm3apJiYGMXExEiSkpKSFBMTo8mTJ0s6NtRzPBxIx666nD17tl566SV16tRJN910kzp06OD2K/q9vb01a9YsLVmyRIMGDapydeugQYO0ZMkSPffcc1UuIAEA1B5Pvg7v27dPV199tRYsWKBvv/1WOTk5+uCDDzRz5kwNHDhQV155pa644grdcMMNWrlypXJycvTxxx9r2bJltV6LJMXFxSk2NlaDBg3SihUrtHPnTq1fv14TJ07Upk2bXLLPM3H6lMFVV1112iGSk92UYezYsRo7dqyzu6p1gwcP1qJFizR+/HhdfvnljvkRERFatGgR9yEAABfz1Ouwr6+vevbsqeeff14//fSTjhw5otDQUN155516/PHHJUn/+te/NGHCBA0dOlSlpaVq27atZsyY4ZJ6LBaLli5dqokTJ2rUqFHas2ePQkJCdMUVVyg4ONgl+zxjTcad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mIyMDJOTk2M++eQT07VrV9OuXTtz+PBhxzbqW7/de++9xt/f36xevdrk5+c7prKyMkebM/1NHj161HTq1Mn079/fZGZmmmXLlplmzZqZ5ORkTxySy52pz7Kzs82TTz5pNm3aZHJycsyHH35oWrduba644grHNupbnxljzGOPPWbWrFljcnJyzLfffmsee+wxY7FYzIoVK4wx58/zjEDghCFDhhibzWYaNWpkWrRoYYYMGWKys7Mdyw8dOmTuu+8+c9FFFxkfHx/zpz/9yeTn53uwYvf77LPPjKQTppEjRxpjjn31cNKkSSY4ONhYrVbTr18/s23btirb2Ldvnxk6dKjx9fU1fn5+ZtSoUebAgQMeOBr3OV2/lZWVmf79+5tmzZqZhg0bmlatWpk777yzyleYjKl//Xay/pJk3nzzTUeb6vxN7ty50yQkJJgmTZqYwMBAM378eHPkyBE3H417nKnPcnNzzRVXXGGaNm1qrFaradu2rXn44YdNcXFxle3Upz4zxpjRo0ebVq1amUaNGplmzZqZfv36OcKAMefP88xijDHuG48AAAB1EdcQAAAAAgEAACAQAAAAEQgAAIAIBAAAQAQCAAAgAgEAABCBAAAAiEAAAABEIAAAACIQAAAASf8HZ5z2W2/eO7MAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "fig, ax = plt.subplots()\n", "fig.set_size_inches(6, 5)\n", "\n", "num_vals = {\"x\": [], \"y\": []}\n", "for sim_cfg in sim_laminar:\n", " output_sphere = sim_cfg.output.bodies[\"sphere\"]\n", " last_step = output_sphere.interval.get_all_process_steps(sim_cfg.n_steps)[-1]\n", " filename_nodes = output_sphere.nodes_data_csv(last_step)\n", " df_body = pd.read_csv(filename_nodes)\n", " diameter = df_body[\"pos_x\"].max() - df_body[\"pos_x\"].min()\n", "\n", " # Force in flow direction\n", " sum_F = df_body[\"force_x\"].sum()\n", " # Average rho\n", " rho_inf = 1\n", " # Inlet velocity\n", " u_inf = max(bc.ux for bc in sim_cfg.models.BC.BC_map if \"ux\" in bc.model_dump())\n", " # Circunference area\n", " sphere_lvl = df_body[\"lvl\"].max()\n", " area = np.pi * (diameter * 2**sphere_lvl) ** 2 / 4\n", "\n", " reynolds = u_inf * diameter / sim_cfg.models.LBM.kinematic_viscosity\n", "\n", " Cd = -sum_F / (0.5 * rho_inf * area * u_inf**2)\n", "\n", " num_vals[\"x\"].append(reynolds)\n", " num_vals[\"y\"].append(Cd)\n", "\n", "ax.plot(num_vals[\"x\"], num_vals[\"y\"], \"^k\", fillstyle=\"none\", label=\"Nassu\")\n", "\n", "df_exp = get_experimental_profile_Cd()\n", "authors = [\"Schiller\", \"Concha\"]\n", "styles = [\"ok\", \"sk\"]\n", "for author, style in zip(authors, styles):\n", " ax.plot(df_exp[\"Re\"], df_exp[author], style, fillstyle=\"none\", label=author)\n", "\n", "ax.legend()\n", "\n", "plt.show(fig)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The pressure coefficient for the case of turbulent flow around a stationary sphere is performed for a Re=4,200 simulation to check capacity of measuring the pressure coefficient using the historic series function for a body. A posterior LES simulation is then performed for a Re=50,000 to also verify the solver stability for high Reynolds simulations. In both cases, excellent agreement with experimental data was obtained." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABAYAAAHYCAYAAADeVuohAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAnIJJREFUeJzs3XdYU+f7BvA7hI0iSwUBxTrqHrVqHVRQFEetiqhV66qzioJoq7Tu1lm10Gq1bq27iNbWUa0FpRW1rlr3VkTQulgyQji/P/yRrymgoEneHHJ/ritXyZuTkzsp8iRP3vMehSRJEoiIiIiIiIjIJJmJDkBERERERERE4rAxQERERERERGTC2BggIiIiIiIiMmFsDBARERERERGZMDYGiIiIiIiIiEwYGwNEREREREREJoyNASIiIiIiIiITxsYAERERERERkQljY4CIiIiIiIjIhLExQERERERERGTC2BggKuF+/fVXKBQKzcXCwgJVq1bFtGnTkJ2dLTpegWbOnAmFQoE6depojf/1118ICgpC7dq1YWdnh4oVK6Jnz564fPlygfvJysrChAkTUKFCBdjY2KBp06bYv3//K29HREQkmhzqekxMjFbG5y9HjhzR2rY4NVgfdZ3vAYieMRcdgIj06++//wYALFy4EGXLlsXTp0/x448/Yvr06cjKysLs2bMFJ9R2584dzJo1C3Z2dvlumzt3Lv7880/06NED9erVQ1JSEhYtWoS33noLR44cyddIGDhwICIjIxESEoJq1aphzZo16NixI6Kjo9GyZctib0dERCSanOr6mDFj0LhxY62xqlWral0vTg3WR13newCi/ycRUYnWt29fydraWsrJydGMZWVlSa6urlLlypUFJitYr169pNatW0utWrWSateurXXbn3/+KWVlZWmNXb58WbKyspL69u2rNX706FEJgPTVV19pxjIyMqQqVapIzZo1K/Z2RERExkAOdT06OloCIP34448v3K44NVgfdZ3vAYj+h4cSEJVwf//9N2rXrg2lUqkZs7S0RIUKFZCcnJxv+5iYGHTs2BEODg5wcnLCe++9h2vXrhkk66FDhxAZGYnw8PACb2/evDksLS21xqpVq4batWvjwoULWuORkZFQKpUYNmyYZsza2hqDBw9GXFwc4uPji7UdERGRMZBTXQeA1NRU5OTkFHhbcWqwPuo6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2trCyclJdBwiIiLSsbFjx8LOzg6nTp3CL7/8IjoOEZEQbAwQvYS/vz9u3bqFzz//XHQUIiIi0jEXFxcEBQVBoVDg5MmTouMQEQlhLjoAkbFTKBRwcXEBANy4cQMuLi4oXbq04FRERESkK+PHj8eAAQNQs2ZN0VGIiITgjAGiIurfvz/eeOMNbNu2TXQUIiIi0iEXFxdNU0CtVvMMBURkctgYICqi6tWrAwA2bdokOAkRERHpw4wZM1CxYkXExsaKjkJEZFBsDBAVUa9evQAABw4cwP379wWnISIiIl27desW7t69iw0bNoiOQkRkUGwMEBVRtWrV0KhRI6jVah5OQEREVAL17dsXAPDjjz8iKytLcBoiIsNhY4CoGHr37g0A2Lx5s+AkREREpGutWrWCu7s7njx5gj179oiOQ0RkMGwMEBVDz549AQCxsbG4c+eO4DRERESkS0qlUvMlAA8nICJTwsYAUTF4enqiZcuWkCQJP/74o+g4REREpGN5hxP8/PPPSE5OFpyGiMgw2BggKqbPP/8cW7ZswbBhw0RHISIiIh2rX78+atWqhaysLK4pREQmw1x0ACK5ad++vegIREREpCcKhQKjRo3CxYsX0aRJE9FxiIgMgo0BIiIiIqLnjBw5UnQEIiKD4qEERK/g8ePHmDlzJnr06CE6ChERERER0WthY4DoFU2fPh2RkZE4d+6c6ChERESkY7m5uYiJicG0adNERyEi0js2BohegaOjI1q2bAkAqFOnjuA0REREpGuPHz9G27ZtMX36dH4JQEQlHhsDRK/onXfe0fx84cIFgUmIiIhI15ydndGhQwcAwLJlywSnISLSLzYGiF7R81MLly5dKi4IERER6UXfvn0BAN988w3u3LkjOA0Rkf6wMUD0iiwtLbF3714AwLp165CVlSU4EREREelS586dNT8vXLhQYBIiIv1iY4DoNbRt2xZTp05FXFwcrKysRMchIiIiHbK1tcXYsWMBADt37oQkSYITERHph2wbA48ePULfvn1hb28PBwcHDB48GGlpaS/cfvTo0XjzzTdhY2ODihUrYsyYMUhOTjZgaippzMzMMG3aNNSoUUN0FCKiEon1nkT74osvUKZMGbzxxht49OiR6DhERHphLjrAq+rbty8SExOxf/9+qFQqDBo0CMOGDcPGjRsL3P7u3bu4e/cu5s+fj1q1auHWrVsYMWIE7t69i8jISAOnp5JKkiQoFArRMYiISgzWexLNzs4ON2/ehIODg+goRER6I8vGwIULF7B371789ddfePvttwEA3377LTp27Ij58+ejQoUK+e5Tp04dbNu2TXO9SpUqmDlzJj788EPk5OTA3FyWLwUZiXPnzuGLL76Ag4MDFyIkItIR1nsyFmwKEFFJJ8vqGBcXBwcHB82bBADw8/ODmZkZjh49im7duhVpP8nJybC3t3/hm4SsrCytReVSUlIAACqVCiqV6hWfgRh5eeWWGzD+7A8fPsSWLVtgY2ODGTNmwNHRUXObsWd/EWYXg9nFkGt2tVqNmJgY0TH0wlD1nrXeOMghe0JCAu7evYvGjRtrjcshe2FMKbtarcYff/yBxMREuLm5oWXLllAqlfqMWChTet2NSUnIri+ybAwkJSWhXLlyWmPm5uZwcnJCUlJSkfbx4MEDfPHFFxg2bNgLt5s9ezamT5+ebzw6Ohq2trZFD21E9u/fLzrCKzPW7JIkwcvLCzdv3kRYWBjef//9fNsYa/aiYHYxmF0MOWWPi4vDihUr8PDhQ9FR9MJQ9Z613rgYa/bjx49j1qxZcHd3xzfffFPgoYPGmr0oSnr2gv5eOjs7Y8iQIWjWrJk+471QSX/djZUcsz99+lSv+zeqxsDEiRMxd+7cF25z4cKF136clJQUdOrUCbVq1dI6F31BwsLCEBoaqnVfT09P+Pr6wtnZ+bWzGJJKpcL+/fvRtm1bWFhYiI5TLHLInpCQgKCgIPzxxx9YsmSJ5g2DHLIXhtkNL+/b37zsPj4+wr7NeBVyfd0B+WXfvn075s2bJ8tV0o2t3rPWGwdjz96iRQssWLAA8fHxcHJy0vowaezZX8QUshf29/LRo0eYN28eNm/eXOQZSLpiCq+7MZJzdn1/CWBUjYFx48Zh4MCBL9zmjTfegKurK+7fv681npOTg0ePHsHV1fWF909NTUX79u1RunRpbN++/aW/EFZWVgWehs7CwkJ2v0x5mF0/+vfvj4kTJ+Ly5cv4448/0Lp1a63bjTn7yzC7YURFRSE4OBh37twB8Oyc2R4eHoiIiEBAQIDgdMUjp9f9v+SQXa1WY9y4cbJsCgDGV+9Z642LsWZ3cXFBz549sXbtWqxZswbvvvtuvm2MNXtRlNTsL/p7mbdo9Pjx49G9e3chjfiS+robOzlm13deo2oMlC1bFmXLln3pds2aNcOTJ09w4sQJNGrUCADw+++/Izc3F02bNi30fikpKfD394eVlRV27twJa2trnWUnKl26NPr164clS5ZgyZIl+RoDZDhqtRoHDx7EoUOHYGdnB19fX50We7VajdjYWM0xit7e3q+9/6ioKAQGBuZ745KQkIDAwEBERkbKrjlA+hMbG6tpIMkR6z3J1dChQ7F27Vps2bIF4eHhsLe3Fx2JXuJlfy8lSUJ8fDxiY2Ph4+NjuGBERsZMdIBXUbNmTbRv3x5Dhw7FsWPH8OeffyIoKAgffPCBZoXihIQE1KhRA8eOHQPw7E1Cu3btkJ6ejpUrVyIlJQVJSUlISkqCWq0W+XSoBBkxYgQAYMeOHUhMTBScxjRFRUXBy8sLbdu2xcKFC9G2bVt4eXkhKipKp/v39fVFnz594Ovr+9r7V6vVCA4OLvTbDAAICQl57b9VeYcpbNq0CTExMbL62yfn7PpgKn9fWO/J2DRv3hw1a9bE06dPCz1lJhmXov69NPa/q6yDpG+ybAwAwIYNG1CjRg20adMGHTt2RMuWLbFs2TLN7SqVCpcuXdIs0nDy5EkcPXoU//zzD6pWrQo3NzfNJT4+XtTToBKmXr16+PDDDzFnzhzZLlglZ3nfuv/3m4G8b91ftzmgr/0X59uMV6WPhoahyDm7vri5uYmOYDCs92RMFAoFhg4dCgBYvny54DRUFEX9e2nMf1dZB8kQjOpQguJwcnJ6YafWy8tL69s3Hx8f2R6LSfLyww8/iI5gkl72rbtCoUBISAi6dOnyStP+9bl/fX+bIefDFOScXRdyc3OhUCjyrX7u7e0NDw8PJCQklPjaxnpPxqZfv36YOHEiLly4gPj4eHh6eoqORC/wsr+XCoUCHh4e8Pb2FpDu5Uy9DpLhyHbGABHR8/T9rbs+96/PbzMMdZiCPsghuyRJyM7ORmpqKv7991/Ex8fjypUr+PfffzW3R0VFYcOGDVixYgW+/fZbzJs3D46Ojmjfvr3Wvr744gu0bt0aDRs2ROXKleHg4AClUgkzMzMMHz5ca1sHBwfcvXuXH4CJBHBxccHOnTuRmJjIpoCO6WO6vFKpREREBADka7LmXQ8PDzfKMwDJoQ5SySHbGQNExiwzMxM//vgjzpw5g1mzZomOYxL0/a376+xfrVYjPT0daWlpSEhIwNGjR6FUKtGiRQvUq1cP3t7ecHNze+FjVKhQQfNtxr59+7B161ZcvXoVDRs2hKOjo2ZVdSsrK/Tq1QtOTk4AgO+//77IDQ0LCwv89NNP+Pfff+Hu7o6srCxkZWUhMzMTWVlZmD59Ory8vAA8m949ceJEtGnTBvb29ihTpgzs7e1hY2OD8+fPo3HjxppjwM+ePYtTp07BzMwMZmZmePToEczNzVG2bFmUKVMGTZo0QenSpQE8+4b8+vXryMjIwOHDh4uUvWXLlmjfvr3mQ7RSqUTZsmXx0UcfAQDu3buHI0eO4NGjR1qXx48f49GjRxg7diw6dOgAANizZw9Wr16NjIwMpKena10yMzMxfPhwzJo1C7t27UKPHj2QmZmZ7w2bQqGAtbU14uLiUK9evQK/6QGAX3/9Fbm5uTAzM9O8TtHR0QU+1+vXr2tdV6lUyM3NLfS1ISL98vf3Fx2hxPnvmXkA6OzMPAEBAYiMjCxw/+Hh4Ub7jTsXTiRDYmOASA8SEhLQv39/AMDgwYMFpzENuv7WXa1W48GDB7h//z7u37+v+eD6MocOHULv3r0BPDvfrIeHBzIzMwvcNjw8HPXq1YNSqcTAgQMxe/bsQvc7atQozbcZ586dw8qVKwEABw8ezLdty5YtNY2Bwj5o/ldiYiLOnz+Pr776qtBtRo4cqWkM/Pbbb7hz5w7Wrl1b4Lb9+vXTNAZ+/vlnfPbZZ4Xu9+TJk2jYsCEA4K233sLff/9dpMx5jhw5giNHjmiN1a5dW9MY+Ouvv9C1a9dC7//ee+9pGgPXr1/H/v37C9xu0KBBmpXwzczMkJGRkW8bS0tLNG7cGLt27UKZMmUAAK1bt4ZCoYCNjQ2sra1hbW2tOeQoKysLNjY2AJ69vl27doWjoyMcHBzg6OiI1NRU3Lx5E3Xr1tV6nEuXLsHc3ByWlpYwMzPDgQMH0KtXr5e9VESkBykpKZp/x/RqDDFdPiAgAF26dNH5WYXy6OOMRYZcOFEf+Ule2Bgg0oMqVarA398fv/76K5YvX17guY5Jt4pyDGG5cuVw+fJlrF+/Hg4ODvjss880H6AjIyPx3XffaRoBDx480NpPdHR0kY7pTktL0/xsZ2en1RRQKpUoXbo0njx5gho1aqBKlSqa2/z9/TF79mwolUqtKYHW1taoV68e3n//fc1YixYtMHDgQNja2sLc3FzzzX7e5fkmRt26dREZGfnS18/NzQ0ODg5o0aIFateurTUDwcrKCtbW1vDw8NBs36dPHzRu3BhpaWk4evQo9u3bp/XcAwICsHjxYgQEBMDLywvt2rVDbm6u5nLy5ElUrFgRADT/D/Jeh7zGgIuLCx48ePDS7FWrVoWfnx9yc3OhVquRm5uraUoAz2ZbNG3aFE5OTgVemjRpotn23Xffxfvvvw97e3vY2dlpXRwdHVG5cmUAQKtWrXDjxg3NB31ra2vNh/T/+u233/KNrVu3Lt9Yq1atCnx+b7/9dr6xSpUqaV1v06ZNIa8OEenLqVOnMHToUFhZWSEmJkZ0HIPR9QdIfa8R9DylUqmXb9b1NdvBUAsn6nO2BsmIRMWSnJwsAZAePHggOkqxZWdnSzt27JCys7NFRyk2OWbfsWOHBEBydnaWtm7dKqvseeT2um/btk1SKBSSQqGQALz0cvDgQc19Fy9enO92hUIhlS1bVqpdu7YUExOj2X9h+xszZox05MgRzT5zc3OlGzduSA8ePJAyMzOl3Nzclz6HnJwcaf/+/VJoaKi0f/9+KScn57Vek5ycHMnDw6PQ3AqFQvL09HzlxynsNcn7/7Bt27Zi7S8tLU1KS0szSPb/ktvv+/MePHggAZCSk5NFRykRWOvFkFv2u3fvSkqlUgIgnTp1SlbZn1ec133btm2Sh4eH1t9iDw+PYv+tf150dHSRanZ0dPRrZdeXV62DRcluiDr4KvmN4XV/VXLOru9az8UHifSkU6dO8PDwwMOHD3H48GHRcUxClSpV0LlzZ61vi59XunRpvPPOOwCApk2ban3z0LZtW2zcuBG//fYbzpw5g6SkJGRnZ+P+/fs4e/YsWrVqpTlG8flvzgHA09MT27ZtQ0REhGaqOfBsloKXlxecnZ1hZWWVb9GjgiiVSrRq1QrvvvsuWrVqpZNvR/S16JI+FkXK+3Ze39mJiF6Xm5sbOnfuDABYvXq14DT6p69T9hpyuryu6XtxQH3XQS5uSM/joQREemJubo5hw4ZhypQp2Lt3L+bNmyc6Uon08OFDbNy4EatXr8apU6cAAGvXrkWFChWwZ88ePH36FI0bN8Y777yDN998s9DiWa1aNVSrVu2lj6fvYxT1QV+LLhliUSS5LhhFRKZh6NCh2LFjB9avX4+WLVuKjqM3+pzur4/p8ikpKfjnn3/g7u6uWRtHH+ReB7m4oeGcO3cOmZmZUKlUyMnJgUql0lxKly6tOez43Llz2Lp1q+ZUxc9fCvr3p0tsDBDp0ZAhQzBjxgxcvHgRZ86cQaNGjURHKhFycnKwb98+rF69Gjt37kR2djaAZwu/denSBW+++SbeeustpKeno2PHjrCwsNDp4+vrGEV90kdDw1Df8sixGUNE8lbU4+j9/f3h4eGBO3fu4MiRIy9c6FTO9PkBsihrBHl4eMDb2xvJycmIjo7Gvn37UKdOHQwdOhTZ2dnYt28f/vnnH5w8eRKnTp3C1atXAfzv1K42Nja4d+8e0tLSkJmZme9iZmamWYS2sOdX0Kw/uddBOc/WMCRJkpCamorHjx8jJydHs0bUnTt38OuvvyIlJQXJyclISUnR+vmnn36CtbU1gGfrCD18+LDA/b/99tv466+/AADnz5/HjBkzCtwub6FmfWFjgEiP3Nzc0LVrV1y6dAkqlUp0HFlTq9WaAnjr1i106tRJc1vDhg0xaNAg9OnTB87OzgDA17sAum5oGGpRJECezRgikqfiLMSmVCrx0UcfYcaMGdi/fz/mzJlj6LgGoc8PkHnT5QMDA/N9K5p3vXnz5mjVqhWOHDmimdberFkz9OnTB7t378b27duRnJycb9+WlpZIT0+HjY0N2rdvj9OnTxeYwdXVFYmJicjNzcXGjRtx69Yt3Lx5U/Pf+Ph4vP/++9iyZYvW/Ypa31avXo0///wT9vb2sLe3h6+vL9566y2tbTIzM/Hw4UPNqXTzTqubk5OD7t27w8nJSed10FB1/HUXrFSr1TAzMyv0kMzc3Fw8fvwYkiTlu9jZ2WkWZb58+TJat26NzMxMODk5wc7ODjY2NrC1tUXDhg01Z2YKDw/H5s2bNf8PHj9+rPm9a9q0KY4cOYJjx45hz549WLhwIVJSUgrMlZycrGkMuLu7w8bGBhYWFjA3N4eFhYXmUqtWLc19qlSpgo8//hgA8j2XjIwMzexYfWBjgEjP1q5di/3793O2wGvIyMiAn58fPvzwQ3z88ceoUqUKAgIC4OHhgUGDBqFBgwaiI5qk4nzLQ0QkB69y2ryPPvoIX3zxBf755x9cuXJF601+SaHvD5B50+X79u2rdTYfMzMzqNVqrQ/k1atXR7t27dC+fXvY2triwoULcHV1RYcOHdCwYUM0bNgQDRo0QNmyZbUeo1SpUihdurTW2WTyLi4uLgCe1a2PP/5Y6yw7ebZu3aqVw9HREU+ePHnh81IoFLC2tsb+/fvznQq3adOmmg+AADBx4kTNegL/tXjxYk1TY9++fRg4cCDMzMwwd+5crW+oPTw8MHLkSM39WrZsiXPnzuHDDz+El5cX7t69q7l4e3tj+vTpqFChAhITEwudpu7u7g5vb2+kp6djz5498PT0xLfffosrV67ghx9+gJWVFTp27Ii+ffsCeHYYx8yZM2FhYQF7e3uULVsWU6ZMKVKjLTs7G9evX0flypVhZWUFAJgzZw7CwsLQunVrHDhwIF8+SZLg4+OD2NjYAvN//vnn+PLLLwEAu3fvRkJCAgDk+/Y+NzcXADBlyhRcuHABx44dy/eaWFlZwdz82cdnV1dXnDlzBt7e3pqGT5kyZbT+W6pUKc19i3oq5rfeegvfffddgbc9fPgQ69evL9J+XgUbA0R6putp7KZGkiQMHjwYhw8fxsWLF9GjRw+4uLhg27ZtoqOZvJd9ywNwcUAiko9XPY6+UqVKmDRpEnJycjSnNC1pDNEIvn//vqYpMH78eHTq1AnffvstoqOj4efnh3bt2qFt27Zap2tVqVQICwsr0mGDhX1w/O/z6NmzJ3Jzc+Hl5YVKlSqhQoUK6NSpU6GnlH3RvoBni/c5OTkhJSUFSUlJWL58OQDg6NGj+PDDDzXbOzk5QalUwtHREU5OTnB0dMTRo0c1t+VJTU3VzMx4/v7As9MZP98Y+PPPPwEAixYt0tquW7dumt/V7t2749tvvy30eQQFBeHJkyc4d+4cevTooXXbsWPHADxrCOU1Bp48efLSdbUSEhLQvXt3DBgwAA4ODrh8+TIuX76MGzduaE5pnDdtPikpCQDw+++/w9/fH2q1Gjk5OXjrrbewcOFCAIX/v807Nj9Px44dMXbsWHTs2BHjx49HdnY2MjIy8PTpU82M0wEDBuCPP/7Ahx9+qPn/kPf/xMbGRrOvihUrlrj3omwMEBnI8ePH0a9fP5w8eRL29vai4whT3Olkc+bMwaZNm2Bubo7IyEhNV5+MQ2GLIrm7u/P8x0QkK69zHP3kyZOxe/duzbeJJY2+G8EHDx7E6NGjAQCzZ8/GxIkTAQB169aFg4ODQRvMK1euzDeWkZGB1NRUrbErV65oXodffvkFkyZNwt27dzW3F7Y4YJ8+fbB//37Uq1cPOTk5mvGwsDBMnjxZ64NsdnY2tm7dijp16mjG/Pz80KZNGyQnJ6NMmTKai729PapXr671WN999x3mzp2LypUro0KFCppLxYoV0a1bN5iZmcHHxwc//PADUlNTtc4+YG5ujvLly+PXX39Fv379kJWVhYYNG2qmspcvXx6fffYZ1Gq11mERdnZ2CA0NxTfffKP1/J6X97qtXbs2322lSpXC/fv3NdeHDRummUmxb98+zbiZ2f9OrvfXX39BrVajYcOGsLCwKPSQg+rVqyM7Oxu7d+9Gy5YtC2wmValSRbOGgKkpmX+9iIxMdnY2mjdvDgAoU6aM3lcVNVbFOW4TAH766Sd89tlnAJ51u319fQ2WlYru+UWR4uPjcevWLYwfP15zXB0RkRxwIbYX09fq+Ddu3ED37t2Rk5OD3r17Y8KECZrb8r7FFc3c3ByOjo5aY89/UTFo0CD079+/SF98+Pj4wMfHByqVCrt379aMF/Qh1dLSMt+sgDJlyuC3334rUu6PP/5Y63CFggQEBCAgIOClX9y4u7ujbdu2yMjIwK1bt3Dx4kV06tQpX25nZ2csWLAAfn5+6Nix40sz9urVC23atEH16tVRvXp1uLq6an2wr1WrFo4fP45//vkHSqUS5ubmUCqVKF++PIBnjam33367SK8HvRgbA0QGYGlpCVdXV810qKNHj2qd794UFPe4zTNnzmimpY0aNQrDhw83aF4qnrzFAfPe6PDwASKSm9c9jv7JkyeYPn067t27p5kuXtLocnX8rKwsZGdno0uXLnj48CEaNWqEFStWFPptr7GT+yK5Rc1vY2ODKlWq4NKlSy/c7mXrL+Tp0qULevfu/cJtGjVqxLW6DMDs5ZsQkS5cv34d9erVA/DseDNTmjXwsuM2gWevSd4UtuTkZLz//vtIT09HmzZt8PXXXxs0LxERmZ684+gL+2CqUCjg6elZ6HH0GRkZmDlzJlasWIGTJ0/qM6pQeR8ge/fuDR8fn1dqCvz999+oVKkSGjVqhCdPnqB8+fLYsWMHbG1t9ZCYRDDkmYtIN9gYIDIQc3Nz7NmzB3Z2djhy5Ag2bdokOpLBFPW4zQMHDmD8+PFQq9UYNWoUqlevjq1bt3IBRyIi0ru84+gB5GsOFOU4+uc/4DRq1EjreG36n4SEBDRo0AD37t1DcnIyjh8/jj179sDDw0N0NNKh1220keGxMUBkQBUqVNAcM79u3TrBaQynqMdjzp49GwsWLEC7du0wfvx4nD59WmslXiIiIn3KO47e3d1da9zDw6PAUxX+19y5czU/r1q1Si8Z5SwlJQWdOnUCANSoUQMXL15EuXLlNCvQU8nxuo02Mjw2BogMbOzYsVi+fDl++eUX0VEMpqjTxGJiYqBQKPDll19CoVBonRaGiIjIEAICAnDz5k1ER0dj48aNiI6Oxo0bN4q0uN7YsWPRv39/AMCkSZOQkpKi77iyoVKp0LNnT/z9998oV64cdu/enW9BPypZXrfRRobFxQeJDMzGxgZDhgwRHcOgXnb+4+fNnj0b7du3N1AyIiKi/F5nIbnly5cjLi4O165dw++//46uXbvqNJscSZKEkSNH4tdff4WtrS1++eUXVK5cWXQsMgBdLlhJ+sXGAJFAWVlZ2LdvHzp37iw6il697PzHedd79uyJTz/9VFRMIiKi12ZpaYk1a9bA3t5e6/zzpiwuLg4rVqyAmZkZNm3ahMaNG4uORAYk9zM2mAo2BogESU9PR4MGDXD16lXExcXhnXfeER1Jrwo7/7GFhQWys7NRr149rFq1SranKSIiIsrTvHlz0RGMSvPmzbF+/XrNWYeIyPiwMUCkJ2q1GrGxsYiPj8etW7fg7++vtbq+nZ0dvL29cfXqVYSEhCAuLq7Efyj+73QySZLw2WefITU1FTt27ICdnZ3oiERERDp17tw55OTkoH79+qKjCNW3b1/REYjoBbj4IJEeREVFwcvLC76+vujfvz8mT56MqlWrIioqSmu7mTNnAgCOHj2K6tWri4hqcM+f/7hPnz44ceIE9uzZw2MNiYioxNm4cSPq1auHYcOGITc3V3Qcg7p48SLatm1b5DMTEZFYbAwQ6VhUVBQCAwO1pssDwN27dxEYGKjVHHBzc0OvXr0AAFevXsXff/9t0KyiZGRkaH52dnZGkyZNBKYhIiLSj9atW8PW1hbHjh3Dpk2bRMcxmHv37qFDhw747bffEBISIjoOERUBGwNEOqRWqxEcHFzgyvt5YyEhIVCr1Zrx9evXa34ODQ196ar9cnf79m1Uq1YNK1asEB2FiIhIr1xdXfHZZ58BACZOnIinT58KTqR/6enp6Ny5M27evIkqVapg0aJFoiMRURGwMUCkQ7GxsflmCjxPkiTEx8cjNjZWM2Zubo4bN27AysoKZmZmSEtLM0RUIZ4+fYquXbsiISEBS5YsQXZ2tuhIREREejV27FhUqlQJd+7cgZ2dHTIzM0VH0hu1Wo0+ffrgr7/+grOzM/bs2YOyZcuKjkVERcDGAJEOFfU4uv9u5+XlhTNnzmDfvn0oXbq0PqIJJ0kShg0bhlOnTsHFxQXbt2+HpaWl6FhERER6ZW1tjWnTpmmuL1y4UFwYPZIkCSEhIdi5cyesrKywc+dOVKtWTXQsIioiNgaIdMjNze2Vt6tevXqJPivB119/jQ0bNkCpVOLHH39ExYoVRUciIiIyiAEDBqBq1aoAgODgYMFp9GPJkiVYtGgRFAoF1q9fz1M2EskMGwNEOuTt7Q0PD49CP+ArFAp4enrC29u70H08ePAAn3zyCZ48eaKnlIb322+/4ZNPPgHwrEHg4+MjNhAREZEBKRQKXLlyBZIkldhT83bs2BE1a9bEV199hcDAQNFxiKiYzEUHICpJlEolIiIiEBgYCIVCobWQYF6zIDw8HEqlstB9dOnSBYcPH4ZCocC8efP0nlnfHj16hD59+iA3NxcDBw5EUFCQ6EhERERC5ebm4tatWyXmVL337t2Dl5cXjh8/DhsbG9FxiOgVcMYAkY4FBAQgMjIS7u7uWuPu7u6IjIxEQEDAC+//+eefAwAiIiJw48YNveU0hNzcXMTGxuLdd99Fq1atsGTJkhJ9uAQREdHL3Lp1C82aNUOrVq2Qnp4uOs5refDgAUaMGAEvLy9cvnwZtra2rPNEMsXGAJEeBAQE4ObNm4iOjsa6devwxRdf4MqVKy9tCgBAhw4d0LZtW2RnZ2PixIkGSKsf169fR+vWrTF58mT4+/sjKioK1tbWomMREREJVbZsWdy7dw/x8fH48ssvRcd5JTk5OVi8eDGqV6+O77//HpmZmfj5559FxyKi1yDbxsCjR4/Qt29f2Nvbw8HBAYMHDy7yad4kSUKHDh2gUCiwY8cO/QYlk6VUKuHj44MPPvgAdevWfeHhA89TKBSYP38+FAoFtm7disOHD+s5qW7l5uZi0aJFqFu3Lg4ePIjr16+jSZMmcHJyEh2NiGSI9Z5KGltbW3zzzTcAgPnz5+PChQuCExVPbGwsGjVqhKCgIDx+/Bj16tXDwYMHMW7cONHRiOg1yLYx0LdvX5w7dw779+/HL7/8gkOHDmHYsGFFum94eDinOZFRq1evHgYPHgwACA0N1VqrwJjlzRIYPXo0nj59Ch8fH/zzzz+oX7++6GhEJFOs91QSvf/++3jvvfeQk5ODUaNGyabOX716FT4+Pjhz5gwcHR2xePFinDhxAu+++67oaET0mmTZGLhw4QL27t2LFStWoGnTpmjZsiW+/fZbbN68GXfv3n3hfU+fPo0FCxZg1apVBkpL9Gq++OIL2NnZ4ejRo9iyZYvoOC91+PBhzbcGtra2WLRoEQ4cOFBiFlYiIsNjvaeS7JtvvoG1tTWio6OxefNm0XGKJDk5GY6OjnB1dcXly5cxcuRImJtzLXOikkCW/5Lj4uLg4OCAt99+WzPm5+cHMzMzHD16FN26dSvwfk+fPkWfPn2wePFiuLq6FumxsrKykJWVpbmekpICAFCpVFCpVK/xLAwvL6/ccgOmmd3Z2RlhYWG4c+cO3n33XSHPPTMzE//88w8eP34MDw8PtGzZstBDInbs2IH09HSULl0af/31F9544w2o1Wqo1WoDp37GFH9njAGziyHHzEVhqHrPWm8cTC27h4cHJk6ciGnTpiE0NBRt27ZFmTJl9BWxUMXJXrt2bRw/fhxLlixBmTJlhP+/MrXfGWPB7GLoO7MsGwNJSUkoV66c1pi5uTmcnJyQlJRU6P3Gjh2L5s2bo0uXLkV+rNmzZ2P69On5xqOjo2Fra1v00EZk//79oiO8MlPLXqdOHdSpUwd//fWXHhK9WFxcHFasWIGHDx9qxpydnTFkyBA0a9Ys3/aNGzfGe++9h0qVKuHixYu4ePGiIeMWytR+Z4wFsxvW06dPRUfQC0PVe9Z642JK2WvXro0KFSrAzs4O27ZtK/IXV/pQnOzNmzfH7t279ZimeEzpd8aYMLth6bvWG1VjYOLEiZg7d+4Lt3nVBVp27tyJ33//HadOnSrW/cLCwhAaGqq5npKSAk9PT/j6+sLZ2fmVsoiiUqmwf/9+tG3bFhYWFqLjFAuz/29fhnj+27dvx7x58/Id8/jo0SPMmzcPmzdvLvCbuq5du+o9W1Hxd0YMZhfj+QaeHBhbvWetNw6mkl2tVuOPP/5AYmIi3NzcEBMTA09PzyIvUvwy/93/i2b7FTX7P//8g+vXrxfryzVDMJXfGWPD7GLou9YbVWNg3LhxGDhw4Au3eeONN+Dq6or79+9rjefk5ODRo0eFdlp///13XLt2DQ4ODlrj3bt3h7e3N2JiYgq8n5WVFaysrPKNW1hYyO6XKQ+zi/E62S9evIiQkBBUrlwZS5Ys0XEybWq1GuPGjStwISRJkqBQKDB+/Hh0794dSqUSe/fuhZ+fn9EeY2iqvzOiMbthyS2vsdV71nrjUpKzR0VFITg4GHfu3NGMeXh4ICIiokinNH6Z19l/YdnT09Px4Ycf4sKFC1i2bBmGDh362jl1rST/zhgzZjcsfec1qnfyZcuWRdmyZV+6XbNmzfDkyROcOHECjRo1AvDsjUBubi6aNm1a4H0mTpyIIUOGaI3VrVsXX3/9NTp37vz64Yn06P79+/j1119hZmaGoKAg1K5dW2+PFRsbq/WG4r8kSUJ8fDxiY2ORlpaGzp07w9vbG7/99hssLS31louISg7WezJFUVFRCAwMzNd4T0hIQGBgIDZs2ICzZ8+ievXqGDBggM73HxkZ+UrNh+DgYFy4cAEVKlQwqpmBRKRbsjwrQc2aNdG+fXsMHToUx44dw59//omgoCB88MEHqFChAoBnfwRr1KiBY8eOAQBcXV01x2vnXQCgYsWKXDWdjN67776Lbt26ITc3F5988oleHysxMbFI250/fx6DBg0CADRq1IhNASLSOdZ7KinUajWCg4MLnY0HAKNGjcKsWbMwbty4Yk8ZLsr+Q0JCir0g8KZNm7By5UooFAqsX7++SA09IpInWTYGAGDDhg2oUaMG2rRpg44dO6Jly5ZYtmyZ5naVSoVLly6V2AWZyPTMnTsXFhYW2LNnD/bt26e3x3FzcyvSditXrsSDBw/QoEEDzJkzR295iMi0sd5TSVCU2XiPHz+Gl5cXHj58iLCwMJ3vP2+2X1Fdu3YNw4cPBwBMmjQJvr6+xcpERPJiVIcSFIeTkxM2btxY6O1eXl4Fdk2f97LbiYxJtWrVMGrUKISHh2PcuHE4ffq0zhYqep63tzc8PDyQkJBQ4L8RhUIBe3t7nDx5Era2tti0aVOBx+YSEekC6z2VBEWdjTdgwABMnz4dy5cvx0cffYR33nlHp/sv6nbZ2dn44IMPkJqaipYtW2LKlClFuh8RyZdsZwwQmaLJkyfD0dERZ8+exapVq/TyGEqlEhEREQCeNQGep1AoIEkSUlNTAQDffPMNatSooZccREREJUVRZ+P5+PhoFuYcOXIkcnJydLr/om63a9cuHD9+HI6Ojti4caPRLjBMRLrDxgCRjDg5OWm69uvWrdPbt2ABAQGIjIzUHMObx8PDA56ensjNzUXPnj3x0Ucf6eXxiYiISpK82Xj/bbjnUSgU8PT0hLe3N+bOnQsHBwecOnWqyGciKs7+i6Jbt26IiorCunXr4OnpWaT7EJG8sTFAJDMjR47E999/jwMHDhT6BkAXAgICcPXqVXzxxRdYt24doqOjcePGDezZswfvvfcevv/+e70+PhERUUnxstl4ABAeHg6lUoly5cph9uzZAIDZs2cjOztbp/svqm7duuG9994r8vZEJG9sDBDJjKWlJYYNGwalUonNmzdj5syZiImJKfZKw0WhVCpRt25dfPDBB/Dx8YFSqUTt2rXx888/5ztHOBERERUubzaeu7u71riHh0e+UwkOHToUEyZMwJEjR4p81p/i7L8garUaEydOxN27d4v4jIioJOEBQ0QyFBUVhWHDhmmdzsjDwwMRERGvdI7il7l69SoeP36M5s2b63zfREREpiIgIABdunRBbGwsEhMT4ebmBm9v73zf5CuVSsyZMweZmZlYsGAB7ty5g6+//lpn+y/IvHnzMHfuXGzZsgWXLl3iaYiJTAwbA0QyExUVhcDAwHzrCyQkJCAwMLBI3woUh0qlQr9+/XD69GmsXbsWffv21dm+iYiITI1SqYSPj0+Rtj179izGjx8PhUKBjz76CHXr1tXp/vOcP38eM2bMAABMmzaNTQEiE8RDCYhkRK1WIzg4uMBFB/PGQkJCdHpYwYYNG3DixAmUKVMGrVq10tl+iYiI6MXefvtt9OjRA5Ik4bPPPtPLYzx69AgLFy6EWq3Ghx9+iP79++vlcYjIuLExQCQjsbGxuHPnTqG3S5KE+Ph4xMbG6uTx9u/fjx07dgAAVq5cCQ8PD53sl4iIiIrmyy+/hFKpxC+//IJDhw7pdN+SJGHYsGF48OABqlatiu+++44LCxOZKDYGiGQkMTFRp9u9yP379zWnIxw+fDi6du362vskIiKi4qlevTqGDh0KAJgwYYJOT1V85MgR7Ny5E+bm5tiwYQNKly6ts30TkbywMUAkI25ubjrdDgAyMzNx8uTJfG80OnXqhHv37qFChQqYN29esXISERGR7kyZMgW2trY4cuQIfvrpp2LfPzs7G8uWLcOGDRuwceNGzbi5uTlsbW3xxhtvoGHDhrqMTEQyw8YAkYx4e3vDw8PjhdP8PD094e3tXeR9dujQAY0aNYKZmRlyc3M143mP4ePjAxsbm1cPTURERK/Fzc0NY8eOBQBMmjSp2LMGZs+ejeHDh+PDDz/Exx9/rLl/48aN0a1bN64hREQ8KwGRnCiVSkRERCAwMBAKhULrjUHeB/nw8PB8pyVSq9WQJAnm5s/+yZ86dQrbtm1DQkICYmJiNNvFx8ejUqVKAICRI0fi1KlTaNSokZ6fFREREb3MJ598gps3byIsLKxI6wA8evQIY8eOxcWLF3Hs2DHNeNu2bZGWlqY5bGD16tXYvXu33nITkTywMUAkMwEBAYiMjERwcLDWQoQeHh4IDw9HZmYmgoKCkJCQoLkkJSXh559/RseOHQEA586dw8yZM7X227t3bzg4OGiuDxw4EH379uWbBSIiIiNQpkwZrF+/HsCzUwmfOnUKFy9exMWLF3HhwgVcvHgR7777Lr7//nsAgJ2dHdavX6+ZDWhhYYHvv/8egwYNEvYciMh4sTFAJEMBAQHo0qULYmNjkZiYCDc3N3h7e+P27dt44403CrzP3bt3NT/Xq1cPo0aNgru7OypUqICaNWuiSZMmhopPREREr+G9997Dvn378o07OjpqfrayskJERATc3NxQo0YNVK1aFVZWVoaMSUQywsYAkUwplUr4+PhojW3btk3z8+LFizUf/N3d3VG+fHnNbfXq1cOiRYsMFZWIiIh0JC0tTdMUcHFxQY8ePVCzZk3UqFEDtWrV0to2KChIREQikiE2BohKkNGjRyMhIQENGzZE//79RcchIqL/a+/+o7Ks7z+Ov0AQEAekCHhnKJWFv8OfQ51uyVHSo/ljLT3ktFmuBkdBZ7o111ZzavPHJjlc1mo72lztqPljZUzNHxuCguZQAkqnzSSOEqgBSt6f7x873V/vgYgT7+u6uZ+PczhHPtd1wevycF+v+7zvmwugmYWEhOgb3/iGSkpK9NFHH6lt27ZWRwLQAjAYAFqQoKAgrVy50uoYAADgNmnVqpV27dolSa6bCgPAreJqAgAAAHgRBgIAmpu/1QEAAAAAAIB1GAwAAAAAAODDGAwAAAAAAODDGAwAAAAAAODDGAwAAAAAAODDGAwAAAAAAODDGAwAAAAAAODDGAwAAAAAAODDGAwAAAAAAODDGAwAAAAAAODDGAwAAAAAAODDGAwAAAAAAODDGAwAAAAAAODDGAwAAAAAAODDvHYwUFFRoZSUFIWFhSkiIkIzZszQpUuXbnhcTk6OHnzwQYWGhiosLEzDhg1TTU2NBxIDAICbRd8DAHD7ee1gICUlRceOHVN2dra2bdumvXv3aubMmY0ek5OTo+TkZI0cOVJ5eXk6ePCg0tLS5O/vtf8NAAC0aPQ9AAC3X4DVAf4XRUVFevfdd3Xw4EH1799fkpSZmanRo0dr2bJlcjgcDR6XkZGhWbNmacGCBa61+++/3yOZAQDAzaHvAQDwDK8cDOTk5CgiIsL1JEGSkpKS5O/vr9zcXE2YMKHeMeXl5crNzVVKSooGDx6sjz/+WPHx8Vq0aJGGDh163e91+fJlXb582fV5VVWVpP+8tdHb1NXVqbq6WufPn1dgYKDVcW4K2a1BdmuQ3RrenP2rTjLGWJykeXmq7+l6eyC7NchuDbJbw5uz3+6u98rBQFlZmaKiotzWAgIC1K5dO5WVlTV4zIkTJyRJP/vZz7Rs2TI98MAD+uMf/6gRI0aosLBQXbt2bfC4xYsX6+c//3m99fvuu+8WzwIAgOZ1/vx5hYeHWx2j2Xiq7+l6AIC3uF1db6vBwIIFC7R06dJG9ykqKvqfvrbT6ZQkff/739fjjz8uSUpISNDOnTv1+9//XosXL27wuB/96EeaM2eO6/PKykp17txZp0+f9ronXxcuXNBdd92lTz75RGFhYVbHuSlktwbZrUF2a3hz9qqqKsXGxqpdu3ZWR2kSu/U9XW8PZLcG2a1Bdmt4c/bb3fW2GgzMnTtX06dPb3Sfu+++WzExMSovL3db//LLL1VRUaGYmJgGj+vYsaMkqXv37m7r3bp10+nTp6/7/YKCghQUFFRvPTw83Ot+mL4SFhZGdguQ3RpktwbZreEtN9ezW9/T9fZCdmuQ3Rpkt4Y3Z79dXW+rwUCHDh3UoUOHG+6XmJioyspK5efnq1+/fpKkXbt2yel0atCgQQ0e06VLFzkcDhUXF7utl5SU6KGHHrr18AAAoEnoewAA7MU7Xlr4L926dVNycrKefPJJ5eXl6e9//7vS0tI0efJk1x2Kz5w5o/j4eOXl5UmS/Pz8NG/ePK1atUp/+ctf9NFHH2nhwoX68MMPNWPGDCtPBwAANIC+BwDAM2z1joGbsX79eqWlpWnEiBHy9/fXpEmTtGrVKtf2uro6FRcXq7q62rWWnp6u2tpaZWRkqKKiQn369FF2drbuueeeJn/foKAgPffccw2+5dDuyG4NsluD7NYguzW8OfuNWNH33vz/SXZrkN0aZLcG2a1xu7P7mZb2t40AAAAAAECTeeWvEgAAAAAAgObBYAAAAAAAAB/GYAAAAAAAAB/GYAAAAAAAAB/GYOAmrV69Wl26dFFwcLAGDRrk+vNIdrF48WINGDBAX/va1xQVFaXx48fX+1vOtbW1Sk1NVfv27dW2bVtNmjRJn332mUWJr2/JkiXy8/NTenq6a83O2c+cOaPHHntM7du3V0hIiHr16qVDhw65thtj9NOf/lQdO3ZUSEiIkpKSVFpaamHi/7h69aoWLlyouLg4hYSE6J577tELL7yga+9Lapfse/fu1dixY+VwOOTn56fNmze7bW9KzoqKCqWkpCgsLEwRERGaMWOGLl26ZGn2uro6zZ8/X7169VJoaKgcDoe++93v6tNPP7V99v/21FNPyc/PT7/+9a/d1u2cvaioSOPGjVN4eLhCQ0M1YMAAnT592rXdquvOjbJfunRJaWlp6tSpk0JCQtS9e3etWbPGbR87XzPtzO5dL7Wcvve2rpfoe0+g7+2X/b/R957L7qm+ZzBwE/785z9rzpw5eu6551RQUKA+ffpo1KhRKi8vtzqay549e5SamqoDBw4oOztbdXV1GjlypL744gvXPhkZGdq6daveeust7dmzR59++qkmTpxoYer6Dh48qN/97nfq3bu327pds3/++ecaMmSIAgMD9c477+j48eNavny57rjjDtc+L774olatWqU1a9YoNzdXoaGhGjVqlGpray1MLi1dulRZWVl66aWXVFRUpKVLl+rFF19UZmamax+7ZP/iiy/Up08frV69usHtTcmZkpKiY8eOKTs7W9u2bdPevXs1c+ZMS7NXV1eroKBACxcuVEFBgTZu3Kji4mKNGzfObT87Zr/Wpk2bdODAAdffl7+WXbN//PHHGjp0qOLj4/X+++/r6NGjWrhwoYKDg137WHXduVH2OXPm6N1339W6detUVFSk9PR0paWlacuWLZZn92be0PVSy+h7b+t6ib73FPreftmvRd97NrvH+t6gyQYOHGhSU1Ndn1+9etU4HA6zePFiC1M1rry83Egye/bsMcYYU1lZaQIDA81bb73l2qeoqMhIMjk5OVbFdHPx4kXTtWtXk52dbYYPH25mz55tjLF39vnz55uhQ4ded7vT6TQxMTHmV7/6lWutsrLSBAUFmT/96U+eiHhdY8aMMd/73vfc1iZOnGhSUlKMMfbNLsls2rTJ9XlTch4/ftxIMgcPHnTt88477xg/Pz9z5swZy7I3JC8vz0gyp06dMsbYP/u///1vc+edd5rCwkLTuXNns3LlStc2O2d/9NFHzWOPPXbdY+xy3Wkoe48ePczzzz/vtta3b1/z7LPPGmPsk93beGPXG+N9fe+NXW8MfW8F+t5e2en728vKvucdA0105coV5efnKykpybXm7++vpKQk5eTkWJiscVVVVZKkdu3aSZLy8/NVV1fndh7x8fGKjY21zXmkpqZqzJgxbhkle2ffsmWL+vfvr0ceeURRUVFKSEjQ2rVrXdtPnjypsrIyt+zh4eEaNGiQ5dkHDx6snTt3qqSkRJL0wQcfaP/+/XrooYck2Tv7tZqSMycnRxEREerfv79rn6SkJPn7+ys3N9fjmRtTVVUlPz8/RURESLJ3dqfTqalTp2revHnq0aNHve12ze50OrV9+3bdd999GjVqlKKiojRo0CC3t/DZ+bozePBgbdmyRWfOnJExRrt371ZJSYlGjhwpyd7Z7cpbu17yvr73xq6X6Hs7oO+tQ99bw1N9z2Cgic6dO6erV68qOjrabT06OlplZWUWpWqc0+lUenq6hgwZop49e0qSysrK1Lp1a9fF5yt2OY8NGzaooKBAixcvrrfNztlPnDihrKwsde3aVTt27NDTTz+tWbNm6Q9/+IMkufLZ8ednwYIFmjx5suLj4xUYGKiEhASlp6crJSVFkr2zX6spOcvKyhQVFeW2PSAgQO3atbPVudTW1mr+/PmaMmWKwsLCJNk7+9KlSxUQEKBZs2Y1uN2u2cvLy3Xp0iUtWbJEycnJeu+99zRhwgRNnDhRe/bskWTv605mZqa6d++uTp06qXXr1kpOTtbq1as1bNgwSfbOblfe2PWS9/W9t3a9RN/bAX1vHfreGp7q+4DmDA17SU1NVWFhofbv3291lCb55JNPNHv2bGVnZ7v9vo83cDqd6t+/v375y19KkhISElRYWKg1a9Zo2rRpFqdr3Jtvvqn169frjTfeUI8ePXTkyBGlp6fL4XDYPntLVFdXp+985zsyxigrK8vqODeUn5+v3/zmNyooKJCfn5/VcW6K0+mUJD388MPKyMiQJD3wwAP6xz/+oTVr1mj48OFWxruhzMxMHThwQFu2bFHnzp21d+9epaamyuFw1HsVFi2bN/W9N3e9RN+j+dD3nkPfNw3vGGiiyMhItWrVqt7dHT/77DPFxMRYlOr60tLStG3bNu3evVudOnVyrcfExOjKlSuqrKx0298O55Gfn6/y8nL17dtXAQEBCggI0J49e7Rq1SoFBAQoOjrattk7duyo7t27u61169bNdafTr/LZ8edn3rx5rlcRevXqpalTpyojI8P1So6ds1+rKTljYmLq3UDsyy+/VEVFhS3O5asnCadOnVJ2drbr1QPJvtn37dun8vJyxcbGuh63p06d0ty5c9WlSxdJ9s0eGRmpgICAGz527Xjdqamp0Y9//GOtWLFCY8eOVe/evZWWlqZHH31Uy5Ytk2Tf7HbmbV0veV/fe3PXS/S9HdD31qDvreHJvmcw0EStW7dWv379tHPnTtea0+nUzp07lZiYaGEyd8YYpaWladOmTdq1a5fi4uLctvfr10+BgYFu51FcXKzTp09bfh4jRozQP//5Tx05csT10b9/f6WkpLj+bdfsQ4YMqfdnokpKStS5c2dJUlxcnGJiYtyyX7hwQbm5uZZnr66ulr+/+6WgVatWrumqnbNfqyk5ExMTVVlZqfz8fNc+u3btktPp1KBBgzye+VpfPUkoLS3V3/72N7Vv395tu12zT506VUePHnV73DocDs2bN087duyQZN/srVu31oABAxp97Nr1mllXV6e6urpGH7t2zW5n3tL1kvf2vTd3vUTf2wF9bw363hoe7fv/5W6JvmrDhg0mKCjIvP766+b48eNm5syZJiIiwpSVlVkdzeXpp5824eHh5v333zdnz551fVRXV7v2eeqpp0xsbKzZtWuXOXTokElMTDSJiYkWpr6+a+9UbIx9s+fl5ZmAgACzaNEiU1paatavX2/atGlj1q1b59pnyZIlJiIiwrz99tvm6NGj5uGHHzZxcXGmpqbGwuTGTJs2zdx5551m27Zt5uTJk2bjxo0mMjLSPPPMM6597JL94sWL5vDhw+bw4cNGklmxYoU5fPiw606+TcmZnJxsEhISTG5urtm/f7/p2rWrmTJliqXZr1y5YsaNG2c6depkjhw54vbYvXz5sq2zN+S/71Js5+wbN240gYGB5uWXXzalpaUm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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 2)\n", "fig.set_size_inches(12, 5)\n", "\n", "\n", "def post_proc_crossflow_sphere_Cp(\n", " sim_cfg: SimulationConfigs, ax, reynolds: float, u_inf: float = 0.05\n", "):\n", " hs = sim_cfg.output.series[\"default\"].bodies[\"sphere\"]\n", "\n", " df_points = pd.read_csv(hs.points_filename)\n", " df_hs = hs.read_full_data(\"rho\")\n", "\n", " sphere_center = tuple(df_points[d].mean() for d in (\"x\", \"y\", \"z\"))\n", "\n", " # Use only points in z=0 to calculate Cp\n", " bool_arr = np.zeros((len(df_points),), dtype=np.bool_)\n", " df_points = df_points.loc[\n", " (df_points[\"z\"] <= sphere_center[2] + 0.5) & (df_points[\"z\"] >= sphere_center[2] - 0.5)\n", " ]\n", " bool_arr[df_points[\"idx\"]] = True\n", "\n", " # TODO: This comes from sim_cfg, now hand written,\n", " # but update to calculate it automatically\n", " rho_inf = 1\n", " df_hs = df_hs[df_hs[\"time_step\"] >= 10000]\n", " df_rho = df_hs.drop(columns=\"time_step\")\n", " df_cp = (df_rho - rho_inf) / (1.5 * rho_inf * (u_inf**2))\n", " Cp_avg = df_cp.mean().to_numpy().T\n", " Cp_avg = Cp_avg[bool_arr]\n", "\n", " # Get angles for points, use acos because it goes from 0 to 180\n", " x = df_points[\"x\"] - df_points.mean()[\"x\"]\n", " y = df_points[\"y\"] - df_points.mean()[\"y\"]\n", " points_angles: np.ndarray = np.arccos(-x / (x**2 + y**2) ** 0.5)\n", " # Convert to angles\n", " points_angles *= 180 / np.pi\n", " points_angles = np.array(points_angles)\n", "\n", " # # Sort arrays\n", " argsort = points_angles.argsort()\n", " points_angles = points_angles[argsort]\n", " cp_points = Cp_avg[argsort]\n", "\n", " ax.plot(points_angles, cp_points, \"--k\", label=\"Nassu\")\n", "\n", " df_exp = get_experimental_profile_Cp(reynolds)\n", " ax.plot(df_exp[\"theta\"], df_exp[\"Cp\"], \"ok\", label=\"Experimental\")\n", "\n", " ax.legend()\n", "\n", "\n", "for i, (sim_cfg, reynolds) in enumerate([(sim_turb, 4200), (sim_turb_les, 50000)]):\n", " post_proc_crossflow_sphere_Cp(sim_cfg, ax[i], reynolds, u_inf=0.05)\n", " ax[i].set_xlim((0, 180))\n", " ax[i].set_ylim((-0.6, 1.2))\n", " ax[i].set_ylabel(\"$C_p$\")\n", " ax[i].set_xlabel(r\"$\\theta$ (º)\")\n", " ax[i].grid()\n", " ax[i].set_title(f\"$Re={reynolds}$\")\n", "\n", "plt.show(fig)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The pressure coefficient curve is very similar for both Re = 4200 and Re= 50,000. It can be seen better proximity of results in the LES simulation with a higher Reynolds number." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Version" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Version: 1.6.33\n", "Commit hash: fbc0edb5260d2734f0a290e1806c26ac6d865ff4\n" ] } ], "source": [ "sim_info = sim_cfg.output.read_info()\n", "\n", "nassu_commit = sim_info[\"commit\"]\n", "nassu_version = sim_info[\"version\"]\n", "print(\"Version:\", nassu_version)\n", "print(\"Commit hash:\", nassu_commit)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Configuration" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
simulations:\n",
       "  - name: laminarFlowOverSphere\n",
       "    save_path: ./tests/validation/results/07_flow_over_sphere/laminar\n",
       "\n",
       "    n_steps: 40000\n",
       "\n",
       "    report: { frequency: 1000 }\n",
       "\n",
       "    domain:\n",
       "      domain_size:\n",
       "        x: 480\n",
       "        y: 160\n",
       "        z: 160\n",
       "      block_size: 8\n",
       "      bodies:\n",
       "        sphere:\n",
       "          lnas_path: fixture/lnas/basic/sphere.lnas\n",
       "          transformation:\n",
       "            scale: [1.6, 1.6, 1.6]\n",
       "            translation: [112, 72, 72]\n",
       "      refinement:\n",
       "        static:\n",
       "          default:\n",
       "            volumes_refine:\n",
       "              - start: [96, 64, 64]\n",
       "                end: [160, 96, 96]\n",
       "                lvl: 1\n",
       "                is_abs: true\n",
       "\n",
       "    data:\n",
       "      divergence: { frequency: 10 }\n",
       "      instantaneous:\n",
       "        default: { interval: { frequency: 1000 }, macrs: [rho, u] }\n",
       "      export_IBM_nodes:\n",
       "        frequency: 5000\n",
       "\n",
       "    models:\n",
       "      precision:\n",
       "        default: single\n",
       "\n",
       "      LBM:\n",
       "        tau: 0.51\n",
       "        vel_set: D3Q27\n",
       "        coll_oper: RRBGK\n",
       "      initialization:\n",
       "        rho: 1.0\n",
       "        u:\n",
       "          x: !unroll [0.007854, 0.024583, 0.064583]\n",
       "          y: 0\n",
       "          z: 0\n",
       "\n",
       "      engine:\n",
       "        name: CUDA\n",
       "\n",
       "      BC:\n",
       "        periodic_dims: [false, false, false]\n",
       "        BC_map:\n",
       "          - pos: N\n",
       "            BC: Neumann\n",
       "            wall_normal: N\n",
       "            order: 0\n",
       "\n",
       "          - pos: S\n",
       "            BC: Neumann\n",
       "            wall_normal: S\n",
       "            order: 0\n",
       "\n",
       "          - pos: F\n",
       "            BC: Neumann\n",
       "            wall_normal: F\n",
       "            order: 1\n",
       "\n",
       "          - pos: B\n",
       "            BC: Neumann\n",
       "            wall_normal: B\n",
       "            order: 1\n",
       "\n",
       "          - pos: E\n",
       "            BC: RegularizedNeumannOutlet\n",
       "            rho: 1.0\n",
       "            wall_normal: E\n",
       "            order: 2\n",
       "\n",
       "          - pos: W\n",
       "            BC: UniformFlow\n",
       "            wall_normal: W\n",
       "            rho: 1\n",
       "            ux: !unroll [0.007854, 0.024583, 0.064583]\n",
       "            uy: 0\n",
       "            uz: 0\n",
       "            order: 2\n",
       "\n",
       "          - pos: NF\n",
       "            BC: Neumann\n",
       "            wall_normal: N\n",
       "            order: 0\n",
       "\n",
       "          - pos: NB\n",
       "            BC: Neumann\n",
       "            wall_normal: N\n",
       "            order: 0\n",
       "\n",
       "          - pos: SF\n",
       "            BC: Neumann\n",
       "            wall_normal: S\n",
       "            order: 0\n",
       "\n",
       "          - pos: SB\n",
       "            BC: Neumann\n",
       "            wall_normal: S\n",
       "            order: 0\n",
       "\n",
       "          - pos: NF\n",
       "            BC: Neumann\n",
       "            wall_normal: F\n",
       "            order: 1\n",
       "\n",
       "          - pos: NB\n",
       "            BC: Neumann\n",
       "            wall_normal: B\n",
       "            order: 1\n",
       "\n",
       "          - pos: SF\n",
       "            BC: Neumann\n",
       "            wall_normal: F\n",
       "            order: 1\n",
       "\n",
       "          - pos: SB\n",
       "            BC: Neumann\n",
       "            wall_normal: B\n",
       "            order: 1\n",
       "\n",
       "      IBM:\n",
       "        forces_accomodate_time: 1000\n",
       "        body_cfgs:\n",
       "          default: {}\n",
       "\n",
       "      multiblock:\n",
       "        overlap_F2C: 2\n",
       "\n",
       "  - name: turbulentFlowOverSphere\n",
       "    parent: laminarFlowOverSphere\n",
       "\n",
       "    save_path: ./tests/validation/results/07_flow_over_sphere/turbulent\n",
       "\n",
       "    n_steps: 100000\n",
       "\n",
       "    domain:\n",
       "      domain_size:\n",
       "        x: 640\n",
       "        y: 128\n",
       "        z: 128\n",
       "      block_size: 8\n",
       "\n",
       "      bodies: !not-inherit\n",
       "        sphere:\n",
       "          small_triangles: "add"\n",
       "          lnas_path: fixture/lnas/basic/sphere.lnas\n",
       "          transformation:\n",
       "            scale: [0.8, 0.8, 0.8]\n",
       "            translation: [112, 60, 60]\n",
       "\n",
       "      refinement:\n",
       "        static:\n",
       "          default:\n",
       "            volumes_refine:\n",
       "              - start: [96, 32, 32]\n",
       "                end: [224, 96, 96]\n",
       "                lvl: 1\n",
       "                is_abs: true\n",
       "              - start: [104, 56, 56]\n",
       "                end: [144, 72, 72]\n",
       "                lvl: 3\n",
       "                is_abs: true\n",
       "\n",
       "    data:\n",
       "      probes:\n",
       "        historic_series:\n",
       "          default:\n",
       "            macrs: ["u", "rho"]\n",
       "            interval: { frequency: 20, lvl: 0 }\n",
       "            bodies:\n",
       "              sphere:\n",
       "                body_name: sphere\n",
       "                normal_offset: 0.25\n",
       "\n",
       "    models:\n",
       "      LBM:\n",
       "        tau: 0.500285714285714\n",
       "        vel_set: D3Q27\n",
       "        coll_oper: RRBGK\n",
       "      initialization: !not-inherit\n",
       "        rho: 1.0\n",
       "        u:\n",
       "          x: 0.05\n",
       "          y: 0\n",
       "          z: 0\n",
       "      IBM:\n",
       "        forces_accomodate_time: 5000\n",
       "      multiblock:\n",
       "        overlap_F2C: 2\n",
       "\n",
       "      BC:\n",
       "        periodic_dims: [false, false, false]\n",
       "        BC_map:\n",
       "          - pos: N\n",
       "            BC: Neumann\n",
       "            wall_normal: N\n",
       "            order: 0\n",
       "\n",
       "          - pos: S\n",
       "            BC: Neumann\n",
       "            wall_normal: S\n",
       "            order: 0\n",
       "\n",
       "          - pos: F\n",
       "            BC: Neumann\n",
       "            wall_normal: F\n",
       "            order: 1\n",
       "\n",
       "          - pos: B\n",
       "            BC: Neumann\n",
       "            wall_normal: B\n",
       "            order: 1\n",
       "\n",
       "          - pos: E\n",
       "            BC: RegularizedNeumannOutlet\n",
       "            rho: 1.0\n",
       "            wall_normal: E\n",
       "            order: 2\n",
       "\n",
       "          - pos: W\n",
       "            BC: UniformFlow\n",
       "            wall_normal: W\n",
       "            rho: 1\n",
       "            ux: 0.05\n",
       "            uy: 0\n",
       "            uz: 0\n",
       "            order: 2\n",
       "\n",
       "  - name: turbulentFlowOverSphereLES\n",
       "    parent: turbulentFlowOverSphere\n",
       "\n",
       "    models:\n",
       "      LBM:\n",
       "        tau: 0.500024\n",
       "\n",
       "      LES:\n",
       "        model: Smagorinsky\n",
       "        sgs_cte: 0.17\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{n+nt}{simulations}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{name}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{laminarFlowOverSphere}\n", "\\PY{+w}{ }\\PY{n+nt}{save\\PYZus{}path}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{./tests/validation/results/07\\PYZus{}flow\\PYZus{}over\\PYZus{}sphere/laminar}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{n\\PYZus{}steps}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{40000}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{report}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZob{}}\\PY{n+nt}{ frequency}\\PY{p}{:}\\PY{+w}{ }\\PY{n+nv}{1000}\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZcb{}}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{domain}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{domain\\PYZus{}size}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{x}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{480}\n", "\\PY{+w}{ }\\PY{n+nt}{y}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{160}\n", "\\PY{+w}{ }\\PY{n+nt}{z}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{160}\n", "\\PY{+w}{ }\\PY{n+nt}{block\\PYZus{}size}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{8}\n", "\\PY{+w}{ }\\PY{n+nt}{bodies}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{sphere}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{lnas\\PYZus{}path}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{fixture/lnas/basic/sphere.lnas}\n", "\\PY{+w}{ }\\PY{n+nt}{transformation}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{scale}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{1.6}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{1.6}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{1.6}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{translation}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{112}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{72}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{72}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{refinement}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{static}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{default}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{volumes\\PYZus{}refine}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{start}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{96}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{64}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{64}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{end}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{160}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{96}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{96}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{lvl}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\\PY{+w}{ }\\PY{n+nt}{is\\PYZus{}abs}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{true}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{data}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{divergence}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZob{}}\\PY{n+nt}{ frequency}\\PY{p}{:}\\PY{+w}{ }\\PY{n+nv}{10}\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZcb{}}\n", "\\PY{+w}{ }\\PY{n+nt}{instantaneous}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{default}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZob{}}\\PY{n+nt}{ interval}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZob{}}\\PY{n+nt}{ frequency}\\PY{p}{:}\\PY{+w}{ }\\PY{n+nv}{1000}\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZcb{}}\\PY{p+pIndicator}{,}\\PY{n+nt}{ macrs}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{rho}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{u}\\PY{p+pIndicator}{]}\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZcb{}}\n", "\\PY{+w}{ }\\PY{n+nt}{export\\PYZus{}IBM\\PYZus{}nodes}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{frequency}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{5000}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{models}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{precision}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{default}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{single}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{LBM}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{tau}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0.51}\n", "\\PY{+w}{ }\\PY{n+nt}{vel\\PYZus{}set}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{D3Q27}\n", "\\PY{+w}{ }\\PY{n+nt}{coll\\PYZus{}oper}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{RRBGK}\n", "\\PY{+w}{ }\\PY{n+nt}{initialization}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{rho}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1.0}\n", "\\PY{+w}{ }\\PY{n+nt}{u}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{x}\\PY{p}{:}\\PY{+w}{ }\\PY{k+kt}{!unroll}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{0.007854}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{0.024583}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{0.064583}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{y}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\\PY{+w}{ }\\PY{n+nt}{z}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{engine}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{name}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{CUDA}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{periodic\\PYZus{}dims}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{false}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{false}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{false}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{BC\\PYZus{}map}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{N}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{N}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{S}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{S}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{F}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{F}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{B}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{B}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{E}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{RegularizedNeumannOutlet}\n", "\\PY{+w}{ }\\PY{n+nt}{rho}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1.0}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{E}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{2}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{W}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{UniformFlow}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{W}\n", "\\PY{+w}{ }\\PY{n+nt}{rho}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\\PY{+w}{ }\\PY{n+nt}{ux}\\PY{p}{:}\\PY{+w}{ }\\PY{k+kt}{!unroll}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{0.007854}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{0.024583}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{0.064583}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{uy}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\\PY{+w}{ }\\PY{n+nt}{uz}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{2}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{NF}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{N}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{NB}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{N}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{SF}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{S}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{SB}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{S}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{NF}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{F}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{NB}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{B}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{SF}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{F}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{SB}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{B}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{IBM}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{forces\\PYZus{}accomodate\\PYZus{}time}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1000}\n", "\\PY{+w}{ }\\PY{n+nt}{body\\PYZus{}cfgs}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{default}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZob{}}\\PY{p+pIndicator}{\\PYZcb{}}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{multiblock}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{overlap\\PYZus{}F2C}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{2}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{name}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{turbulentFlowOverSphere}\n", "\\PY{+w}{ }\\PY{n+nt}{parent}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{laminarFlowOverSphere}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{save\\PYZus{}path}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{./tests/validation/results/07\\PYZus{}flow\\PYZus{}over\\PYZus{}sphere/turbulent}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{n\\PYZus{}steps}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{100000}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{domain}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{domain\\PYZus{}size}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{x}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{640}\n", "\\PY{+w}{ }\\PY{n+nt}{y}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{128}\n", "\\PY{+w}{ }\\PY{n+nt}{z}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{128}\n", "\\PY{+w}{ }\\PY{n+nt}{block\\PYZus{}size}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{8}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{bodies}\\PY{p}{:}\\PY{+w}{ }\\PY{k+kt}{!not\\PYZhy{}inherit}\n", "\\PY{+w}{ }\\PY{n+nt}{sphere}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{small\\PYZus{}triangles}\\PY{p}{:}\\PY{+w}{ }\\PY{l+s}{\\PYZdq{}}\\PY{l+s}{add}\\PY{l+s}{\\PYZdq{}}\n", "\\PY{+w}{ }\\PY{n+nt}{lnas\\PYZus{}path}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{fixture/lnas/basic/sphere.lnas}\n", "\\PY{+w}{ }\\PY{n+nt}{transformation}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{scale}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{0.8}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{0.8}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{0.8}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{translation}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{112}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{60}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{60}\\PY{p+pIndicator}{]}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{refinement}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{static}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{default}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{volumes\\PYZus{}refine}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{start}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{96}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{32}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{32}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{end}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{224}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{96}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{96}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{lvl}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\\PY{+w}{ }\\PY{n+nt}{is\\PYZus{}abs}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{true}\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{start}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{104}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{56}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{56}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{end}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{144}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{72}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{72}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{lvl}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{3}\n", "\\PY{+w}{ }\\PY{n+nt}{is\\PYZus{}abs}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{true}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{data}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{probes}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{historic\\PYZus{}series}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{default}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{macrs}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{l+s}{\\PYZdq{}}\\PY{l+s}{u}\\PY{l+s}{\\PYZdq{}}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{l+s}{\\PYZdq{}}\\PY{l+s}{rho}\\PY{l+s}{\\PYZdq{}}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{interval}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZob{}}\\PY{n+nt}{ frequency}\\PY{p}{:}\\PY{+w}{ }\\PY{n+nv}{20}\\PY{p+pIndicator}{,}\\PY{n+nt}{ lvl}\\PY{p}{:}\\PY{+w}{ }\\PY{n+nv}{0}\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZcb{}}\n", "\\PY{+w}{ }\\PY{n+nt}{bodies}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{sphere}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{body\\PYZus{}name}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{sphere}\n", "\\PY{+w}{ }\\PY{n+nt}{normal\\PYZus{}offset}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0.25}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{models}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{LBM}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{tau}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0.500285714285714}\n", "\\PY{+w}{ }\\PY{n+nt}{vel\\PYZus{}set}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{D3Q27}\n", "\\PY{+w}{ }\\PY{n+nt}{coll\\PYZus{}oper}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{RRBGK}\n", "\\PY{+w}{ }\\PY{n+nt}{initialization}\\PY{p}{:}\\PY{+w}{ }\\PY{k+kt}{!not\\PYZhy{}inherit}\n", "\\PY{+w}{ }\\PY{n+nt}{rho}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1.0}\n", "\\PY{+w}{ }\\PY{n+nt}{u}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{x}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0.05}\n", "\\PY{+w}{ }\\PY{n+nt}{y}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\\PY{+w}{ }\\PY{n+nt}{z}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\\PY{+w}{ }\\PY{n+nt}{IBM}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{forces\\PYZus{}accomodate\\PYZus{}time}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{5000}\n", "\\PY{+w}{ }\\PY{n+nt}{multiblock}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{overlap\\PYZus{}F2C}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{2}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{periodic\\PYZus{}dims}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{false}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{false}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{false}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{BC\\PYZus{}map}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{N}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{N}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{S}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{S}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{F}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{F}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{B}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Neumann}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{B}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{E}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{RegularizedNeumannOutlet}\n", "\\PY{+w}{ }\\PY{n+nt}{rho}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1.0}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{E}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{2}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{pos}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{W}\n", "\\PY{+w}{ }\\PY{n+nt}{BC}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{UniformFlow}\n", "\\PY{+w}{ }\\PY{n+nt}{wall\\PYZus{}normal}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{W}\n", "\\PY{+w}{ }\\PY{n+nt}{rho}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\\PY{+w}{ }\\PY{n+nt}{ux}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0.05}\n", "\\PY{+w}{ }\\PY{n+nt}{uy}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\\PY{+w}{ }\\PY{n+nt}{uz}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0}\n", "\\PY{+w}{ }\\PY{n+nt}{order}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{2}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{name}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{turbulentFlowOverSphereLES}\n", "\\PY{+w}{ }\\PY{n+nt}{parent}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{turbulentFlowOverSphere}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{models}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{LBM}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{tau}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0.500024}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{LES}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{model}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{Smagorinsky}\n", "\\PY{+w}{ }\\PY{n+nt}{sgs\\PYZus{}cte}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{0.17}\n", "\\end{Verbatim}\n" ], "text/plain": [ "simulations:\n", " - name: laminarFlowOverSphere\n", " save_path: ./tests/validation/results/07_flow_over_sphere/laminar\n", "\n", " n_steps: 40000\n", "\n", " report: { frequency: 1000 }\n", "\n", " domain:\n", " domain_size:\n", " x: 480\n", " y: 160\n", " z: 160\n", " block_size: 8\n", " bodies:\n", " sphere:\n", " lnas_path: fixture/lnas/basic/sphere.lnas\n", " transformation:\n", " scale: [1.6, 1.6, 1.6]\n", " translation: [112, 72, 72]\n", " refinement:\n", " static:\n", " default:\n", " volumes_refine:\n", " - start: [96, 64, 64]\n", " end: [160, 96, 96]\n", " lvl: 1\n", " is_abs: true\n", "\n", " data:\n", " divergence: { frequency: 10 }\n", " instantaneous:\n", " default: { interval: { frequency: 1000 }, macrs: [rho, u] }\n", " export_IBM_nodes:\n", " frequency: 5000\n", "\n", " models:\n", " precision:\n", " default: single\n", "\n", " LBM:\n", " tau: 0.51\n", " vel_set: D3Q27\n", " coll_oper: RRBGK\n", " initialization:\n", " rho: 1.0\n", " u:\n", " x: !unroll [0.007854, 0.024583, 0.064583]\n", " y: 0\n", " z: 0\n", "\n", " engine:\n", " name: CUDA\n", "\n", " BC:\n", " periodic_dims: [false, false, false]\n", " BC_map:\n", " - pos: N\n", " BC: Neumann\n", " wall_normal: N\n", " order: 0\n", "\n", " - pos: S\n", " BC: Neumann\n", " wall_normal: S\n", " order: 0\n", "\n", " - pos: F\n", " BC: Neumann\n", " wall_normal: F\n", " order: 1\n", "\n", " - pos: B\n", " BC: Neumann\n", " wall_normal: B\n", " order: 1\n", "\n", " - pos: E\n", " BC: RegularizedNeumannOutlet\n", " rho: 1.0\n", " wall_normal: E\n", " order: 2\n", "\n", " - pos: W\n", " BC: UniformFlow\n", " wall_normal: W\n", " rho: 1\n", " ux: !unroll [0.007854, 0.024583, 0.064583]\n", " uy: 0\n", " uz: 0\n", " order: 2\n", "\n", " - pos: NF\n", " BC: Neumann\n", " wall_normal: N\n", " order: 0\n", "\n", " - pos: NB\n", " BC: Neumann\n", " wall_normal: N\n", " order: 0\n", "\n", " - pos: SF\n", " BC: Neumann\n", " wall_normal: S\n", " order: 0\n", "\n", " - pos: SB\n", " BC: Neumann\n", " wall_normal: S\n", " order: 0\n", "\n", " - pos: NF\n", " BC: Neumann\n", " wall_normal: F\n", " order: 1\n", "\n", " - pos: NB\n", " BC: Neumann\n", " wall_normal: B\n", " order: 1\n", "\n", " - pos: SF\n", " BC: Neumann\n", " wall_normal: F\n", " order: 1\n", "\n", " - pos: SB\n", " BC: Neumann\n", " wall_normal: B\n", " order: 1\n", "\n", " IBM:\n", " forces_accomodate_time: 1000\n", " body_cfgs:\n", " default: {}\n", "\n", " multiblock:\n", " overlap_F2C: 2\n", "\n", " - name: turbulentFlowOverSphere\n", " parent: laminarFlowOverSphere\n", "\n", " save_path: ./tests/validation/results/07_flow_over_sphere/turbulent\n", "\n", " n_steps: 100000\n", "\n", " domain:\n", " domain_size:\n", " x: 640\n", " y: 128\n", " z: 128\n", " block_size: 8\n", "\n", " bodies: !not-inherit\n", " sphere:\n", " small_triangles: \"add\"\n", " lnas_path: fixture/lnas/basic/sphere.lnas\n", " transformation:\n", " scale: [0.8, 0.8, 0.8]\n", " translation: [112, 60, 60]\n", "\n", " refinement:\n", " static:\n", " default:\n", " volumes_refine:\n", " - start: [96, 32, 32]\n", " end: [224, 96, 96]\n", " lvl: 1\n", " is_abs: true\n", " - start: [104, 56, 56]\n", " end: [144, 72, 72]\n", " lvl: 3\n", " is_abs: true\n", "\n", " data:\n", " probes:\n", " historic_series:\n", " default:\n", " macrs: [\"u\", \"rho\"]\n", " interval: { frequency: 20, lvl: 0 }\n", " bodies:\n", " sphere:\n", " body_name: sphere\n", " normal_offset: 0.25\n", "\n", " models:\n", " LBM:\n", " tau: 0.500285714285714\n", " vel_set: D3Q27\n", " coll_oper: RRBGK\n", " initialization: !not-inherit\n", " rho: 1.0\n", " u:\n", " x: 0.05\n", " y: 0\n", " z: 0\n", " IBM:\n", " forces_accomodate_time: 5000\n", " multiblock:\n", " overlap_F2C: 2\n", "\n", " BC:\n", " periodic_dims: [false, false, false]\n", " BC_map:\n", " - pos: N\n", " BC: Neumann\n", " wall_normal: N\n", " order: 0\n", "\n", " - pos: S\n", " BC: Neumann\n", " wall_normal: S\n", " order: 0\n", "\n", " - pos: F\n", " BC: Neumann\n", " wall_normal: F\n", " order: 1\n", "\n", " - pos: B\n", " BC: Neumann\n", " wall_normal: B\n", " order: 1\n", "\n", " - pos: E\n", " BC: RegularizedNeumannOutlet\n", " rho: 1.0\n", " wall_normal: E\n", " order: 2\n", "\n", " - pos: W\n", " BC: UniformFlow\n", " wall_normal: W\n", " rho: 1\n", " ux: 0.05\n", " uy: 0\n", " uz: 0\n", " order: 2\n", "\n", " - name: turbulentFlowOverSphereLES\n", " parent: turbulentFlowOverSphere\n", "\n", " models:\n", " LBM:\n", " tau: 0.500024\n", "\n", " LES:\n", " model: Smagorinsky\n", " sgs_cte: 0.17" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Code\n", "\n", "Code(filename=filename)" ] } ], "metadata": { "kernelspec": { "display_name": "nassu", "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.11.9" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }