{ "cells": [ { "cell_type": "markdown", "id": "1d2eb3be-2943-4811-967e-c481ad04bc2b", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "# Extra::Avoiding Diffusive effect in Convective Equation (Unfinished) - Variable Lattice Sound Sped\n", "\n", "Considering that we want reduce the diffusive effects on the LBM convective equation description:\n", "\n", "$$\n", "\\partial_t u + \\partial_{\\alpha}B_{\\alpha} + \\underbrace{\\partial_{\\alpha}\\left(\\nu \\partial_{\\alpha}u \\right)}_{\\approx 0} = 0\n", "$$\n", "\n", "a option is become the diffusive term null (i.e. $\\tau =1/2$ due to $\\nu=c_{s}^{2}(\\tau -1/2)$) or use higher-order parameter to correct these lower-order moments. In the sequence we will explore both scenarios." ] }, { "cell_type": "markdown", "id": "d63612fb-dc93-419e-b99b-d43231b2fbb6", "metadata": {}, "source": [ "## LBM $\\times$ FDM relations" ] }, { "cell_type": "markdown", "id": "eea426d6-64d6-46de-ac5e-10c10e4d0f6b", "metadata": {}, "source": [ "### LBM for $\\tau=1$" ] }, { "cell_type": "code", "execution_count": 4, "id": "44ad1292-20ba-426e-95cc-4858ec92d518", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx= 0.16 \t dt= 0.04\n", "nuo= 0.10666666666666667\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#***************************************InputParameters************************************************\n", "Nx=126 #Square Domain Length\n", "#***************************************Lattice-Properties-D1Q5*************************************************\n", "cs=1.0/sqrt(3.0);\n", "w = np.array([4.0/6.0, 1.0/6.0, 1.0/6.0],dtype=\"float64\")\n", "cx = np.array([0, 1, -1],dtype=\"int16\") \n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(2) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "tau=1.0 # Relaxation Time \n", "m=1.0 # Dynamic Viscosity ration\n", "nuo=(tau-0.5)/3.0*dx**2/dt\n", "print('dx=',dx,'\\t dt=',dt)\n", "print('nuo=',nuo)\n", "#***************************************LBM-Scale************************************************\n", "ue=uo/c\n", "sk=np.zeros((Nx),dtype=\"float64\")\n", "Bx=np.zeros((Nx),dtype=\"float64\")\n", "f=np.zeros((3,Nx),dtype=\"float64\")\n", "for k in range(0,3):\n", " f[k,:]=w[k]*(sk[:]+cx[k]*Bx[:]*3.0)\n", "for t in range(nt):\n", " #----------------------Macro------------------\n", " sk[:]=f[0,:]+f[1,:]+f[2,:]\n", " Bx=ue*sk*sk/(sk*sk+(1.0-sk)**(2.0))\n", " #--------------------Collision----------------\n", " for k in range(0,3):\n", " f[k,:]=w[k]*(sk[:]+cx[k]*Bx[:]/cs**2) + (1.0 - 1.0/tau)*(f[k,:] -w[k]*(sk[:]+cx[k]*Bx[:]/cs**2))\n", " #-----------------streaming-------------------\n", " for k in range(0,3):\n", " f[k,:]=np.roll(f[k,:], cx[k], axis=0)\n", " #-----------------Boundaries-----------------------\n", " f[1,0]= 1.0 - f[0,0]-f[2,0]\n", " f[0,Nx-1]=f[0,Nx-2]\n", " f[1,Nx-1]=f[1,Nx-2]\n", " f[2,Nx-1]=f[2,Nx-2]" ] }, { "cell_type": "code", "execution_count": 5, "id": "91a9e4dc-b35f-4db5-ad5c-320a8f5b4d5e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx= 0.16 \t dt= 0.04\n", "nuo= 0.10666666666666667\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#----------------------------Simulation-Set--------------------------------------------------------\n", "Nx=126;\n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(2) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "nuof=dx**2/dt/6.0*1.0 # Diffusive term\n", "m=1.0 # Dynamic Viscosity ration\n", "print('dx=',dx,'\\t dt=',dt)\n", "print('nuo=',nuof)\n", "#----------------------------Initilizing-Simulation------------------------------------------------\n", "sf=np.zeros((Nx),dtype=\"float64\") # Allocating Density Field\n", "sfo=np.zeros((Nx),dtype=\"float64\") # Allocating Density Buffer Field\n", "sf[:]=0.0 # Initilal Density Condition\n", "Bx=np.zeros((Nx),dtype=\"float64\") # Allocating Convective Term\n", "Bx=uo*sf**(2.0)/(sf**(2.0)+m*(1.0-sf)**(2.0)) # Initializing Convective Term\n", "for t in range(nt):\n", "# for t in range(3):\n", " sf=sfo\n", " Bx=uo*sf**(2.0)/(sf**(2.0)+m*(1.0-sf)**(2.0))\n", " sfo = ( sf + dt/dx * (np.roll(Bx, cx[1], axis=0) - np.roll(Bx, cx[2], axis=0))/2.0 +\n", " ( np.roll(sf, cx[1], axis=0) -2.0*sf + np.roll(sf, cx[2], axis=0))*dt/dx**2*nuo )\n", " sfo[0] = 1.0 # Inlet boundary condition\n", " sfo[Nx-1] = 0.0 # Inlet boundary condition" ] }, { "cell_type": "code", "execution_count": 11, "id": "957e5875-b08c-4012-8bc0-de812fcb538a", "metadata": {}, "outputs": [ { "data": { "image/png": "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Y5eamsqpU6dITEzk4sWLVKpUicDAQGrWrFnYhxIRkSIWsm0bTVJT2bFnDwwe7OpwROQarjuxS01N5eeff2bJkiX8/vvvHDlyJMus00ze3t507NiRvn37cvfdd3PDDTdc76FFRKSIxdxzD6fOnaNR9+6uDkVE8qDAiV1iYiLTp0/nww8/xGaz0blzZ4YOHUr9+vWpWbMmPj4+eHh4kJKSQmJiIidOnGDfvn18++23vPHGG/To0YNXX32VQYMGFeb5iIhIIeo1Z46rQxCRfChQYrds2TIeeughunfvzjfffEO/fv3ytQ5cVFQU33zzDY8++iht27bls88+o0aNGgUJRUREREQy5HvyxMSJE5k2bRorV65k8eLF3Hzzzfle3Dc0NJSXXnqJQ4cO0adPH/r168e+ffvyG4qIiBSxpJMnOfX77yRERro6FBHJg3wldm+99Rbu7u6sXr2aVq1aXffBK1SowNNPP83333/P008/TaS+OERESpQ/+vUjpGtXdj72mKtDEZE8yFdi17hxYyZNmoTFYinUIBo1asTChQs5fvx4odYrIiLXx+7tzSUAm83VoYhIHuTrHrs77rijqOLA39+fPn36FFn9IiKSf7137sTi5kYfVwciInlSaAsUnz9/vrCqEhGREsLipnXsRUqTQvuNvf3223PcHhMTwyOPPEJERERhHUpEREREclCgxG7r1q3s3r07y7b09PQcywYFBfH888/zyiuvMGPGjIIcTkREXGTXxx+zrkUL1t51l6tDEZE8KFBid+utt9K2bVsCAgK4/fbbef/996+a2IFj0sXChQtJTEzkww8/LHCwIiJSvBK3bqX3vn34rF3r6lBEJA8KtEDxggULmDNnDhs2bGDJkiUsWbIEi8VCcHAwN954IzfeeCN9+vTJ9tiwSZMm0bt3b/75z38WSvAiIlK0Am++mbDISDwLYYkrESl6BUrsevXqRa9evQDHPXTr1q3jsccew9fXl4ULF7Jw4UIsFgsBAQHORK9Dhw5UqVKFCxcuFOoJiIhI0Wl69900vftuV4chInlU4GfFZgoKCuKuu+7i3//+N2vWrCE6Opp169Y5fxYtWsR3333nXPvu+eefv+6gRURERCS7607srhQcHMzdd9/N3Rn/wouPj2fDhg3s37+fZs2aMXTo0MI+pIiIFBF7ejpJJ06Qdv48ga1buzocEbmG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tKSJSImmoVgRERGRMkKJnYiI5ElCZCSHvb054eGBPT3d1eGISA6U2ImISJ54VKpEo0uXqJOezsVz51wdjojkQPfYiYhInvgEBBA+bRoefn408/V1dTgikgMldiIikicWNzfajR3r6jBEJBcaihUREREpI5TYiYhInu149102PfUUZ/budXUoIpIDDcWKiEie+U6YQPtLlwivX58aLVq4OhwRuYISOxERybPToaEkxcXhXb26q0MRkRwosRMRkTzrFRHh6hBEJBe6x05ERESkjFBiJyIiIlJGKLETEZE8CxswgIiKFVn3j3+4OhQRyYESOxERyTNLTAxNUlOxnzjh6lBEJAeaPCEiInlWa/Jkdhw8SKPu3V0diojkQImdiIjkWaNbb3V1CCKSCw3FioiIiJQR6rETEZE8O71tGyf/9z+8Q0Jo9X//5+pwROQKSuxERCTPjnzyCT1nzWJrjRqgxE6kxNFQrIiI5Jl3/frs8/EhJSTE1aGISA6U2ImISJ51fOUVbkhO5sadO10diojkQImdiIiISBmhxE5ERESkjFBiJyIieXZy40Z2+foSXrWqq0MRkRxoVqyIiOSdMbQ+f54UV8chIjlSYiciInlW/YYb+O2FF6jg50dHVwcjItkosRMRkTyrWK0aXd95x9VhiMhV6B47ERERkTJCPXYiIpIvuz7+mEtnztD8//6PysHBrg5HRC6jxE5ERPIl5IknCDCGw23a0OjWW10djohcRomdiIjkywk/P85cuoSnu7urQxGRKyixExGRfGkXH+/qEETkKjR5QkRERKSMUGInIiIiUkYosRMRkXwJ692bP/z8+P2VV1wdiohcQYmdiIjki9fRo7RJSiL10CFXhyIiV9DkCRERyZdKr7zC5sOHqT9kiKtDEZErKLETEZF8af3YY64OQUSuQkOxIiIiImWEeuxERCRfYnbuJGbTJiqFhtLw7393dTgichn12ImISL7sf+UVWj/xBKefftrVoYjIFZTYiYhIvlQICSHSw4P0qlVdHYqIXEGJnYiI5EvPzz+nfloafbZtc3UoInIFJXYiIiIiZYQSOxEREZEyQomdiIjky+EffmBrYCAbGjZ0dSgicgUtdyIiIvmSFh9PpzNnOHnunKtDEZErKLETEZF8Ce7enfUPPohncDC1XR2MiGShxE5ERPKlWuPG9Jo929VhiEgOdI+diIiISBmhxE5ERPLFnp7OwW+/Zfenn5KemurqcETkMhqKFRGRfGs6fDgAZ3r2pEaLFi6ORkQyKbETEZF8catQgagKFTCA58WLrg5HRC5T6odiP/roI+rVq4e3tzddunRhy5YtVy37+eef06tXL6pWrUrVqlUZMGBAruVFRCRnoVYrda1Wanbs6OpQROQypTqxW7BgAWPHjmXSpEns2LGDNm3aMGjQIGJjY3MsHxYWxogRI1izZg2bN2+mTp063HTTTfz555/FHLmIiIhI4SvVQ7HTp09nzJgxPPjggwB88sknLFu2jNmzZzNu3Lhs5b/66qssr7/44gsWLVrE6tWrGTlyZLbyly5d4tKlS87XSUlJAFitVqxWa2GeSqmSee7luQ1A7ZBJ7fAXtYWD2sFB7eCgdnAorvO3GGNMsRypkKWlpeHj48N3333HsGHDnNtHjRpFQkICS5cuvWYd58+fJzAwkIULF/L3v/892/7XXnuN119/Pdv2r7/+Gh8fn+uKX0SkNLONG0eN06c5dt99+N50k6vDESnxUlJSuPfee0lMTMTX17fIjlNqe+zi4uKw2WwEBQVl2R4UFMSBAwfyVMdLL71ESEgIAwYMyHH/+PHjGTt2rPN1UlISderUoW/fvlSvXr3gwZdyVquVlStXMnDgQDw8PFwdjsuoHRzUDn8pT22xd+RI2iYlYXF3p8vgwVn2lad2yI3awUHt4HD27NliOU6pTeyu11tvvcV///tfwsLC8Pb2zrGMl5cXXl5e2bZ7eHiU64szk9rBQe3goHb4S3loi0tPPsn6P/+k7u23X/Vcy0M75IXawaG8t0NxnXupTewCAgJwd3cnJiYmy/aYmBiCg4Nzfe97773HW2+9xapVq2jdunVRhikiUiZ1+de/XB2CiOSg1M6K9fT0pEOHDqxevdq5zW63s3r1arp163bV973zzju8+eabLF++nI6api8iIiJlSKntsQMYO3Yso0aNomPHjnTu3JkZM2aQnJzsnCU7cuRIatWqxdSpUwF4++23mThxIl9//TX16tUjOjoagMqVK1O5cmWXnYeISGkTt38/5/bto0poKDU7dXJ1OCKSoVQndsOHD+fMmTNMnDiR6Oho2rZty/Lly50TKqKionBz+6tT8uOPPyYtLY0777wzSz2TJk3itddeK87QRURKtT0jR9Jn2zbCOnak5tat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a9YsOnToQJs2bfL93pJ+PVzr72SHDh3w8PDI8tkePHiQqKioq362BflOyS1AyfDf//7XeHl5mblz55p9+/aZ//u//zP+/v4mOjraGGPM/fffb8aNG+csv3HjRlOhQgXz3nvvmf3795tJkyYZDw8Ps3v3bledwnV77LHHjJ+fnwkLCzOnT592/qSkpDjLXNkOr7/+ulmxYoU5cuSI2b59u7nnnnuMt7e32bt3rytOodA899xzJiwszERGRpqNGzeaAQMGmICAABMbG2uMKR/XQyabzWZCQ0PNSy+9lG1fWb0ezp8/b8LDw014eLgBzPTp0014eLhztudbb71l/P39zdKlS82uXbvMrbfeaurXr28uXrzorKNfv35m5syZztfX+o4piXJrh7S0NDN06FBTu3Zts3PnzizfGZcuXXLWcWU7XOt3qyTKrR3Onz9vnn/+ebN582YTGRlpVq1aZdq3b28aN25sUlNTnXWU9eshU2JiovHx8TEff/xxjnWU9ushL38nH330URMaGmp+/fVXs23bNtOtWzfTrVu3LPU0bdrULF682Pk6L98peaHE7gozZ840oaGhxtPT03Tu3Nn89ttvzn033nijGTVqVJby3377rWnSpInx9PQ0LVq0MMuWLSvmiAsXkOPPnDlznGWubIdnnnnG2WZBQUFm8ODBZseOHcUffCEbPny4qVmzpvH09DS1atUyw4cPN4cPH3buLw/XQ6YVK1YYwBw8eDDbvrJ6PaxZsybH34XMc7Xb7WbChAkmKCjIeHl5mf79+2drn7p165pJkyZl2Zbbd0xJlFs7REZGXvU7Y82aNc46rmyHa/1ulUS5tUNKSoq56aabTI0aNYyHh4epW7euGTNmTLYEraxfD5k+/fRTU7FiRZOQkJBjHaX9esjL38mLFy+axx9/3FStWtX4+PiY2267zZw+fTpbPZe/Jy/fKXlhyahcREREREo53WMnIiIiUkYosRMREREpI5TYiYiIiJQRSuxEREREyggldiIiIiJlhBI7ERERkTJCiZ2IiIhIGaHETkRERKSMUGInIiIiUkYosRMREREpI5TYiYiIiJQRSuxEREREyggldiIiIiJlhBI7ERERkTJCiZ2IiIhIGaHETkRERKSMUGInInIdli1bxsCBA+nduzfdu3fn999/x2az8fzzz9O7d2969+7N7NmzXR2miJQTSuxERApo3rx5LF26lKVLl7Ju3Truuusubr75Zh577DE6d+7MypUrqVy5Mg8//DDnzp1zdbgiUg5UcHUAIiKl0alTp1i0aBFLly7FYrEA0KJFCxISEoiNjeXuu+/mjz/+4Oeff6ZRo0b4+vq6OGIRKQ+U2ImIFMCXX37JCy+84EzqAPbu3QvAPffcA0CbNm3YvXs3derUoUIFfd2KSNGzGGOMq4MQESltjDFZkjqAoUOH8r///Y/o6GgCAwNdFJmIlGdK7ERECoHVaqV69erUq1ePXbt2uTocESmnNHlCRKQQbN68mfPnz9O/f/9s+/TvZxEpLkrsREQKIDY2lsOHDztfr1y5EoA+ffpkKff555+zePHi4gxNRMox3c0rIpJP8fHxtGzZkrNnzxIXF4e/vz8LFy4EHDNjM50/f56vvvqKX375xVWhikg5ox47EZF8OnbsGGfOnOEf//gH/v7+TJ48mZtuuokKFSqwe/duAOLi4hg+fDiTJ0/G09PTxRGLSHmhyRMiIgXwxhtv8Ouvv5Kens4tt9zC+PHj+fHHH3nttdfw8vLC29ubN954g549e7o6VBEpR5TYiYiIiJQRGooVERERKSOU2ImIiIiUEUrsRERERMoIJXYiIiIiZYQSOxEREZEyQomdiIiISBmhxE5ERESkjFBiJyIiIlJGKLETERERKSOU2ImIiIiUEUrsRERERMoIJXYiIiIiZYQSOxEREZEy4v8D8CkdLQ3nAngAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0, L, Nx)\n", "plt.plot(x, sk, 'k:s' ,label=f'$LBM$ - $\\\\tau={tau}$ - $\\\\nu={nuo}$', fillstyle='none')\n", "plt.plot(x, sf, 'r:o' ,label=f'$FDM$ - $\\\\nu={nuof}$', fillstyle='none')\n", "plt.xlabel(r\"$x$\",fontsize=18)\n", "plt.ylabel(r\"$u(x,t)$\",fontsize=18)\n", "plt.xlim(0,20)\n", "plt.ylim(0,1)\n", "plt.legend()\n", "plt.grid(True)\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "id": "dfc583c7-62b6-4649-b676-ba2797432b7f", "metadata": {}, "source": [ "### LBM for $\\tau\\neq1$" ] }, { "cell_type": "code", "execution_count": 21, "id": "03f69c48-d8d0-4e26-a83b-d7f18cb1ff34", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx= 0.16 \t dt= 0.04\n", "nuo= 0.096\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#***************************************InputParameters************************************************\n", "Nx=126 #Square Domain Length\n", "#***************************************Lattice-Properties-D1Q5*************************************************\n", "cs=1.0/sqrt(3.0);\n", "w = np.array([4.0/6.0, 1.0/6.0, 1.0/6.0],dtype=\"float64\")\n", "cx = np.array([0, 1, -1],dtype=\"int16\") \n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(2) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "tau=0.95 # Relaxation Time \n", "m=1.0 # Dynamic Viscosity ration\n", "nuo=(tau-0.5)/3.0*dx**2/dt\n", "print('dx=',dx,'\\t dt=',dt)\n", "print('nuo=',nuo)\n", "#***************************************LBM-Scale************************************************\n", "ue=uo/c\n", "sk=np.zeros((Nx),dtype=\"float64\")\n", "Bx=np.zeros((Nx),dtype=\"float64\")\n", "f=np.zeros((3,Nx),dtype=\"float64\")\n", "for k in range(0,3):\n", " f[k,:]=w[k]*(sk[:]+cx[k]*Bx[:]*3.0)\n", "for t in range(nt):\n", " #----------------------Macro------------------\n", " sk[:]=f[0,:]+f[1,:]+f[2,:]\n", " Bx=ue*sk*sk/(sk*sk+(1.0-sk)**(2.0))\n", " #--------------------Collision----------------\n", " for k in range(0,3):\n", " f[k,:]=w[k]*(sk[:]+cx[k]*Bx[:]/cs**2) + (1.0 - 1.0/tau)*(f[k,:] -w[k]*(sk[:]+cx[k]*Bx[:]/cs**2))\n", " #-----------------streaming-------------------\n", " for k in range(0,3):\n", " f[k,:]=np.roll(f[k,:], cx[k], axis=0)\n", " #-----------------Boundaries-----------------------\n", " f[1,0]= 1.0 - f[0,0]-f[2,0]\n", " f[0,Nx-1]=f[0,Nx-2]\n", " f[1,Nx-1]=f[1,Nx-2]\n", " f[2,Nx-1]=f[2,Nx-2]" ] }, { "cell_type": "code", "execution_count": 24, "id": "dd73e7db-c8b6-4647-b732-1000f210b367", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx= 0.16 \t dt= 0.04\n", "nuo= 0.096\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#----------------------------Simulation-Set--------------------------------------------------------\n", "Nx=126;\n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(2) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "nuof=dx**2/dt/6.0*0.9 # Diffusive term\n", "tau=0.95\n", "m=1.0 # Dynamic Viscosity ration\n", "print('dx=',dx,'\\t dt=',dt)\n", "print('nuo=',nuof)\n", "#----------------------------Initilizing-Simulation------------------------------------------------\n", "sf=np.zeros((Nx),dtype=\"float64\") # Allocating Density Field\n", "sfo=np.zeros((Nx),dtype=\"float64\") # Allocating Density Buffer Field\n", "sf[:]=0.0 # Initilal Density Condition\n", "Bx=np.zeros((Nx),dtype=\"float64\") # Allocating Convective Term\n", "Bx=uo*sf**(2.0)/(sf**(2.0)+m*(1.0-sf)**(2.0)) # Initializing Convective Term\n", "for t in range(nt):\n", "# for t in range(3):\n", " sf=sfo\n", " Bx=uo*sf**(2.0)/(sf**(2.0)+m*(1.0-sf)**(2.0))\n", " # sfo = ( sf + dt/dx * (np.roll(Bx, cx[1], axis=0) - np.roll(Bx, cx[2], axis=0))/2.0 +\n", " # ( np.roll(sf, cx[1], axis=0) -2.0*sf + np.roll(sf, cx[2], axis=0))*dt/dx**2*nuo )\n", " sfo = ( (4.0*sf/6.0 + np.roll(sf, cx[1], axis=0)/6.0 + np.roll(sf, cx[2], axis=0)/6.0) \n", " + dt/dx * (np.roll(Bx, cx[1], axis=0) - np.roll(Bx, cx[2], axis=0))/2.0 ) *1.0/tau + (1.0 - 1.0/tau)*(4.0*sf/6.0 + np.roll(sf, cx[1], axis=0)/6.0 + np.roll(sf, cx[2], axis=0)/6.0) \n", " sfo[0] = 1.0 # Inlet boundary condition\n", " sfo[Nx-1] = 0.0 # Inlet boundary condition" ] }, { "cell_type": "code", "execution_count": 25, "id": "6d5821b8-e66c-4dff-a77e-ee67b04f0d14", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0, L, Nx)\n", "plt.plot(x, sk, 'k:' ,label=f'$LBM$ - $\\\\tau={tau}$ - $\\\\nu={nuo}$', fillstyle='none')\n", "plt.plot(x, sf, 'r:' ,label=f'$FDM$ - $\\\\nu={nuof}$', fillstyle='none')\n", "plt.xlabel(r\"$x$\",fontsize=18)\n", "plt.ylabel(r\"$u(x,t)$\",fontsize=18)\n", "plt.xlim(0,20)\n", "plt.ylim(0,1)\n", "plt.legend()\n", "plt.grid(True)\n", "plt.tight_layout()" ] }, { "cell_type": "code", "execution_count": null, "id": "ae812b4d-8f6d-4426-a996-aea77a036441", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 10, "id": "c977e43c-df00-4add-8e07-28bee95df603", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx= 0.16 \t dt= 0.04\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#***************************************InputParameters************************************************\n", "Nx=126 #Square Domain Length\n", "#***************************************Lattice-Properties-D1Q5*************************************************\n", "cs=1.0/sqrt(3.0);\n", "w = np.array([4.0/6.0, 1.0/6.0, 1.0/6.0],dtype=\"float64\")\n", "cx = np.array([0, 1, -1],dtype=\"int16\") \n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(2) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "m=1.0 # Dynamic Viscosity ration\n", "print('dx=',dx,'\\t dt=',dt)\n", "#***************************************LBM-Scale************************************************\n", "ue=uo/c\n", "sk=np.zeros((Nx),dtype=\"float64\")\n", "Bx=np.zeros((Nx),dtype=\"float64\")\n", "f=np.zeros((3,Nx),dtype=\"float64\")\n", "for k in range(0,3):\n", " f[k,:]=w[k]*(sk[:]+cx[k]*Bx[:]*3.0)\n", "for t in range(nt):\n", " #----------------------Macro------------------\n", " sk[:]=f[0,:]+f[1,:]+f[2,:]\n", " Bx=ue*sk*sk/(sk*sk+(1.0-sk)**(2.0))\n", " #--------------------Collision----------------\n", " for k in range(0,3):\n", " f[k,:]=w[k]*(sk[:]+cx[k]*Bx[:]/cs**2)\n", " #-----------------streaming-------------------\n", " for k in range(0,3):\n", " f[k,:]=np.roll(f[k,:], cx[k], axis=0)\n", " #-----------------Boundaries-----------------------\n", " f[1,0]= 1.0 - f[0,0]-f[2,0]\n", " f[0,Nx-1]=f[0,Nx-2]\n", " f[1,Nx-1]=f[1,Nx-2]\n", " f[2,Nx-1]=f[2,Nx-2]" ] }, { "cell_type": "code", "execution_count": 54, "id": "18fa71c4-ecce-4e1c-90fa-1f601f3d6ce9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx= 0.16 \t dt= 0.04\n", "nuo= 0.096\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#***************************************InputParameters************************************************\n", "Nx=126 #Square Domain Length\n", "#***************************************Lattice-Properties-D1Q5*************************************************\n", "cs=1.0/sqrt(3.0);\n", "w = np.array([4.0/6.0, 1.0/6.0, 1.0/6.0],dtype=\"float64\")\n", "cx = np.array([0, 1, -1],dtype=\"int16\") \n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(2) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "tau=0.95 # Relaxation Time \n", "m=1.0 # Dynamic Viscosity ration\n", "print('dx=',dx,'\\t dt=',dt)\n", "print('nuo=',(tau-0.5)/3.0*dx**2/dt)\n", "#***************************************LBM-Scale************************************************\n", "ue=uo/c\n", "sk2=np.zeros((Nx),dtype=\"float64\")\n", "Bx=np.zeros((Nx),dtype=\"float64\")\n", "f=np.zeros((3,Nx),dtype=\"float64\")\n", "for k in range(0,3):\n", " f[k,:]=w[k]*(sk2[:]+cx[k]*Bx[:]*3.0)\n", "for t in range(nt):\n", " #----------------------Macro------------------\n", " sk2[:]=f[0,:]+f[1,:]+f[2,:]\n", " Bx=ue*sk2*sk2/(sk2*sk2+(1.0-sk2)**(2.0))\n", " #--------------------Collision----------------\n", " for k in range(0,3):\n", " f[k,:]=w[k]*(sk2[:]+cx[k]*Bx[:]/cs**2) + (1.0 - 1.0/tau)*(f[k,:] -w[k]*(sk2[:]+cx[k]*Bx[:]/cs**2))\n", " #-----------------streaming-------------------\n", " for k in range(0,3):\n", " f[k,:]=np.roll(f[k,:], cx[k], axis=0)\n", " #-----------------Boundaries-----------------------\n", " f[1,0]= 1.0 - f[0,0]-f[2,0]\n", " f[0,Nx-1]=f[0,Nx-2]\n", " f[1,Nx-1]=f[1,Nx-2]\n", " f[2,Nx-1]=f[2,Nx-2]" ] }, { "cell_type": "code", "execution_count": 55, "id": "fcc9c692-a7c2-4a14-96cb-235c40dd10fc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx= 0.16 \t dt= 0.04\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#----------------------------Simulation-Set--------------------------------------------------------\n", "Nx=126;\n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(2) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "m=1.0 # Dynamic Viscosity ration\n", "print('dx=',dx,'\\t dt=',dt)\n", "#----------------------------Initilizing-Simulation------------------------------------------------\n", "sf=np.zeros((Nx),dtype=\"float64\") # Allocating Density Field\n", "sfo=np.zeros((Nx),dtype=\"float64\") # Allocating Density Buffer Field\n", "sf[:]=0.0 # Initilal Density Condition\n", "Bx=np.zeros((Nx),dtype=\"float64\") # Allocating Convective Term\n", "Bx=uo*sf**(2.0)/(sf**(2.0)+m*(1.0-sf)**(2.0)) # Initializing Convective Term\n", "for t in range(nt):\n", "# for t in range(3):\n", " sf=sfo\n", " Bx=uo*sf**(2.0)/(sf**(2.0)+m*(1.0-sf)**(2.0))\n", " sfo = ( (4.0*sf/6.0 + np.roll(sf, cx[1], axis=0)/6.0 + np.roll(sf, cx[2], axis=0)/6.0) \n", " + dt/dx * (np.roll(Bx, cx[1], axis=0) - np.roll(Bx, cx[2], axis=0))/2.0 )\n", " sfo[0] = 1.0 # Inlet boundary condition\n", " sfo[Nx-1] = 0.0 # Inlet boundary condition" ] }, { "cell_type": "code", "execution_count": 56, "id": "03e0b3f7-1127-4fbb-85ac-d4703e9ea4d5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx= 0.16 \t dt= 0.04\n", "nuo= 0.096\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#----------------------------Simulation-Set--------------------------------------------------------\n", "Nx=126;\n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(2) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "nuo=dx**2/dt/6.0*0.9 # Diffusive term\n", "m=1.0 # Dynamic Viscosity ration\n", "print('dx=',dx,'\\t dt=',dt)\n", "print('nuo=',nuo)\n", "#----------------------------Initilizing-Simulation------------------------------------------------\n", "sf1=np.zeros((Nx),dtype=\"float64\") # Allocating Density Field\n", "sf1o=np.zeros((Nx),dtype=\"float64\") # Allocating Density Buffer Field\n", "sf1[:]=0.0 # Initilal Density Condition\n", "Bx=np.zeros((Nx),dtype=\"float64\") # Allocating Convective Term\n", "Bx=uo*sf1**(2.0)/(sf1**(2.0)+m*(1.0-sf1)**(2.0)) # Initializing Convective Term\n", "for t in range(nt):\n", "# for t in range(3):\n", " sf1=sf1o\n", " Bx=uo*sf1**(2.0)/(sf1**(2.0)+m*(1.0-sf1)**(2.0))\n", " sf1o = ( sf1 + dt/dx * (np.roll(Bx, cx[1], axis=0) - np.roll(Bx, cx[2], axis=0))/2.0 +\n", " ( np.roll(sf1, cx[1], axis=0) -2.0*sf1 + np.roll(sf1, cx[2], axis=0))*dt/dx**2*nuo )\n", " sf1o[0] = 1.0 # Inlet boundary condition\n", " sf1o[Nx-1] = 0.0 # Inlet boundary condition" ] }, { "cell_type": "code", "execution_count": 59, "id": "0370c5ae-b83e-43fd-8b3f-86b2554daeeb", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHVCAYAAAB8NLYkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAkdhJREFUeJzs3Xt8zvX/x/HHNjtgw2bDHIcphznkmMNsEyHk3OlbRFR+KYcovsUcypBC30SJ6FtRJCVUrI05E7455hCGZjY2Ox+v6/fH1S4uOxh2uMbzfrvtluuzz/X5vK53zNP7/Xm/3zZGo9GIiIiIiJR4tsVdgIiIiIgUDAU7ERERkXuEgp2IiIjIPULBTkREROQeoWAnIiIico9QsBMRERG5RyjYiYiIiNwjFOxERERE7hEKdiIiIiL3CAU7ERERkXtEiQ12W7dupVevXlStWhUbGxvWrl17y/eEhobSvHlzHB0d8fb2ZtmyZYVep4iIiEhRKbHBLjExkaZNm7JgwYJ8nX/mzBl69OhBQEAABw8eZPTo0QwbNoxffvmlkCsVERERKRo2RqPRWNxF3C0bGxu+//57+vTpk+s5b775JuvXr+fw4cPmY0899RSxsbH8/PPPRVCliIiISOEqVdwFFJWdO3fSuXNni2Ndu3Zl9OjRub4nNTWV1NRU82uDwcDVq1epWLEiNjY2hVWqiIiI3GOMRiPx8fFUrVoVW9vCGzC9b4LdpUuXqFy5ssWxypUrExcXR3JyMqVLl872nqCgIKZOnVpUJYqIiMg97vz581SvXr3Qrn/fBLs7MXHiRMaOHWt+fe3aNWrWrEkzunKVIMKpC0BtjuHC21TuYkv37t0YO3Yss2bNYvPmzWzatImXXnqJ7t2707ZtW+zs7Irr4xSY9PR0QkJCCAgIwN7evrjLKTZqBxO1w3VqCxO1g4nawUTtYHL16lUeeOABXFxcCvU+902wq1KlCpGRkRbHIiMjKVeuXI69dQCOjo44OjpmO36QX7j41xJGNJ1NWPwYztAG2IT39h24POEAQEREBCdPngTgk08+4ZNPPsHLy4v333+ffv36FeyHK2Lp6emUKVOGihUr3td/SNUOJmqH69QWJmoHE7WDidrBUmE/ylViZ8XerrZt2xIcHGxxbNOmTbRt2/aOrvfkoKdYlzCDl1+eQwCzcSCVU0ntGD68ObCMefNW07hxYz799FMAFixYQOPGjRkwYABr1qy5248jIiIikk2JDXYJCQkcPHiQgwcPAqblTA4ePEh4eDhgGkYdNGiQ+fyXX36Zv/76izfeeIPjx4/z8ccf8+233zJmzJg7uv/+/fv59ttvadyxCSG8yYafTuHltQNTkw7GgROU/n0AbZt2BMDV1ZXvvvuOhx9+mJdffpng4GAyMzPvpglERERELJTYYLdv3z4eeughHnroIQDGjh3LQw89xOTJkwHTUGhWyAOoXbs269evZ9OmTTRt2pT333+fzz77jK5du972vd98802Sk5P54osvuHr1KgB//b2Dxo1nAq1wJZQ0SvPt34Po2KYiD/MqR/84zgMPPMDOnTuJioqic+fOeHt7q/dORERECkyJfcbO39+fvJbgy2lXCX9/fw4cOHDX9x4/fjytW7fm9ddfZ926dQC8+OKLeHl5MXp0H+bNC+C9vkv45Pt2nKI+u/iQizNP0dDjCp/8/Dhdu3Vl6tSp7Nu3j/79+zN16lTq1auHp6cnvr6+98QECxERESl6JbbHrrj169ePU6dOERISwujRo7GxscHHxwdvb28AynfPpGHXcXTiJSpxifN480vUR4zp7kp5OuLr68ugQYMoXbo0gYGBPPPMMwQEBKgXT0RERO6Ygt1dsLOzw9/fn7lz57J69WoOHz7MyJEjAVMP3h9/HsFvajVS8ea5KgspSwJHja24xhZ697Zl4MBptGjRAoANGzawc+dOfHx86N+/P2PGjCE0NFTP4YmIiEi+KdgVkNx68IxGI9dIZPCXD9Dt4WepyMdABvHxfsBB7P43FjdqEhsby99//23e8mzevHnqwRMREZHbomBXgHLqwZsyZQoAnTt3Zn/kH3z6XRU++OAX4FvAli3xfUngBEuGxzOo/4taIkVERETumIJdIcnqwdu8eTMeHh60a9eOP//8k379+lGlShzwJF+//i0tbUJJw5HgxBex4S+cj/TDt80jgJZIERERkdujYFeI7OzseOSRR1i0aBE7d+6kf//+7Ny5k/LlywPw8e7/8LsxgJGN36Ah+0mgHCv+ep72TZ1pzqv88cefWiJFRERE8k3Brgj069eP1atXc+jQIdq1a0ePHj2AfxY5XrWKdhMf4k9aMiPgE2pzkqtUYj8fMnPmENLTn2X9+l8AmDp1qiZXiIiISK4U7IrIjZMrvv76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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0, L, Nx)\n", "plt.plot(x, sk, 'k-' ,label='Water Saturation $(t=10)$')\n", "plt.plot(x, sf, 'ko' ,label='Water Saturation $(t=10)$', fillstyle='none')\n", "plt.plot(x, sk2, 'r--' ,label='Water Saturation $(t=10)$')\n", "plt.plot(x, sf1, 'b-' ,label='Water Saturation $(t=10)$', fillstyle='none')\n", "plt.xlabel(r\"$x$\",fontsize=18)\n", "plt.ylabel(r\"$u(x,t)$\",fontsize=18)\n", "plt.xlim(0,20)\n", "plt.ylim(0,1)\n", "plt.legend()\n", "plt.grid(True)\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "id": "8942c2c9-5293-4e5a-b1c1-70372e15b893", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "d517510c-528a-40ce-98c2-61b1af504daf", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "2111cc73-0853-4558-9011-ea70c7c16098", "metadata": {}, "source": [ "### LBM D1Q3 (FTCS-SD): Variable Lattice Sound Speed (Diffusive Effect Analysis)" ] }, { "cell_type": "markdown", "id": "4bade4f4-8412-4603-b857-f48d2bc82397", "metadata": {}, "source": [ "```{toggle}\n", "\n", "```python\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#***************************************InputParameters************************************************\n", "Nx=126 #Square Domain Length\n", "#***************************************Lattice-Properties-D1Q5*************************************************\n", "cs=1.0/sqrt(4.5);\n", "w = np.array([7.0/9.0, 1.0/9.0, 1.0/9.0],dtype=\"float64\")\n", "cx = np.array([0, 1, -1],dtype=\"int16\") \n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(3) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "m=1.0 # Dynamic Viscosity ration\n", "print('dx=',dx,'\\t dt=',dt)\n", "#***************************************LBM-Scale************************************************\n", "ue=uo/c\n", "sk1=np.zeros((Nx),dtype=\"float64\")\n", "Bx=np.zeros((Nx),dtype=\"float64\")\n", "f=np.zeros((3,Nx),dtype=\"float64\")\n", "for k in range(0,3):\n", " f[k,:]=w[k]*(sk1[:]+cx[k]*Bx[:]/cs**2)\n", "for t in range(nt):\n", " #----------------------Macro------------------\n", " sk1[:]=f[0,:]+f[1,:]+f[2,:]\n", " Bx=ue*sk1*sk1/(sk1*sk1+(1.0-sk1)**(2.0))\n", " #--------------------Collision----------------\n", " for k in range(0,3):\n", " f[k,:]=w[k]*(sk1[:]+cx[k]*Bx[:]/cs**2)\n", " #-----------------streaming-------------------\n", " for k in range(0,3):\n", " f[k,:]=np.roll(f[k,:], cx[k], axis=0)\n", " #-----------------Boundaries-----------------------\n", " f[1,0]= 1.0 - f[0,0]-f[2,0]\n", " f[0,Nx-1]=f[0,Nx-2]\n", " f[1,Nx-1]=f[1,Nx-2]\n", " f[2,Nx-1]=f[2,Nx-2]\n", "x = np.linspace(0, L, Nx)\n", "plt.plot(x, sk1, 'k-' ,label='Water Saturation $(t=10)$')\n", "plt.xlabel(r\"$x$\",fontsize=18)\n", "plt.ylabel(r\"$u(x,t)$\",fontsize=18)\n", "plt.xlim(0,20)\n", "plt.ylim(0,1)\n", "plt.legend()\n", "plt.grid(True)\n", "plt.tight_layout()\n", "```" ] }, { "cell_type": "markdown", "id": "d3d43d43-de74-42e0-b8e4-3cb0279f4b8c", "metadata": {}, "source": [ "```{toggle}\n", "\n", "```python\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#***************************************InputParameters************************************************\n", "Nx=126 #Square Domain Length\n", "#***************************************Lattice-Properties-D1Q5*************************************************\n", "cs=1.0/sqrt(9.0);\n", "w = np.array([8.0/9.0, 1.0/18.0, 1.0/18.0],dtype=\"float64\")\n", "cx = np.array([0, 1, -1],dtype=\"int16\") \n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(4) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "m=1.0 # Dynamic Viscosity ration\n", "print('dx=',dx,'\\t dt=',dt)\n", "#***************************************LBM-Scale************************************************\n", "ue=uo/c\n", "sk2=np.zeros((Nx),dtype=\"float64\")\n", "Bx=np.zeros((Nx),dtype=\"float64\")\n", "f=np.zeros((3,Nx),dtype=\"float64\")\n", "for k in range(0,3):\n", " f[k,:]=w[k]*(sk2[:]+cx[k]*Bx[:]/cs**2)\n", "for t in range(nt):\n", " #----------------------Macro------------------\n", " sk2[:]=f[0,:]+f[1,:]+f[2,:]\n", " Bx=ue*sk2*sk2/(sk2*sk2+(1.0-sk2)**(2.0))\n", " #--------------------Collision----------------\n", " for k in range(0,3):\n", " f[k,:]=w[k]*(sk2[:]+cx[k]*Bx[:]/cs**2)\n", " #-----------------streaming-------------------\n", " for k in range(0,3):\n", " f[k,:]=np.roll(f[k,:], cx[k], axis=0)\n", " #-----------------Boundaries-----------------------\n", " f[1,0]= 1.0 - f[0,0]-f[2,0]\n", " f[0,Nx-1]=f[0,Nx-2]\n", " f[1,Nx-1]=f[1,Nx-2]\n", " f[2,Nx-1]=f[2,Nx-2]\n", "x = np.linspace(0, L, Nx)\n", "plt.plot(x, sk2, 'k-' ,label='Water Saturation $(t=10)$')\n", "plt.xlabel(r\"$x$\",fontsize=18)\n", "plt.ylabel(r\"$u(x,t)$\",fontsize=18)\n", "plt.xlim(0,20)\n", "plt.ylim(0,1)\n", "plt.legend()\n", "plt.grid(True)\n", "plt.tight_layout()\n", "```" ] }, { "cell_type": "markdown", "id": "160a1dd0-1e4d-4fe1-ba87-4adc9d9605d8", "metadata": {}, "source": [ "```{toggle}\n", "\n", "```python\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#***************************************InputParameters************************************************\n", "Nx=126 #Square Domain Length\n", "#***************************************Lattice-Properties-D1Q5*************************************************\n", "cs=1.0/sqrt(18.0);\n", "w = np.array([17.0/18.0, 1.0/36.0, 1.0/36.0],dtype=\"float64\")\n", "cx = np.array([0, 1, -1],dtype=\"int16\") \n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(5) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "m=1.0 # Dynamic Viscosity ration\n", "print('dx=',dx,'\\t dt=',dt)\n", "#***************************************LBM-Scale************************************************\n", "ue=uo/c\n", "sk3=np.zeros((Nx),dtype=\"float64\")\n", "Bx=np.zeros((Nx),dtype=\"float64\")\n", "f=np.zeros((3,Nx),dtype=\"float64\")\n", "for k in range(0,3):\n", " f[k,:]=w[k]*(sk3[:]+cx[k]*Bx[:]/cs**2)\n", "for t in range(nt):\n", " #----------------------Macro------------------\n", " sk3[:]=f[0,:]+f[1,:]+f[2,:]\n", " Bx=ue*sk3*sk3/(sk3*sk3+(1.0-sk3)**(2.0))\n", " #--------------------Collision----------------\n", " for k in range(0,3):\n", " f[k,:]=w[k]*(sk3[:]+cx[k]*Bx[:]/cs**2)\n", " #-----------------streaming-------------------\n", " for k in range(0,3):\n", " f[k,:]=np.roll(f[k,:], cx[k], axis=0)\n", " #-----------------Boundaries-----------------------\n", " f[1,0]= 1.0 - f[0,0]-f[2,0]\n", " f[0,Nx-1]=f[0,Nx-2]\n", " f[1,Nx-1]=f[1,Nx-2]\n", " f[2,Nx-1]=f[2,Nx-2]\n", "x = np.linspace(0, L, Nx)\n", "plt.plot(x, sk3, 'k-' ,label='Water Saturation $(t=10)$')\n", "plt.xlabel(r\"$x$\",fontsize=18)\n", "plt.ylabel(r\"$u(x,t)$\",fontsize=18)\n", "plt.xlim(0,20)\n", "plt.ylim(0,1)\n", "plt.legend()\n", "plt.grid(True)\n", "plt.tight_layout()\n", "```" ] }, { "cell_type": "markdown", "id": "5b1a8b54-d195-4f23-8138-f15d7b8eb036", "metadata": {}, "source": [ "```{toggle}\n", "\n", "```python\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#***************************************InputParameters************************************************\n", "Nx=126 #Square Domain Length\n", "#***************************************Lattice-Properties-D1Q5*************************************************\n", "cs=1.0/sqrt(2.0);\n", "w = np.array([1.0/2.0, 1.0/4.0, 1.0/4.0],dtype=\"float64\")\n", "cx = np.array([0, 1, -1],dtype=\"int16\") \n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(2) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "m=1.0 # Dynamic Viscosity ration\n", "print('dx=',dx,'\\t dt=',dt)\n", "#***************************************LBM-Scale************************************************\n", "ue=uo/c\n", "sk4=np.zeros((Nx),dtype=\"float64\")\n", "Bx=np.zeros((Nx),dtype=\"float64\")\n", "f=np.zeros((3,Nx),dtype=\"float64\")\n", "for k in range(0,3):\n", " f[k,:]=w[k]*(sk4[:]+cx[k]*Bx[:]/cs**2)\n", "for t in range(nt):\n", " #----------------------Macro------------------\n", " sk4[:]=f[0,:]+f[1,:]+f[2,:]\n", " Bx=ue*sk4*sk4/(sk4*sk4+(1.0-sk4)**(2.0))\n", " #--------------------Collision----------------\n", " for k in range(0,3):\n", " f[k,:]=w[k]*(sk4[:]+cx[k]*Bx[:]/cs**2)\n", " #-----------------streaming-------------------\n", " for k in range(0,3):\n", " f[k,:]=np.roll(f[k,:], cx[k], axis=0)\n", " #-----------------Boundaries-----------------------\n", " f[1,0]= 1.0 - f[0,0]-f[2,0]\n", " f[0,Nx-1]=f[0,Nx-2]\n", " f[1,Nx-1]=f[1,Nx-2]\n", " f[2,Nx-1]=f[2,Nx-2]\n", "x = np.linspace(0, L, Nx)\n", "plt.plot(x, sk4, 'k-' ,label='Water Saturation $(t=10)$')\n", "plt.xlabel(r\"$x$\",fontsize=18)\n", "plt.ylabel(r\"$u(x,t)$\",fontsize=18)\n", "plt.xlim(0,20)\n", "plt.ylim(0,1)\n", "plt.legend()\n", "plt.grid(True)\n", "plt.tight_layout()\n", "```" ] }, { "cell_type": "markdown", "id": "9766fc10-c1ad-4b88-910b-3a107a7230b8", "metadata": {}, "source": [ "```{toggle}\n", "\n", "```python\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pylab import *\n", "matplotlib.rcParams['mathtext.fontset'] = 'cm'\n", "#***************************************InputParameters************************************************\n", "Nx=126 #Square Domain Length\n", "#***************************************Lattice-Properties-D1Q5*************************************************\n", "cs=1.0/sqrt(3.0/2.0);\n", "w = np.array([1.0/3.0, 1.0/3.0, 1.0/3.0],dtype=\"float64\")\n", "cx = np.array([0, 1, -1],dtype=\"int16\") \n", "L = 20.0 # Length of the reservoir\n", "T = 10.0 # Total simulation time\n", "dx = L / (Nx-1) # Spatial step size\n", "c=2**(2) # c=dx/dt\n", "dt=dx/c # Time step size\n", "nt = int(T / dt) # Time step number\n", "uo=1.0 # Constant Fluid Flux\n", "m=1.0 # Dynamic Viscosity ration\n", "print('dx=',dx,'\\t dt=',dt)\n", "#***************************************LBM-Scale************************************************\n", "ue=uo/c\n", "sk5=np.zeros((Nx),dtype=\"float64\")\n", "Bx=np.zeros((Nx),dtype=\"float64\")\n", "f=np.zeros((3,Nx),dtype=\"float64\")\n", "for k in range(0,3):\n", " f[k,:]=w[k]*(sk5[:]+cx[k]*Bx[:]/cs**2)\n", "for t in range(nt):\n", " #----------------------Macro------------------\n", " sk5[:]=f[0,:]+f[1,:]+f[2,:]\n", " Bx=ue*sk5*sk5/(sk5*sk5+(1.0-sk5)**(2.0))\n", " #--------------------Collision----------------\n", " for k in range(0,3):\n", " f[k,:]=w[k]*(sk5[:]+cx[k]*Bx[:]/cs**2)\n", " #-----------------streaming-------------------\n", " for k in range(0,3):\n", " f[k,:]=np.roll(f[k,:], cx[k], axis=0)\n", " #-----------------Boundaries-----------------------\n", " f[1,0]= 1.0 - f[0,0]-f[2,0]\n", " f[0,Nx-1]=f[0,Nx-2]\n", " f[1,Nx-1]=f[1,Nx-2]\n", " f[2,Nx-1]=f[2,Nx-2]\n", "x = np.linspace(0, L, Nx)\n", "plt.plot(x, sk5, 'k-' ,label='Water Saturation $(t=10)$')\n", "plt.xlabel(r\"$x$\",fontsize=18)\n", "plt.ylabel(r\"$u(x,t)$\",fontsize=18)\n", "plt.xlim(0,20)\n", "plt.ylim(0,1)\n", "plt.legend()\n", "plt.grid(True)\n", "plt.tight_layout()\n", "```" ] }, { "cell_type": "markdown", "id": "5e76bfef-99a7-490c-b470-ece3cbc7732e", "metadata": {}, "source": [ "```{toggle}\n", "\n", "```python\n", "plt.plot(x, sk4, 'yD:' ,label='LBM D1Q3: $a_{s}^{2}=1.5$ $(t=10)$',markersize=6,fillstyle=\"none\")\n", "plt.plot(x, sk5, 'cd:' ,label='LBM D1Q3: $a_{s}^{2}=2$ $(t=10)$',markersize=6,fillstyle=\"none\")\n", "plt.plot(x, sk1, 'ks:' ,label='LBM D1Q3: $a_{s}^{2}=4.5$ $(t=10)$',markersize=6,fillstyle=\"none\")\n", "plt.plot(x, sk2, 'ro:' ,label='LBM D1Q3: $a_{s}^{2}=9$ $(t=10)$',markersize=6,fillstyle=\"none\")\n", "plt.plot(x, sk3, 'bp:' ,label='LBM D1Q3: $a_{s}^{2}=18$ $(t=10)$',markersize=6,fillstyle=\"none\")\n", "plt.xlabel(r\"$x$\",fontsize=18)\n", "plt.ylabel(r\"$u(x,t)$\",fontsize=18)\n", "plt.xlim(0,20)\n", "plt.ylim(0,1)\n", "plt.legend()\n", "plt.grid(True)\n", "plt.tight_layout()\n", "```" ] }, { "attachments": {}, "cell_type": "markdown", "id": "e2753f59-9d5c-4565-b1a2-f622437a9e22", "metadata": {}, "source": [ "```{figure} variable-cs.png\n", "---\n", "scale: 100%\n", "align: center\n", "name: variable-cs\n", "---\n", "Comparisson of saturation profile for FDM and LBM FTCS-SD schemes.\n", "```" ] } ], "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.10.12" } }, "nbformat": 4, "nbformat_minor": 5 }