FiniteVolumeGPU/OpenCL to CUDA.ipynb
2018-07-24 15:44:49 +02:00

212 lines
18 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": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\anbro\\Documents\\projects\\ShallowWaterGPU\\SWESimulators\\Common.py:28: UserWarning: The CUDA compiler succeeded, but said the following:\n",
"kernel.cu\r\n",
"c:\\users\\anbro\\documents\\projects\\shallowwatergpu\\swesimulators\\common.cu(837): warning: variable \"rv_1\" was declared but never referenced\r\n",
"\r\n",
"c:\\users\\anbro\\documents\\projects\\shallowwatergpu\\swesimulators\\common.cu(839): warning: variable \"rh_2\" was declared but never referenced\r\n",
"\r\n",
"c:\\users\\anbro\\documents\\projects\\shallowwatergpu\\swesimulators\\common.cu(843): warning: variable \"rv_3\" was declared but never referenced\r\n",
"\r\n",
"\n",
" kernel = cuda_compiler.SourceModule(kernel_string, include_dirs=[module_path])\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.colorbar.Colorbar at 0x614a002d68>"
]
},
"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": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"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
}