Skip to content

Instantly share code, notes, and snippets.

@dfroger
Last active July 10, 2022 10:30
Show Gist options
  • Save dfroger/9032617 to your computer and use it in GitHub Desktop.
Save dfroger/9032617 to your computer and use it in GitHub Desktop.
Partionning mesh with Metis.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Partitionnig a mesh using Metis"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook presents a function of Metis to partition a mesh, its input and output data structure."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We use standard scientific Python tool [NumPy](http://www.numpy.org/) and [Matplotlib](http://matplotlib.org/)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from pylab import *\n",
"%matplotlib inline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We also use [pymetis](http://mathema.tician.de/software/pymetis/), a Python binding form [metis](http://mathema.tician.de/software/pymetis/), which we will use to partition the mesh."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from pymetis import part_graph"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These are options for our futur plots."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def scale():\n",
" grid()\n",
" axis('scaled')\n",
" xlim(-0.5,3.5)\n",
" ylim(-0.5,2.5)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We create $nx \\times ny$ regualary spaced nodes, and a function to plot them."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"nx, ny = 4,3\n",
"x2d, y2d = meshgrid(range(nx),range(ny))\n",
"x1d = x2d.flatten()\n",
"y1d = y2d.flatten()\n",
"def plot_nodes(marker=True, index=True):\n",
" if marker:\n",
" plot(x1d, y1d, 'ko')\n",
" if index:\n",
" for ipoint,(x,y) in enumerate(zip(x1d,y1d)):\n",
" text(x+0.1,y+0.1,'%i'%ipoint)\n",
"plot_nodes()\n",
"scale()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nIiIT/R97ey0anKMtxAAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x45482d0>"
]
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We connect nodes with triangles, and for each triangle store its 3 nodes indexes. In order to plot trianges with their indexes at centre, so compute triangle center.\n",
"We plot the triangles and as an example, the nodes of the 7-th triangle."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Store nodes of each triangles.\n",
"triangle1 = ((0,4,1),(1,5,2),(2,6,3),(4,8,5),(5,9,6),(6,10,7))\n",
"triangle2 = ((1,4,5),(2,5,6),(3,6,7),(5,8,9),(6,9,10),(7,10,11))\n",
"triangle = array(triangle1 + triangle2)\n",
"ntri = len(triangle)\n",
"\n",
"# Compute center of triangles.\n",
"xcenter = empty( (ntri) )\n",
"ycenter = empty( (ntri) )\n",
"for itri,tri in enumerate(triangle):\n",
" xcenter[itri] = sum(x1d[tri]) / 3.\n",
" ycenter[itri] = sum(y1d[tri]) / 3.\n",
" \n",
"# Plot all triangles.\n",
"def plot_triangles(lines=True,index=True):\n",
" if lines:\n",
" triplot(x1d, y1d, triangle)\n",
" if index:\n",
" for itri,(x,y) in enumerate(zip(xcenter,ycenter)):\n",
" text(x,y,itri,color='red')\n",
"\n",
"# Plot one triangle nodes.\n",
"def plot_triangle_nodes(itri):\n",
" for i in triangle[itri]:\n",
" plot(x1d[i], y1d[i], 'ko')\n",
"\n",
"plot_triangles()\n",
"plot_nodes(marker=False,index=True)\n",
"plot_triangle_nodes(7)\n",
"scale()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAVkAAAEACAYAAAAZcwXkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnX9UVOedxp9BOMdDMKAJDio0kyAKAzgzxmZaNmgJQQQa\njj/IRhMbldRyqlbt8ey6Seq22U0MtulJUGNjbNPaTQ+mtYkhIhz1CGpESgxDYpZU1IUNoJIVQwJq\nAuK7f4xQuMzcuTP3x/syfj/nzIE7c2fu41d4+M4z7w8TY4yBIAiC0IUQ3gIIgiCCGTJZgiAIHSGT\nJQiC0BEyWYIgCB0hkyUIgtARMlmCIAgdUWWyra2tyMjIQHJyMlJSUrB169YR51RXVyMyMhIOhwMO\nhwPPP/+8mksSBEGMKkLVPDksLAwvv/wy7HY7enp6cP/99yMrKwtJSUnDzpszZw7KyspUCSUIghiN\nqOpkY2JiYLfbAQARERFISkrChQsXRpxH8x0Igrhd0SyTbWlpgcvlgtPpHHa/yWRCTU0NbDYbcnNz\n0djYqNUlCYIghEdVXDBAT08PCgoKUFJSgoiIiGGPzZw5E62trQgPD0dFRQXmz5+PpqYmLS5LEAQh\nPkwlvb29bO7cuezll19WdL7FYmGdnZ0j7p88eTIDQDe60Y1uQt7i4+MD8khVcQFjDE899RSsVivW\nr1/v8ZyOjo7BTLaurg6MMUyYMGHEeRcuXABjTKjbz3/+c+4aSFPwaBJVF2lSdjt//nxAPqkqLjhx\n4gTefPNNzJgxAw6HAwCwefNmfPbZZwCAoqIi7N27F7/5zW8QGhqK8PBw7NmzR80lDaWlpYW3hBGQ\nJmWIqAkQUxdp0hdVJvvggw/i5s2bsuesXr0aq1evVnMZgiCIUQvN+JJh+fLlvCWMgDQpQ0RNgJi6\nSJO+mBhjjLcIwD3USxApBEEQIwjUo6iTlaG6upq3hBGQJmWIqAkQUxdp0hcyWYIgCB2huIAgCEIB\nFBcQBEEICJmsDCLmQqRJGSJqAsTURZr0hUyWIAhCRyiTJQiCUABlsgRBEAJCJiuDiLkQaVKGiJoA\nMXWRJn0hkyUIgtARymQJgiAUQJksQRCEgJDJyiBiLkSalCGiJkBMXaRJX8hkCYIgdIQyWYIgCAVQ\nJksQBCEgZLIy+MqFXnzxRSQnJyM1NRWPP/44vvnmG+6aeKBEU0lJCVJTU5GSkoKSkhIhNPFATldh\nYSHMZjNSU1MH77ty5QqysrIwbdo0zJ07F11dXYZq4oW/dfrLX/6C5ORkjBkzBvX19QYoVA6ZbIC0\ntLRg165dqK+vx+nTp9Hf3z+qNok0kk8++QS//e1v8cEHH+Cjjz7C/v37A975M5hZsWIFKisrh91X\nXFyMrKwsNDU1ITMzE8XFxZzUiYOnOqWmpuKdd97B7NmzOanyDpmsDN/73ve8PnbnnXciLCwM165d\nw40bN3Dt2jVMmTKFqyZe+NL097//HU6nE2PHjsWYMWMwZ84cvP3221w18UJOV3p6OsaPHz/svrKy\nMixbtgwAsGzZMuzbt89QTbzwt06JiYmYNm2azqoCg0w2QCZMmIANGzbgW9/6FiZPnoyoqCg8/PDD\nvGUJSUpKCo4fP44rV67g2rVrKC8vR1tbG29Zo4KOjg6YzWYAgNlsRkdHB2dFhL+QycoglwudP38e\nr7zyClpaWnDhwgX09PTgT3/6E1dNvPClKTExERs3bsTcuXORk5MDh8OBkBB9f/RErBOgTpfJZILJ\nZNJOzC1ErJWImgKFTDZATp06hbS0NNx1110IDQ3FwoULUVNTw1uWsBQWFuLUqVM4evQooqKiMH36\ndN6SRgVmsxmXLl0CAFy8eBETJ07krIjwFzJZGeRyocTERNTW1uL69etgjOHw4cOwWq1cNfFCiabP\nP/8cAPDZZ5/hnXfeweOPP85dEw/81ZWfn4/du3cDAHbv3o358+dz12QEajQJN96eCYJAUhSzZcsW\nZrVaWUpKCnvyySdZb28vb0nCkp6ezqxWK7PZbOzIkSO85QjJ4sWL2aRJk1hYWBiLjY1lb7zxBuvs\n7GSZmZksISGBZWVlsS+++IK3TO5I6/S73/2OvfPOOyw2NpaNHTuWmc1mNm/ePM2vG6hH0YwvGaqr\nq4X7K0+alCGiJkBMXaRJGTTjiyAIQkBUdbKtra148skn8fnnn8NkMuFHP/oR1q5dO+K8tWvXoqKi\nAuHh4fjDH/4Ah8MxUoiAnSxBEMQAgXpUqJqLhoWF4eWXX4bdbkdPTw/uv/9+ZGVlISkpafCcAwcO\n4Ny5czh79iz+9re/4cc//jFqa2vVXJYgCGLUoCouiImJgd1uBwBEREQgKSkJFy5cGHbO0BkrTqcT\nXV1do2ZAtYhj9UiTMkTUBIipizTpi2aZbEtLC1wuF5xO57D729vbERcXN3gcGxtLs30IgrhtUBUX\nDNDT04OCggKUlJQgIiJixOPSHEOPWSta84c//AErV67EvHnzeEsZwa9//WveEgbp6urC+++/j9zc\nXN1ncfmLSHUCgP3792P69OlISEjgLWUEItXq4sWLKCsr4y1DM1SbbF9fHxYtWoSlS5d6HCg9ZcoU\ntLa2Dh63tbV5XUhl+fLlsFgsAICoqCjY7fbBYRwDbx+MOl6xYgUA96SD2bNn4/Tp0wAwuLwaHbuP\nP/30U7z//vv429/+hvXr18NmswmlT6Tj/fv348yZM1i9ejW6u7u56xH1+N///d/x7LPPYtmyZdx+\n/6urq9HQ0DC4tGRLSwsCRs3g3Js3b7If/OAHbP369V7PKS8vZzk5OYwxxk6ePMmcTqfH81RK0Zyc\nnBz26KOPsujoaHb06FHecgapqqriLWEY+/btY3a7naWlpbGioiLW39/PWxJjTLw6McbYxIkT2dKl\nS5nFYmHNzc285QwiWq02bdrEli9fzlvGCAL1KFXv706cOIE333wTVVVVcDgccDgcqKiowM6dO7Fz\n504AQG5uLu677z5MnToVRUVF2LFjh5pLGsrMmTNRWlqKgoICHDt2jLccYQkPD0dlZSVOnz6NVatW\n4ebNm7wlCcuCBQuwYcMGZGRkqOuOiFGDqrjgwQcfVPQLtX37djWX4caMGTOQmZk5aLR79+7lviiw\naLNgAODuu+/GuHHjUFlZiXnz5mHVqlXYsWMH14xWxDoBwD/90z8NLl2YkZGBqqqqwYiMFyLW6t57\n7+UtQTPE+qRCUIYaLXW03hkwWupofbNmzRrqaG8TyGRl+Pjjjwe/F8VoRRw/ePny5cHvRTFaEesE\nuCO2AUQxWhFr1dzczFuCZpDJ+oEoRis6ohjtaEAUoyX0g0xWhhkzZoy4j7fRipif3X333SPu4220\nItYJcGeyUngbrYi1okz2Noe30Y4WeBvtaIK30RL6QSYrw9BMVgovoxUxPxuayUrhZbQi1gkYnslK\n4WW0ItaKMlkCAHW0SqGOVjnU0QYfZLIyeMpkpRhttCLmZ54yWSlGG62IdQI8Z7JSjDZaEWtFmSwx\nDOpolUEdrXKoow0eyGRlkMtkpRhltCLmZ3KZrBSjjFbEOgHymawUo4xWxFpRJkt4hDpaZVBHqxzq\naEc/ZLIyKMlkpehttCLmZ0oyWSl6G62IdQKUZbJS9DZaEWtFmSwhC3W0yqCOVjnU0Y5eyGRl8CeT\nlaKX0QaUn5WUAKmpQEqK+3uN8SeTlaKX0QZUp8JCwGx212qAK1eArCxg2jRg7lzg1iLOgeJPJitF\nL6P1u1ae6vSXvwDJycCYMUB9vWpNlMkSihCio/3kE+C3vwU++AD46CNg/37g/Hk+WrwgTEe7YgVQ\nWTn8vuJit8k2NQGZme5jjgjR0XqqU2oq8M47AOelQEWETFaGQDJZKVobrd/52d//DjidwNix7i5j\nzhzg7bdV6xhKIJmsFK2NNqCcMT0dGD9++H1lZcCt3ZaxbBmwb58qXYFkslK0Nlq/a+WpTomJ7m5f\nIyiTJfyCa0ebkgIcP+5+23vtGlBeDgi6W7AwHe1QOjrcb40B91dBtrMXoqMlFEEmK4OaTFaKVkbr\nd36WmAhs3OjOE3NyAIcD0HjHAjWZrBStjFaXsZ8mk/umAjWZrBStjJbGyeoLmayBcOtoCwuBU6eA\no0eBqChg+nTjrh0AQnW0ZjNw6ZL7+4sXgYkT+WnxAHW04kMmK4MWmawUtUYbUNb4+efur5995v5w\n4vHH/X8NGbTIZKWoNVrNxn7m5wO7d7u/370b8LDtvT9okclKUWu0mo+TZUz1S1AmS6jC8I62oMA9\nvCY/H9ixA7jzTv2vqQGGd7RLlgBpacCZM0BcHPD73wP/9m/AoUPuD3WOHHEfC4ihHa20Tm+84f5A\nMC4OqK0F8vLc0RThRuOtyQNGICmMMcZycnLYiy++qOs1Dh8+zKKjo9nRo0cVP6eqqko/QQGwb98+\nlpaWpus1vvrqK5aWlsaKiopYf3+/oueIVifGGJs4cSL761//qus1tm3bxiwWC2tublb8HNFqtWnT\nJrZ8+XLeMkYQqEdRJ8sRIcbRjgKEymgFhzJa8SCTlUGPTFaKv0Yr4jxzPTJZKf4arYh1AvTJZKX4\na7Qi1ooyWUJTqKNVBnW0yqGOVhzIZGXQcpysL5QarYhjGrUcJ+sLpUYrYp0AbcfJ+kKp0YpYKxon\nS+gCdbTKoI5WOdTR8odMVgYjMlkpvoxWxPzMiExWii+jFbFOgDGZrBRfRitirSiTJXSFOlplUEer\nHOpo+aHaZAsLC2E2m5E6dG3JIVRXVyMyMhIOhwMOhwPPP/+82ksahpGZrBRvRitifmZkJivFm9GK\nWCfA2ExWijejFbFWlMkOYcWKFaiUri0pYc6cOXC5XHC5XPjZz36m9pK3DdTRKoM6WuVQR2s8qk02\nPT0d46VrS0pgGsxl5gGPTFaK1GhFzM94ZLJSpEY7W9DFo3lkslKkRivizxRlsn5gMplQU1MDm82G\n3NxcNDY26n3JoIM6WmVQR6sc6miNI1TvC8ycOROtra0IDw9HRUUF5s+fj6amJo/nLl++HBaLBQAQ\nFRUFu90++Fd2IDcy6rizsxP79u1Dbm4ul+tLj8eMGYONGzciPz8fZWVlgwbCS8/QHO/y5cvc6zP0\nuLKyEjNmzMD8+fOxb98+hISECKGvt7cXJ06cwMKFC4XQk5KSgg0bNuA73/kOXnnlFcTExAjx/wcA\nNTU1qK6u5qqnoaEBXbf2dFP1h0iLhROam5tZSkqKonMtFgvr7Owccb9GUjTDiAViAuGll17ye1EZ\nPTFigZhAKC8v93tRGb0xYoGYQFi7dq3fi8roCS0Q4ycdHR2DmWxdXR0YY5gwYYLel9UEETJZKRs2\nbBAuOhAhk5WSm5srZHQgQiYrpaSkRLjoIJgyWdVxwZIlS3D06FFcvnwZcXFxeO6559DX1wcAKCoq\nwt69e/Gb3/wGoaGhCA8Px549e1SLvt0ZmtHu3btX2A95eDOQ0c6bNw+rVq3Cjh07EBJCQ8M9sWbN\nGgBARkYGqqqqBmM7QgM07adVIJAUxpi4ccHQtT8DWY9Wa0SNC4bWKZD1aPVA1LhgaK0CWY9Waygu\nILTl66/dW3bb7YDVCjz9tOKn3pajDvr73ZtBPvKI4qfcdqMOLBZgxgx3nR54wK+n0qgD7SGTlcGQ\nTHbsWKCqCmhoAD7+2P39++97PX3g088BRDBaQzPZkhL3HyMfu8ZK6ySK0RqSyZpMQHU14HIBdXU+\nT5fWSgSjDaZMlkxWBMLD3V97e92dmp8fDIpgtIbQ1gYcOAD88IcBbdYnitEagsoJQCIYbbBAJiuD\nYWsX3LzpjgvMZiAjw92peWHo+NSh8DRaw9Yu+OlPgV/9ClDw4ZW3OvE2WkPWLjCZgIcfBmbNAnbt\n8nm6t1rxNFpau4DQlpAQd1zQ1gYcO+Z+qxcAQd3R7t8PTJzozhlVdmm8jVZ3TpxwRwUVFcCrrwLH\njwf8UtTRqodMVgbDx8lGRrq3Uz51yusp0vxMCg+jNSSTrakBysqAe+91b0l95Ajw5JNeT/dVJ15G\na0gmO2mS+2t0NLBggc9c1leteBgtZbKEdly+DNyauofr14FDh9zdmgqCsqPdvBlobQWam4E9e4CH\nHgL++EdVLxmUHe21a0B3t/v7q1eBgwcBL8uQ+gN1tIFDJiuDIZnsxYtuw7Db3UO5HnkEyMz0erq3\n/EyKkUbLZT1ZH6MLlNbJaKPVPZPt6ADS0//x8/T97wNz58o+RWmtjDTaYMpkdV8ghvBBaipQX6/L\nSwftzLA5c9w3jQiqmWH33uvO93WCZob5zyj9STIGEdcu8JWfSTGioxVx7QJ/62RURyvi2gX+1sqI\njpYyWWJUEZQZrQ4EZUarE5TRKodMVgaee3x5Q2l+JkVPo+W5x5c3Aq2T3kbLc48vbwRaKz2NNpgy\nWTLZ2wjqaJVBHa1yqKP1DZmsDMGQyUrRw2iDIZOVopfRBkMmK0UPo6VMlhjVUEerDOpolUMdrXfI\nZGUIpkxWipZGG0yZrBStjTaYMlkpWhotZbJEUEAdrTKoo1UOdbQjIZOVQUkm29/fD4fDgUf8WERa\nDWrzMylaGK2STNZisWDGjBlwOBx4wM+FpANB6zppZbS+Mtmuri4UFBQgKSkJVqsVtbW1AV3HH7Su\nlRZGK5fJnjlzBg6HY/AWGRmJrVu3BqhWf2jGl0pKSkpgtVrRPTBffBRixMwwk8mE6urqUbOJpieM\nmBm2bt065ObmYu/evbhx4wauXr2q6esbhZ4zw6ZPnw6XywUAuHnzJqZMmYIFCxZo9vpaQ52sDL4y\n2ba2Nhw4cAA//OEPB3fk1Rut8jMpajpapZmsUTUC9KuT2o5WLpP98ssvcfz4cRQWFgIAQkNDERkZ\nqUqvEvSqlZqOVmkme/jwYcTHxyMuLi4AhcZAJquCn/70p/jVr341eue5S9AzozWZTHj44Ycxa9Ys\n7FKwkLTI6JXRNjc3Izo6GitWrMDMmTOxcuVKXLt2TZPX5oXeGe2ePXvw+OOPa/66WhIc7qATcpns\n/v37MXHiRDgcDkM7NK3zMymBGK2STPbEiRNwuVyoqKjAq6++iuMqFpJWgt51CtRo5TLZGzduoL6+\nHqtWrUJ9fT3uuOMOFBcXayXZK3rXKhCjVTJOtre3F++99x4effRRlQr1hUw2QGpqalBWVoZ7770X\nS5YswZEjR/CkzCLSowk9OtpJtxaSjo6OxoIFC1CnYIM/0dG6o42NjUVsbCy+/e1vAwAKCgpQr9MK\nbUajR0dbUVGB+++/H9HR0Zq8nl6Qycogl8lu3rwZra2taG5uxp49e/DQQw/hjyoXkVaCXvmZFH+M\n1lcme+3atcEPBq9evYqDBw8iVYOFpOUwqk7+Gq1cJhsTE4O4uDg0NTUBcOeNycnJmur1hFG18sdo\nlWSypaWlWLJkiUbq9INMViNMPhaRHo1o1dF2dHQgPT0ddrsdTqcT3//+9zHXx0LSowktO9pt27bh\niSeegM1mw8cff4xnnnlGQ6X80aqjvXr1Kg4fPoyFCxdqJ04vmCAIJIUxxlhOTg4rLy/nLUMIDh8+\nzKKjo9nRo0dHPLZv3z6Wn5/PQZV4fPXVVywtLY0VFRWx/v7+EY9PnDiRXbp0iYMy8di2bRuzWCys\nubl5xGObNm1izz33nPGifBCoR1EnS/iEZoYpg2aGKed2mhlGJitDMK9d4C9yRhvMaxf4iy+jDea1\nC/xFzmhp7YJbFBYWwmw2y36IsXbtWiQkJMBmsw3O0iBGJ9TRKoM6WuXcFh2tmozi2LFjrL6+nqWk\npHh8vLy8nOXk5DDGGKutrWVOp9Pra6mUojmUyXpnIKMtLi5mdrudTZgwgc2dO5ft37+ftzShGJrR\nlpWVsbCwMPbd736XauWBoRltsGWyqtYuSE9Pl/3rU1ZWhmXLlgEAnE4nurq60NHRAbPZrOayBGcy\nMzOxbt06PPPMM4Nd2sGDB3H+/HkAQF5eHk95wjDQ0T7wwAMoLS1FX18fTp48CQBUKwlD1zpIT0/H\n1KlTOSvSDl0XiGlvbx82pzg2NhZtbW2jwmS/+OILbN++Hf39/bylDOP06dO6jzFVwl//+tcRb4PP\nnz+PTZs2CfH2WJQ6AUBYWBi++uqrYfdRrUZyzz33YNq0afiv//ovw1a1MwLdV+FikimncuNJly9f\nPrhaT1RUFOx2++CUv4Fw3qjjgSXmrl+/joiIiMEPdwamkPI6BoCTJ09y13Pu3Dl44n//93/x+uuv\nc9d3/vx5REZGcv//uvvuu9He3u6xVufOncPrr7/OXd/ly5fx3nvvcbu+p+Pr16+jurqa2+9/dXU1\nGhoa0NXVBQDq8mK1OUVzc7PXTLaoqIiVlpYOHk+fPt3rOEENpGhKdnY2i4mJYbNnz2bd3d285QjH\n3LlzGYARt+zsbN7ShINq5R/BlsnqOoQrPz9/cKppbW0toqKiRkVUAAAhISHYtWsXpk6diry8PPT0\n9PCWJBRr165FfHz8sPtCQkKQkZHBSZG4eKrVnXfeidWrV3NSRBiJKpNdsmQJ0tLScObMGcTFxeGN\nN97Azp07sXPnTgBAbm4u7rvvPkydOhVFRUXYsWOHJqKN4pNPPhHOaHmNaZSSl5eHkpISOBwOjBs3\nDtnZ2fiP//gP/PrXvxZieJcodQL+UauwsDBYrVZkZmZi8uTJKC8vFyKTFalWAwTTOFlVmWxpaanP\nc7Zv367mEtwZ6GhXrlyJvLw8lJeXIyIigrcsIcjLy8ONGzfwy1/+EpWVlQCA73znO7rusDBaycvL\nw/jx4/Gf//mfWLhwIbq7u3XdYYEQB/qflWFgPVmRogO91/4MhKHryYoyYUHEOgH/WE9WpAkLItZK\nyXqyowUyWYWIZLSiI4rRio5IRkvoB5msDNK1C0QwWhHzM09rF/A2WhHrBIxcu0AEoxWxVsGUyZLJ\n+okIRjta4G20owURjJbQDzJZGbzt8cXTaEXMz+T2+OJltCLWCfC+xxdPoxWxVpTJEtTR+gF1tMqg\njjY4IZOVwdd6sjyMVsT8TMl6skYbrYh1AnyvJ8vDaEWsFWWyxCDU0SqHOlplUEcbXJDJyuAtk5Vi\npNGKmJ/JZbJSjDJaEesEeM9kpRhptCLWijJZYgTU0SqHOlplUEcbHJDJyuDvHl9GGK2I+Vkge3zp\nbbQi1gnwf48vI4xWxFpRJkt4hTpa5VBHqwzqaEc3ZLIyKM1kpehptCLmZ/5kslL0MloR6wQoz2Sl\n6Gm0ItaKMlnCJ0J1tF1dQEEBkJQEWK3ArV0fREGYjvbMGcDh+MctMhLYupWfHglCdbQvvggkJwOp\nqcDjjwPffMNPi+CQycrgbyYrRQ+jDSg/W7cOyM0FPv0U+Phjt9lqSCCZrBStjTagOk2fDrhc7tuH\nHwLh4cCCBaq1DMXfTFaKHkbrd61aWoBdu4D6euD0aaC/H9izR7WOoVAmSyiGe0f75ZfA8eNAYaH7\nODTU3aEJiDAdLQAcPgzExwNDNgIVBe4d7Z13AmFhwLVrwI0b7q9TphirYRRBJitDoJmsFC2N1u/8\nrLkZiI4GVqwAZs4EVq50/1JoiJpMVopWRqs6Z9yzx/02WGMCzWSlaGm0ftdqwgRgwwbgW98CJk8G\noqKAhx8O+PqeoEyW8BtuHe2NG+63datWub/ecQdQXGzMtQOEe0fb2wu89x7w6KPGX9sPuHW0588D\nr7zijg0uXAB6eoA//cmYa49CyGRlUJvJStHCaP3Oz2Jj3bdvf9t9XFDgNlsN0SKTlaLWaFWN/ayo\nAO6/3/0OQGPUZrJStDBav2t16hSQlgbcdZc7flq4EKip8fu6clAmSwSM4R1tTIw7V2xqch8fPuz+\nVHgUwK2jLS0Fliwx7noqMbyjTUx0j1C5fh1gzP0zZbXqe81RDJmsDFplslLUGG1AWeO2bcATTwA2\nm3t0wTPP+P8aMmiZyUoJ1GgDzmSvXnWbxsKFgT3fB1plslLUGK3ftbLZgCefBGbNAgZ+R370I/9e\nwweUyRKqMbSjtdmADz4APvoIePttYUcXeMPQjvaOO4DLl4Fx4/S9jg4Y2tH+678C//3f7iFcu3e7\nRxsQHiGTlUHrTFZKIEYr4jxzPTJZKf4arYh1ArTPZKUEYrQi1ooyWUIzuI+jHUVwH3UwSuA+jpYY\nBpmsDHplslL8MVoR55nrmclKUWq0ItYJ0C+TleKP0YpYK8pkCc2hjlY51NEqgzpaMSCTlUHvTFaK\nEqMVMT8zIpOV4stoRawToH8mK0WJ0YpYK8pkCd2gjlY51NEqgzpavqg22crKSiQmJiIhIQFbtmwZ\n8Xh1dTUiIyPhcDjgcDjw/PPPq72kYRiVyUqRM1oR8zMjM1kp3oxWxDoBxmWyUuSMVsRaUSZ7i/7+\nfqxZswaVlZVobGxEaWkpPv300xHnzZkzBy6XCy6XCz/72c/UXPK2gTpa5VBHqwzqaPmgymTr6uow\ndepUWCwWhIWFYfHixXj33XdHnMcYU3MZbhidyUrxZLQi5mc8MlkpUqMVsU6A8ZmsFE9GK2KtKJO9\nRXt7O+KGrLcZGxuL9vb2YeeYTCbU1NTAZrMhNzcXjY2Nai552yE12uvXr/OWJCxDjfajjz7iLUdY\nqKM1llA1TzaZTD7PmTlzJlpbWxEeHo6KigrMnz8fTQOLlUhYvnw5LBYLACAqKgp2u30wLxr4a2vU\ncWdn5zBtRl9/6HFISAieeOIJvPTSSyguLkZ6ejpOnTrFTc/QY8CdyfKsz9DjAaNdtGgRAGDdunVc\n9Qw97u3tHcxkeev58MMP8eyzz+KFF17AACEhIdz//4bmw9XV1Vz1NDQ0oKurCwDQ0tKCgGEqOHny\nJMvOzh483rx5MysuLpZ9jsViYZ2dnSPuVylFc3Jyclh5eTlvGcPo7+9nhYWFbPbs2ay7u5u3HMYY\nY/v27WP5+fm8ZYzg8OHDLDo6mh09epS3lEEmTpzILl26xFvGML766iuWlpbGioqKWH9/P285jDHG\nNm3axJ577jneMkYQqEepigtmzZqFs2fPoqWlBb29vXjrrbeQn58/7JyOjo7BTLaurg6MMUyYMEHN\nZQ2DdybcJqhMAAAQfElEQVQrZaCjFe3DMBEyWSljxowR8sMw3pmslHHjxuHZZ58VLjqgTPYWoaGh\n2L59O7Kzs2G1WvHYY48hKSkJO3fuxM6dOwEAe/fuRWpqKux2O9avX489Gm+4drtBow6UQ6MOlBEe\nHk4ZrZ5o2k+rQCApjDEx44KhiBIdiBoXDEWU6EDEuGAookQHFBcQ2lNZ6V5tPiEB8DChwxO3XUdb\nWAiYzUBqqt9Pva062tZWICPDvftFSgqwdavip9KoA30gk5XBkEy2vx9Ys8ZttI2N7q1PPEzoGGDo\np/qiGK0hmeyKFe4aKWRonQBxjFb3TDYsDHj5ZfeC2rW1wKuvyv48AcNrJYrRUiZLaEddHTB1KmCx\nuH9BFi8GPEzo8IYoRqs76enA+PGqXkIUo9WVmBjAbnd/HxEBJCW5d5T1A1GMNlggk5XBkLUL2tvd\nGx0OEBvrvs8LQ8cRDsDbaHmuXeANT3UC+ButoWsXtLQALhfgdMqe5qlWvI2W1i4gtEPBhA4l8Dba\n0QRvozWEnh739u8lJe6ONgB4G22wQCYrgyGZ7JQp7g8rBmhtdXezXpBmjUPhZbQijpOVqxPAz2gN\nGSfb1wcsWgQsXQrMn+/zdLla8TJaymQJ7Zg1Czh71v3WrrcXeOstQDKhwx+oo1VOUHa0jAFPPQVY\nrcD69Zq8JHW06iCTlcGQTDY0FNi+HcjOdv9iPPaY+8MKL3jLGoditNEakskuWQKkpQFNTe4M+/e/\nlz1dSZ0A441W90z2xAngzTeBqirA4XDffIzKUFIro42WMllCW3JygDNngHPngKef1uQlg66jLS11\nf0r+zTfuSGXFCs1eOqg62gcfBG7eBBoa3B96uVzAvHmavDR1tIFBJiuDaGsXAP7tx2SU0Y7GTFaK\nUUYr2toFgH+1MspoKZMlRg1B19HqSFB1tDpCHa1/kMnKwGuPLzmUZo1D0dtoR9M4WV/obbS89viS\nI5Ba6W20lMkSow7qaJVDHa0yqKNVBpmsDKM9k5Wil9EGQyYrRS+jHe2ZrBS9jJYyWWLUQh2tcqij\nVQZ1tPKQycoQLJmsFK2NNpgyWSlaG22wZLJStDZaymSJUQ91tMqhjlYZ1NF6hkxWhmDLZKVoZbTB\nmMlK0cpogy2TlaKV0VImSwAAKisrkZiYiISEBGxRuKOBaBjR0RYWFsJsNiM1gF0NRELvjra1tRUZ\nGRlITk5GSkoKtvqxq4FI6N3Rfv3113A6nbDb7bBarXhao1mSuqHxNjgBI5AUxpjvPb5u3LjB4uPj\nWXNzM+vt7WU2m401NjYaqFBbAt0zTMkeX8eOHWP19fUsJSVFrUwhCHTPMF97fF28eJG5XC7GGGPd\n3d1s2rRpo/pnKtA9w5Ts8XX16lXGGGN9fX3M6XSy48ePq9KqhEA9ijrZAKmrq8PUqVNhsVgQFhaG\nxYsX410/djQQDT072vT0dIxXuauBSOjV0cbExMB+a1eDiIgIJCUl4YKfuxqIhJ4dbXh4OACgt7cX\n/f39mDBhgmavrTVksjLIZbLt7e2IG7KjQWxsLNpldjTQCq2zxqEEarS3QyYrJVCjVZrJtrS0wOVy\nweljVwMt0LNWgRqtr0z25s2bsNvtMJvNyMjIgNVq1UKuLpDJBohJox0NRINGHShHr462p6cHBQUF\nKCkpQUSAuxqIhB4dbUhICBoaGtDW1oZjx47p/kdVDWSyMsiNk50yZQpah+xo0NrailiZHQ20Qqvx\nn3L4a7TBPE7WF/4ara9xsn19fVi0aBGWLl2K+Qp2NdACI2rlr9EqHScbGRmJvLw8nDp1SguZukAm\nGyCzZs3C2bNn0dLSgt7eXrz11lvIV7GjgWhQR6scrTpaxhieeuopWK1WrNdoVwOR0KqjvXz5Mrq6\nugAA169fx6FDh+BwOLSUqilksjLIZbKhoaHYvn07srOzYbVa8dhjjyFJZkcDrTDybZFSo/WVyS5Z\nsgRpaWloampCXFwcfu9jVwMtMPrto1KjlctkT5w4gTfffBNVVVVwOBxwOByo9LGrgRYYWSulRiuX\nyV68eBEPPfQQ7HY7nE4nHnnkEWRmZuolWTWhvAWMZnJycpCTk8Nbhq4MGO3KlSuRl5eH8vJyv3PC\n0tJSndSJxVCj3bt3L2bPnu3X8x988MHbYpbUgNHOmzcPq1atwo4dOxASorzfS01NRX19vY4KtYU6\nWRmCde0Cf/HV0d7OmawUXx1tsK5d4C++Olpau2AISmY9rV27FgkJCbDZbHC5XGovSXCAMlrl0FoH\nyrhd1jpQZbL9/f1Ys2YNKisr0djYiNLSUnz66afDzjlw4ADOnTuHs2fP4vXXX8ePf/xjVYKNJNjX\nLvAXb0Z7O46T9YU3ow32tQv8xZvR0toFt1Ay66msrAzLli0DADidTnR1daGjo0PNZQmOUEernKFG\nu2XLFnzxxRfYtGkTsrOzUV5ezlueMAR7R6vKZJXMevJ0Tltbm5rLGgZlsp4ZarRLly7F2LFjeUsa\ngQh1AtxGu27dOjzzzDPo6+tDY2MjDh48iHXr1gljtCLUaqjRvvDCC7jnnnt4S9IMVaMLlM56cq+t\n4P/zeBITE4O8vDxMmjSJtxRhGeg4jhw5gsmTJ3NWIy6dnZ0jurPz589j4cKFuOuuuzipEpPu7m4A\ngNls5qxEO1SZrJJZT9Jz2traMGXKFI+vt3z5clgsFgBAVFQU7Hb74F/ZgdzIqOMlS5bgnnvuwcqV\nKwEANTU1AIC0tDSuxwP3iaJnqBZR9ADArl27kJycLISeRYsWoba2FlLi4+Nx+PBh7vpE/P/785//\njOrqam6//9XV1WhoaBic9NDS0oKAUbP0V19fH7vvvvtYc3Mz++abbzwu91deXs5ycnIYY4ydPHmS\nOZ1Oj6+lUoouVFVV8ZYwAtKkDJE0zZ07lwEYccvOzuYtjTEmVq0GEFFToB6l2tkOHDjApk2bxuLj\n49nmzZsZY4y99tpr7LXXXhs8Z/Xq1Sw+Pp7NmDGDffjhh56FCGiyBKEF+/fvZ/Hx8cMMNj4+nu3f\nv5+3NMIPAvUo060nc8dkMo3IbgkiWCgvL8e2bdvw9ddfY+zYsfjJT36CvLw83rIIPwjUo2jGlwy8\nx1p6gjQpQzRNeXl5qKysxC9+8QtUVlYKZbCi1QoQU1OgkMkSBEHoCMUFBEEQCqC4gCAIQkDIZGUQ\nMRciTcoQURMgpi7SpC9ksgRBEDpCmSxBEIQCKJMlCIIQEDJZGUTMhUiTMkTUBIipizTpC5ksQRCE\njlAmSxAEoQDKZAmCIASETFYGEXMh0qQMETUBYuoiTfpCJksQBKEjlMkSBEEogDJZgiAIASGTlUHE\nXIg0KUNETYCYukiTvpDJEgRB6AhlsgRBEAqgTJYgCEJAyGRlEDEXIk3KEFETIKYu0qQvZLIEQRA6\nQpksQRCEAiiTJQiCEBAyWRlEzIVIkzJE1ASIqYs06QuZLEEQhI5QJksQBKEAymQJgiAEJGCTvXLl\nCrKysjBt2jTMnTsXXV1dHs+zWCyYMWMGHA4HHnjggYCF8kDEXIg0KUNETYCYukiTvgRsssXFxcjK\nykJTUxMyMzNRXFzs8TyTyYTq6mq4XC7U1dUFLJQHDQ0NvCWMgDQpQ0RNgJi6SJO+BGyyZWVlWLZs\nGQBg2bJl2Ldvn9dzR2vW6q075wlpUoaImgAxdZEmfQnYZDs6OmA2mwEAZrMZHR0dHs8zmUx4+OGH\nMWvWLOzatSvQyxEEQYxKQuUezMrKwqVLl0bc/8ILLww7NplMMJlMHl/jxIkTmDRpEv7v//4PWVlZ\nSExMRHp6ugrJxtHS0sJbwghIkzJE1ASIqYs06QwLkOnTp7OLFy8yxhi7cOECmz59us/n/OIXv2Av\nvfSSx8fi4+MZALrRjW50E/IWHx8fkFfKdrJy5OfnY/fu3di4cSN2796N+fPnjzjn2rVr6O/vx7hx\n43D16lUcPHgQP//5zz2+3rlz5wKVQhAEISwBT0a4cuUK/vmf/xmfffYZLBYL/vznPyMqKgoXLlzA\nypUrUV5ejv/5n//BwoULAQA3btzAE088gaefflrTfwBBEITICDPjiyAIIhjhMuNLpIkMlZWVSExM\nREJCArZs2eLxnLVr1yIhIQE2mw0ul0sXHf7qqq6uRmRkJBwOBxwOB55//nld9RQWFsJsNiM1NdXr\nOUbXyZcmo2sEAK2trcjIyEBycjJSUlKwdetWj+cZXSsluoyu19dffw2n0wm73Q6r1er1Xa6RtVKi\nye86BZTkquRf/uVf2JYtWxhjjBUXF7ONGzd6PM9isbDOzk7ddNy4cYPFx8ez5uZm1tvby2w2G2ts\nbBx2Tnl5OcvJyWGMMVZbW8ucTqduevzRVVVVxR555BHdtQxw7NgxVl9fz1JSUjw+zqNOvjQZXSPG\nGLt48SJzuVyMMca6u7vZtGnThPiZUqKLR72uXr3KGGOsr6+POZ1Odvz48WGP86iVL03+1olLJyvK\nRIa6ujpMnToVFosFYWFhWLx4Md59912vWp1OJ7q6uryOCTZSF6BvbaSkp6dj/PjxXh/nUSdfmgBj\nawQAMTExsNvtAICIiAgkJSXhwoULw87hUSslugDj6xUeHg4A6O3tRX9/PyZMmDDscR618qUJ8K9O\nXExWlIkM7e3tiIuLGzyOjY1Fe3u7z3Pa2to01+KvLpPJhJqaGthsNuTm5qKxsVFXTb7gUSdf8K5R\nS0sLXC4XnE7nsPt518qbLh71unnzJux2O8xmMzIyMmC1Woc9zqNWvjT5W6eAh3D5YjRMZPB2XSnS\nv1pKnxcoSl5/5syZaG1tRXh4OCoqKjB//nw0NTXpqssXRtfJFzxr1NPTg4KCApSUlCAiImLE47xq\nJaeLR71CQkLQ0NCAL7/8EtnZ2aiursb3vve9YecYXStfmvytk26d7KFDh3D69OkRt/z8fJjN5kED\nvnjxIiZOnOjxNSZNmgQAiI6OxoIFCzRfYGbKlClobW0dPG5tbUVsbKzsOW1tbZgyZYqmOgLRNW7c\nuMG3NTk5Oejr68OVK1d01SUHjzr5gleN+vr6sGjRIixdutTj+HFetfKli+fPVGRkJPLy8nDq1Klh\n9/P8ufKmyd86cYkLBiYyAJCdyNDd3Q0AgxMZ5D7ZDoRZs2bh7NmzaGlpQW9vL9566y3k5+eP0PrH\nP/4RAFBbW4uoqKjBqEMvlOjq6OgY/AtfV1cHxpjH7MgoeNTJFzxqxBjDU089BavVivXr13s8h0et\nlOgyul6XL18eHFl0/fp1HDp0CA6HY9g5RtdKiSa/6xT4Z3CB09nZyTIzM1lCQgLLyspiX3zxBWOM\nsfb2dpabm8sYY+z8+fPMZrMxm83GkpOT2ebNm3XRcuDAATZt2jQWHx8/eI3XXnuNvfbaa4PnrF69\nmsXHx7MZM2awDz/8UBcd/uravn07S05OZjabjX33u99lJ0+e1FXP4sWL2aRJk1hYWBiLjY1lv/vd\n77jXyZcmo2vEGGPHjx9nJpOJ2Ww2Zrfbmd1uZwcOHOBeKyW6jK7Xxx9/zBwOB7PZbCw1NZX98pe/\nZIzx/f1TosnfOtFkBIIgCB2h7WcIgiB0hEyWIAhCR8hkCYIgdIRMliAIQkfIZAmCIHSETJYgCEJH\nyGQJgiB0hEyWIAhCR/4fuCFu0/kbyVkAAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x454e450>"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For each triangle, we store the triangle(s) which share a segment with it. For example, triangle $7$ has triangles $1$, $2$ and $4$ as neighbours"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"adj1 = {0:[6],1:[6,7],2:[7,8],3:[6,9],4:[7,9,10],5:[8,10,11]}\n",
"adj2 = {6:[0,1,3], 7:[1,2,4], 8:[2,5], 9:[3,4], 10:[4,5], 11:[5]}\n",
"adj = dict( adj1.items() + adj2.items() )\n",
"for tri, neighbours in adj.iteritems():\n",
" print \"tri %i has neighbours: %r\" % (tri,neighbours)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"tri 0 has neighbours: [6]\n",
"tri 1 has neighbours: [6, 7]\n",
"tri 2 has neighbours: [7, 8]\n",
"tri 3 has neighbours: [6, 9]\n",
"tri 4 has neighbours: [7, 9, 10]\n",
"tri 5 has neighbours: [8, 10, 11]\n",
"tri 6 has neighbours: [0, 1, 3]\n",
"tri 7 has neighbours: [1, 2, 4]\n",
"tri 8 has neighbours: [2, 5]\n",
"tri 9 has neighbours: [3, 4]\n",
"tri 10 has neighbours: [4, 5]\n",
"tri 11 has neighbours: [5]\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we call the Metis functions that partion our mesh. It takes as first argument the number of partition we want, $3$ in our case, and as second argument the adjacency map we define above."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"npart = 3\n",
"cuts, part = part_graph(npart,adj)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It returns cuts and part.\n",
"\n",
"part is an array telling on which partition a triangle belong. For exemple, part[4] == 2, so triangle $4$ belongs to partition $2$.\n",
"\n",
"cuts is the number of connection beetween triangles (on segment) that are cutted by the partitions.\n",
"\n",
"Finally, we convert part from list to array."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print part\n",
"print part[4]\n",
"print cuts\n",
"part = array(part)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[1, 1, 0, 2, 2, 0, 1, 1, 0, 2, 2, 0]\n",
"2\n",
"4\n"
]
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We plot the triangles, and give them as color the partition number they belong to.\n",
"\n",
"We also print the triangle that belong to partition 0, 1 and 2."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"tripcolor(x1d, y1d, triangle, facecolors=array(part), edgecolors='k', cmap=cm.Pastel1)\n",
"plot_triangles(index=True)\n",
"for ipart in range(npart):\n",
" print \"triangles of partition %i:\"%ipart, where(part==ipart)\n",
"scale()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"triangles of partition 0: (array([ 2, 5, 8, 11]),)\n",
"triangles of partition 1: (array([0, 1, 6, 7]),)\n",
"triangles of partition 2: (array([ 3, 4, 9, 10]),)\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x49149d0>"
]
}
],
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that informations contained in the adjaceny map can also be stored in two arrays, in the CSR format. In this format, the 'adjncy' array contains in series the neighbours of triange $0$, then the neighbours of triange $1$, etc. The array 'xadj' is used to index the 'adjncy' array: use the i-th value of xadj to extract from adjncy the first neighbour of triangle i."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"xadj = [0,1,3,5,7,10,13,16,19,21,23,25,26]\n",
"adjncy = [6,6,7,7,8,6,9,7,9,10,8,10,11,0,1,3,1,2,4,2,5,3,4,4,5,5]\n",
"\n",
"itri = 7\n",
"\n",
"# Get neighbours from map.\n",
"print adj[itri]\n",
"\n",
"# Get neighbours from CSR arrays.\n",
"i0 = xadj[itri]\n",
"i1 = xadj[itri+1]\n",
"print adjncy[i0:i1]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[1, 2, 4]\n",
"[1, 2, 4]\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Instead of the map, the part_graph function can take these arrays as input:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cuts2, part2 = part_graph(npart, xadj=xadj, adjncy=adjncy)\n",
"cuts2 == cuts\n",
"all(part2 == part)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": [
"True"
]
}
],
"prompt_number": 11
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment