FiniteVolumeGPU/OpenCL to CUDA.ipynb
2018-07-25 08:48:43 +02:00

246 lines
31 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"#Lets have matplotlib \"inline\"\n",
"%matplotlib inline\n",
"\n",
"#Import packages we need\n",
"import numpy as np\n",
"from matplotlib import animation, rc\n",
"from matplotlib import pyplot as plt\n",
"\n",
"import subprocess\n",
"import os\n",
"import gc\n",
"import datetime\n",
"import importlib\n",
"\n",
"import pycuda.autoinit\n",
"import pycuda.driver\n",
"\n",
"try:\n",
" from StringIO import StringIO\n",
"except ImportError:\n",
" from io import StringIO\n",
"\n",
"#Set large figure sizes\n",
"#Note, this prevents nice figures for articles...\n",
"rc('figure', figsize=(16.0, 12.0))\n",
"rc('animation', html='html5')\n",
"\n",
"#Finally, import our simulator\n",
"#from SWESimulators import FBL, CTCS, LxF, FORCE, HLL, HLL2, KP07, KP07_dimsplit, WAF, CDKLM16, DataOutput, PlotHelper"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def gen_test_data(nx, ny, num_ghost_cells):\n",
" width = 100.0\n",
" height = width\n",
" dx = width / float(nx)\n",
" dy = height / float(ny)\n",
"\n",
" h = np.zeros((ny+2*num_ghost_cells, nx+2*num_ghost_cells), dtype=np.float32); \n",
" hu = np.zeros((ny+2*num_ghost_cells, nx+2*num_ghost_cells), dtype=np.float32);\n",
" hv = np.zeros((ny+2*num_ghost_cells, nx+2*num_ghost_cells), dtype=np.float32);\n",
"\n",
" #Create a gaussian \"dam break\" that will not form shocks\n",
" x_center = dx*nx/2.0\n",
" y_center = dy*ny/2.0\n",
" size = width \n",
" for j in range(-num_ghost_cells, ny+num_ghost_cells):\n",
" y = dy*(j+0.5) - y_center\n",
" for i in range(-num_ghost_cells, nx+num_ghost_cells):\n",
" x = dx*(i+0.5) - x_center\n",
" \n",
" h[j+num_ghost_cells, i+num_ghost_cells] = 0.5 + 0.1*np.exp(-(x**2/size + y**2/size))\n",
" #hu[j+num_ghost_cells, i+num_ghost_cells] = 0.01*np.sin(x)*np.exp(-(x**2/size))\n",
" hu[j+num_ghost_cells, i+num_ghost_cells] = 0.1*np.exp(-(x**2/size + y**2/size))\n",
" hv[j+num_ghost_cells, i+num_ghost_cells] = 0.1*np.exp(-(x**2/size + y**2/size))\n",
" \n",
" return h, hu, hv, dx, dy, nx, ny"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sum of absolute difference: 0.0\n"
]
}
],
"source": [
"from SWESimulators import Common\n",
"importlib.reload(Common)\n",
"\n",
"nx = 10\n",
"ny = 15\n",
"nx_halo = 2\n",
"ny_halo = 3\n",
"a = np.random.rand(ny+2*ny_halo, nx+2*nx_halo).astype(np.float32)\n",
"\n",
"a_gpu = Common.CUDAArray2D(nx, ny, nx_halo, ny_halo, a)\n",
"b = a_gpu.download(async=True)\n",
"pycuda.driver.Context.synchronize()\n",
"print(\"Sum of absolute difference: \", np.sum(np.abs(a-b)))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.colorbar.Colorbar at 0xef53611a20>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from SWESimulators import LxF\n",
"importlib.reload(LxF)\n",
"\n",
"nx = 10\n",
"ny = 15\n",
"num_ghost_cells = 1\n",
"dt = 0.01\n",
"g = 9.81\n",
"\n",
"h0, hu0, hv0, dx, dy, nx, ny = gen_test_data(nx, ny, num_ghost_cells)\n",
"plt.figure()\n",
"plt.subplot(121)\n",
"plt.imshow(h0)\n",
"plt.colorbar()\n",
"\n",
"sim = LxF.LxF(h0, hu0, hv0, \\\n",
" nx, ny, \\\n",
" dx, dy, dt, \\\n",
" g)\n",
"\n",
"t = sim.step(0.02)\n",
"h1, hu1, hv1 = sim.download()\n",
"\n",
"plt.subplot(122)\n",
"plt.imshow(h1)\n",
"plt.colorbar()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.colorbar.Colorbar at 0xef53931160>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from SWESimulators import FORCE\n",
"importlib.reload(FORCE)\n",
"\n",
"nx = 10\n",
"ny = 15\n",
"num_ghost_cells = 1\n",
"dt = 0.01\n",
"g = 9.81\n",
"\n",
"h0, hu0, hv0, dx, dy, nx, ny = gen_test_data(nx, ny, num_ghost_cells)\n",
"plt.figure()\n",
"plt.subplot(121)\n",
"plt.imshow(h0)\n",
"plt.colorbar()\n",
"\n",
"sim = FORCE.FORCE(h0, hu0, hv0, \\\n",
" nx, ny, \\\n",
" dx, dy, dt, \\\n",
" g)\n",
"\n",
"t = sim.step(0.02)\n",
"h1, hu1, hv1 = sim.download()\n",
"\n",
"plt.subplot(122)\n",
"plt.imshow(h1)\n",
"plt.colorbar()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}