{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Voronoi parameters\n", "\n", "[Voronoi tessellation](http://pyscal.com/en/latest/methods/voronoiparameters/voronoiparameters.html) can be used to identify local structure by counting the number of faces of the Voronoi polyhedra of an atom. For each atom a vector $\\langle n3~n4~n5~n6$ can be calculated where $n_3$ is the number of Voronoi faces of the associated Voronoi polyhedron with three vertices, $n_4$ is with four vertices and so on. Each perfect crystal structure such as a signature vector, for example, bcc can be identified by $\\langle 0~6~0~8 \\rangle$ and fcc can be identified using $\\langle 0~12~0~0 \\rangle$. It is also a useful tool for identifying icosahedral structure which has the fingerprint $\\langle 0~0~12~0 \\rangle$. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pyscal.core as pc\n", "import pyscal.crystal_structures as pcs\n", "import matplotlib.pyplot as plt\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The :mod:`~pyscal.crystal_structures` module is used to create different perfect crystal structures. The created atoms and simulation box is then assigned to a :class:`~pyscal.core.System` object. For this example, fcc, bcc, hcp and diamond structures are created." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "fcc_atoms, fcc_box = pcs.make_crystal('fcc', lattice_constant=4, repetitions=[4,4,4])\n", "fcc = pc.System()\n", "fcc.atoms = fcc_atoms\n", "fcc.box = fcc_box" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "bcc_atoms, bcc_box = pcs.make_crystal('bcc', lattice_constant=4, repetitions=[4,4,4])\n", "bcc = pc.System()\n", "bcc.atoms = bcc_atoms\n", "bcc.box = bcc_box" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "hcp_atoms, hcp_box = pcs.make_crystal('hcp', lattice_constant=4, repetitions=[4,4,4])\n", "hcp = pc.System()\n", "hcp.atoms = hcp_atoms\n", "hcp.box = hcp_box" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before calculating the Voronoi polyhedron, the [neighbors for each atom](http://pyscal.com/en/latest/methods/nearestneighbormethods/nearestneighbormethods.html) need to be found using Voronoi method." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "fcc.find_neighbors(method='voronoi')\n", "bcc.find_neighbors(method='voronoi')\n", "hcp.find_neighbors(method='voronoi')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, Voronoi vector can be calculated" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "fcc.calculate_vorovector()\n", "bcc.calculate_vorovector()\n", "hcp.calculate_vorovector()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The calculated parameters for each atom can be accessed using the :attr:`~pyscal.catom.Atom.vorovector` attribute." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "fcc_atoms = fcc.atoms\n", "bcc_atoms = bcc.atoms\n", "hcp_atoms = hcp.atoms" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0, 12, 0, 0]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fcc_atoms[10].vorovector" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As expected, fcc structure exhibits 12 faces with four vertices each. For a single atom, the difference in the Voronoi fingerprint is shown below" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAD6CAYAAACmjCyGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAUAklEQVR4nO3df5BdZX3H8feXJLqkJeGH207qku5irQLJLsVNCsQiCqQiFoSxoxQcBCVNm6a0lZbY0qKDnf6gpBWopmlRMxYhFigVrVFAfpQRMQmI4Wf5kZSuiIQkSkoIEPLtH/cSQ8huTnbvuSe75/2a2bn3nHv2PN8cls8++9znPDcyE0lSfexVdQGSpPYy+CWpZgx+SaoZg1+Sasbgl6SaMfglqWbGV11AEW94wxuyu7u76jIkaVRZuXLlM5nZueP+URH83d3drFixouoyJGlUiYj/2dl+h3okqWYMfkmqGYNfkmpmVIzxS1KrvPTSSwwMDLB58+aqS2mZjo4Ourq6mDBhQqHjDX5JtTIwMMA+++xDd3c3EVF1OSOWmaxbt46BgQF6enoKfU9pQz0R8bmIeDoi7ttu38UR8VBEfD8i/j0i9i2rfUnamc2bN3PAAQeMidAHiAgOOOCA3foLpswx/i8A795h343AtMzsBf4b+HiJ7UvSTo2V0H/F7v57Sgv+zLwdWL/Dvm9m5pbm5neArrLal6Q91aWXXsrBBx/M6aefXkn7VY7xnw0sHezFiJgDzAGYOnVqSxrsXvC1lpxnzV+f2JLzTF8yfcTnWHXmqhZUItVXq3LhFUXy4TOf+Qxf//rXC4/Jt1ol0zkj4s+ALcCVgx2TmYszsz8z+zs7X3PHsSSNSnPnzuXxxx/npJNO4qKLLuKss85i+vTp9Pb2cu211wKwbNkyDj/8cPr6+jj22GNbXkPbe/wRcSbwXuDY9HMfJdXMokWLWLZsGbfccgsXX3wxkydPZtWqxl/uGzZsYO3atZxzzjncfvvt9PT0sH79+l2ccfe1Nfgj4t3A+cA7MnNTO9uWpD3NTTfdxNVXX71te7/99uOGG27g6KOP3jYMtP/++7e83TKnc14F3Am8JSIGIuIjwOXAPsCNEfG9iFhUVvuStKfLzNfMyNnZvlYrc1bPaZk5JTMnZGZXZl6Rmb+UmQdm5mHNr7lltS9Je7rZs2dz+eWXb9vesGEDRx55JLfddhurV68GKGWox7V6JKkiF1xwARs2bGDatGn09fVxyy230NnZyeLFizn11FPp6+vjAx/4QMvbdckGSbXWqunZu9XmmjXbni9ZsuQ1r59wwgmccMIJpbVvj1+Sasbgl6SaMfglqWYMfkmqGYNfkmrG4JekmjH4JanN1qxZw7Rp0ypr33n8kurtE5NbfL6ftPZ8JbDHL0kV2LJlC2eeeSa9vb28//3vZ9OmTSxfvpyjjjqKvr4+Zs6cycaNG3n55Zc577zzti3dfNlll424bXv8klSBhx9+mCuuuIJZs2Zx9tlnc/nll7No0SKWLl3KjBkzePbZZ9l7771ZvHgxq1ev5p577mH8+PEtWbvHHr8kVeDAAw9k1qxZAJxxxhl84xvfYMqUKcyYMQOASZMmMX78eG666Sbmzp3L+PGNfnorlmk2+CWpAjsuvTxp0qSdLsdcxjLNBr8kVeCJJ57gzjvvBOCqq67iiCOO4Mknn2T58uUAbNy4kS1btjB79mwWLVrEli1bgNYs02zwS1IFDj74YJYsWUJvby/r169n/vz5LF26lPnz59PX18fxxx/P5s2b+ehHP8rUqVPp7e2lr6+PL33pSyNu2zd3JdVbBdMvu7u7eeCBB16zf8aMGXznO995zf6FCxeycOHClrVvj1+Sasbgl6SaMfglqWYMfkmqGYNfkmrG4JekmjH4JanNXJZZkio0fcn0lp5v1ZmrWnq+MpTW44+Iz0XE0xFx33b79o+IGyPikebjfmW1L0l7spdffplzzjmHQw89lNmzZ/P888/z6KOPctxxx9HX18fhhx/OY489xq233srRRx/NKaecwiGHHMLcuXPZunXriNouc6jnC8C7d9i3ALg5M98M3NzclqTaeeSRR5g3bx73338/++67L9deey2nn3468+bN49577+Xb3/42U6ZMAeC73/0ul1xyCatWreKxxx7juuuuG1HbpQV/Zt4O7Lia0MnAkubzJcD7ympfkvZkPT09HHbYYQC87W1vY/Xq1fzgBz/glFNOAaCjo4OJEycCMHPmTA466CDGjRvHaaedxh133DGittv95u7PZ+YPAZqPPzfYgRExJyJWRMSKtWvXtq1ASWqH17/+9duejxs3jg0bNgx67I7LMo90meY9dlZPZi7OzP7M7O/s7Ky6HEkq1aRJk+jq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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.bar(np.array(range(4))-0.2, fcc_atoms[10].vorovector, width=0.2, label=\"fcc\")\n", "ax.bar(np.array(range(4)), bcc_atoms[10].vorovector, width=0.2, label=\"bcc\")\n", "ax.bar(np.array(range(4))+0.2, hcp_atoms[10].vorovector, width=0.2, label=\"hcp\")\n", "ax.set_xticks([1,2,3,4])\n", "ax.set_xlim(0.5, 4.25)\n", "ax.set_xticklabels(['$n_3$', '$n_4$', '$n_5$', '$n_6$'])\n", "ax.set_ylabel(\"Number of faces\")\n", "ax.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The difference in Voronoi fingerprint for bcc and the closed packed structures is clearly visible. Voronoi tessellation, however, is incapable of distinction between fcc and hcp structures." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Voronoi volume\n", "\n", "Voronoi volume, which is the volume of the Voronoi polyhedron is calculated when the neighbors are found. The volume can be accessed using the :attr:`~pyscal.catom.Atom.volume` attribute." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "fcc_atoms = fcc.atoms" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "fcc_vols = [atom.volume for atom in fcc_atoms]" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "16.0" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean(fcc_vols)" ] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "base" }, "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.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }