mirror of
https://github.com/smyalygames/FiniteVolumeGPU.git
synced 2025-05-18 06:24:13 +02:00
491 lines
62 KiB
Plaintext
491 lines
62 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Starting cluster\n",
|
|
"\n",
|
|
"## Prerequisites\n",
|
|
"First, you need to install MPI, on windows use MS-MPI:\n",
|
|
"https://msdn.microsoft.com/en-us/library/bb524831(v=vs.85).aspx\n",
|
|
"\n",
|
|
"\n",
|
|
"## With a profile (not working)\n",
|
|
"In theory, you should be able to create a profile using\n",
|
|
"```\n",
|
|
"ipython profile create --parallel --profile=myprofile\n",
|
|
"```\n",
|
|
"and then set\n",
|
|
"```\n",
|
|
"c.IPClusterEngines.engine_launcher_class = 'MPIEngineSetLauncher'\n",
|
|
"```\n",
|
|
"in ```<IPYTHON-DIR>/profile_myprofile/ipcluster_config.py```. This should then enable you to start a cluster using\n",
|
|
"```\n",
|
|
"ipcluster start --profile=myprofile\n",
|
|
"```\n",
|
|
"or alternatively through the Clusters tab in Jupyter\n",
|
|
"\n",
|
|
"\n",
|
|
"## Without a profile (not working)\n",
|
|
"An alternative is to run\n",
|
|
"```\n",
|
|
"ipcluster start --engines=MPI\n",
|
|
"```\n",
|
|
"\n",
|
|
"\n",
|
|
"## Manual start (working)\n",
|
|
"This, however, does *not* work for me on Windows. What does work is the following:\n",
|
|
"\n",
|
|
"Start a controller using\n",
|
|
"```\n",
|
|
"ipcontroller --ip='*'\n",
|
|
"```\n",
|
|
"and then start several engines using mpiexec:\n",
|
|
"```\n",
|
|
"mpiexec -n 4 ipengine --mpi\n",
|
|
"```"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"profile: default\n",
|
|
"Number of ids: 4\n",
|
|
"IDs: [0, 1, 2, 3]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import ipyparallel\n",
|
|
"\n",
|
|
"# attach to a running cluster\n",
|
|
"cluster = ipyparallel.Client()#profile='mpi')\n",
|
|
"\n",
|
|
"print('profile:', cluster.profile)\n",
|
|
"print('Number of ids:', len(cluster.ids))\n",
|
|
"print(\"IDs:\", cluster.ids) # Print process id numbers"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[stdout:0] Hello! I'm rank 0 from 4 running in total...\n",
|
|
"[stdout:1] Hello! I'm rank 1 from 4 running in total...\n",
|
|
"[stdout:2] Hello! I'm rank 2 from 4 running in total...\n",
|
|
"[stdout:3] Hello! I'm rank 3 from 4 running in total...\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%%px\n",
|
|
"\n",
|
|
"from mpi4py import MPI\n",
|
|
"\n",
|
|
"comm = MPI.COMM_WORLD\n",
|
|
"\n",
|
|
"print(\"Hello! I'm rank %d from %d running in total...\" % (comm.rank, comm.size))\n",
|
|
"\n",
|
|
"comm.Barrier() # wait for everybody to synchronize _here_"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[stdout:0] \n",
|
|
"Starting\n",
|
|
"0: sent data to 1: [72 15 76 64 65 38 95 9 93 19 42 48 30 7 46 35 59 81 68 47 20 70 91 80\n",
|
|
" 49 23 1 34 56 82 11 31 29 78 92 58 77 17 53 79 60 27 51 5 41 52 87 74\n",
|
|
" 86 54 33 39 83 73 12 66 40 55 44 84 26 6 50 21 97 71 62 37 90 57 89 43\n",
|
|
" 28 4 25 32 85 69 3 18 10 0 24 22 63 16 75 96 99 67 2 45 61 13 88 36\n",
|
|
" 14 94 98 8]\n",
|
|
"[stdout:1] \n",
|
|
"Starting\n",
|
|
"1: received data from 0: [72 15 76 64 65 38 95 9 93 19 42 48 30 7 46 35 59 81 68 47 20 70 91 80\n",
|
|
" 49 23 1 34 56 82 11 31 29 78 92 58 77 17 53 79 60 27 51 5 41 52 87 74\n",
|
|
" 86 54 33 39 83 73 12 66 40 55 44 84 26 6 50 21 97 71 62 37 90 57 89 43\n",
|
|
" 28 4 25 32 85 69 3 18 10 0 24 22 63 16 75 96 99 67 2 45 61 13 88 36\n",
|
|
" 14 94 98 8]\n",
|
|
"[stdout:2] \n",
|
|
"Starting\n",
|
|
"2: idle\n",
|
|
"[stdout:3] \n",
|
|
"Starting\n",
|
|
"3: idle\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%%px\n",
|
|
"\n",
|
|
"from mpi4py import MPI\n",
|
|
"import numpy\n",
|
|
"\n",
|
|
"comm = MPI.COMM_WORLD\n",
|
|
"rank = comm.Get_rank()\n",
|
|
"\n",
|
|
"print(\"Starting\")\n",
|
|
"# passing MPI datatypes explicitly\n",
|
|
"if rank == 0:\n",
|
|
" data = numpy.arange(100, dtype='i')\n",
|
|
" numpy.random.shuffle(data)\n",
|
|
" comm.Send([data, MPI.INT], dest=1, tag=77)\n",
|
|
" print(\"{0}: sent data to 1: {1}\".format(rank, data))\n",
|
|
"elif rank == 1:\n",
|
|
" data = numpy.empty(100, dtype='i')\n",
|
|
" comm.Recv([data, MPI.INT], source=0, tag=77)\n",
|
|
" print(\"{0}: received data from 0: {1}\".format(rank, data))\n",
|
|
"else:\n",
|
|
" print(\"{0}: idle\".format(rank))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%%px\n",
|
|
"\n",
|
|
"#Lets have matplotlib \"inline\"\n",
|
|
"%matplotlib inline\n",
|
|
"\n",
|
|
"#Python 2.7 compatibility\n",
|
|
"from __future__ import print_function\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",
|
|
"#import mpld3\n",
|
|
"\n",
|
|
"import subprocess\n",
|
|
"import os\n",
|
|
"import gc\n",
|
|
"import datetime\n",
|
|
"\n",
|
|
"import pycuda.driver as cuda\n",
|
|
"\n",
|
|
"try:\n",
|
|
" from StringIO import StringIO\n",
|
|
"except ImportError:\n",
|
|
" from io import StringIO\n",
|
|
"\n",
|
|
"#Finally, import our simulator\n",
|
|
"from SWESimulators import Common, HLL2, PlotHelper"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[stdout:0] \n",
|
|
"No CUDA context available\n",
|
|
"CUDA version (9, 1, 0)\n",
|
|
"Driver version 9010\n",
|
|
"Using GeForce 840M\n",
|
|
" => compute capability: (5, 0)\n",
|
|
" => memory: 2048.0 MB\n",
|
|
"Created context <231790149408>\n",
|
|
"[stdout:1] \n",
|
|
"No CUDA context available\n",
|
|
"CUDA version (9, 1, 0)\n",
|
|
"Driver version 9010\n",
|
|
"Using GeForce 840M\n",
|
|
" => compute capability: (5, 0)\n",
|
|
" => memory: 2048.0 MB\n",
|
|
"Created context <969490393648>\n",
|
|
"[stdout:2] \n",
|
|
"No CUDA context available\n",
|
|
"CUDA version (9, 1, 0)\n",
|
|
"Driver version 9010\n",
|
|
"Using GeForce 840M\n",
|
|
" => compute capability: (5, 0)\n",
|
|
" => memory: 2048.0 MB\n",
|
|
"Created context <557075755584>\n",
|
|
"[stdout:3] \n",
|
|
"No CUDA context available\n",
|
|
"CUDA version (9, 1, 0)\n",
|
|
"Driver version 9010\n",
|
|
"Using GeForce 840M\n",
|
|
" => compute capability: (5, 0)\n",
|
|
" => memory: 2048.0 MB\n",
|
|
"Created context <77307610272>\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%%px \n",
|
|
"\n",
|
|
"import atexit\n",
|
|
"def exitfunc():\n",
|
|
" #Clean up old context if any:\n",
|
|
" if 'cuda_context' in globals():\n",
|
|
" print(\"Cleaning up CUDA context!\")\n",
|
|
" global cuda_context\n",
|
|
" del cuda_context\n",
|
|
" gc.collect()\n",
|
|
" else:\n",
|
|
" print(\"No CUDA context available\")\n",
|
|
" gc.collect()\n",
|
|
" \n",
|
|
"atexit.register(exitfunc)\n",
|
|
"exitfunc()\n",
|
|
" \n",
|
|
"cuda_context = Common.CudaContext(verbose=True, blocking=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%%px\n",
|
|
"\n",
|
|
"def gen_test_data(nx, ny, g, num_ghost_cells):\n",
|
|
" width = 100.0\n",
|
|
" height = 100.0\n",
|
|
" dx = width / float(nx)\n",
|
|
" dy = height / float(ny)\n",
|
|
"\n",
|
|
" x_center = dx*nx/2.0\n",
|
|
" y_center = dy*ny/2.0\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",
|
|
" comm = MPI.COMM_WORLD\n",
|
|
"\n",
|
|
" #Create a gaussian \"dam break\" that will not form shocks\n",
|
|
" size = width / 3.0\n",
|
|
" dt = 10**10\n",
|
|
" for j in range(-num_ghost_cells, ny+num_ghost_cells):\n",
|
|
" for i in range(-num_ghost_cells, nx+num_ghost_cells):\n",
|
|
" x = dx*(i+0.5) - x_center\n",
|
|
" y = dy*(j+0.5) - y_center\n",
|
|
" \n",
|
|
" h[j+num_ghost_cells, i+num_ghost_cells] = 0.5 + 0.1*(comm.rank + np.exp(-(x**2/size)))\n",
|
|
" hu[j+num_ghost_cells, i+num_ghost_cells] = 0.1*np.exp(-(x**2/size))\n",
|
|
" \n",
|
|
" max_h_estimate = comm.rank* 0.1 + 0.6\n",
|
|
" max_u_estimate = 0.1*2.0\n",
|
|
" dt = min(dx, dy) / (max_u_estimate + np.sqrt(g*max_h_estimate))\n",
|
|
" \n",
|
|
" return h, hu, hv, dx, dy, dt"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%%px\n",
|
|
"\n",
|
|
"def sanity_check(variable, variable_name):\n",
|
|
" maxval = np.amax(variable)\n",
|
|
" minval = np.amin(variable)\n",
|
|
" if (np.isnan(maxval) or np.isnan(minval)):\n",
|
|
" print(\"=== WARNING ===\")\n",
|
|
" print(variable_name + \" contains NaN values\")\n",
|
|
" print(\"=== WARNING ===\")\n",
|
|
"\n",
|
|
"def run_benchmark(simulator, courant_number, nx, ny, ghost_cells, g=9.81):\n",
|
|
" h0, hu0, hv0, dx, dy, dt = gen_test_data(nx, ny, g, ghost_cells)\n",
|
|
" dt = dt * courant_number\n",
|
|
"\n",
|
|
" #Initialize simulator\n",
|
|
" with Common.Timer(simulator.__name__ + \"_\" + str(nx)) as timer:\n",
|
|
" sim = simulator(cuda_context, \\\n",
|
|
" h0, hu0, hv0, \\\n",
|
|
" nx, ny, \\\n",
|
|
" dx, dy, dt, \\\n",
|
|
" g)\n",
|
|
"\n",
|
|
" t = sim.step(2.0)\n",
|
|
"\n",
|
|
" h, hu, hv = sim.download()\n",
|
|
"\n",
|
|
" h = h[ghost_cells, ghost_cells:-ghost_cells]\n",
|
|
" hu = hu[ghost_cells, ghost_cells:-ghost_cells]\n",
|
|
" hv = hv[ghost_cells, ghost_cells:-ghost_cells]\n",
|
|
"\n",
|
|
" sanity_check(h, \"h\")\n",
|
|
" sanity_check(hu, \"hu\")\n",
|
|
" sanity_check(hv, \"hv\")\n",
|
|
"\n",
|
|
" return [h, hu, hv]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[stdout:0] => HLL2_1024 5068.608284 ms\n",
|
|
"[stdout:1] => HLL2_1024 5038.588524 ms\n",
|
|
"[stdout:2] => HLL2_1024 5084.618568 ms\n",
|
|
"[stdout:3] => HLL2_1024 5121.647835 ms\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[output:0]"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"engine": 0
|
|
},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[output:1]"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"engine": 1
|
|
},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[output:2]"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEICAYAAACktLTqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8FfW9//HXJwkJJOwQZN9xAS8KRsGtWjdA/WltbQt1bal2s3pv7W312lar9ddqN2tFr6hV645bxRWtS2utIEEE2Y2sYQ37HrJ87h8zwWMIyTnJOTnJ5P18PM6DMzPfmflMJrzP5DtzZszdERGRaMlIdwEiIpJ8CncRkQhSuIuIRJDCXUQkghTuIiIRpHAXEYkghXsLZGYXmdnrKVr2Q2b2qwbMv9PMBiazpsZkZjeZ2aPprqMuZnaqmRWnuw5JHYV7RJnZSWb2bzPbZmabzew9MzsWwN0fc/ezmkCN75jZt2PHuXtbd1+arpqSycz6m5mbWVa6a0kFMxttZm+Ev18lZva0mfVId10SULhHkJm1B14C/gx0BnoBvwRK01lXUxGFsG0i29AJmAz0B/oBO4AH01mQfEbhHk2HArj7E+5e4e573P11d58LYGaXm9m/qhqHR5ffN7NPzGyHmd1iZoPM7H0z225mU8wsu6Z5Y+YfXL0IM+tkZi+FR3Vbwve9w2m3AicDd4VdMXdVX5aZdTCzv4bzrzCzn5lZRmwdZva7cNnLzGzcwX4gZrbczH5qZnOBXWaWZWY9zezZcPnLzOzqmPbHmVlhuP3rzewP4fgDujPCZZ9Rw2r/Gf67NdzG481ssJn9I/yLaqOZPXWwmqut4/Lwr68/mtlm4KZwH71lZpvCZT1mZh2r1fVjM5sbru8pM2t9kOVfbWYLqvZPPNz9VXd/2t23u/tu4C7gxHjnl9RSuEfTEqDCzB42s3Fm1imOecYCxwCjgZ8QHJFdBPQBjgQm1KOODIIjuX5AX2APQQDg7jcA7wJXhV0xV9Uw/5+BDsBA4BTgUuCbMdNHAYuBrsDtwANmZrXUMwE4B+gIVAIvAnMI/rI5HfhPMxsTtv0T8Cd3bw8MAqYktOWBL4T/dgy38X3gFuB1gqPe3uE2xmsUsBToBtwKGPBroCdwBMG+uqnaPF8j2LcDgOHA5dUXamY/D8ef4u7FZtbXzLbW8vpGLds7P4HtkRRSuEeQu28HTgIcuA8oMbOpZnZILbPdFh6BzQfmAa+7+1J33wa8CoyoRx2b3P1Zd9/t7jsIAumUeOY1s0zg68D17r7D3ZcDvwcuiWm2wt3vc/cK4GGgB1DbNt7p7qvcfQ9wLJDv7je7+76wn/8+YHzYtgwYbGZd3X2nu0+Pf8trVUbwYdfT3fe6+7/qmiHGGnf/s7uXh3+NFbn7G+5e6u4lwB848Od7p7uvcffNBB9mR8dMs/AvkjHAF8Nl4O4r3b1jLa/HqxdmZsOBXwD/ncD2SAop3CPK3Re6++Xu3pvgyLsncEcts6yPeb+nhuG2idZgZrlmdm/YpbKdoJuiYxjcdekKZAMrYsatIDjKrrKu6k3YLUAdda6Ked8P6Bl7RAr8D599OEwk6N5aZGYzzezcOGqOx08Ijrg/MLP5ZvatBOaNrR8z62ZmT5rZ6vDn+yjBzy3Wupj3u/n8z6cjcCXw6/BDvF7CbrRXgWvc/d36LkeSS+HeArj7IuAhgpBvqF1AbtWAmXWvpe21wGHAqLB7o6qboqrrpLZbkm7ks6PcKn2B1YkWHCN2fauAZdWOSNu5+9kA7v6Ju08g6AK5DXjGzPI4cPszgfw41ke43HXufoW79wS+A9xd0/mKOJf363Dc8PDnezGf/WzjsQU4F3jQzPb3lYfdMjtreV0U07Yf8HfgFnd/JIF1S4op3CPIzA43s2tjTl72IehvTkbXwhxgmJkdHZ6cu6mWtu0Ijvq3mlln4MZq09cT9KcfIOxqmQLcambtwhD5EcHRaTJ8AGwPT7K2MbNMMzvSwstFzexiM8t390pgazhPBcH5jNZmdo6ZtQJ+BuQcZB0lBH37+7fRzL4ac9JyC0E4V4TT3jGzmxLYhnbAToKfby/q0SXi7u8QnFt53sxGheNWhucIDvZ6LKy3F/AWMMnd/zfRdUtqKdyjaQfBybcZZraLINTnERxJN4i7LwFuJjha+wSorc/4DqANwVH4dOC1atP/BFxowdUud9Yw/w8JjpSXhut5HPhLgzYgFH54/D+CPuhlYY33E5zAheAk5Hwz2xnWOT7sI98GfD9suzqsr8YvA4VdRbcC74VdP6MJ+vpnhMudStCVsSycpQ/wXgKb8UtgJLANeBl4LoF5Y+t8g+BE9VQzOyaBWb9N8MF1Y+yRfX1qkOQzPaxDJP3Co/mn3f34dNci0aBwFxGJIHXLiIhEkMJdRCSC4gp3MxtrZovNrMjMrqthel8ze9vMZodfdT47+aWKiEi86uxzD6/jXQKcSXBVwExggrsviGkzGZjt7veY2VDgFXfvX9tyu3bt6v3719pERESqmTVr1kZ3P9h3K/aL585yxwFFVbdhNbMngfOBBTFtHGgfvu8ArKlrof3796ewsDCO1YuISBUzW1F3q/jCvRef/9pzMcE11LFuAl43sx8CeUBNd8gTEZFGEk+fe01fZ67elzMBeCi8j8nZwCMW3pr1cwsyu9KC26gWlpSUJF6tiIjEJZ5wLyb45lyV3hzY7TKR8Jao4W1NW3PgDYxw98nuXuDuBfn5dXYZiYhIPcUT7jOBIWY2wIIHNown+Np0rJUE98PGzI4gCHcdmouIpEmd4e7u5cBVwDRgITDF3eeb2c1mdl7Y7FrgCjObAzwBXO766quISNrE9RxGd38FeKXauF/EvF+AHq8lItJk6BuqIiIR1BSeoC4SCTtLy5mzaisrN+9m445SzKBL2xwG5bfl6D4dyc7SsZQ0HoW7SANs31vG8x+u5m8frWZu8TYqKms+1ZSbncmYYd255Ph+jOwbz/PKRRpG4S5SD/PXbOPR6St54aPV7N5XwbCe7fneKYMYNbAzA/Pbkt82eDjThh17WbBmO28vLuHFOWt4fvZqzjjiEP7n7MMZmJ/wY2lF4pa2+7kXFBS4bj8gzcnesgpenbeWR95fwYcrt5KTlcF5R/Xk4tH9OKpPxzrn31VazkP/Xs4973xKWUUlPx17OJef0J+MjEQeeyotnZnNcveCOtsp3EVqt3LTbh77YAVTZq5iy+4yBnTN46JRfbnwmN50zM1OeHkbduzlumc/5q1FGzh5SFfuHD+CTnmJL0daJoW7SAPsLavg9QXreWrmSt4r2kSGwZlDD+GS0f05YVCXBh9tuzuPf7CSX05dQLf2OUy+pIChPdvXPaO0eAp3kQS4O2u27WXG0k28sWA9/1hSwu59FfTu1IavF/ThwoLe9OjQJunrnb1yC999dBbb95Tz268O59zhPZO+DomWeMNdJ1Qlstyd0vJK9uyrYHdZBbtKy9mxt5ydpeXs3FvOxp2lrNy8mxWbdjG3eBsbdpQC0K1dDheM6MW4I3sk5Si9NiP6duLFH57E9x/9kKsen838Ndv58VmHkal+eGkghbs0a9v2lDF/9TbmrdnGonU7WLt1L+u272XD9r3sLqugrj9MW7fKoG/nXE4Y1IURfTsxsm8nhvVs36gnObu1a83jV4zmxqnzueedT1m4djt/Gj+CDm1aNVoNEj3qlpFmZ+Ha7Uybv45/Linho1Vbqbq0vHv71vTq1IbuHVrTrV0ObXOyaJOdSW6rTNpkZ9I2pxV5OZm0a51FXk4WnfOyyW+bg1nTOUp+bMYKbnxhPn0653LfpccwuFu7dJckTYz63CVSNuzYy9SP1vDsh6tZuHY7ZjC8d0dOGdKVYwd0ZljPDnSOyBUnM5dv5nuPzmL3vgp+fu5Qxh/bp0l9AEl6Kdyl2dtbVsEbC9bz7IfFvPvJRioqnaN6d+DLI3tzzvAedA2/KBRFa7ft4dopc/j3p5s47fBu3HrBkSk5oSvNj8JdmiV3p3DFFp6dVczLc9eyo7ScHh1ac8GIXnx5ZK8W1U1RWek89O/l3PbaIszgu6cM4oqTB5KXo1NlLZnCXZqN8opKPly5lTcXrufVeetYuXk3udmZjDuyB18e2YvjB6b2ipWmbtXm3fzm1UW8/PFaOrRpxSWj+3HR6L46km+hFO7SZJVVVLJo7Q5mrdhM4YotvFe0kS27y2iVaYwe2IULRvRizLDuOkKt5sOVW7j3H5/y+oL1ABzbvzPn/EcPjh/UhSHd2qpfvoVQuEujK6uoZPe+CnbvK2f3vgo279rHhu2lbNixlw07SllWsouikp0s37iL8vASl+7tW3P8oC6cfkQ3vnBoPu1b6/K/uqzYtIsXPlrD1DlrKNqwE4DOedkc3r0dhx7SjgFd8+jWLodu7XPIb9uavJxM8nKyyMnK0AdABEQ23J8uXMUD/1q2fzi2fOfz2/L5aVSbVq3tQQdqn/fAafHVU9NwfdZRfT0HTqttffX7eVWfVlnp7C2rZF9FZfUV7JeVYfTtnMugbm0Z3K0tR/RoT0G/TvTsqK6F+nJ3irfs4f2lmyhcvpnF63dStH4Hu/ZV1Ng+wyAvO4vsrAwyMoxMMzKM4H3VcEYwLhFGYjPo8wV+eNoQzhneo17zRvYbqu3btKJfl9zPjYv95ar+ixM7fMAvYS2D1Y9wqv8+fn651afZQacduM5aaj/I+qrPd0A9tay0tnUcsJza1vG58UbrVpnkZWeSm5NFbnYmudmZdMzNDo4g2+XQKTe7Rfebp4KZ0adzLn065/K1gj5AEPgbd+7b/9fSxh2l7CotZ3dZBbtLK9i1r5x95ZVUulNR6VRUQqX7/uFK9zq/+BUr0WPD6gc8yV5+c5GXk5nydTS7cB8zrDtjhnVPdxkiTZKZkd8uh/x2OQxLdzGSVnrul4hIBCncRUQiSOEuIhJBCncRkQhSuIuIRJDCXUQkghTuIiIRpHAXEYkghbuISAQp3EVEIkjhLiISQQp3EZEIUriLiESQwl1EJIIU7iIiEaRwFxGJIIW7iEgEKdxFRCIornA3s7FmttjMiszsuoO0+ZqZLTCz+Wb2eHLLFBGRRNT5DFUzywQmAWcCxcBMM5vq7gti2gwBrgdOdPctZtYtVQWLiEjd4jlyPw4ocvel7r4PeBI4v1qbK4BJ7r4FwN03JLdMERFJRDzh3gtYFTNcHI6LdShwqJm9Z2bTzWxsTQsysyvNrNDMCktKSupXsYiI1CmecLcaxnm14SxgCHAqMAG438w6HjCT+2R3L3D3gvz8/ERrFRGROMUT7sVAn5jh3sCaGtq84O5l7r4MWEwQ9iIikgbxhPtMYIiZDTCzbGA8MLVam78BXwQws64E3TRLk1moiIjEr85wd/dy4CpgGrAQmOLu883sZjM7L2w2DdhkZguAt4H/dvdNqSpaRERqZ+7Vu88bR0FBgRcWFqZl3SIizZWZzXL3grra6RuqIiIRpHAXEYkghbuISAQp3EVEIkjhLiISQQp3EZEIUriLiESQwl1EJIIU7iIiEaRwFxGJIIW7iEgEKdxFRCJI4S4iEkEKdxGRCFK4i4hEkMJdRCSCFO4iIhGkcBcRiSCFu4hIBCncRUQiSOEuIhJBCncRkQhSuIuIRJDCXUQkghTuIiIRpHAXEYkghbuISAQp3EVEIkjhLiISQQp3EZEIUriLiESQwl1EJIIU7iIiEaRwFxGJIIW7iEgEKdxFRCJI4S4iEkEKdxGRCIor3M1srJktNrMiM7uulnYXmpmbWUHyShQRkUTVGe5mlglMAsYBQ4EJZja0hnbtgKuBGckuUkREEhPPkftxQJG7L3X3fcCTwPk1tLsFuB3Ym8T6RESkHuIJ917Aqpjh4nDcfmY2Aujj7i/VtiAzu9LMCs2ssKSkJOFiRUQkPvGEu9UwzvdPNMsA/ghcW9eC3H2yuxe4e0F+fn78VYqISELiCfdioE/McG9gTcxwO+BI4B0zWw6MBqbqpKqISPrEE+4zgSFmNsDMsoHxwNSqie6+zd27unt/d+8PTAfOc/fClFQsIiJ1qjPc3b0cuAqYBiwEprj7fDO72czOS3WBIiKSuKx4Grn7K8Ar1cb94iBtT214WSIi0hD6hqqISAQp3EVEIkjhLiISQQp3EZEIUriLiESQwl1EJIIU7iIiEaRwFxGJIIW7iEgEKdxFRCJI4S4iEkEKdxGRCFK4i4hEkMJdRCSCFO4iIhGkcBcRiSCFu4hIBCncRUQiSOEuIhJBCncRkQhSuIuIRJDCXUQkghTuIiIRpHAXEYkghbuISAQp3EVEIkjhLiISQQp3EZEIUriLiESQwl1EJIIU7iIiEaRwFxGJIIW7iEgEKdxFRCJI4S4iEkEKdxGRCFK4i4hEUFzhbmZjzWyxmRWZ2XU1TP+RmS0ws7lm9qaZ9Ut+qSIiEq86w93MMoFJwDhgKDDBzIZWazYbKHD34cAzwO3JLlREROIXz5H7cUCRuy91933Ak8D5sQ3c/W133x0OTgd6J7dMERFJRDzh3gtYFTNcHI47mInAqzVNMLMrzazQzApLSkrir1JERBIST7hbDeO8xoZmFwMFwG9rmu7uk929wN0L8vPz469SREQSkhVHm2KgT8xwb2BN9UZmdgZwA3CKu5cmpzwREamPeMJ9JjDEzAYAq4HxwDdiG5jZCOBeYKy7b0h6lSLNSckSmH43rJ4FrXJhyJkw6juQ0y7dlUkLUme3jLuXA1cB04CFwBR3n29mN5vZeWGz3wJtgafN7CMzm5qyikWashmT4Z7jYe5TkJcPXgFv3QJ3Hw/r5qW7OmlBzL3G7vOUKygo8MLCwrSsWyQl3rsT3vg5HDoOzr8L8roG41fOgKcvg/JS+Pbfocug9NYpzZqZzXL3grra6RuqIsmw4IUg2Id9GcY/9lmwA/QdBZe/DGbw2FehdGf66pQWQ+Eu0lBblsMLV0GvY+CCeyEj88A2XQbB1/4Km5fCG79o9BKl5VG4izSEO7x8LXglXPggZGUfvG3/k2D096HwAVg5vfFqlBZJ4S7SEAtegKK/w2k/g05x3FLptBugXQ+YdkPwwSCSIgp3kfoqLw1Cuvt/wLFXxDdPdl7wQbC6EOY9m9r6pEVTuIvU16yHYHsxnPUryIznKyOhoyZAt2Hwzm+gsiJl5UnLpnAXqY99u+Cfv4P+J8OAUxKbNyMTvnAtbPoEFr2UmvqkxVO4i9THzPth14agi8Vquv1SHYZ+CToPhHd/r753SQmFu0iiykvh/bth4Beh7+j6LSMjE076L1g7Bz59M7n1iaBwF0ncx8/AznVwwg8btpzh46Ftd5h+T3LqEomhcBdJhDu8Pyk4ITrotIYtKysbjp0YXEq58ZPk1CcSUriLJOLTt2DDfDjhqvr1tVd3zOWQmQ0fTG74skRiKNxFEjH97qAr5cgLk7O8tt3gyK/AR4/D3m3JWaYICneR+G1ZDkVvBkfbtd1mIFGjvgP7dgYBL5IkCneReM16OOiKGXlpcpfbcwT0GQUz7oXKyuQuW1oshbtIPMr3wexH4dCx0KG258PX06jvwJZl8MnryV+2tEgKd5F4LH45+NLSMd9MzfKPOA/a9Qz69EWSQOEuEo/CB6FDHxh8emqWn9kKjrsClv0D1s9PzTqkRVG4i9Rl06dB6I68rOYHcSTLMZcHD9TW0bskgcJdpC6zHgTLhJGXpHY9uZ2DO0bOfRp2lqR2XRJ5CneR2lSUwUdPwGHjoF331K9v9PegojR4WpNIAyjcRWqzZBrs3ggjUnzUXqXrEBhyVnDXyfLSxlmnRJLCXaQ2sx+FtofA4DMab52jvw+7SmDuU423TokchbvIwexYH1x3ftSExJ601FADT4UeRwf3eq8oa7z1SqQo3EUOZu6T4BUw4uLGXa8ZnHp9cLsDHb1LPSncRWriHnTJ9Bkd9IM3tkPHBEfv//ytjt6lXhTuIjUpngkblzT+UXuV2KN33VBM6kHhLlKT2Y9AqzwY9qX01XDoGOh9HLz1K9i7PX11SLOkcBepbt8umPccDLsActqlrw4zGHdbcOXMP29PXx3SLCncRapb8EJwf/V0dcnE6jUSRlwUPGe1ZHG6q5FmROEuUt3sR6HzIOg7Ot2VBE6/CXLaw/PfhYrydFcjzYTCXSTWpk9hxXvBUXsynpGaDG3z4dw/wJoP4d3fpbsaaSYU7iKxPnoMLCP44lJTMuwCGP51eOc3sEQP9JC6KdxFqlRWBJcdDj4T2vdIdzUHOvcO6H4kPDtR93yXOincRaoU/R12rA1OYDZF2bkw/nHIzoO/nq8TrFIrhbtIlcIHIa8bHDou3ZUcXMe+cNmLgMFfxsDyf6W7ImmiFO4iAFtXwSfTggdyZGWnu5radR0C33oN8vKDI/h3bgse4C0SQ+EuAvDhX4P7yYy8LN2VxKfLIJj4Bgz9Erzz/+HeLwTX51dWprsyaSLiCnczG2tmi82syMyuq2F6jpk9FU6fYWb9k12oSMpUlAXhPuRM6NQv3dXEr01HuPABGP8EVJbBlEvhrgL4x+3BCVcFfYtW502qzSwTmAScCRQDM81sqrsviGk2Edji7oPNbDxwG/D1VBQsknSLX4Wd66DgjnRXUj+Hnx3ch2b+8zDrIXj71uCV2wV6joT8w4KunHY9ILcr5HUNbquQ1Tp4ZegP+CiK5wkExwFF7r4UwMyeBM4HYsP9fOCm8P0zwF1mZu7uSawVgNtevJRF62fHP0NC30Op75dWrNbB5K+v+mIaspx6zGsWPDDaMiAjM3xlQWYOZGZDVg60ahNMbw7Wz4PefWDZU7BsSrqraZju+dD1HNi7FfZug31FsPxjWFbLUbxlfLavPve7ZDH/1DBe6u3wnsfx07NT+5zceMK9F7AqZrgYGHWwNu5ebmbbgC7AxthGZnYlcCVA375961dxdlto3T7x+Rr0OVPPeZP22ZbAcvygA0lcp0NlefAgi8qKmH9j5jELAj67XdB90LojZLZqQD0pUrYb9myFjv2ITGhl5QSPBmx7SDjCgxOuFfuCLqjKsnB/VX7+hcfs9tj9f7DxUm/ZeSlfRTzhXtNvfPU9HE8b3H0yMBmgoKCgXr8lPx1zd31mk1SrKIed64PrxLcshw0LYN08KP4A9nwMGAz6Ihx9ERxxXtO5IuXFa2DjdrjkyaC7QiQi4gn3YqBPzHBvYM1B2hSbWRbQAdiclAqlecjMgg69glfvgs/GV1bA2jlBv/acJ4NvV3boAydeE1yZks6Q37UxqOmo8Qp2iZx4OkVnAkPMbICZZQPjganV2kwFqq4huxB4KxX97dIMZWQGt6097Qa4Zg5c9ExwYu+VH8P/npTeL+HMfADK98LoH6SvBpEUqTPc3b0cuAqYBiwEprj7fDO72czOC5s9AHQxsyLgR8ABl0uKkJERXG448XWY8BSU74GHzoGXfwzlpY1bS9kemHkfDBkD+Yc27rpFGkE83TK4+yvAK9XG/SLm/V7gq8ktTSLLDA4bCwO+AG/dAtPvDvrmv/owdB7QODXMejh4wtGJVzfO+kQaWTO5Vk0iKTsXxv4aJjwJW1bA/WdAcWHq11u2B/71R+h/MvQ/KfXrE0kDhbuk32Hj4NtvQk5beOhcWPRyatc36+HgS0un/DS16xFJI4W7NA1dB8PEv8MhQ+GpS+DjZ1KzntId8O7vod+JMODk1KxDpAlQuEvT0TYfLp0aPLv0uStSE/Dv/h52bYAzb0n+skWaEIW7NC05beGip4Mj6+eugLlPJ2/Zm5fB+5Ng+HjofUzylivSBCncpenJzoNvPBUE/PNXBl80aih3eO264B44Z9zY8OWJNHEKd2masvPgG1OCK1qe/y7Mfqxhy5vzBCx5DU77GbTvmZwaRZowhbs0Xdm5wRH8oC/CCz8IrnKpj83L4NXroO8JMOp7ya1RpIlSuEvT1qpN8DCKwafDi1fDB/clNn/pDnhiQvDFqS/drXuXS4uh33Rp+lq1hvGPBw+ufuXH8Nr/BDckq0vZnuDpRBuXwNca8duvIk2Awl2ah6wc+PqjcNx3YPqk4MHQW1cevP2O9fDIl+HTt+G8P8PAUxurUpEmQeEuzUdmFpx9O5w/CdbMhkmj4PWfB33qVfZshRmT4Z4TgjZfuR9GXJS+mkXSJK4bh4k0KSMuDq6ieetX8P5d8O87IS8fstrA9tXBk6H6nQhn/xYOGZbuakXSQuEuzVOnfvCV+4JLGxe/AhsWBvdm79gveFh0r2Ma+GxZkeZN4S7NW6d+MFqXN4pUpz53EZEIUriLiESQwl1EJIIU7iIiEaRwFxGJIIW7iEgEKdxFRCJI4S4iEkHm7ulZsVkJsKKes3cFNiaxnKauJW1vS9pWaFnb25K2FVK3vf3cPb+uRmkL94Yws0J3L0h3HY2lJW1vS9pWaFnb25K2FdK/veqWERGJIIW7iEgENddwn5zuAhpZS9relrSt0LK2tyVtK6R5e5tln7uIiNSuuR65i4hILRTuIiIR1OzC3czGmtliMysys+vSXU9DmVkfM3vbzBaa2XwzuyYc39nM3jCzT8J/O4XjzczuDLd/rpmNTO8WJM7MMs1stpm9FA4PMLMZ4bY+ZWbZ4ficcLgonN4/nXXXh5l1NLNnzGxRuI+Pj/i+/a/w93iemT1hZq2jsn/N7C9mtsHM5sWMS3hfmtllYftPzOyyVNXbrMLdzDKBScA4YCgwwcyGpreqBisHrnX3I4DRwA/CbboOeNPdhwBvhsMQbPuQ8HUlcE/jl9xg1wALY4ZvA/4YbusWYGI4fiKwxd0HA38M2zU3fwJec/fDgaMItjuS+9bMegFXAwXufiSQCYwnOvv3IWBstXEJ7Usz6wzcCIwCjgNurPpASDp3bzYv4HhgWszw9cD16a4rydv4AnAmsBjoEY7rASwO398LTIhpv79dc3gBvcP/BKcBLwFG8C2+rOr7GJgGHB++zwrbWbq3IYFtbQ8sq15zhPdtL2AV0DncXy8BY6K0f4H+wLz67ktgAnBvzPjPtUvmq1kdufPZL0+V4nBcJIR/lo4AZgCHuPtagPDfbmGz5v4zuAP4CVAZDncBtrp7eTgcuz37tzWcvi1s31wMBErnpL57AAACI0lEQVSAB8NuqPvNLI+I7lt3Xw38DlgJrCXYX7OI7v6FxPdlo+3j5hbuNT3OPhLXcppZW+BZ4D/dfXttTWsY1yx+BmZ2LrDB3WfFjq6hqccxrTnIAkYC97j7CGAXn/3ZXpNmvb1h98L5wACgJ5BH0D1RXVT2b20Otm2Nts3NLdyLgT4xw72BNWmqJWnMrBVBsD/m7s+Fo9ebWY9weg9gQzi+Of8MTgTOM7PlwJMEXTN3AB3NLCtsE7s9+7c1nN4B2NyYBTdQMVDs7jPC4WcIwj6K+xbgDGCZu5e4exnwHHAC0d2/kPi+bLR93NzCfSYwJDz7nk1wsmZqmmtqEDMz4AFgobv/IWbSVKDqTPplBH3xVeMvDc/Gjwa2Vf1Z2NS5+/Xu3tvd+xPsu7fc/SLgbeDCsFn1ba36GVwYtm82R3buvg5YZWaHhaNOBxYQwX0bWgmMNrPc8Pe6ansjuX9Die7LacBZZtYp/EvnrHBc8qX7BEU9TmicDSwBPgVuSHc9Sdiekwj+LJsLfBS+ziboe3wT+CT8t3PY3giuGPoU+JjgyoS0b0c9tvtU4KXw/UDgA6AIeBrICce3DoeLwukD0113PbbzaKAw3L9/AzpFed8CvwQWAfOAR4CcqOxf4AmCcwllBEfgE+uzL4FvhdtcBHwzVfXq9gMiIhHU3LplREQkDgp3EZEIUriLiESQwl1EJIIU7iIiEaRwFxGJIIW7iEgE/R8Kwz9OuA1NBwAAAABJRU5ErkJggg==\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"engine": 2
|
|
},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[output:3]"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"engine": 3
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"%%px\n",
|
|
"\n",
|
|
"h, hu, hv = run_benchmark(simulator=HLL2.HLL2, \\\n",
|
|
" courant_number=0.95, \\\n",
|
|
" nx=1024, ny=1, \\\n",
|
|
" ghost_cells=2)\n",
|
|
"\n",
|
|
"plt.figure()\n",
|
|
"plt.plot(h)\n",
|
|
"plt.plot(hu)\n",
|
|
"plt.plot(hv)\n",
|
|
"plt.title(\"Simulation results, rank=\" + str(comm.rank))\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"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
|
|
}
|