{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Thermocapillary flows: 2D Droplet motion" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from pystencils.session import *\n", "from lbmpy.session import *\n", "\n", "from pystencils.astnodes import LoopOverCoordinate\n", "from pystencils.boundaries import BoundaryHandling\n", "\n", "from lbmpy.phasefield_allen_cahn.contact_angle import ContactAngle\n", "from lbmpy.phasefield_allen_cahn.kernel_equations import *\n", "from lbmpy.phasefield_allen_cahn.parameter_calculation import calculate_parameters_droplet_migration, AllenCahnParameters\n", "from lbmpy.advanced_streaming import LBMPeriodicityHandling\n", "from lbmpy.boundaries import NoSlip, LatticeBoltzmannBoundaryHandling" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If `cupy` is installed the simulation automatically runs on GPU" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "try:\n", " import cupy\n", "except ImportError:\n", " cupy = None\n", " gpu = False\n", " target = ps.Target.CPU\n", " print('No cupy installed')\n", "\n", "if cupy:\n", " gpu = True\n", " target = ps.Target.GPU" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview\n", "\n", "In this tutorial, we will provide an introduction to thermocapillary flows and solve an example setup using `lbmpy` and `pystencils`. This tutorial builds upon the conservative Allen-Cahn tutorial. Thus it is highly recommended to read mentioned tutorial first.\n", "\n", "Thermocapillary flows refer to the motion of fluids induced by temperature gradients at liquid interfaces. They play a crucial role in various natural and industrial processes, such as microfluidics, materials processing, and the behavior of liquid droplets in microgravity environments.\n", "\n", "The experimental setup shown in this tutorial encompasses the application of thermocapillary `LBM` to investigate the dynamic behavior of a droplet within a microchannel. To replicate the thermal effects induced by a laser, a heat source is introduced within the channel as,\n", "\n", "$$\n", "\\begin{align}\n", "\t\\label{eq:HeatSource}\n", "\tq_T =\n", "\t\\begin{cases}\n", "\t\tQ_s \\exp{\\left(-2 \\frac{\\left(x - x_s\\right)^2 + \\left(y - y_s\\right)^2 + \\left(z - z_s\\right)^2}{w_s^2}\\right)}, & \\text{if } \\left[\\left(x - x_s\\right)^2 + \\left(y - y_s\\right)^2 + \\left(z - z_s\\right)^2\\right] \\geq d_s^2 \\\\\n", "\t\t0, & \\text{otherwise}\n", "\t\\end{cases};\n", "\\end{align}\n", "$$\n", "\n", "\\noindent Here, $Q_s$ signifies the maximum heat flux generated by the laser, while $x_s$, $y_s$, and $z_s$ denote the precise laser position. For the two-dimensional cases, the $z$-component is disregarded. The extent of heat dispersion is defined by $d_s$, while $w_s$ serves as a key parameter governing the heat flux profile." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Geometry Setup\n", "\n", "First of all the stencils for the phase-field LB step as well as the stencil for the hydrodynamic LB step are defined. According to the stencils the simulation runs either in 2D or 3D" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "stencil_phase = LBStencil(Stencil.D2Q9)\n", "stencil_hydro = LBStencil(Stencil.D2Q9)\n", "stencil_thermal = LBStencil(Stencil.D2Q9)\n", "assert(stencil_phase.D == stencil_hydro.D == stencil_thermal.D)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Definition of the parameters used in this tutorial" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# pysical simulation time (timesteps will be calculated with reference time)\n", "simulation_time = 20\n", "# domain \n", "Radius = 32\n", "domain_size = (8 * Radius, 2 * Radius)\n", "midpoint = (65, 0)\n", "\n", "T_c = 0\n", "\n", "# time step\n", "timesteps_temperature = int(10000)\n", "\n", "Ca = 0.01\n", "Re = 0.16\n", "Ma = 0.08\n", "Pe = 1.0\n", "\n", "sigma_ref = 5e-3\n", "heat_ratio = 1\n", "\n", "parameters = calculate_parameters_droplet_migration(radius=Radius, reynolds_number=Re,\n", " capillary_number=Ca, marangoni_number=Ma,\n", " peclet_number=Pe, viscosity_ratio=1,\n", " heat_ratio=heat_ratio, interface_width=4,\n", " reference_surface_tension=sigma_ref)\n", "parameters.interface_thickness = 4\n", "u_max = parameters.velocity_wall\n", "timesteps = simulation_time * parameters.reference_time\n", "\n", "contact_angle_degree = 90" ] }, { "cell_type": "code", "execution_count": 5, "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", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", "
NameSymPy Symbol Value
Density heavy phase$\\rho_{H}$$1.0$
Density light phase$\\rho_{L}$$1.0$
Relaxation time heavy phase$\\tau_{H}$$0.3$
Relaxation time light phase$\\tau_{L}$$0.3$
Relaxation rate Allen Cahn LB$\\omega_{\\phi}$$1.97628458498024$
Gravitational acceleration$F_{g}$$0.0$
Interface thickness$W$$4$
Mobility$M_{m}$$0.002$
Surface tension$\\sigma$$0.0$
Heat Conductivity Heavy$\\kappa_{H}$$0.2$
Heat Conductivity Light$\\kappa_{L}$$0.2$
Sigma Ref$\\sigma_{ref}$$0.005$
Sigma T$\\sigma_{T}$$0.0002$
Temperature Ref$T_{ref}$$0$
\n", " " ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fields\n", "\n", "As a next step all fields which are needed get defined. To do so we create a `datahandling` object. More details about it can be found in the third tutorial of the [pystencils framework]( http://pycodegen.pages.walberla.net/pystencils/). Basically it holds all fields and manages the kernel runs." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# create a datahandling object\n", "dh = ps.create_data_handling((domain_size), periodicity=(True, False), default_target=target)\n", "\n", "# fields \n", "g = dh.add_array(\"g\", values_per_cell=len(stencil_hydro))\n", "dh.fill(\"g\", 0.0, ghost_layers=True)\n", "h = dh.add_array(\"h\",values_per_cell=len(stencil_phase))\n", "dh.fill(\"h\", 0.0, ghost_layers=True)\n", "f = dh.add_array(\"f\",values_per_cell=len(stencil_thermal))\n", "dh.fill(\"f\", 0.0, ghost_layers=True)\n", "\n", "g_tmp = dh.add_array(\"g_tmp\", values_per_cell=len(stencil_hydro))\n", "dh.fill(\"g_tmp\", 0.0, ghost_layers=True)\n", "h_tmp = dh.add_array(\"h_tmp\",values_per_cell=len(stencil_phase))\n", "dh.fill(\"h_tmp\", 0.0, ghost_layers=True)\n", "f_tmp = dh.add_array(\"f_tmp\",values_per_cell=len(stencil_thermal))\n", "dh.fill(\"f_tmp\", 0.0, ghost_layers=True)\n", "\n", "u = dh.add_array(\"u\", values_per_cell=dh.dim)\n", "dh.fill(\"u\", 0.0, ghost_layers=True)\n", "\n", "C = dh.add_array(\"C\")\n", "dh.fill(\"C\", 0.0, ghost_layers=True)\n", "C_tmp = dh.add_array(\"C_tmp\")\n", "dh.fill(\"C_tmp\", 0.0, ghost_layers=True)\n", "\n", "temperature = dh.add_array(\"temperature\")\n", "dh.fill(\"temperature\", parameters.tmp_ref, ghost_layers=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parameter definition\n", "\n", "The next step is to calculate all parameters which are needed for the simulation. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "one = sp.Number(1)\n", "two = sp.Number(2)\n", "k_l = parameters.symbolic_heat_conductivity_light\n", "k_h = parameters.symbolic_heat_conductivity_heavy\n", "\n", "# relaxation rate for the phase-field LBM step\n", "w_c = 1.0/(0.5 + (3.0 * parameters.symbolic_mobility))\n", "# relaxation rate for the hydrodynamic LBM step\n", "omega = parameters.omega(C)\n", "# relaxation rate for the thermal LBM solver\n", "conductivity = ((one - C.center) / two) * k_l + ((one + C.center) / two) * k_h\n", "w_t = one/(sp.Rational(1, 2) + (sp.Number(3) * conductivity))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# density for the whole domain\n", "rho_L = parameters.symbolic_density_light\n", "rho_H = parameters.symbolic_density_heavy\n", "density = rho_L + C.center * (rho_H - rho_L)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definition of the lattice Boltzmann methods" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Central-Moment-Based Method\n", " Stencil: D2Q9Zero-Centered Storage: ✗Force Model: Guo
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Continuous Hydrodynamic Maxwellian Equilibrium\n", " \n", " $f (\\rho, \\left( u_{0}, \\ u_{1}\\right), \\left( v_{0}, \\ v_{1}\\right)) \n", " = \\frac{3 \\rho e^{- \\frac{3 \\left(- u_{0} + v_{0}\\right)^{2}}{2} - \\frac{3 \\left(- u_{1} + v_{1}\\right)^{2}}{2}}}{2 \\pi}$\n", "
Compressible: ✓Deviation Only: ✗Order: 2
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "
Relaxation Info
Central MomentEq. Value Relaxation Rate
$1$$\\rho$$\\frac{1.0}{3.0 M_{m} + 0.5}$
$x$$0$$\\frac{1.0}{3.0 M_{m} + 0.5}$
$y$$0$$\\frac{1.0}{3.0 M_{m} + 0.5}$
$x y$$0$$\\frac{1.0}{3.0 M_{m} + 0.5}$
$x^{2} - y^{2}$$0$$\\frac{1.0}{3.0 M_{m} + 0.5}$
$x^{2} + y^{2}$$\\frac{2 \\rho}{3}$$\\frac{1.0}{3.0 M_{m} + 0.5}$
$x^{2} y$$0$$\\frac{1.0}{3.0 M_{m} + 0.5}$
$x y^{2}$$0$$\\frac{1.0}{3.0 M_{m} + 0.5}$
$x^{2} y^{2}$$\\frac{\\rho}{9}$$\\frac{1.0}{3.0 M_{m} + 0.5}$
" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "config_phase = LBMConfig(stencil=stencil_phase, method=Method.CENTRAL_MOMENT,\n", " compressible=True, zero_centered=False,\n", " relaxation_rates=[w_c, ] * stencil_phase.Q,\n", " force=sp.symbols(f\"F_:{stencil_phase.D}\"),\n", " output={'density': C_tmp}, \n", " velocity_input=u)\n", "\n", "method_phase = create_lb_method(config_phase)\n", "method_phase" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Central-Moment-Based Method\n", " Stencil: D2Q9Zero-Centered Storage: ✓Force Model: Guo
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Continuous Hydrodynamic Maxwellian Equilibrium\n", " \n", " $f (\\rho, \\left( u_{0}, \\ u_{1}\\right), \\left( v_{0}, \\ v_{1}\\right)) \n", " = \\frac{3 \\delta_{\\rho} e^{- \\frac{3 v_{0}^{2}}{2} - \\frac{3 v_{1}^{2}}{2}}}{2 \\pi} + \\frac{3 e^{- \\frac{3 \\left(- u_{0} + v_{0}\\right)^{2}}{2} - \\frac{3 \\left(- u_{1} + v_{1}\\right)^{2}}{2}}}{2 \\pi}$\n", "
Compressible: ✗Deviation Only: ✗Order: 2
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "
Relaxation Info
Central MomentEq. Value Relaxation Rate
$1$$\\rho$$0.0$
$x$$- \\delta_{\\rho} u_{0}$$0.0$
$y$$- \\delta_{\\rho} u_{1}$$0.0$
$x y$$\\delta_{\\rho} u_{0} u_{1}$$\\frac{2}{2 {C}_{(0,0)} \\left(\\tau_{H} - \\tau_{L}\\right) + 2 \\tau_{L} + 1}$
$x^{2} - y^{2}$$\\delta_{\\rho} u_{0}^{2} - \\delta_{\\rho} u_{1}^{2}$$\\frac{2}{2 {C}_{(0,0)} \\left(\\tau_{H} - \\tau_{L}\\right) + 2 \\tau_{L} + 1}$
$x^{2} + y^{2}$$\\delta_{\\rho} u_{0}^{2} + \\delta_{\\rho} u_{1}^{2} + \\frac{2 \\rho}{3}$$\\frac{2}{2 {C}_{(0,0)} \\left(\\tau_{H} - \\tau_{L}\\right) + 2 \\tau_{L} + 1}$
$x^{2} y$$- \\frac{\\delta_{\\rho} u_{1}}{3}$$1$
$x y^{2}$$- \\frac{\\delta_{\\rho} u_{0}}{3}$$1$
$x^{2} y^{2}$$\\frac{\\delta_{\\rho} u_{0}^{2}}{3} + \\frac{\\delta_{\\rho} u_{1}^{2}}{3} + \\frac{\\rho}{9}$$1$
" ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "config_hydro = LBMConfig(stencil=stencil_hydro, method=Method.CENTRAL_MOMENT,\n", " compressible=False,\n", " force=sp.symbols(f\"F_:{stencil_hydro.D}\"),\n", " output={'velocity': u},\n", " relaxation_rates=[omega, omega, 1, 1])\n", "\n", "\n", "method_hydro = create_lb_method(config_hydro)\n", "method_hydro" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Central-Moment-Based Method\n", " Stencil: D2Q9Zero-Centered Storage: ✗Force Model: None
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Continuous Hydrodynamic Maxwellian Equilibrium\n", " \n", " $f (\\rho, \\left( u_{0}, \\ u_{1}\\right), \\left( v_{0}, \\ v_{1}\\right)) \n", " = \\frac{3 \\rho e^{- \\frac{3 \\left(- u_{0} + v_{0}\\right)^{2}}{2} - \\frac{3 \\left(- u_{1} + v_{1}\\right)^{2}}{2}}}{2 \\pi}$\n", "
Compressible: ✓Deviation Only: ✗Order: 2
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "
Relaxation Info
Central MomentEq. Value Relaxation Rate
$1$$\\rho$$\\frac{1}{3 \\kappa_{H} \\left(\\frac{{C}_{(0,0)}}{2} + \\frac{1}{2}\\right) + 3 \\kappa_{L} \\left(\\frac{1}{2} - \\frac{{C}_{(0,0)}}{2}\\right) + \\frac{1}{2}}$
$x$$0$$\\frac{1}{3 \\kappa_{H} \\left(\\frac{{C}_{(0,0)}}{2} + \\frac{1}{2}\\right) + 3 \\kappa_{L} \\left(\\frac{1}{2} - \\frac{{C}_{(0,0)}}{2}\\right) + \\frac{1}{2}}$
$y$$0$$\\frac{1}{3 \\kappa_{H} \\left(\\frac{{C}_{(0,0)}}{2} + \\frac{1}{2}\\right) + 3 \\kappa_{L} \\left(\\frac{1}{2} - \\frac{{C}_{(0,0)}}{2}\\right) + \\frac{1}{2}}$
$x y$$0$$\\frac{1}{3 \\kappa_{H} \\left(\\frac{{C}_{(0,0)}}{2} + \\frac{1}{2}\\right) + 3 \\kappa_{L} \\left(\\frac{1}{2} - \\frac{{C}_{(0,0)}}{2}\\right) + \\frac{1}{2}}$
$x^{2} - y^{2}$$0$$\\frac{1}{3 \\kappa_{H} \\left(\\frac{{C}_{(0,0)}}{2} + \\frac{1}{2}\\right) + 3 \\kappa_{L} \\left(\\frac{1}{2} - \\frac{{C}_{(0,0)}}{2}\\right) + \\frac{1}{2}}$
$x^{2} + y^{2}$$\\frac{2 \\rho}{3}$$1.0$
$x^{2} y$$0$$1.0$
$x y^{2}$$0$$1.0$
$x^{2} y^{2}$$\\frac{\\rho}{9}$$1.0$
" ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "config_thermal = LBMConfig(stencil=stencil_thermal, method=Method.CENTRAL_MOMENT,\n", " compressible=True, zero_centered=False, relaxation_rate=w_t,\n", " output={'density': temperature}, velocity_input=u)\n", "\n", "method_thermal = create_lb_method(lbm_config=config_thermal)\n", "method_thermal" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initialization" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "h_updates = initializer_kernel_phase_field_lb(method_phase, C, u, h, parameters)\n", "g_updates = initializer_kernel_hydro_lb(method_hydro, 1.0, u, g)\n", "f_updates = pdf_initialization_assignments(method_thermal, temperature, u, f)\n", "\n", "h_init = ps.create_kernel(h_updates, target=dh.default_target, cpu_openmp=True).compile()\n", "g_init = ps.create_kernel(g_updates, target=dh.default_target, cpu_openmp=True).compile()\n", "f_init = ps.create_kernel(f_updates, target=dh.default_target, cpu_openmp=True).compile()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Initialisation of the phase-field, as well as the temperature array" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# initialize the domain\n", "def Initialize_distributions():\n", " Nx = domain_size[0]\n", " Ny = domain_size[1]\n", " \n", " for block in dh.iterate(ghost_layers=True, inner_ghost_layers=False):\n", " x = np.zeros_like(block.midpoint_arrays[0])\n", " x[:, :] = block.midpoint_arrays[0] \n", " y = np.zeros_like(block.midpoint_arrays[1])\n", " y[:, :] = block.midpoint_arrays[1]\n", " \n", " tmp = np.sqrt((x - midpoint[0])**2 + (y - midpoint[1])**2)\n", " init_values = 0.5 - 0.5 * np.tanh(2.0 * (tmp - Radius)/ parameters.interface_thickness)\n", " block[\"C\"][:, :] = init_values\n", " block[\"C_tmp\"][:, :] = init_values\n", " \n", " if gpu:\n", " dh.all_to_gpu() \n", " \n", " dh.run_kernel(h_init, **parameters.symbolic_to_numeric_map)\n", " dh.run_kernel(g_init)\n", " dh.run_kernel(f_init)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "force_h = force_h = interface_tracking_force(C, stencil_phase, parameters)\n", "hydro_force = hydrodynamic_force(C, method_hydro, parameters, body_force=[0, 0, 0],\n", " temperature_field=temperature)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Heat source acting on the temperature field" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "counters = [LoopOverCoordinate.get_loop_counter_symbol(i) for i in range(stencil_hydro.D)]\n", "\n", "xs = 181\n", "ys = 21\n", "ws = 6\n", "ds = 8\n", "Qs = 0.2\n", "\n", "nominator = ((counters[0] - xs)**2 + (counters[1] - ys)**2)\n", "term = Qs * sp.exp(-2 * nominator / (ws**2) )\n", "heat_soure = sp.Piecewise((term, nominator <= ds**2), (0.0, True))\n", "\n", "weights = method_thermal.weights\n", "heat_terms = list()\n", "\n", "for i in range(len(stencil_thermal)):\n", " heat_terms.append(weights[i] * heat_soure)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definition of the LB update rules" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "lbm_optimisation = LBMOptimisation(symbolic_field=h, symbolic_temporary_field=h_tmp)\n", "allen_cahn_lb = create_lb_update_rule(lbm_config=config_phase,\n", " lbm_optimisation=lbm_optimisation)\n", "\n", "allen_cahn_lb = add_interface_tracking_force(allen_cahn_lb, force_h)\n", "\n", "ast_allen_cahn_lb = ps.create_kernel(allen_cahn_lb, target=dh.default_target, cpu_openmp=True)\n", "kernel_allen_cahn_lb = ast_allen_cahn_lb.compile()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "force_Assignments = hydrodynamic_force_assignments(u, C, method_hydro, parameters,\n", " body_force=[0, 0, 0], temperature_field=temperature)\n", "\n", "lbm_optimisation = LBMOptimisation(symbolic_field=g, symbolic_temporary_field=g_tmp)\n", "hydro_lb_update_rule = create_lb_update_rule(lbm_config=config_hydro,\n", " lbm_optimisation=lbm_optimisation)\n", "hydro_lb_update_rule = add_hydrodynamic_force(hydro_lb_update_rule, force_Assignments, C, g,\n", " parameters, config_hydro) \n", "\n", "ast_hydro_lb = ps.create_kernel(hydro_lb_update_rule, target=dh.default_target, cpu_openmp=True)\n", "kernel_hydro_lb = ast_hydro_lb.compile()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "lbm_optimisation = LBMOptimisation(symbolic_field=f, symbolic_temporary_field=f_tmp)\n", "\n", "thermal_lb_update_rule = create_lb_update_rule(lbm_config=config_thermal,\n", " lbm_optimisation=lbm_optimisation)\n", "\n", "main_assignments = thermal_lb_update_rule.main_assignments\n", "\n", "for i in range(len(stencil_thermal)):\n", " main_assignments[i] = ps.Assignment(main_assignments[i].lhs, main_assignments[i].rhs + heat_terms[i])\n", "\n", "ast_thermal_lb = ps.create_kernel(thermal_lb_update_rule, target=dh.default_target, cpu_openmp=True)\n", "kernel_thermal_lb = ast_thermal_lb.compile()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Boundary Conditions" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "periodic_BC_C = dh.synchronization_function(C.name, target=dh.default_target, optimization={\"openmp\": True})\n", "# periodic_BC_T = dh.synchronization_function(temperature.name, target=dh.default_target, optimization={\"openmp\": True})\n", "\n", "periodic_BC_g = LBMPeriodicityHandling(stencil=stencil_hydro, data_handling=dh, pdf_field_name=g.name)\n", "periodic_BC_h = LBMPeriodicityHandling(stencil=stencil_phase, data_handling=dh, pdf_field_name=h.name)\n", "\n", "# No slip boundary for the phasefield lbm\n", "bh_allen_cahn = LatticeBoltzmannBoundaryHandling(method_phase, dh, h.name,\n", " target=dh.default_target, name='boundary_handling_h')\n", "\n", "# No slip boundary for the velocityfield lbm\n", "bh_hydro = LatticeBoltzmannBoundaryHandling(method_hydro, dh, \"g\",\n", " target=dh.default_target, name='boundary_handling_g')\n", "\n", "bh_thermal = LatticeBoltzmannBoundaryHandling(method_thermal, dh, f.name,\n", " target=dh.default_target, name='boundary_handling_f')\n", "\n", "contact_angle = BoundaryHandling(dh, C.name, LBStencil(Stencil.D2Q9), target=dh.default_target)\n", "contact = ContactAngle(contact_angle_degree, parameters.interface_thickness)\n", "\n", "wall = NoSlip()\n", "\n", "contact_angle.set_boundary(contact, make_slice[:, 0])\n", "contact_angle.set_boundary(contact, make_slice[:, -1])\n", "\n", "bh_allen_cahn.set_boundary(wall, make_slice[:, 0])\n", "bh_allen_cahn.set_boundary(wall, make_slice[:, -1])\n", "\n", "bh_hydro.set_boundary(wall, make_slice[:, 0])\n", "bh_hydro.set_boundary(UBB((u_max, 0)), make_slice[:, -1])\n", "\n", "bh_thermal.set_boundary(DiffusionDirichlet(T_c, u), make_slice[:, 0])\n", "bh_thermal.set_boundary(DiffusionDirichlet(T_c, u), make_slice[:, -1])\n", "bh_thermal.set_boundary(NeumannByCopy(), make_slice[0, :])\n", "bh_thermal.set_boundary(NeumannByCopy(), make_slice[-1, :])\n", "\n", "bh_allen_cahn.prepare()\n", "bh_hydro.prepare()\n", "bh_thermal.prepare()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Full timestep" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def Temp_update():\n", " # periodic_BC_f()\n", " bh_thermal()\n", " dh.run_kernel(kernel_thermal_lb, **parameters.symbolic_to_numeric_map)\n", " dh.swap(f.name, f_tmp.name)\n", " # periodic_BC_T()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "# definition of the timestep for the immiscible fluids model\n", "def timeloop():\n", " # Solve the interface tracking LB step with boundary conditions\n", " periodic_BC_h()\n", " bh_allen_cahn() \n", " dh.run_kernel(kernel_allen_cahn_lb, **parameters.symbolic_to_numeric_map)\n", " # Solve the hydro LB step with boundary conditions\n", " periodic_BC_g()\n", " bh_hydro()\n", " dh.run_kernel(kernel_hydro_lb, **parameters.symbolic_to_numeric_map)\n", " \n", " dh.swap(C.name, C_tmp.name)\n", " # periodic BC of the phase-field\n", " periodic_BC_C()\n", " contact_angle()\n", " \n", " # Update the temperature field\n", " Temp_update()\n", " \n", " # field swaps\n", " dh.swap(\"h\", \"h_tmp\")\n", " dh.swap(\"g\", \"g_tmp\")" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Initialize_distributions()\n", "\n", "if 'is_test_run' not in globals():\n", " # initial temperature field is gathered by running the thermal step 1s of physical time\n", " for i in range(0, parameters.reference_time):\n", " Temp_update() \n", "\n", " def run():\n", " dh.to_cpu(C.name)\n", " phase_field = dh.gather_array(C.name)\n", " for i in range (int(parameters.reference_time / 25)):\n", " timeloop()\n", " return phase_field\n", "\n", " animation = plt.scalar_field_animation(run, frames=int(25 * simulation_time), rescale=True)\n", " set_display_mode('video')\n", " res = display_animation(animation)\n", "else:\n", " timeloop(10)\n", " res = None\n", "res" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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51GpVOouK1eunPr48PBwrF+/PhYuXBjz58+PdevWxa5du2Zxx0BExHe/+91485vfHP39/VGpVOIrX/lK3ceLoog77rgjlixZEq2trbFmzZp4/PHH69Y899xzcf3110dHR0d0dXXFTTfdFAcOHDiJjwLy9lLH8Tve8Y7kd/Q111xTt8ZxDLNn48aNcdlll0V7e3v09PTEtddeG9u2batbM5PX0tu3b483velN0dbWFj09PfHe9743xsfHT+ZDgazN5Fh+/etfn/xO/qM/+qO6NbN1LM/JcPDLX/5ybNiwIe688874wQ9+EBdffHGsXbs2du/ePdtbA17AK1/5ynj66aenLv/+7/8+9bHbbrstvva1r8UDDzwQmzdvjp07d8Z11103i7sFIiIOHjwYF198cdxzzz2lH7/rrrviE5/4RNx7773xyCOPxLx582Lt2rUxPDw8teb666+Pn/70p/HQQw/F17/+9fjud78b73znO0/WQ4DsvdRxHBFxzTXX1P2O/uIXv1j3cccxzJ7NmzfH+vXr4+GHH46HHnooxsbG4uqrr46DBw9OrXmp19ITExPxpje9KUZHR+N73/tefP7zn4/Pfe5zcccdd8zGQ4IszeRYjoi4+eab634n33XXXVMfm9VjuZiDLr/88mL9+vVT1ycmJor+/v5i48aNs7gr4IXceeedxcUXX1z6sX379hW1Wq144IEHpmY/+9nPiogotmzZcpJ2CLyUiCgefPDBqeuTk5NFX19f8dd//ddTs3379hXNzc3FF7/4xaIoiuKxxx4rIqL4/ve/P7XmG9/4RlGpVIqnnnrqpO0d+LXpx3FRFMUNN9xQvOUtb3nB2ziOYW7ZvXt3ERHF5s2bi6KY2Wvpf/3Xfy2q1WoxMDAwteZTn/pU0dHRUYyMjJzcBwAURZEey0VRFK973euK97znPS94m9k8lufcOwdHR0dj69atsWbNmqlZtVqNNWvWxJYtW2ZxZ8CLefzxx6O/vz/OPPPMuP7662P79u0REbF169YYGxurO6ZXrlwZy5Ytc0zDHPbkk0/GwMBA3bHb2dkZq1atmjp2t2zZEl1dXXHppZdOrVmzZk1Uq9V45JFHTvqegXLf+c53oqenJ84999x417veFc8+++zUxxzHMLcMDg5GRER3d3dEzOy19JYtW+LCCy+M3t7eqTVr166NoaGh+OlPf3oSdw88b/qx/LwvfOELsWjRorjgggvi9ttvj0OHDk19bDaP5cYTeu9HYc+ePTExMVH3xYiI6O3tjf/6r/+apV0BL2bVqlXxuc99Ls4999x4+umn48Mf/nD81m/9VvzkJz+JgYGBaGpqiq6urrrb9Pb2xsDAwOxsGHhJzx+fZb+Pn//YwMBA9PT01H28sbExuru7Hd8wR1xzzTVx3XXXxYoVK+KJJ56ID3zgA/HGN74xtmzZEg0NDY5jmEMmJyfj1ltvjSuuuCIuuOCCiIgZvZYeGBgo/X39/MeAk6vsWI6I+P3f//1Yvnx59Pf3x49+9KN4//vfH9u2bYt/+qd/iojZPZbnXDgInHre+MY3Tv33RRddFKtWrYrly5fHP/7jP0Zra+ss7gwA8va2t71t6r8vvPDCuOiii+Kss86K73znO3HVVVfN4s6A6davXx8/+clP6s7dDZx6XuhY/t/n873wwgtjyZIlcdVVV8UTTzwRZ5111sneZp05978VL1q0KBoaGpL2pV27dkVfX98s7Qo4El1dXfGKV7wifvGLX0RfX1+Mjo7Gvn376tY4pmFue/74fLHfx319fUlZ2Pj4eDz33HOOb5ijzjzzzFi0aFH84he/iAjHMcwVt9xyS3z961+Pb3/723H66adPzWfyWrqvr6/09/XzHwNOnhc6lsusWrUqIqLud/JsHctzLhxsamqKSy65JDZt2jQ1m5ycjE2bNsXq1atncWfATB04cCCeeOKJWLJkSVxyySVRq9Xqjult27bF9u3bHdMwh61YsSL6+vrqjt2hoaF45JFHpo7d1atXx759+2Lr1q1Ta771rW/F5OTk1IsdYG75n//5n3j22WdjyZIlEeE4htlWFEXccsst8eCDD8a3vvWtWLFiRd3HZ/JaevXq1fHjH/+4Luh/6KGHoqOjI84///yT80Agcy91LJf54Q9/GBFR9zt5to7lOfm/FW/YsCFuuOGGuPTSS+Pyyy+Pu+++Ow4ePBg33njjbG8NKPFnf/Zn8eY3vzmWL18eO3fujDvvvDMaGhri7W9/e3R2dsZNN90UGzZsiO7u7ujo6Ih3v/vdsXr16njNa14z21uHrB04cGDqL5URvy4h+eEPfxjd3d2xbNmyuPXWW+MjH/lInHPOObFixYr40Ic+FP39/XHttddGRMR5550X11xzTdx8881x7733xtjYWNxyyy3xtre9Lfr7+2fpUUFeXuw47u7ujg9/+MOxbt266OvriyeeeCLe9773xdlnnx1r166NCMcxzLb169fH/fffH1/96lejvb196rxinZ2d0draOqPX0ldffXWcf/758Yd/+Idx1113xcDAQHzwgx+M9evXR3Nz82w+PMjGSx3LTzzxRNx///3x27/927Fw4cL40Y9+FLfddltceeWVcdFFF0XELB/LJ7QL+Rj87d/+bbFs2bKiqampuPzyy4uHH354trcEvIC3vvWtxZIlS4qmpqbitNNOK9761rcWv/jFL6Y+fvjw4eKP//iPiwULFhRtbW3F7/zO7xRPP/30LO4YKIqi+Pa3v11ERHK54YYbiqIoisnJyeJDH/pQ0dvbWzQ3NxdXXXVVsW3btrr7ePbZZ4u3v/3txfz584uOjo7ixhtvLPbv3z8Ljwby9GLH8aFDh4qrr766WLx4cVGr1Yrly5cXN998czEwMFB3H45jmD1lx29EFPfdd9/Umpm8lv7Vr35VvPGNbyxaW1uLRYsWFX/6p39ajI2NneRHA/l6qWN5+/btxZVXXll0d3cXzc3Nxdlnn128973vLQYHB+vuZ7aO5cr/exAAAAAAQGbm3DkHAQAAAICTQzgIAAAAAJkSDgIAAABApoSDAAAAAJAp4SAAAAAAZEo4CAAAAACZEg4CAAAAQKaEgwAAAACQKeEgAAAAAGRKOAgAAAAAmRIOAgAAAECm/i9dT2yDCgPbRwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if 'is_test_run' not in globals():\n", " if gpu:\n", " dh.all_to_cpu()\n", "\n", " plt.scalar_field(dh.gather_array(C.name))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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iTV/37vtyU6bb9l2vLPtwLZjnW17l7r970qes1PJfbprsjZAZSU5+MdXzutse3TbBd2+kuPcnpyP5VYAyensVpvmVdd33ynutb5BI+X9ikEgeWBIpf+sr/4nJN23/XlW7X+KAI7sPb8QkmOfKlgj+y5WGDNVPWeVMafpPxty1uEjCxI0UrUY37YBAAAAgE1ncRAAAAAARsriIAAAAACMlJqDALBoFrnuXlLbZdK3pty8tI9hkeef1cOZdT3Oat3AIe/TBb7ny3WVsutSqaWane9incPesjEr83+6Yb8xsyGzy16saVgdo2/dt9611qaQXYLlrA5hcuJ2Lp1a8/cLl5/qtNm91N12cVJfcO/Sjm7/k+6PjSea7r4rcXLN3x9f+nqnzflLJzrbzls+1dm2bWmlsy07H5NOjceBL9SA3Q1/fzdnbZM9Z9XaoX3rC6ay90619mvf2nDV/Qo1Dacas3rs6b4D1q2bdc3EBe5ffcGzW5BvXQAAAADAZrM4CAAAAAAjZXEQAAAAAEZqQ4uDd955Z7zkJS+Jiy66KC677LJ4/etfHw888MCaNk899VQcPnw4LrnkkrjwwgvjhhtuiKNHjw46aQAAAABgehsKJPnkJz8Zhw8fjpe85CVx+vTp+Kmf+ql49atfHV/4whfiggsuiIiI2267LX77t387PvShD8WePXvilltuiTe84Q3x6U9/eiYHAMA5ah5BDCymBQ6ryApcT6r3abt49dLAx5QVx26NMdX8y/PIAk46g/buPj2GdB59z3dxbpXwjup7LTumZFvaXaHdpOmOmc6+EoAQEU3SX3vfci344pjZMVQCFbLzE0lf5XCTdFvhuhetZnPraSlJpsieguXknlxO3rnbY7nbrtfM6rLz0bn/iuesHMBRDO9on96p+s/CvwrzyO/vs+8XEem7OuuvvW2q8J7iuy7Vvp2nCR9JZNegGwAz45CL9bTGnSpsI/uOVRhzKtUxewaQDB4+cg6EjVRsaHHwox/96Jq/v//974/LLrss7r///njFK14Rx44di1/+5V+OD3zgA/F93/d9ERHxvve9L5773OfGZz7zmXjZy1423MwBAAAAgKlM9Z+ojx07FhERe/fujYiI+++/P06dOhWHDh060+aaa66JK6+8Mu699960jxMnTsTx48fX/AEAAAAAZq/34uDq6mrceuut8fKXvzye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k2fanO279MrKSrzuda+LkydPxu///u/Hr/zKr8T73//+eMc73jGPQ4JRqjzLERE333zzms/kd7/73Wf+ba7PcrOAXvrSlzaHDx8+8/eVlZXmwIEDzZ133jnHWQHreec739m86EUvSv/tsccea7Zv39586EMfOrPtv//3/95ERHPvvfdu0gyBs4mI5sMf/vCZv6+urjb79+9v/uW//Jdntj322GPNzp07mw9+8INN0zTNF77whSYims997nNn2vzO7/xOM5lMmj/7sz/btLkDT2s/x03TNG9+85ubH/iBH1h3H88xLJavfOUrTUQ0n/zkJ5umqX2X/s//+T83S0tLzZEjR860ee9739vs3r27OXHixOYeANA0TfdZbpqm+Zt/8282P/IjP7LuPvN8lhfuNwdPnjwZ999/fxw6dOjMtqWlpTh06FDce++9c5wZ8Ey++MUvxoEDB+Lbv/3b48Ybb4yHHnooIiLuv//+OHXq1Jpn+pprrokrr7zSMw0L7E//9E/jyJEja57dPXv2xHXXXXfm2b333nvj4osvjhe/+MVn2hw6dCiWlpbivvvu2/Q5A7lPfOITcdlll8V3fdd3xQ//8A/Ho48+eubfPMewWI4dOxYREXv37o2I2nfpe++9N17wghfEvn37zrS5/vrr4/jx4/Enf/Inmzh74Jvaz/I3/eqv/mpceuml8fznPz/uuOOO+PrXv37m3+b5LG+bae89fPWrX42VlZU1JyMiYt++ffE//sf/mNOsgGdy3XXXxfvf//74ru/6rvjyl78c73rXu+Jv/I2/EZ///OfjyJEjsWPHjrj44ovX7LNv3744cuTIfCYMnNU3n8/s8/ib/3bkyJG47LLL1vz7tm3bYu/evZ5vWBCvec1r4g1veENcffXV8eCDD8ZP/dRPxWtf+9q49957Y3l52XMMC2R1dTVuvfXWePnLXx7Pf/7zIyJK36WPHDmSfl5/89+AzZU9yxERf+/v/b246qqr4sCBA/FHf/RH8ZM/+ZPxwAMPxG/8xm9ExHyf5YVbHAS2nte+9rVn/vcLX/jCuO666+Kqq66Kf//v/32cd955c5wZAIzbm970pjP/+wUveEG88IUvjO/4ju+IT3ziE/GqV71qjjMD2g4fPhyf//zn19TuBrae9Z7lv1zP9wUveEFcfvnl8apXvSoefPDB+I7v+I7NnuYaC/d/K7700ktjeXm5k7509OjR2L9//5xmBWzExRdfHH/lr/yV+NKXvhT79++PkydPxmOPPbamjWcaFts3n89n+jzev39/Jyzs9OnT8bWvfc3zDQvq27/92+PSSy+NL33pSxHhOYZFccstt8RHPvKR+L3f+7149rOffWZ75bv0/v3708/rb/4bsHnWe5Yz1113XUTEms/keT3LC7c4uGPHjrj22mvjnnvuObNtdXU17rnnnjh48OAcZwZUPfHEE/Hggw/G5ZdfHtdee21s3759zTP9wAMPxEMPPeSZhgV29dVXx/79+9c8u8ePH4/77rvvzLN78ODBeOyxx+L+++8/0+bjH/94rK6unvmyAyyW//N//k88+uijcfnll0eE5xjmrWmauOWWW+LDH/5wfPzjH4+rr756zb9XvksfPHgw/viP/3jNQv/HPvax2L17dzzvec/bnAOBkTvbs5z5wz/8w4iINZ/J83qWF/L/Vnz77bfHm9/85njxi18cL33pS+M973lPPPnkk3HTTTfNe2pA4sd+7Mfi+7//++Oqq66KRx55JN75znfG8vJy/OAP/mDs2bMn3vKWt8Ttt98ee/fujd27d8fb3va2OHjwYLzsZS+b99Rh1J544okz/6Uy4ukQkj/8wz+MvXv3xpVXXhm33npr/PRP/3Q85znPiauvvjre/va3x4EDB+L1r399REQ897nPjde85jVx8803x9133x2nTp2KW265Jd70pjfFgQMH5nRUMC7P9Bzv3bs33vWud8UNN9wQ+/fvjwcffDB+4id+Ir7zO78zrr/++ojwHMO8HT58OD7wgQ/Eb/3Wb8VFF110pq7Ynj174rzzzit9l371q18dz3ve8+If/IN/EO9+97vjyJEj8U//6T+Nw4cPx86dO+d5eDAaZ3uWH3zwwfjABz4Qf+tv/a245JJL4o/+6I/itttui1e84hXxwhe+MCLm/CzPNAt5Cv/6X//r5sorr2x27NjRvPSlL20+85nPzHtKwDre+MY3NpdffnmzY8eO5lu/9VubN77xjc2XvvSlM//+jW98o/lH/+gfNc961rOa888/v/nbf/tvN1/+8pfnOGOgaZrm937v95qI6Px585vf3DRN06yurjZvf/vbm3379jU7d+5sXvWqVzUPPPDAmj4effTR5gd/8AebCy+8sNm9e3dz0003NY8//vgcjgbG6Zme469//evNq1/96uZbvuVbmu3btzdXXXVVc/PNNzdHjhxZ04fnGOYne34jonnf+953pk3lu/T//t//u3nta1/bnHfeec2ll17a/OiP/mhz6tSpTT4aGK+zPcsPPfRQ84pXvKLZu3dvs3PnzuY7v/M7mx//8R9vjh07tqafeT3Lk///IAAAAACAkVm4moMAAAAAwOawOAgAAAAAI2VxEAAAAABGyuIgAAAAAIyUxUEAAAAAGCmLgwAAAAAwUhYHAQAAAGCkLA4CAAAAwEhZHAQAAACAkbI4CAAAAAAjZXEQAAAAAEbq/wPiW3NKXvK9FQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if 'is_test_run' not in globals():\n", " if gpu:\n", " dh.all_to_cpu()\n", "\n", " plt.scalar_field(dh.gather_array(temperature.name))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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49Of/nQ8/vjj8aY3vWmKswUiIs6ePRsveclL4r777kv//b3vfW/8/M//fNx///3x0EMPxaWXXho33XRTnDt3br3PLbfcEn/4h38Yn/jEJ+JjH/tYfOYzn4m3v/3tO/USoPU2u44jIl73utcNfUb/6q/+6tC/u45hej796U/HsWPH4rOf/Wx84hOfiNXV1Xjta18bZ8+eXe+z2bN0v9+PN7zhDbGyshK/+7u/Gx/4wAfi/e9/f7zrXe+axkuCViq5liMibrvttqHP5Pe+973r/zbVa7maQa94xSuqY8eOrf+93+9Xhw4dqu65554pzgrYyLvf/e7qJS95SfpvTzzxRLW4uFh9+MMfXm/7oz/6oyoiquPHj+/QDIHNRET1kY98ZP3vg8GgOnjwYPWv//W/Xm974oknquXl5epXf/VXq6qqqi996UtVRFSf//zn1/v85m/+ZtXpdKo//dM/3bG5AxfUr+Oqqqq3vvWt1Q/+4A9uuI3rGGbL1772tSoiqk9/+tNVVZU9S//3//7fq263W508eXK9z/ve975q79691fnz53f2BQBVVTWv5aqqqr/1t/5W9aM/+qMbbjPNa3nmvjm4srISDz/8cBw9enS9rdvtxtGjR+P48eNTnBnwbL785S/HoUOH4ju+4zvilltuiUcffTQiIh5++OFYXV0duqavv/76uOaaa1zTMMP++I//OE6ePDl07e7bty9uvPHG9Wv3+PHjcfnll8fLXvay9T5Hjx6NbrcbDz300I7PGch96lOfiquuuiq++7u/O37kR34kvvGNb6z/m+sYZsvp06cjImL//v0RUfYsffz48XjRi14UBw4cWO9z0003xZkzZ+IP//APd3D2wLfUr+Vv+ZVf+ZW48sor44UvfGHcfffd8fTTT6//2zSv5YVtHX0EX//616Pf7w8djIiIAwcOxP/6X/9rSrMCns2NN94Y73//++O7v/u746tf/Wq85z3vib/5N/9mfPGLX4yTJ0/G0tJSXH755UPbHDhwIE6ePDmdCQOb+tb1mX0ef+vfTp48GVddddXQvy8sLMT+/ftd3zAjXve618Wb3vSmuO666+KRRx6Jn/zJn4zXv/71cfz48ej1eq5jmCGDwSDuuOOOeNWrXhUvfOELIyKKnqVPnjyZfl5/69+AnZVdyxERf//v//249tpr49ChQ/H7v//78RM/8RNx4sSJ+C//5b9ExHSv5ZlbHATmz+tf//r1/37xi18cN954Y1x77bXxn/7Tf4rdu3dPcWYA0G5vectb1v/7RS96Ubz4xS+O7/zO74xPfepT8ZrXvGaKMwPqjh07Fl/84heHancD82eja/kv1/N90YteFFdffXW85jWviUceeSS+8zu/c6enOWTm/rfiK6+8Mnq9XiN96dSpU3Hw4MEpzQrYissvvzz+6l/9q/GVr3wlDh48GCsrK/HEE08M9XFNw2z71vX5bJ/HBw8ebISFra2txTe/+U3XN8yo7/iO74grr7wyvvKVr0SE6xhmxe233x4f+9jH4rd/+7fjuc997np7ybP0wYMH08/rb/0bsHM2upYzN954Y0TE0GfytK7lmVscXFpaihtuuCEefPDB9bbBYBAPPvhgHDlyZIozA0o99dRT8cgjj8TVV18dN9xwQywuLg5d0ydOnIhHH33UNQ0z7LrrrouDBw8OXbtnzpyJhx56aP3aPXLkSDzxxBPx8MMPr/f55Cc/GYPBYP1hB5gtf/InfxLf+MY34uqrr44I1zFMW1VVcfvtt8dHPvKR+OQnPxnXXXfd0L+XPEsfOXIk/uAP/mBoof8Tn/hE7N27N17wghfszAuBltvsWs584QtfiIgY+kye1rU8k/9b8V133RVvfetb42Uve1m84hWviHvvvTfOnj0bt95667SnBiT+2T/7Z/EDP/ADce2118bjjz8e7373u6PX68UP/dAPxb59++Jtb3tb3HXXXbF///7Yu3dvvOMd74gjR47EK1/5ymlPHVrtqaeeWv9NZcSFEJIvfOELsX///rjmmmvijjvuiJ/+6Z+O5z3veXHdddfFO9/5zjh06FC88Y1vjIiI5z//+fG6170ubrvttrj//vtjdXU1br/99njLW94Shw4dmtKrgnZ5tut4//798Z73vCduvvnmOHjwYDzyyCPx4z/+4/Fd3/VdcdNNN0WE6xim7dixY/HBD34wPvrRj8aePXvW64rt27cvdu/eXfQs/drXvjZe8IIXxD/8h/8w3vve98bJkyfjp37qp+LYsWOxvLw8zZcHrbHZtfzII4/EBz/4wfjbf/tvxxVXXBG///u/H3feeWe8+tWvjhe/+MURMeVreVuzkMfwb//tv62uueaaamlpqXrFK15Rffazn532lIANvPnNb66uvvrqamlpqforf+WvVG9+85urr3zlK+v//swzz1T/+B//4+o5z3lOdckll1R/5+/8neqrX/3qFGcMVFVV/fZv/3YVEY0/b33rW6uqqqrBYFC9853vrA4cOFAtLy9Xr3nNa6oTJ04MjfGNb3yj+qEf+qHqsssuq/bu3Vvdeuut1ZNPPjmFVwPt9GzX8dNPP1299rWvrb7t276tWlxcrK699trqtttuq06ePDk0husYpie7fiOieuCBB9b7lDxL/9//+3+r17/+9dXu3burK6+8svqn//SfVqurqzv8aqC9NruWH3300erVr351tX///mp5ebn6ru/6rurHfuzHqtOnTw+NM61rufMXLwIAAAAAaJmZqzkIAAAAAOwMi4MAAAAA0FIWBwEAAACgpSwOAgAAAEBLWRwEAAAAgJayOAgAAAAALWVxEAAAAABayuIgAAAAALSUxUEAAAAAaCmLgwAAAADQUhYHAQAAAKCl/h+vrhzI4/0L2gAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if 'is_test_run' not in globals():\n", " if gpu:\n", " dh.all_to_cpu()\n", "\n", " plt.vector_field_magnitude(dh.gather_array(u.name))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.4" } }, "nbformat": 4, "nbformat_minor": 4 }