{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pytest\n", "pytest.importorskip('cupy')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from pystencils.session import *\n", "sp.init_printing()\n", "frac = sp.Rational" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Phase-field simulation of dentritic solidification in 3D\n", "\n", "This notebook tests the model presented in the dentritic growth tutorial in 3D. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "target = ps.Target.GPU\n", "gpu = target == ps.Target.GPU\n", "domain_size = (25, 25, 25) if 'is_test_run' in globals() else (300, 300, 300)\n", "\n", "dh = ps.create_data_handling(domain_size=domain_size, periodicity=True, default_target=target)\n", "φ_field = dh.add_array('phi', latex_name='φ')\n", "φ_field_tmp = dh.add_array('phi_tmp', latex_name='φ_tmp')\n", "φ_delta_field = dh.add_array('phidelta', latex_name='φ_D')\n", "t_field = dh.add_array('T')\n", "t_field_tmp = dh.add_array('T_tmp')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "ε, m, δ, j, θzero, α, γ, Teq, κ, τ = sp.symbols(\"ε m δ j θ_0 α γ T_eq κ τ\")\n", "εb = sp.Symbol(\"\\\\bar{\\\\epsilon}\")\n", "discretize = ps.fd.Discretization2ndOrder(dx=0.03, dt=1e-5)\n", "\n", "φ = φ_field.center\n", "T = t_field.center\n", "d = ps.fd.Diff\n", "\n", "def f(φ, m):\n", " return φ**4 / 4 - (frac(1, 2) - m/3) * φ**3 + (frac(1,4)-m/2)*φ**2\n", "\n", "\n", "\n", "bulk_free_energy_density = f(φ, m)\n", "interface_free_energy_density = ε ** 2 / 2 * (d(φ, 0) ** 2 + d(φ, 1) ** 2 + d(φ, 2) ** 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here comes the major change, that has to be made for the 3D model: $\\epsilon$ depends on the interface normal, which can not be computed simply as atan() as in the 2D case" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\bar{\\epsilon} \\left(δ \\left(\\frac{{\\partial_{0} {φ}_{(0,0,0)}}^{4}}{\\left({\\partial_{0} {φ}_{(0,0,0)}}^{2} + {\\partial_{1} {φ}_{(0,0,0)}}^{2} + {\\partial_{2} {φ}_{(0,0,0)}}^{2}\\right)^{2}} + \\frac{{\\partial_{1} {φ}_{(0,0,0)}}^{4}}{\\left({\\partial_{0} {φ}_{(0,0,0)}}^{2} + {\\partial_{1} {φ}_{(0,0,0)}}^{2} + {\\partial_{2} {φ}_{(0,0,0)}}^{2}\\right)^{2}} + \\frac{{\\partial_{2} {φ}_{(0,0,0)}}^{4}}{\\left({\\partial_{0} {φ}_{(0,0,0)}}^{2} + {\\partial_{1} {φ}_{(0,0,0)}}^{2} + {\\partial_{2} {φ}_{(0,0,0)}}^{2}\\right)^{2}}\\right) + 1\\right)$" ], "text/plain": [ " ⎛ ⎛ 4 \n", " ⎜ ⎜ D(φ[0,0,0]) \n", "\\bar{\\epsilon}⋅⎜δ⋅⎜───────────────────────────────────────────── + ───────────\n", " ⎜ ⎜ 2 \n", " ⎜ ⎜⎛ 2 2 2⎞ ⎛ \n", " ⎝ ⎝⎝D(φ[0,0,0]) + D(φ[0,0,0]) + D(φ[0,0,0]) ⎠ ⎝D(φ[0,0,0]\n", "\n", " 4 4 \n", " D(φ[0,0,0]) D(φ[0,0,0]) \n", "────────────────────────────────── + ─────────────────────────────────────────\n", " 2 \n", " 2 2 2⎞ ⎛ 2 2 \n", ") + D(φ[0,0,0]) + D(φ[0,0,0]) ⎠ ⎝D(φ[0,0,0]) + D(φ[0,0,0]) + D(φ[0,0,0]\n", "\n", " ⎞ ⎞\n", " ⎟ ⎟\n", "────⎟ + 1⎟\n", " 2⎟ ⎟\n", " 2⎞ ⎟ ⎟\n", ") ⎠ ⎠ ⎠" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n = sp.Matrix([d(φ, i) for i in range(3)])\n", "nLen = sp.sqrt(sum(n_i**2 for n_i in n))\n", "n = n / nLen\n", "nVal = sum(n_i**4 for n_i in n)\n", "σ = δ * nVal\n", "\n", "εVal = εb * (1 + σ)\n", "εVal" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def m_func(temperature):\n", " return (α / sp.pi) * sp.atan(γ * (Teq - temperature))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "substitutions = {m: m_func(T),\n", " ε: εVal}\n", "\n", "fe_i = interface_free_energy_density.subs(substitutions)\n", "fe_b = bulk_free_energy_density.subs(substitutions)\n", "\n", "μ_if = ps.fd.expand_diff_full(ps.fd.functional_derivative(fe_i, φ), functions=[φ])\n", "μ_b = ps.fd.expand_diff_full(ps.fd.functional_derivative(fe_b, φ), functions=[φ])" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "dF_dφ = μ_b + sp.Piecewise((μ_if, nLen**2 > 1e-10), (0, True))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/latex": [ "$\\displaystyle \\left\\{ \\pi : 3.14159265358979, \\ T_{eq} : 1.0, \\ \\bar{\\epsilon} : 0.01, \\ j : 6, \\ α : 0.9, \\ γ : 10, \\ δ : 0.3, \\ θ_{0} : 0.2, \\ κ : 1.8, \\ τ : 0.0003\\right\\}$" ], "text/plain": [ "{π: 3.14159265358979, T_eq: 1.0, \\bar{\\epsilon}: 0.01, j: 6, α: 0.9, γ: 10, δ:\n", " 0.3, θ₀: 0.2, κ: 1.8, τ: 0.0003}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "parameters = {\n", " τ: 0.0003,\n", " κ: 1.8,\n", " εb: 0.01,\n", " δ: 0.3,\n", " γ: 10,\n", " j: 6,\n", " α: 0.9,\n", " Teq: 1.0,\n", " θzero: 0.2,\n", " sp.pi: sp.pi.evalf()\n", "}\n", "parameters" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "dφ_dt = - dF_dφ / τ\n", "assignments = [\n", " ps.Assignment(φ_delta_field.center, discretize(dφ_dt.subs(parameters))),\n", "]\n", "φEqs = ps.simp.sympy_cse_on_assignment_list(assignments)\n", "φEqs.append(ps.Assignment(φ_field_tmp.center, discretize(ps.fd.transient(φ) - φ_delta_field.center)))\n", "\n", "\n", "temperatureEvolution = -ps.fd.transient(T) + ps.fd.diffusion(T, 1) + κ * φ_delta_field.center\n", "temperatureEqs = [\n", " ps.Assignment(t_field_tmp.center, discretize(temperatureEvolution.subs(parameters)))\n", "]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "φ_kernel = ps.create_kernel(φEqs, cpu_openmp=4, target=target).compile()\n", "temperatureKernel = ps.create_kernel(temperatureEqs, cpu_openmp=4, target=target).compile()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def time_loop(steps):\n", " φ_sync = dh.synchronization_function(['phi'], target=target)\n", " temperature_sync = dh.synchronization_function(['T'], target=target)\n", " dh.all_to_gpu()\n", " for t in range(steps):\n", " φ_sync()\n", " dh.run_kernel(φ_kernel)\n", " temperature_sync()\n", " dh.run_kernel(temperatureKernel)\n", " dh.swap(φ_field.name, φ_field_tmp.name)\n", " dh.swap(t_field.name, t_field_tmp.name)\n", " dh.all_to_cpu()\n", "\n", "\n", "def init(nucleus_size=np.sqrt(5)):\n", " for b in dh.iterate():\n", " x, y, z = b.cell_index_arrays\n", " x, y, z = x - b.shape[0] // 2, y - b.shape[1] // 2, z - b.shape[2] // 2\n", " b['phi'].fill(0)\n", " b['phi'][(x ** 2 + y ** 2 + z ** 2) < nucleus_size ** 2] = 1.0\n", " b['T'].fill(0.0)\n", "\n", "\n", "def plot(slice_obj=ps.make_slice[:, :, 0.5]):\n", " plt.subplot(1, 3, 1)\n", " plt.scalar_field(dh.gather_array('phi', slice_obj).squeeze())\n", " plt.title(\"φ\")\n", " plt.colorbar()\n", " plt.subplot(1, 3, 2)\n", " plt.title(\"T\")\n", " plt.scalar_field(dh.gather_array('T', slice_obj).squeeze())\n", " plt.colorbar()\n", " plt.subplot(1, 3, 3)\n", " plt.title(\"∂φ\")\n", " plt.scalar_field(dh.gather_array('phidelta', slice_obj).squeeze())\n", " plt.colorbar()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Name| Inner (min/max)| WithGl (min/max)\n", "----------------------------------------------------\n", " T| ( 0, 0)| ( 0, 0)\n", " T_tmp| ( 0, 0)| ( 0, 0)\n", " phi| ( 0, 1)| ( 0, 1)\n", " phi_tmp| ( 0, 0)| ( 0, 0)\n", "phidelta| ( 0, 0)| ( 0, 0)\n", "\n" ] }, { "data": { "image/png": "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pptuUl1dXZ/7XLhwoX7yk59o5cqVevrpp/Xmm2/qrLPOystjBACUj3LKa3x7OAAgUCqV0o9+9CPNnDkzsM3ll1+uJ554Qi+++GJm2znnnKMdO3Zo1apVBZglAADB6uvr9YlPfEL33HOPJKmnp0djx47VxRdfrCuuuCL02HHjxunSSy/VpZdemlOfO3fu1BFHHKHly5fri1/8oiTplVde0cSJE9Xa2qoTTzwx/gcKACgL5ZTXDspLr3nW09OjN998U4ceeqhSqdRATwdAGfM8T++++67GjBmjior+Xby+Z88edXV1xTSzbJ7n9Xq+rKqqUlVVVb/7bm1tVWNjY9a2pqamXokQwchrAJKi1PJaV1eX2tradOWVV2a2VVRUqLGxUa2trX0aO0qfbW1t2rdvX1Z+nDBhgo466qiSf9GSnAYgKUotp0nll9eK8kXLN998U2PHjh3oaQBAxpYtW/SBD3ygz8fv2bNH4z84TO3bumOc1fuGDRumXbt2ZW1btGiRrrvuun733d7ertra2qxttbW16uzs1P/+7//q4IMP7vcYpY68BiBpSiWvvf322+ru7rbmqVdeeaVPY0fps729XZWVlRo+fHivNu3t7X0at1iQ0wAkTankNKn88lpRvmh56KGHSjrwH6+6unqAZwOgnHV2dmrs2LGZ56W+6urqUvu2bv132zhVHxrvxw13vtujD059vddzZhxXWSIe5DUASUFeQ3+R0wAkBTmt+BXli5bpy2arq6tJhAASIa63Pw07NKVhh8b7Vqoe5fc5s66urte3xnV0dKi6upqrLCMirwFImlLJayNHjtSgQYOseSroywhcovRZV1enrq4u7dixI+uqlP6MWyzIaQCSplRymlR+eY1vDwcA9EtDQ4PWrFmTtW316tVqaGgYoBkBAHBAZWWlpk6dmpWnenp6tGbNmj7nqSh9Tp06VYMHD85qs2nTJm3evJn8CADos3LLa0V5pSUAlKpur0fdXvx95mLXrl36wx/+kLn/2muvaePGjRoxYoSOOuooXXnllXrjjTf08MMPS5IuvPBC3XPPPfr617+uv/7rv9batWv1/e9/X0888USsjwMAUHySkNdaWlo0Z84cTZs2TdOnT9cdd9yh3bt3a+7cuZKk8847T0ceeaQWL14s6cDbAH/7299mfn/jjTe0ceNGDRs2TB/+8Icj9VlTU6N5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GzZs0OTJk9XU1KRt27ZZ2z/77LM699xzNW/ePP3617/WzJkzNXPmTL344otZ7WbMmKGtW7dmbv/yL/+StX/27Nl66aWXtHr1aj3++ON65plndMEFF+QWwGLGeda7Lc9FxMjWBzEip+WonPIaL1oCAJAUYSvMNmFFpO24oPu2otXVX1Ax618NN9sE9RE0ryiPIaidbW5RjiNG7uOIkfu4UohRCbnttts0f/58zZ07V5MmTdLSpUs1dOhQLVu2zNr+zjvv1IwZM/S1r31NEydO1I033qgTTjhB99xzT1a7qqoq1dXVZW6HHXZYZt/LL7+sVatW6b777lN9fb0+9alP6e6779ajjz6qN998M6+PNzE4z7Lv81xEjIgROS0m5ZTXeNESABIk/eHOcd9QxMzCLWiVPehYWwFo9h21qDWLS9vvirDdtT/X1XFi5EaM3IhRXgx0Xuvq6lJbW5saGxsz2yoqKtTY2KjW1lbrMa2trVntJampqalX+3Xr1mnUqFE65phjdNFFF+mdd97J6mP48OGaNm1aZltjY6MqKiq0fv36yPMvOZxnbsTIjRi5EaO8GOicJpVfXuOLeAAASBp/sej/mcuKub+97TizsLMVelFW8oP6DFuV72sxahuLGLnHIkbusYhRUers7My6X1VVpaqqqqxtb7/9trq7u1VbW5u1vba2Vq+88oq13/b2dmv79vb2zP0ZM2borLPO0vjx4/Xqq6/qqquu0mc/+1m1trZq0KBBam9v16hRo7L6OOiggzRixIisfsoC55kbMXIjRm7EqKhFyWlS+eU1XrQEgATpUUo9MX8GJd9IV0TM4jGogDNXuKMUg2a7oCLQC9lntsl1HrZx+3LlgO1xECP7/MLGJka9+yNGsctnXhs7dmzW9kWLFum6666Ldawg55xzTub34447Tscff7w+9KEPad26dTr99NMLMofEI6e58VzkRozciFHBlGpOk5Kb13jREgCApLEVgf4Cz1UU+tnamH2aY4ZtS283C86+Fo9hx9gKYttxxCj7vu04YpR933YcMSo6W7ZsUXV1dea+7YqUkSNHatCgQero6Mja3tHRobq6Omu/dXV1ObWXpKOPPlojR47UH/7wB51++umqq6vr9YUI+/fv1/bt20P7KUmcZ/Y+eS7qjRiFj2Hrkxj1VsI5TSq/vMYHnQFAgnhKHVjBi/HmFWPW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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "init()\n", "plot()\n", "print(dh)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Step 0 19.713090835999992 1.0\n", "Step 1 19.673075279000045 1.0\n", "Step 2 19.696444219 1.0\n", "Step 3 19.752472744999977 1.0\n" ] } ], "source": [ "if 'is_test_run' in globals():\n", " time_loop(2)\n", " assert np.isfinite(dh.max('phi'))\n", " assert np.isfinite(dh.max('T'))\n", " assert np.isfinite(dh.max('phidelta'))\n", "else:\n", " from time import perf_counter\n", " vtk_writer = dh.create_vtk_writer('dentritic_growth_large', ['phi'])\n", " last = perf_counter()\n", " for i in range(4):\n", " time_loop(100)\n", " vtk_writer(i)\n", " print(\"Step \", i, perf_counter() - last, dh.max('phi'))\n", " last = perf_counter()" ] } ], "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 }