{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Poiseuille Pipe (Periodic)\n", "\n", "The simulation of a periodic Poiseuille pipe flow is used for the validation of the immersed boundary method (IBM) as to represent a curved boundary. In the current case, the external force density term represents the pressure gradient $F_{x}=-\\mathrm{d}p/\\mathrm{d}x$, periodicity is considered in all boundaries, and an cylindrical Lagrangian mesh is placed with axis alligned to the $x$-axis." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from nassu.cfg.model import ConfigScheme\n", "\n", "filename = \"tests/validation/cases/03_poiseuille_pipe_flow.nassu.yaml\"\n", "\n", "sim_cfgs = ConfigScheme.sim_cfgs_from_file_dct(filename)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The simulation parameters are shown below" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NFtautime_steps
0246.250000e-050.82000
1407.812500e-060.88000
2729.765630e-070.832000
31361.220700e-070.8128000
\n", "
" ], "text/plain": [ " N F tau time_steps\n", "0 24 6.250000e-05 0.8 2000\n", "1 40 7.812500e-06 0.8 8000\n", "2 72 9.765630e-07 0.8 32000\n", "3 136 1.220700e-07 0.8 128000" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from nassu.cfg.schemes.simul import SimulationConfigs\n", "import pandas as pd\n", "\n", "dct = {\"N\": [], \"F\": [], \"tau\": [], \"time_steps\": []}\n", "\n", "\n", "def add_to_dict(sim_cfg: SimulationConfigs):\n", " dct[\"N\"].append(sim_cfg.domain.domain_size.x)\n", " dct[\"tau\"].append(sim_cfg.models.LBM.tau)\n", " dct[\"F\"].append(sim_cfg.models.LBM.F.x)\n", " dct[\"time_steps\"].append(sim_cfg.n_steps)\n", "\n", "\n", "sim_cfgs_use = [\n", " sim_cfg\n", " for (name, _), sim_cfg in sim_cfgs.items()\n", " if sim_cfg.name.startswith(\"periodicPoiseuillePipeN\")\n", "]\n", "for sim_cfg in sim_cfgs_use:\n", " add_to_dict(sim_cfg)\n", "\n", "df = pd.DataFrame(dct, index=None)\n", "\n", "df" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Where N represents the domain size, directly correlated to the scale of the problem and the level of mesh refinement. Also, F is a volumetric force generating the flow. Since the domain size changes between cases F must be reescaled in order to keep the velocity profile constant.\n", "\n", "An extra spacing of 2 lattices at each side of the cylinder is kept to assure a complete interpolation-spread procedure." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Functions to use for processing of poiseuille pipe." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from typing import Callable\n", "import numpy as np\n", "from lnas import LnasFormat\n", "\n", "\n", "def get_poiseuille_pipe_analytical_func() -> Callable:\n", " \"\"\"Poiseuille analytical velocity function\n", "\n", " Returns:\n", " Callable[[float], float]: Analytical velocity function\n", " \"\"\"\n", " return lambda r: 2 * (1 - r * r)\n", "\n", "\n", "def get_poiseuille_pipe_numerical_avg_vel(ux_vals: np.ndarray) -> float:\n", " # Average velocity is ~half the maximun velocity.\n", " # Numerical integration gives worse results for average velocity\n", " return np.max(ux_vals) / 2\n", "\n", "\n", "def get_pos_values_inside_pipe(sim_cfg: SimulationConfigs) -> np.ndarray:\n", " lnas_filename = sim_cfg.output.bodies[\"cylinder\"].lnas_transformed\n", " lnas = LnasFormat.from_file(lnas_filename)\n", " vertices = lnas.geometry.vertices\n", "\n", " x_val = sim_cfg.domain.domain_size.x / 2\n", " z_val = sim_cfg.domain.domain_size.z / 2\n", " min_y, max_y = (vertices[:, 1].min(), vertices[:, 1].max())\n", " min_y, max_y = int(np.ceil(min_y)), int(np.ceil(max_y))\n", "\n", " p1, p2 = (x_val, min_y, z_val), (x_val, max_y, z_val)\n", " line = np.linspace(p1, p2, num=max_y - min_y, endpoint=False)\n", " return line\n", "\n", "\n", "def plot_analytical_poiseuille_pipe_vels(ax):\n", " x = np.arange(\n", " -1,\n", " 1.01,\n", " 0.01,\n", " )\n", " analytical_func = get_poiseuille_pipe_analytical_func()\n", " analytical_data = analytical_func(x)\n", " ax.plot(x, analytical_data, \"--k\", label=\"Analytical\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Results\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Extract the velocity profile from simulation" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys([(0, 'periodicPoiseuillePipeN16'), (0, 'periodicPoiseuillePipeN32'), (0, 'periodicPoiseuillePipeN64'), (0, 'periodicPoiseuillePipeN128')])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "from vtk.util.numpy_support import vtk_to_numpy\n", "from tests.validation.notebooks import common\n", "\n", "extracted_data = {}\n", "array_to_extract = \"ux\"\n", "\n", "for sim_cfg in sim_cfgs_use:\n", " export_instantaneous_cfg = sim_cfg.output.instantaneous\n", " macr_export = export_instantaneous_cfg[\"default\"]\n", " time_step = macr_export.time_steps(sim_cfg.n_steps)[-1]\n", " reader = macr_export.read_vtm_export(time_step)\n", "\n", " pos = get_pos_values_inside_pipe(sim_cfg)\n", " # Sum 0.5 because data is cell data, so it's in the center of the cell\n", " p1 = pos[0] + 0.5\n", " p2 = pos[-1] + 0.5\n", "\n", " line = common.create_line(p1, p2, len(pos) - 1)\n", "\n", " # Get the points from the vtkLineSource\n", " polyData = line.GetOutput()\n", " points = polyData.GetPoints()\n", "\n", " probe_filter = common.probe_over_line(line, reader.GetOutput())\n", "\n", " probed_data = vtk_to_numpy(probe_filter.GetOutput().GetPointData().GetArray(array_to_extract))\n", " extracted_data[(sim_cfg.sim_id, sim_cfg.name)] = {\"pos\": pos, \"data\": probed_data}\n", "\n", "extracted_data.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The velocity profile at the end of simulation is compared with the steady state analytical solution below:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "fig, ax = plt.subplots()\n", "fig.set_size_inches(6, 5)\n", "\n", "style_num = [\"o\", \"^\", \"s\", \"+\", \"x\"]\n", "\n", "\n", "def normalize_pos(pos):\n", " # Normalize between -1 and 1\n", " pos -= pos.min()\n", " R = pos.max()\n", " pos /= pos.max()\n", " pos -= 0.5\n", " pos *= 2\n", "\n", " return R\n", "\n", "\n", "for sim_cfg, mkr_style in zip(sim_cfgs_use, style_num):\n", " num_data = extracted_data[(sim_cfg.sim_id, sim_cfg.name)]\n", " num_avg_vel = get_poiseuille_pipe_numerical_avg_vel(num_data[\"data\"])\n", " pos_norm = num_data[\"pos\"][:, 1].copy()\n", " R = normalize_pos(pos_norm)\n", "\n", " ax.plot(\n", " pos_norm,\n", " num_data[\"data\"] / num_avg_vel,\n", " mkr_style,\n", " label=f\"R={R} (avg. {num_avg_vel:.2e})\",\n", " fillstyle=\"none\",\n", " c=\"k\",\n", " )\n", "\n", "sim_cfg_ref = sim_cfgs_use[0]\n", "plot_analytical_poiseuille_pipe_vels(ax)\n", "ax.set_title(\n", " f\"Poiseuille (Periodic)\\n({sim_cfg_ref.models.LBM.vel_set} {sim_cfg_ref.models.LBM.coll_oper})\"\n", ")\n", "ax.legend()\n", "plt.show(fig)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The first order error decay under grid refinement for the present case is also verified:\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "fig.set_size_inches(6, 5)\n", "\n", "analytical_error_prof: list[float] = []\n", "numerical_error_prof: list[float] = []\n", "N_list: list[int] = []\n", "analytical_func = get_poiseuille_pipe_analytical_func()\n", "\n", "for sim_cfg in sim_cfgs_use:\n", " num_data = extracted_data[(sim_cfg.sim_id, sim_cfg.name)]\n", " num_avg_vel = get_poiseuille_pipe_numerical_avg_vel(num_data[\"data\"])\n", " num_pos = num_data[\"pos\"][:, 1].copy()\n", " R = num_pos.max() - num_pos.min()\n", " normalize_pos(num_pos)\n", " num_profile = num_data[\"data\"] / num_avg_vel\n", "\n", " num_o2_error = common.get_o2_error(num_pos, num_profile, analytical_func)\n", " analyical_error = (\n", " num_o2_error if len(analytical_error_prof) == 0 else analytical_error_prof[-1] / 4\n", " )\n", "\n", " analytical_error_prof.append(analyical_error)\n", " numerical_error_prof.append(num_o2_error)\n", " N_list.append(R)\n", "\n", "ax.plot(N_list, numerical_error_prof, \"sk\", fillstyle=\"none\", label=\"Numerical\")\n", "ax.plot(N_list, analytical_error_prof, \"--k\", label=r\"$O(\\Delta x^2)$\")\n", "\n", "ax.set_yscale(\"log\")\n", "ax.set_xscale(\"log\", base=2)\n", "ax.set_title(\n", " r\"Poiseuille $O(\\Delta x^2)$ (Periodic)\"\n", " + f\"\\n({sim_cfg.models.LBM.vel_set} {sim_cfg.models.LBM.coll_oper})\"\n", ")\n", "ax.legend()\n", "plt.show(fig)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The results show that the flow evolution equation from LBM converges to steady analytical solution.\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Version" ] }, { "cell_type": "code", "execution_count": 7, "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": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
simulations:\n",
       "  - name: periodicPoiseuillePipeN16\n",
       "    save_path: ./tests/validation/results/03_poiseuille_pipe_flow/periodic\n",
       "    n_steps: 2000\n",
       "    report:\n",
       "      frequency: 1000\n",
       "\n",
       "    data:\n",
       "      divergence: { frequency: 50 }\n",
       "      instantaneous:\n",
       "        default: { interval: { frequency: 0 }, macrs: [rho, u, f_IBM, S] }\n",
       "\n",
       "    domain:\n",
       "      domain_size:\n",
       "        x: 24\n",
       "        y: 24\n",
       "        z: 24\n",
       "      block_size: 8\n",
       "\n",
       "      bodies:\n",
       "        cylinder:\n",
       "          lnas_path: fixture/lnas/basic/cylinder.lnas\n",
       "          small_triangles: add\n",
       "          transformation:\n",
       "            scale: [8, 8, 8]\n",
       "            translation: [-4, 4, 4]\n",
       "\n",
       "    models:\n",
       "      precision:\n",
       "        default: single\n",
       "\n",
       "      LBM:\n",
       "        tau: 0.8\n",
       "        F:\n",
       "          x: 6.25E-05\n",
       "          y: 0\n",
       "          z: 0\n",
       "        vel_set: D3Q27\n",
       "        coll_oper: RRBGK\n",
       "\n",
       "      engine:\n",
       "        name: CUDA\n",
       "\n",
       "      IBM:\n",
       "        forces_accomodate_time: 1000\n",
       "        body_cfgs:\n",
       "          default: {}\n",
       "\n",
       "      BC:\n",
       "        periodic_dims: [true, false, false]\n",
       "        BC_map:\n",
       "          - pos: N\n",
       "            BC: RegularizedHWBB\n",
       "            wall_normal: N\n",
       "            order: 1\n",
       "\n",
       "          - pos: S\n",
       "            BC: RegularizedHWBB\n",
       "            wall_normal: S\n",
       "            order: 1\n",
       "\n",
       "          - pos: F\n",
       "            BC: RegularizedHWBB\n",
       "            wall_normal: F\n",
       "            order: 2\n",
       "\n",
       "          - pos: B\n",
       "            BC: RegularizedHWBB\n",
       "            wall_normal: B\n",
       "            order: 2\n",
       "\n",
       "  - name: periodicPoiseuillePipeN32\n",
       "    parent: periodicPoiseuillePipeN16\n",
       "\n",
       "    n_steps: 8000\n",
       "\n",
       "    domain:\n",
       "      domain_size:\n",
       "        x: 40\n",
       "        y: 40\n",
       "        z: 40\n",
       "      block_size: 8\n",
       "      bodies: !not-inherit\n",
       "        cylinder:\n",
       "          lnas_path: fixture/lnas/basic/cylinder.lnas\n",
       "          small_triangles: add\n",
       "          transformation:\n",
       "            scale: [16, 16, 16]\n",
       "            translation: [-4, 4, 4]\n",
       "\n",
       "    models:\n",
       "      LBM:\n",
       "        F:\n",
       "          x: 7.8125E-06\n",
       "          y: 0\n",
       "          z: 0\n",
       "\n",
       "  - name: periodicPoiseuillePipeN64\n",
       "    parent: periodicPoiseuillePipeN16\n",
       "\n",
       "    n_steps: 32000\n",
       "\n",
       "    domain:\n",
       "      domain_size:\n",
       "        x: 72\n",
       "        y: 72\n",
       "        z: 72\n",
       "      block_size: 8\n",
       "      bodies: !not-inherit\n",
       "        cylinder:\n",
       "          lnas_path: fixture/lnas/basic/cylinder.lnas\n",
       "          small_triangles: add\n",
       "          transformation:\n",
       "            scale: [32, 32, 32]\n",
       "            translation: [-4, 4, 4]\n",
       "    models:\n",
       "      LBM:\n",
       "        F:\n",
       "          x: 9.76563E-07\n",
       "          y: 0\n",
       "          z: 0\n",
       "\n",
       "  - name: periodicPoiseuillePipeN128\n",
       "    parent: periodicPoiseuillePipeN16\n",
       "\n",
       "    n_steps: 128000\n",
       "\n",
       "    domain:\n",
       "      domain_size:\n",
       "        x: 136\n",
       "        y: 136\n",
       "        z: 136\n",
       "      block_size: 8\n",
       "      bodies: !not-inherit\n",
       "        cylinder:\n",
       "          lnas_path: fixture/lnas/basic/cylinder.lnas\n",
       "          small_triangles: add\n",
       "          transformation:\n",
       "            scale: [64, 64, 64]\n",
       "            translation: [-4, 4, 4]\n",
       "    models:\n",
       "      LBM:\n",
       "        F:\n",
       "          x: 1.22070E-07\n",
       "          y: 0\n",
       "          z: 0\n",
       "\n",
       "  - name: velocityNeumannPoiseuillePipeMultilevel\n",
       "    save_path: ./tests/validation/results/03_poiseuille_pipe_flow/velocity_neumann_multilevel\n",
       "\n",
       "    n_steps: 32000\n",
       "\n",
       "    report:\n",
       "      frequency: 1000\n",
       "\n",
       "    data:\n",
       "      divergence: { frequency: 1 }\n",
       "      instantaneous:\n",
       "        default: { interval: { frequency: 8000 }, macrs: [rho, u, f_IBM, S] }\n",
       "\n",
       "    domain:\n",
       "      domain_size:\n",
       "        x: 104\n",
       "        y: 32\n",
       "        z: 32\n",
       "\n",
       "      block_size: 8\n",
       "      bodies_domain_limits:\n",
       "        start: [4, 8, 8]\n",
       "        end: [88, 40, 40]\n",
       "        is_abs: true\n",
       "      bodies:\n",
       "        cylinder:\n",
       "          lnas_path: fixture/lnas/basic/cylinder.lnas\n",
       "          small_triangles: add\n",
       "          transformation:\n",
       "            scale: [8, 8, 8]\n",
       "            translation: [4, 8, 8]\n",
       "      refinement:\n",
       "        static:\n",
       "          default:\n",
       "            bodies:\n",
       "              - body_name: cylinder\n",
       "                lvl: 1\n",
       "                normal_offsets: [-2, 0, 2]\n",
       "\n",
       "    models:\n",
       "      precision:\n",
       "        default: single\n",
       "\n",
       "      LBM:\n",
       "        tau: 0.51\n",
       "        vel_set: D3Q27\n",
       "        coll_oper: RRBGK\n",
       "\n",
       "      engine:\n",
       "        name: CUDA\n",
       "\n",
       "      BC:\n",
       "        periodic_dims: [false, false, false]\n",
       "        BC_map:\n",
       "          - pos: W\n",
       "            BC: UniformFlow\n",
       "            wall_normal: W\n",
       "            rho: 1.0\n",
       "            ux: 0.05\n",
       "            uy: 0\n",
       "            uz: 0\n",
       "            order: 2\n",
       "\n",
       "          - pos: E\n",
       "            BC: RegularizedNeumannOutlet\n",
       "            rho: 1.0\n",
       "            wall_normal: E\n",
       "            order: 2\n",
       "\n",
       "          - pos: N\n",
       "            BC: Neumann\n",
       "            wall_normal: N\n",
       "            order: 1\n",
       "\n",
       "          - pos: S\n",
       "            BC: Neumann\n",
       "            wall_normal: S\n",
       "            order: 1\n",
       "\n",
       "          - pos: F\n",
       "            BC: Neumann\n",
       "            wall_normal: F\n",
       "            order: 0\n",
       "\n",
       "          - pos: B\n",
       "            BC: Neumann\n",
       "            wall_normal: B\n",
       "            order: 0\n",
       "\n",
       "      IBM:\n",
       "        forces_accomodate_time: 1000\n",
       "        body_cfgs:\n",
       "          default: {}\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}{periodicPoiseuillePipeN16}\n", "\\PY{+w}{ }\\PY{n+nt}{save\\PYZus{}path}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{./tests/validation/results/03\\PYZus{}poiseuille\\PYZus{}pipe\\PYZus{}flow/periodic}\n", "\\PY{+w}{ }\\PY{n+nt}{n\\PYZus{}steps}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{2000}\n", "\\PY{+w}{ }\\PY{n+nt}{report}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{frequency}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1000}\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}{50}\\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}{0}\\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{n+nv}{f\\PYZus{}IBM}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{S}\\PY{p+pIndicator}{]}\\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}{24}\n", "\\PY{+w}{ }\\PY{n+nt}{y}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{24}\n", "\\PY{+w}{ }\\PY{n+nt}{z}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{24}\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}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{cylinder}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{lnas\\PYZus{}path}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{fixture/lnas/basic/cylinder.lnas}\n", "\\PY{+w}{ }\\PY{n+nt}{small\\PYZus{}triangles}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{add}\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}{8}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{8}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{8}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{translation}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{\\PYZhy{}4}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{4}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{4}\\PY{p+pIndicator}{]}\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.8}\n", "\\PY{+w}{ }\\PY{n+nt}{F}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{x}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{6.25E\\PYZhy{}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}{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", "\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}{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}{BC}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{periodic\\PYZus{}dims}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{true}\\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}{RegularizedHWBB}\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}{1}\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}{RegularizedHWBB}\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}{1}\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}{RegularizedHWBB}\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}{2}\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}{RegularizedHWBB}\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}{2}\n", "\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{name}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{periodicPoiseuillePipeN32}\n", "\\PY{+w}{ }\\PY{n+nt}{parent}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{periodicPoiseuillePipeN16}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{n\\PYZus{}steps}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{8000}\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}{40}\n", "\\PY{+w}{ }\\PY{n+nt}{y}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{40}\n", "\\PY{+w}{ }\\PY{n+nt}{z}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{40}\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}{:}\\PY{+w}{ }\\PY{k+kt}{!not\\PYZhy{}inherit}\n", "\\PY{+w}{ }\\PY{n+nt}{cylinder}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{lnas\\PYZus{}path}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{fixture/lnas/basic/cylinder.lnas}\n", "\\PY{+w}{ }\\PY{n+nt}{small\\PYZus{}triangles}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{add}\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}{16}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{16}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{16}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{translation}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{\\PYZhy{}4}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{4}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{4}\\PY{p+pIndicator}{]}\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}{F}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{x}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{7.8125E\\PYZhy{}06}\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{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{name}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{periodicPoiseuillePipeN64}\n", "\\PY{+w}{ }\\PY{n+nt}{parent}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{periodicPoiseuillePipeN16}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{n\\PYZus{}steps}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{32000}\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}{72}\n", "\\PY{+w}{ }\\PY{n+nt}{y}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{72}\n", "\\PY{+w}{ }\\PY{n+nt}{z}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{72}\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}{:}\\PY{+w}{ }\\PY{k+kt}{!not\\PYZhy{}inherit}\n", "\\PY{+w}{ }\\PY{n+nt}{cylinder}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{lnas\\PYZus{}path}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{fixture/lnas/basic/cylinder.lnas}\n", "\\PY{+w}{ }\\PY{n+nt}{small\\PYZus{}triangles}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{add}\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}{32}\\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}{translation}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{\\PYZhy{}4}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{4}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{4}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{models}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{LBM}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{F}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{x}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{9.76563E\\PYZhy{}07}\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{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{name}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{periodicPoiseuillePipeN128}\n", "\\PY{+w}{ }\\PY{n+nt}{parent}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{periodicPoiseuillePipeN16}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{n\\PYZus{}steps}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{128000}\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}{136}\n", "\\PY{+w}{ }\\PY{n+nt}{y}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{136}\n", "\\PY{+w}{ }\\PY{n+nt}{z}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{136}\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}{:}\\PY{+w}{ }\\PY{k+kt}{!not\\PYZhy{}inherit}\n", "\\PY{+w}{ }\\PY{n+nt}{cylinder}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{lnas\\PYZus{}path}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{fixture/lnas/basic/cylinder.lnas}\n", "\\PY{+w}{ }\\PY{n+nt}{small\\PYZus{}triangles}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{add}\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}{64}\\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}{translation}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{\\PYZhy{}4}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{4}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{4}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{models}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{LBM}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{F}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{x}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1.22070E\\PYZhy{}07}\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{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{name}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{velocityNeumannPoiseuillePipeMultilevel}\n", "\\PY{+w}{ }\\PY{n+nt}{save\\PYZus{}path}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{./tests/validation/results/03\\PYZus{}poiseuille\\PYZus{}pipe\\PYZus{}flow/velocity\\PYZus{}neumann\\PYZus{}multilevel}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{n\\PYZus{}steps}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{32000}\n", "\n", "\\PY{+w}{ }\\PY{n+nt}{report}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{frequency}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1000}\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}{1}\\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}{8000}\\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{n+nv}{f\\PYZus{}IBM}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{S}\\PY{p+pIndicator}{]}\\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}{104}\n", "\\PY{+w}{ }\\PY{n+nt}{y}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{32}\n", "\\PY{+w}{ }\\PY{n+nt}{z}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{32}\n", "\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\\PYZus{}domain\\PYZus{}limits}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{start}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{4}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{8}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{8}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{end}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{88}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{40}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{40}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{is\\PYZus{}abs}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{true}\n", "\\PY{+w}{ }\\PY{n+nt}{bodies}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{cylinder}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{n+nt}{lnas\\PYZus{}path}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{fixture/lnas/basic/cylinder.lnas}\n", "\\PY{+w}{ }\\PY{n+nt}{small\\PYZus{}triangles}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{add}\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}{8}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{8}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{8}\\PY{p+pIndicator}{]}\n", "\\PY{+w}{ }\\PY{n+nt}{translation}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{4}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{8}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{8}\\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}{bodies}\\PY{p}{:}\n", "\\PY{+w}{ }\\PY{p+pIndicator}{\\PYZhy{}}\\PY{+w}{ }\\PY{n+nt}{body\\PYZus{}name}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{cylinder}\n", "\\PY{+w}{ }\\PY{n+nt}{lvl}\\PY{p}{:}\\PY{+w}{ }\\PY{l+lScalar+lScalarPlain}{1}\n", "\\PY{+w}{ }\\PY{n+nt}{normal\\PYZus{}offsets}\\PY{p}{:}\\PY{+w}{ }\\PY{p+pIndicator}{[}\\PY{n+nv}{\\PYZhy{}2}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{0}\\PY{p+pIndicator}{,}\\PY{+w}{ }\\PY{n+nv}{2}\\PY{p+pIndicator}{]}\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", "\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}{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.0}\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}{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}{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}{1}\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}{1}\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}{0}\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}{0}\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", "\\end{Verbatim}\n" ], "text/plain": [ "simulations:\n", " - name: periodicPoiseuillePipeN16\n", " save_path: ./tests/validation/results/03_poiseuille_pipe_flow/periodic\n", " n_steps: 2000\n", " report:\n", " frequency: 1000\n", "\n", " data:\n", " divergence: { frequency: 50 }\n", " instantaneous:\n", " default: { interval: { frequency: 0 }, macrs: [rho, u, f_IBM, S] }\n", "\n", " domain:\n", " domain_size:\n", " x: 24\n", " y: 24\n", " z: 24\n", " block_size: 8\n", "\n", " bodies:\n", " cylinder:\n", " lnas_path: fixture/lnas/basic/cylinder.lnas\n", " small_triangles: add\n", " transformation:\n", " scale: [8, 8, 8]\n", " translation: [-4, 4, 4]\n", "\n", " models:\n", " precision:\n", " default: single\n", "\n", " LBM:\n", " tau: 0.8\n", " F:\n", " x: 6.25E-05\n", " y: 0\n", " z: 0\n", " vel_set: D3Q27\n", " coll_oper: RRBGK\n", "\n", " engine:\n", " name: CUDA\n", "\n", " IBM:\n", " forces_accomodate_time: 1000\n", " body_cfgs:\n", " default: {}\n", "\n", " BC:\n", " periodic_dims: [true, false, false]\n", " BC_map:\n", " - pos: N\n", " BC: RegularizedHWBB\n", " wall_normal: N\n", " order: 1\n", "\n", " - pos: S\n", " BC: RegularizedHWBB\n", " wall_normal: S\n", " order: 1\n", "\n", " - pos: F\n", " BC: RegularizedHWBB\n", " wall_normal: F\n", " order: 2\n", "\n", " - pos: B\n", " BC: RegularizedHWBB\n", " wall_normal: B\n", " order: 2\n", "\n", " - name: periodicPoiseuillePipeN32\n", " parent: periodicPoiseuillePipeN16\n", "\n", " n_steps: 8000\n", "\n", " domain:\n", " domain_size:\n", " x: 40\n", " y: 40\n", " z: 40\n", " block_size: 8\n", " bodies: !not-inherit\n", " cylinder:\n", " lnas_path: fixture/lnas/basic/cylinder.lnas\n", " small_triangles: add\n", " transformation:\n", " scale: [16, 16, 16]\n", " translation: [-4, 4, 4]\n", "\n", " models:\n", " LBM:\n", " F:\n", " x: 7.8125E-06\n", " y: 0\n", " z: 0\n", "\n", " - name: periodicPoiseuillePipeN64\n", " parent: periodicPoiseuillePipeN16\n", "\n", " n_steps: 32000\n", "\n", " domain:\n", " domain_size:\n", " x: 72\n", " y: 72\n", " z: 72\n", " block_size: 8\n", " bodies: !not-inherit\n", " cylinder:\n", " lnas_path: fixture/lnas/basic/cylinder.lnas\n", " small_triangles: add\n", " transformation:\n", " scale: [32, 32, 32]\n", " translation: [-4, 4, 4]\n", " models:\n", " LBM:\n", " F:\n", " x: 9.76563E-07\n", " y: 0\n", " z: 0\n", "\n", " - name: periodicPoiseuillePipeN128\n", " parent: periodicPoiseuillePipeN16\n", "\n", " n_steps: 128000\n", "\n", " domain:\n", " domain_size:\n", " x: 136\n", " y: 136\n", " z: 136\n", " block_size: 8\n", " bodies: !not-inherit\n", " cylinder:\n", " lnas_path: fixture/lnas/basic/cylinder.lnas\n", " small_triangles: add\n", " transformation:\n", " scale: [64, 64, 64]\n", " translation: [-4, 4, 4]\n", " models:\n", " LBM:\n", " F:\n", " x: 1.22070E-07\n", " y: 0\n", " z: 0\n", "\n", " - name: velocityNeumannPoiseuillePipeMultilevel\n", " save_path: ./tests/validation/results/03_poiseuille_pipe_flow/velocity_neumann_multilevel\n", "\n", " n_steps: 32000\n", "\n", " report:\n", " frequency: 1000\n", "\n", " data:\n", " divergence: { frequency: 1 }\n", " instantaneous:\n", " default: { interval: { frequency: 8000 }, macrs: [rho, u, f_IBM, S] }\n", "\n", " domain:\n", " domain_size:\n", " x: 104\n", " y: 32\n", " z: 32\n", "\n", " block_size: 8\n", " bodies_domain_limits:\n", " start: [4, 8, 8]\n", " end: [88, 40, 40]\n", " is_abs: true\n", " bodies:\n", " cylinder:\n", " lnas_path: fixture/lnas/basic/cylinder.lnas\n", " small_triangles: add\n", " transformation:\n", " scale: [8, 8, 8]\n", " translation: [4, 8, 8]\n", " refinement:\n", " static:\n", " default:\n", " bodies:\n", " - body_name: cylinder\n", " lvl: 1\n", " normal_offsets: [-2, 0, 2]\n", "\n", " models:\n", " precision:\n", " default: single\n", "\n", " LBM:\n", " tau: 0.51\n", " vel_set: D3Q27\n", " coll_oper: RRBGK\n", "\n", " engine:\n", " name: CUDA\n", "\n", " BC:\n", " periodic_dims: [false, false, false]\n", " BC_map:\n", " - pos: W\n", " BC: UniformFlow\n", " wall_normal: W\n", " rho: 1.0\n", " ux: 0.05\n", " uy: 0\n", " uz: 0\n", " order: 2\n", "\n", " - pos: E\n", " BC: RegularizedNeumannOutlet\n", " rho: 1.0\n", " wall_normal: E\n", " order: 2\n", "\n", " - pos: N\n", " BC: Neumann\n", " wall_normal: N\n", " order: 1\n", "\n", " - pos: S\n", " BC: Neumann\n", " wall_normal: S\n", " order: 1\n", "\n", " - pos: F\n", " BC: Neumann\n", " wall_normal: F\n", " order: 0\n", "\n", " - pos: B\n", " BC: Neumann\n", " wall_normal: B\n", " order: 0\n", "\n", " IBM:\n", " forces_accomodate_time: 1000\n", " body_cfgs:\n", " default: {}" ] }, "execution_count": 8, "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.12.10" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }