{ "cells": [ { "cell_type": "markdown", "id": "3c8e6094", "metadata": {}, "source": [ "## Initial Imports" ] }, { "cell_type": "code", "execution_count": 1, "id": "552b041b", "metadata": {}, "outputs": [], "source": [ "import sys\n", "import multiprocessing\n", "from scm.plams import (\n", " JobRunner,\n", " config,\n", " from_smiles,\n", " Settings,\n", " AMSJob,\n", " JobAnalysis,\n", " jobs_in_directory,\n", " view,\n", " plot_image_grid,\n", ")\n", "import numpy as np" ] }, { "cell_type": "markdown", "id": "02d6fea6", "metadata": {}, "source": [ "## Set Up Job Runner\n", "Set up job runner, running as many jobs as possible in parallel." ] }, { "cell_type": "code", "execution_count": 2, "id": "1051cd77", "metadata": {}, "outputs": [], "source": [ "config.default_jobrunner = JobRunner(parallel=True, maxjobs=multiprocessing.cpu_count())\n", "config.job.runscript.nproc = 1" ] }, { "cell_type": "markdown", "id": "f6b2d05a", "metadata": {}, "source": [ "## Set Up Molecules\n", "Create the molecules we want to use in our benchmark from SMILES." ] }, { "cell_type": "code", "execution_count": 3, "id": "b12f8832-4a9e-457d-ab57-665068498fc3", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABOwAAACxCAYAAAB3GiK/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB4PElEQVR4nO3deXyU1dk//s9smX0mM9n3kLApICAKCuIuirigKO5La6s+z1drtdUutqJ2ebSttmrV2ta6ICjuRS0qIiICCoiAIiAhJCSErLPv2/37g985nZkERAUyJJ/36zUvYDKZ3Pcoh3Ouc13XUSmKooCIiIiIiIiIiIhygrq/L4CIiIiIiIiIiIj+iwE7IiIiIiIiIiKiHMKAHRERERERERERUQ5hwI6IiIiIiIiIiCiHMGBHRERERERERESUQxiwIyIiIiIiIiIiyiEM2BEREREREREREeUQBuyIiIiIiIiIiIhyCAN2REREREREREREOYQBO/pGnn76aahUKqxdu7a/L4WI6KC79tprYbFY+vsyiIgOugM93jU1NUGlUuHpp58+YO9JRDQQ3H333VCpVP19GXQYYMDuMCUCZyqVCh999FGvryuKgqqqKqhUKpxzzjnf+P0fe+wxTrCI6LCXPlb29fj4448RCoVw991344MPPujvyyUi+tY43hHRYPbYY49BpVJh0qRJB/1n/f73v8frr79+0H8Okba/L4C+G4PBgPnz5+OEE07IeH7ZsmVobW2FXq//Vu/72GOPobCwENdee+0BuEoiov517733YsiQIb2eHzp0KEKhEO655x4AwMknn3yIr4yI6MDieEdEg9G8efNQW1uL1atXo6GhAUOHDj1oP+v3v/89LrroIsycOfOg/QwigAG7w97ZZ5+Nl156CQ8//DC02v/+55w/fz4mTJiA7u7ufrw6IqLcMH36dBxzzDF9fo3jJBENJBzviGiw2bFjB1auXIlXX30VN9xwA+bNm4c5c+b092URfWcsiT3MXXbZZejp6cHixYvlc7FYDC+//DIuv/zyXq9PpVL4y1/+glGjRsFgMKCkpAQ33HAD3G63fE1tbS02bdqEZcuWyTKK7F3YaDSK2267DUVFRTCbzbjgggvQ1dWV8Zp///vfmDFjBsrLy6HX61FfX4/f/OY3SCaTGa87+eSTMXr0aHz55Zc45ZRTYDKZUFFRgT/84Q+9rj8ajWLOnDkYOnQo9Ho9qqqqcMcddyAajX6bj4+IBrmmpiYUFRUBAO655x455t19990Zr9u1axdmzpwJi8WCoqIi/PSnP+01lv3pT3/C5MmTUVBQAKPRiAkTJuDll1/u9TNVKhVuuukmvP766xg9ejT0ej1GjRqFt99+u9drd+3ahe9///soKSmRr/vXv/514D4AIho0DsR4pygKamtrcf755/d6/0gkArvdjhtuuGGf17FlyxZcdNFFcDqdMBgMOOaYY7Bw4cKM14jy3hUrVnztfBMAFi1ahKlTp8JsNsNqtWLGjBnYtGnTN/l4iOgwNm/ePDgcDsyYMQMXXXQR5s2b1+s1Ho8Ht956K2pra6HX61FZWYmrr746YyNjf9aaKpUKwWAQzzzzjBxHr732WixduhQqlQqvvfZar589f/58qFQqrFq1ap/38dxzz2HChAkwGo1wOp249NJL0dLSkvEarp0HFwbsDnO1tbU4/vjj8fzzz8vnFi1aBK/Xi0svvbTX62+44QbcfvvtmDJlCh566CF873vfw7x583DmmWciHo8DAP7yl7+gsrISI0eOxNy5czF37lzceeedGe9z8803Y8OGDZgzZw7+53/+B2+88QZuuummjNc8/fTTsFgsuO222/DQQw9hwoQJuOuuu/Dzn/+813W53W6cddZZGDt2LB544AGMHDkSP/vZz7Bo0SL5mlQqhfPOOw9/+tOfcO655+KRRx7BzJkz8ec//xmXXHLJd/ociWhg83q96O7uznj09PSgqKgIjz/+OADgggsukGPehRdeKL83mUzizDPPREFBAf70pz/hpJNOwgMPPIC///3vGT/joYcewvjx43Hvvffi97//PbRaLS6++GK89dZbva7no48+wv/+7//i0ksvxR/+8AdEIhHMmjULPT098jUdHR047rjj8N577+Gmm27CQw89hKFDh+K6667DX/7yl4PzQRHRYe9gjncqlQpXXnklFi1aBJfLlfFz33jjDfh8Plx55ZV7vbZNmzbhuOOOw+bNm/Hzn/8cDzzwAMxmM2bOnNnnInd/5ptz587FjBkzYLFYcP/99+PXv/41vvzyS5xwwgloamr6th8jER1G5s2bhwsvvBB5eXm47LLLsG3bNqxZs0Z+PRAIYOrUqXjkkUcwbdo0PPTQQ7jxxhuxZcsWtLa2Atj/tebcuXOh1+sxdepUOY7ecMMNOPnkk1FVVdVnsHDevHmor6/H8ccfv9d7+N3vfoerr74aw4YNw4MPPogf//jHWLJkCU488UR4PJ6M13LtPIgodFh66qmnFADKmjVrlL/+9a+K1WpVQqGQoiiKcvHFFyunnHKKoiiKUlNTo8yYMUNRFEVZvny5AkCZN29exnu9/fbbvZ4fNWqUctJJJ+31555++ulKKpWSz996662KRqNRPB6PfE5cT7obbrhBMZlMSiQSkc+ddNJJCgDl2Weflc9Fo1GltLRUmTVrlnxu7ty5ilqtVpYvX57xnn/7298UAMqKFSv2/oER0aAkxqy+Hnq9XlEURenq6lIAKHPmzOn1/ddcc40CQLn33nsznh8/frwyYcKEjOeyx7xYLKaMHj1aOfXUUzOeB6Dk5eUpDQ0N8rkNGzYoAJRHHnlEPnfdddcpZWVlSnd3d8b3X3rppYrdbu9zjCWiwetQjXdbt25VACiPP/54xuvOO+88pba2Vs4Pd+zYoQBQnnrqKfma0047TRkzZkzGPDCVSimTJ09Whg0b1utevm6+6ff7lfz8fOWHP/xhxrW0t7crdru91/NENPCsXbtWAaAsXrxYUZQ9Y0plZaVyyy23yNfcddddCgDl1Vdf7fX9Yoz5JmtNs9msXHPNNb3e6xe/+IWi1+sz1sSdnZ2KVqvNGHfnzJmjpIdimpqaFI1Go/zud7/LeL/PP/9c0Wq1Gc9z7Ty4MMNuAJg9ezbC4TDefPNN+P1+vPnmm32Ww7700kuw2+0444wzMnZdJ0yYAIvFgqVLl+73z7z++uszjqKeOnUqkskkmpub5XNGo1H+3u/3o7u7G1OnTkUoFMKWLVsy3s9isWTsyObl5WHixIlobGzMuP4jjjgCI0eOzLj+U089FQC+0fUT0eDy6KOPYvHixRmP9F3Ir3PjjTdm/Hnq1KkZ4xOQOea53W54vV5MnToV69at6/V+p59+Ourr6+WfjzrqKNhsNvmeiqLglVdewbnnngtFUTLGvDPPPBNer7fP9yUiOtjj3fDhwzFp0qSMLBKXy4VFixbhiiuuyJgfpnO5XHj//fcxe/ZsOS8U2X9nnnkmtm3bhl27dmV8z9fNNxcvXgyPx4PLLrssY5zUaDSYNGkS54ZEg8C8efNQUlKCU045BcCeTOBLLrkEL7zwgiznf+WVVzB27FhccMEFvb5fjDEHYq159dVXIxqNZrREWbBgARKJxD6zj1999VWkUinMnj0742eXlpZi2LBhvX42186DBw+dGACKiopw+umnY/78+QiFQkgmk7jooot6vW7btm3wer0oLi7u8306Ozv3+2dWV1dn/NnhcABARi+8TZs24Ve/+hXef/99+Hy+jNd7vd6MP1dWVvaa4DkcDmzcuDHj+jdv3iz7r3yX6yeiwWXixIl7bcL+dQwGQ69xx+FwZIx3APDmm2/it7/9LdavX9+r10m27DE0+z27urrg8Xjw97//vVfprcAxj4j6cijGu6uvvho33XQTmpubUVNTg5deegnxeBxXXXXVXt+7oaEBiqLg17/+NX7961/3+ZrOzk5UVFTIP3/dfHPbtm0AIBeg2Ww2216vh4gOf8lkEi+88AJOOeUU7NixQz4/adIkPPDAA1iyZAmmTZuG7du3Y9asWft8rwOx1hw5ciSOPfZYzJs3D9dddx2APQHF4447bp+n1m7btg2KomDYsGF9fl2n02X8mWvnwYMBuwHi8ssvxw9/+EO0t7dj+vTpyM/P7/WaVCqF4uLiPuvqAez1L3NfNBpNn88rigJgT1PPk046CTabDffeey/q6+thMBiwbt06/OxnP0MqlfpG7yeuf8yYMXjwwQf7fG1VVdV+Xz8R0f7a2/iUbvny5TjvvPNw4okn4rHHHkNZWRl0Oh2eeuopzJ8/f7/fU4x5Yoy88sorcc011/T52qOOOmp/b4GIaL/sz3gHAJdeeiluvfVWzJs3D7/85S/x3HPP4ZhjjsGIESP2+j1iXPvpT3+KM888s8/XZC9o93esnDt3LkpLS3u9TqvlUodoIHv//fexe/duvPDCC3jhhRd6fX3evHmYNm3afr3XgVprXn311bjlllvQ2tqKaDSKjz/+GH/961+/9merVCosWrSoz3HPYrFk/Jlr58GD/4oNEBdccAFuuOEGfPzxx1iwYEGfr6mvr8d7772HKVOmZJRu9WVv5Qz764MPPkBPTw9effVVnHjiifL59J2Pb6q+vh4bNmzAaaed9p2vj4hIOBDjySuvvAKDwYB33nkHer1ePv/UU099q/crKiqC1WpFMpnE6aef/p2vj4gIODDjHQA4nU7MmDED8+bNwxVXXIEVK1Z87WE4dXV1APZkihyocU20FiguLuZYSTQIzZs3D8XFxXj00Ud7fe3VV1/Fa6+9hr/97W+or6/HF198sc/3+iZrzX19/dJLL8Vtt92G559/HuFwGDqd7msPeaivr4eiKBgyZAiGDx++z9fuL66dBwb2sBsgLBYLHn/8cdx9990499xz+3zN7NmzkUwm8Zvf/KbX1xKJRMbpM2azuddpNN+EiPqnR/ljsRgee+yxb/2es2fPxq5du/CPf/yj19fC4TCCweC3fm8iGrxMJhMAfOcxT6VSyV4pANDU1ITXX3/9W7/frFmz8Morr/Q5wezq6vq2l0pEg9iBGO+Eq666Cl9++SVuv/12aDQaXHrppft8fXFxMU4++WQ88cQT2L17d6+vf5tx7cwzz4TNZsPvf/97xOPxA/KeRHR4CIfDePXVV3HOOefgoosu6vW46aab4Pf7sXDhQsyaNQsbNmzo8zRqsV79JmvNfa2VCwsLMX36dDz33HOYN28ezjrrLBQWFu7zXi688EJoNBrcc889GetncX09PT1f93H0wrXzwMAMuwFkb2VTwkknnYQbbrgB//d//4f169dj2rRp0Ol02LZtG1566SU89NBDsvfdhAkT8Pjjj+O3v/0thg4diuLi4r32B+nL5MmT4XA4cM011+BHP/oRVCoV5s6d22sA+iauuuoqvPjii7jxxhuxdOlSTJkyBclkElu2bMGLL76Id95551v3bCGigW3RokW9DrsB9oxVdXV1OPLII7FgwQIMHz4cTqcTo0ePxujRo/f7/WfMmIEHH3wQZ511Fi6//HJ0dnbi0UcfxdChQzP6iXwT9913H5YuXYpJkybhhz/8IY488ki4XC6sW7cO7733Hlwu17d6XyIa2A72eCfMmDEDBQUFeOmllzB9+vS99khO9+ijj+KEE07AmDFj8MMf/hB1dXXo6OjAqlWr0Nraig0bNnyja7DZbHj88cdx1VVX4eijj8all16KoqIi7Ny5E2+99RamTJnytaVoRHR4WrhwIfx+P84777w+v37cccehqKgI8+bNw/z58/Hyyy/j4osvxve//31MmDABLpcLCxcuxN/+9jeMHTv2G601J0yYgPfeew8PPvggysvLMWTIEEyaNEn+7Kuvvlquq/tKlslWX1+P3/72t/jFL36BpqYmzJw5E1arFTt27MBrr72G66+/Hj/96U+/0efDtfPAwIDdIPO3v/0NEyZMwBNPPIFf/vKX0Gq1qK2txZVXXokpU6bI1911111obm7GH/7wB/j9fpx00knfKGBXUFCAN998Ez/5yU/wq1/9Cg6HA1deeSVOO+20vfYt+TpqtRqvv/46/vznP+PZZ5/Fa6+9BpPJhLq6Otxyyy0HLH2YiAaeu+66q8/nn3rqKdTV1eGf//wnbr75Ztx6662IxWKYM2fON1rAnnrqqXjyySdx33334cc//jGGDBmC+++/H01NTd86YFdSUoLVq1fj3nvvxauvvorHHnsMBQUFGDVqFO6///5v9Z5ENPAd7PFOyMvLwyWXXILHHntsn4dNpDvyyCOxdu1a3HPPPXj66afR09OD4uJijB8/fq/X/XUuv/xylJeX47777sMf//hHRKNRVFRUYOrUqfje9773rd6TiHLfvHnzYDAYcMYZZ/T5dbVaLUv3o9Eoli9fjjlz5uC1117DM888g+LiYpx22mmorKyUr9/fteaDDz6I66+/Hr/61a8QDodxzTXXZATszj33XDgcDqRSqb0GFLP9/Oc/x/Dhw/HnP/8Z99xzD4A9feamTZu23++Rff9cOx/+VMp3SXkiIiIiIqJB6dZbb8WTTz6J9vZ2WW5LRDTYJRIJlJeX49xzz8WTTz7Z35dDhzH2sCMiIiIiom8kEongueeew6xZsxisIyJK8/rrr6OrqwtXX311f18KHeZYEktERERERPuls7MT7733Hl5++WX09PTglltu6e9LIiLKCZ988gk2btyI3/zmNxg/fjxOOumk/r4kOswxYEdERERERPvlyy+/xBVXXIHi4mI8/PDDGDduXH9fEhFRTnj88cfx3HPPYdy4cXj66af7+3JoAGAPOyIiIiIiIiIiohzCHnZEREREREREREQ5hAE7IiIiIiIiIiKiHMKAHRERERERERERUQ5hwI6IiIiIiIiIiCiHMGBHRERERERERESUQxiwIyIiIiIiIiIiyiEM2BEREREREREREeUQBuyIiIiIiIiIiIhyCAN2REREREREREREOYQBOyIiIiIiIiIiohzCgB0REREREREREVEOYcCOiIiIiIiIiIgohzBgR0RERERERERElEMYsCMiIiIiIiIiIsohDNgRERERERERERHlEAbsiIiIiIiIiIiIcggDdkRERERERERERDmEATsiIiIiIiIiIqIcwoAdERERERERERFRDmHAjoiIiIiIiIiIKIcwYEdERERE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A3M2my1j0yIajSIQCMDr9aK7uxttbW0oKSkZtCfEZjviiCPw6KOP4v/+7/+wbNky7N69W/Z49nq98nAzrVaLVCoFi8WCmTNnYsKECdzsJSKifqVSRB49UQ5SFAWbN2/GH/7wByxfvhyxWAwGgwF2u102DzaZTHKhDgCJRAJGoxFnn302zjjjjJzOJCSib6azsxO/+MUvsGbNGpSXl6O8vBxOpzOjR6c4UMfr9WL69OmYNm0ay2GJ6LCxatUq/M///A9KS0tRV1eHiooKlJSUoLCwEPn5+b16EouyTpFV3NnZiWuvvRbFxcX9fSs5JRgM4t1338WLL76IL7/8EpFIBHq9HmazGTabDaWlpTjppJNw9tlno7S0tL8vl4iIiAE7OjyEQiEsXboUL774IjZs2ACv1wu1Wi2z63Q6HYxGI4qLizFlyhScf/75qKys5M4o0QDkdrvx5JNP4pVXXkE8HofD4ZAZJ8CeJuIlJSW48sorMWHCBAbriOiwEo/H8dvf/havvvoqamtrUVlZidLSUhQUFMjNSr1eD41GIw/ZEofstLe349RTT8VJJ53EOdBeRCIRtLW1YefOnQiFQtBqtSgtLUVtbS2sVis/NyIiyhkM2NFhJRaLoaWlBVu3bkVzczPcbjf0ej3KysowbNgwDBs2DHa7nZMtogEulUqhqakJH330ETZu3AiPxwOj0Yja2lpMmjQJ48ePh9ls7u/LJCL6VlwuF+644w58/PHHqKioQFlZGQoLCzMCduLwhGg0Cr/fj56eHkyePBmzZs3iQQlEREQDAAN2dFjLPimNiAYfcXK0Wq1mNh0RDRg9PT34y1/+goULF8JgMKC4uBgOh0MekKBWq5FMJhEIBKBSqXDBBRfgzDPPZN9eIiKiAYIBOyIiIiKiHBSPx7Fq1Sq88MIL2LhxI2KxGHQ6HfLy8pCXl4eCggIcf/zxmDlzJluBEBERDTAM2BERERER5bBEIoGuri60tLTA7XYjLy8PpaWlqKyshMViYaCOiIhoAGLAjoiIiIiIiIiIKIew2Q8REREREREREVEOYcCOiIiIiIiIiIgohzBgR0RERERERERElEMYsCMiIiIiIiIiIsohDNgRERERERERERHlEAbsiIiIiIiIiIiIcggDdkRERERERERERDmEATsiIiIiIiIiIqIcwoAdERERERERERFRDmHAjoiIiIiIiIiIKIcwYEdERERERERERJRDGLAjIiIiIiIiIiLKIQzYERERERERERER5RAG7IiIiIiIiIiIiHIIA3ZEREREREREREQ5hAE7IiIiIiIiIiKiHMKAHRERERERERERUQ5hwI6IiIiIiIiIiCiHMGBHRERERERERESUQxiwIyIiIiIiIiIiyiEM2BEREREREREREeUQBuyIiIiIiIiIiIhyCAN2REREREREREREOYQBOyIiIiIiIiIiohzCgB0REREREREREVEOYcCOiIiIiIiIiIgohzBgR0RERERERERElEMYsCMiIiIiIiIiIsohDNgRERERERERERHlEAbsiIiIiIiIiIiIcggDdkRERERERERERDmEATsiIiIiIiIiIqIcwoAdERERERERERFRDvn/ADVkvsPOL9mBAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# The molecules we want to use in our benchmark:\n", "mol_smiles = {\"Methane\": \"C\", \"Ethane\": \"C-C\", \"Ethylene\": \"C=C\", \"Acetylene\": \"C#C\"}\n", "molecules = {}\n", "for name, smiles in mol_smiles.items():\n", " # Compute 10 conformers, optimize with UFF and pick the lowest in energy.\n", " molecules[name] = from_smiles(smiles, nconfs=10, forcefield=\"uff\")[0]\n", "\n", "plot_image_grid({k: view(v) for k, v in molecules.items()}, rows=1);" ] }, { "cell_type": "markdown", "id": "643907b6", "metadata": { "tags": [] }, "source": [ "## Initialize Calculation Settings\n", "Set up the settings which are common across jobs. The basis type is added later for each job." ] }, { "cell_type": "code", "execution_count": 4, "id": "ab2804d8", "metadata": {}, "outputs": [], "source": [ "common_settings = Settings()\n", "common_settings.input.ams.Task = \"SinglePoint\"\n", "common_settings.input.ams.System.Symmetrize = \"Yes\"\n", "common_settings.input.adf.Basis.Core = \"None\"" ] }, { "cell_type": "code", "execution_count": 5, "id": "2dbc2e52", "metadata": {}, "outputs": [], "source": [ "basis = [\"QZ4P\", \"TZ2P\", \"TZP\", \"DZP\", \"DZ\", \"SZ\"]\n", "reference_basis = \"QZ4P\"" ] }, { "cell_type": "markdown", "id": "c71bd215", "metadata": {}, "source": [ "## Run Calculations" ] }, { "cell_type": "code", "execution_count": 6, "id": "983bc45b-9b41-4ab0-accc-d88f1421a287", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[02.04|11:36:45] JOB Methane_QZ4P STARTED\n", "[02.04|11:36:45] JOB Ethane_QZ4P STARTED\n", "[02.04|11:36:45] JOB Ethylene_QZ4P STARTED\n", "[02.04|11:36:45] JOB Acetylene_QZ4P STARTED\n", "[02.04|11:36:45] JOB Methane_TZ2P STARTED\n", "[02.04|11:36:45] JOB Ethane_TZ2P STARTED\n", "[02.04|11:36:45] JOB Ethylene_TZ2P STARTED\n", "[02.04|11:36:45] JOB Acetylene_TZ2P STARTED\n", "[02.04|11:36:45] JOB Methane_QZ4P RUNNING\n", "[02.04|11:36:45] JOB Methane_TZP STARTED\n", "[02.04|11:36:45] JOB Ethane_QZ4P RUNNING\n", "[02.04|11:36:45] JOB Ethane_TZP STARTED\n", "[02.04|11:36:45] JOB Ethylene_TZP STARTED\n", "[02.04|11:36:45] JOB Acetylene_TZP STARTED\n", "[02.04|11:36:46] JOB Ethylene_QZ4P RUNNING\n", "[02.04|11:36:46] JOB Methane_DZP STARTED\n", "[02.04|11:36:46] JOB Acetylene_QZ4P RUNNING\n", "[02.04|11:36:46] JOB Ethane_DZP STARTED\n", "[02.04|11:36:46] JOB Methane_TZ2P RUNNING\n", "[02.04|11:36:46] JOB Ethylene_DZP STARTED\n", "[02.04|11:36:46] JOB Ethylene_TZ2P RUNNING\n", "[02.04|11:36:46] JOB Ethane_TZ2P RUNNING\n", "[02.04|11:36:46] JOB Acetylene_DZP STARTED\n", "[02.04|11:36:46] JOB Acetylene_TZ2P RUNNING\n", "[02.04|11:36:46] JOB Ethylene_TZP RUNNING\n", "[02.04|11:36:46] JOB Methane_TZP RUNNING\n", "[02.04|11:36:46] JOB Ethane_DZP RUNNING\n", "[02.04|11:36:46] JOB Acetylene_TZP RUNNING\n", "[02.04|11:36:46] JOB Ethane_TZP RUNNING\n", "[02.04|11:36:46] JOB Methane_DZP RUNNING\n", "[02.04|11:36:46] JOB Acetylene_DZP RUNNING\n", "[02.04|11:36:46] JOB Ethylene_DZP RUNNING\n", "[02.04|11:36:46] JOB Methane_DZ STARTED\n", "[02.04|11:36:46] JOB Methane_DZ RUNNING\n", "[02.04|11:36:46] JOB Ethane_DZ STARTED\n", "[02.04|11:36:46] JOB Ethylene_DZ STARTED\n", "[02.04|11:36:46] JOB Acetylene_DZ STARTED\n", "[02.04|11:36:46] JOB Methane_SZ STARTED\n", "[02.04|11:36:46] JOB Ethane_DZ RUNNING\n", "[02.04|11:36:46] JOB Ethylene_DZ RUNNING\n", "[02.04|11:36:46] JOB Acetylene_DZ RUNNING\n", "[02.04|11:36:46] JOB Ethane_SZ STARTED\n", "[02.04|11:36:46] JOB Methane_SZ RUNNING\n", "[02.04|11:36:46] JOB Ethylene_SZ STARTED\n", "[02.04|11:36:46] JOB Ethane_SZ RUNNING\n", "[02.04|11:36:46] JOB Acetylene_SZ STARTED\n", "[02.04|11:36:46] JOB Ethylene_SZ RUNNING\n", "[02.04|11:36:46] Waiting for job Methane_QZ4P to finish\n", "[02.04|11:36:46] JOB Acetylene_SZ RUNNING\n", "[02.04|11:36:49] JOB Methane_TZP FINISHED\n", "[02.04|11:36:49] JOB Methane_TZP SUCCESSFUL\n", "[02.04|11:36:50] JOB Methane_TZ2P FINISHED\n", "[02.04|11:36:50] JOB Methane_TZ2P SUCCESSFUL\n", "[02.04|11:36:50] JOB Methane_QZ4P FINISHED\n", "[02.04|11:36:50] JOB Methane_QZ4P SUCCESSFUL\n", "[02.04|11:36:50] Waiting for job Ethane_QZ4P to finish\n", "[02.04|11:36:50] JOB Ethylene_TZP FINISHED\n", "[02.04|11:36:50] JOB Ethylene_TZP SUCCESSFUL\n", "[02.04|11:36:50] JOB Acetylene_TZP FINISHED\n", "[02.04|11:36:50] JOB Acetylene_TZP SUCCESSFUL\n", "[02.04|11:36:51] JOB Acetylene_TZ2P FINISHED\n", "[02.04|11:36:51] JOB Acetylene_TZ2P SUCCESSFUL\n", "[02.04|11:36:51] JOB Ethylene_TZ2P FINISHED\n", "[02.04|11:36:51] JOB Ethylene_TZ2P SUCCESSFUL\n", "[02.04|11:36:51] JOB Ethane_DZP FINISHED\n", "[02.04|11:36:51] JOB Ethane_DZP SUCCESSFUL\n", "[02.04|11:36:52] JOB Acetylene_QZ4P FINISHED\n", "[02.04|11:36:52] JOB Acetylene_QZ4P SUCCESSFUL\n", "[02.04|11:36:52] JOB Ethylene_QZ4P FINISHED\n", "[02.04|11:36:52] JOB Ethylene_QZ4P SUCCESSFUL\n", "[02.04|11:36:53] JOB Ethane_TZ2P FINISHED\n", "[02.04|11:36:53] JOB Ethane_TZ2P SUCCESSFUL\n", "[02.04|11:36:54] JOB Ethylene_SZ FINISHED\n", "[02.04|11:36:54] JOB Ethylene_SZ SUCCESSFUL\n", "[02.04|11:36:54] JOB Methane_SZ FINISHED\n", "[02.04|11:36:54] JOB Methane_SZ SUCCESSFUL\n", "[02.04|11:36:54] JOB Ethylene_DZP FINISHED\n", "[02.04|11:36:54] JOB Ethylene_DZP SUCCESSFUL\n", "[02.04|11:36:54] JOB Methane_DZP FINISHED\n", "[02.04|11:36:54] JOB Methane_DZP SUCCESSFUL\n", "[02.04|11:36:54] JOB Ethane_QZ4P FINISHED\n", "[02.04|11:36:54] JOB Ethane_QZ4P SUCCESSFUL\n", "[02.04|11:36:54] Waiting for job Ethane_TZP to finish\n", "[02.04|11:36:54] JOB Methane_DZ FINISHED\n", "[02.04|11:36:54] JOB Methane_DZ SUCCESSFUL\n", "[02.04|11:36:55] JOB Ethane_DZ FINISHED\n", "[02.04|11:36:55] JOB Ethane_DZ SUCCESSFUL\n", "[02.04|11:36:55] JOB Acetylene_DZ FINISHED\n", "[02.04|11:36:55] JOB Acetylene_DZ SUCCESSFUL\n", "[02.04|11:36:55] JOB Ethane_TZP FINISHED\n", "[02.04|11:36:55] JOB Ethane_TZP SUCCESSFUL\n", "[02.04|11:36:55] Waiting for job Acetylene_DZP to finish\n", "[02.04|11:36:55] JOB Acetylene_DZP FINISHED\n", "[02.04|11:36:55] JOB Acetylene_DZP SUCCESSFUL\n", "[02.04|11:36:55] Waiting for job Ethylene_DZ to finish\n", "[02.04|11:36:55] JOB Ethane_SZ FINISHED\n", "[02.04|11:36:55] JOB Ethane_SZ SUCCESSFUL\n", "[02.04|11:36:55] JOB Acetylene_SZ FINISHED\n", "[02.04|11:36:55] JOB Acetylene_SZ SUCCESSFUL\n", "[02.04|11:36:56] JOB Ethylene_DZ FINISHED\n", "[02.04|11:36:56] JOB Ethylene_DZ SUCCESSFUL\n" ] } ], "source": [ "results = {}\n", "jobs = []\n", "for bas in basis:\n", " for name, molecule in molecules.items():\n", " with jobs_in_directory(name):\n", " settings = common_settings.copy()\n", " settings.input.adf.Basis.Type = bas\n", " job = AMSJob(name=f\"{name}_{bas}\", molecule=molecule, settings=settings)\n", " jobs.append(job)\n", " results[(name, bas)] = job.run()\n", "\n", "for job in jobs:\n", " job.ok()" ] }, { "cell_type": "markdown", "id": "b89dc6bb", "metadata": {}, "source": [ "## Results\n", "Extract the energy from each calculation. Calculate the average absolute error in bond energy per atom for each basis set." ] }, { "cell_type": "code", "execution_count": 7, "id": "78562df3", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FormulaBasisNAtomsEnergy
0CH4QZ4P5-572.626762
1C2H6QZ4P8-973.019461
2C2H4QZ4P6-770.413350
3C2H2QZ4P4-556.759053
4CH4TZ2P5-572.110159
5C2H6TZ2P8-971.882019
6C2H4TZ2P6-769.432903
7C2H2TZ2P4-555.667290
8CH4TZP5-571.044897
9C2H6TZP8-970.075889
10C2H4TZP6-767.327518
11C2H2TZP4-552.956286
12CH4DZP5-569.119016
13C2H6DZP8-966.091644
14C2H4DZP6-764.413298
15C2H2DZP4-550.646181
16CH4DZ5-560.934431
17C2H6DZ8-951.166697
18C2H4DZ6-750.174511
19C2H2DZ4-537.100802
20CH4SZ5-723.550123
21C2H6SZ8-1216.914233
22C2H4SZ6-934.655820
23C2H2SZ4-647.502984
\n", "
" ], "text/plain": [ " Formula Basis NAtoms Energy\n", "0 CH4 QZ4P 5 -572.626762\n", "1 C2H6 QZ4P 8 -973.019461\n", "2 C2H4 QZ4P 6 -770.413350\n", "3 C2H2 QZ4P 4 -556.759053\n", "4 CH4 TZ2P 5 -572.110159\n", "5 C2H6 TZ2P 8 -971.882019\n", "6 C2H4 TZ2P 6 -769.432903\n", "7 C2H2 TZ2P 4 -555.667290\n", "8 CH4 TZP 5 -571.044897\n", "9 C2H6 TZP 8 -970.075889\n", "10 C2H4 TZP 6 -767.327518\n", "11 C2H2 TZP 4 -552.956286\n", "12 CH4 DZP 5 -569.119016\n", "13 C2H6 DZP 8 -966.091644\n", "14 C2H4 DZP 6 -764.413298\n", "15 C2H2 DZP 4 -550.646181\n", "16 CH4 DZ 5 -560.934431\n", "17 C2H6 DZ 8 -951.166697\n", "18 C2H4 DZ 6 -750.174511\n", "19 C2H2 DZ 4 -537.100802\n", "20 CH4 SZ 5 -723.550123\n", "21 C2H6 SZ 8 -1216.914233\n", "22 C2H4 SZ 6 -934.655820\n", "23 C2H2 SZ 4 -647.502984" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "results = []\n", "for job in jobs:\n", " mol = job.results.get_main_molecule()\n", " results.append(\n", " {\n", " \"Formula\": mol.get_formula(),\n", " \"Basis\": job.settings.input.adf.basis.type,\n", " \"NAtoms\": len(mol),\n", " \"Energy\": job.results.get_energy(unit=\"kcal/mol\"),\n", " }\n", " )\n", "\n", "results_df = pd.DataFrame(results)\n", "results_df" ] }, { "cell_type": "code", "execution_count": 8, "id": "bdb86cb7-7b14-4355-a9f0-c949df20b695", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FormulaBasisNAtomsEnergyBasis (Ref)NAtoms (Ref)Energy (Ref)Average Error
0CH4TZ2P5-572.110159QZ4P5-572.6267620.103321
1CH4TZP5-571.044897QZ4P5-572.6267620.316373
2CH4DZP5-569.119016QZ4P5-572.6267620.701549
3CH4DZ5-560.934431QZ4P5-572.6267622.338466
4CH4SZ5-723.550123QZ4P5-572.62676230.184672
5C2H6TZ2P8-971.882019QZ4P8-973.0194610.142180
6C2H6TZP8-970.075889QZ4P8-973.0194610.367947
7C2H6DZP8-966.091644QZ4P8-973.0194610.865977
8C2H6DZ8-951.166697QZ4P8-973.0194612.731595
9C2H6SZ8-1216.914233QZ4P8-973.01946130.486847
10C2H4TZ2P6-769.432903QZ4P6-770.4133500.163408
11C2H4TZP6-767.327518QZ4P6-770.4133500.514305
12C2H4DZP6-764.413298QZ4P6-770.4133501.000009
13C2H4DZ6-750.174511QZ4P6-770.4133503.373140
14C2H4SZ6-934.655820QZ4P6-770.41335027.373745
15C2H2TZ2P4-555.667290QZ4P4-556.7590530.272941
16C2H2TZP4-552.956286QZ4P4-556.7590530.950692
17C2H2DZP4-550.646181QZ4P4-556.7590531.528218
18C2H2DZ4-537.100802QZ4P4-556.7590534.914563
19C2H2SZ4-647.502984QZ4P4-556.75905322.685983
\n", "
" ], "text/plain": [ " Formula Basis NAtoms Energy Basis (Ref) NAtoms (Ref) Energy (Ref) \\\n", "0 CH4 TZ2P 5 -572.110159 QZ4P 5 -572.626762 \n", "1 CH4 TZP 5 -571.044897 QZ4P 5 -572.626762 \n", "2 CH4 DZP 5 -569.119016 QZ4P 5 -572.626762 \n", "3 CH4 DZ 5 -560.934431 QZ4P 5 -572.626762 \n", "4 CH4 SZ 5 -723.550123 QZ4P 5 -572.626762 \n", "5 C2H6 TZ2P 8 -971.882019 QZ4P 8 -973.019461 \n", "6 C2H6 TZP 8 -970.075889 QZ4P 8 -973.019461 \n", "7 C2H6 DZP 8 -966.091644 QZ4P 8 -973.019461 \n", "8 C2H6 DZ 8 -951.166697 QZ4P 8 -973.019461 \n", "9 C2H6 SZ 8 -1216.914233 QZ4P 8 -973.019461 \n", "10 C2H4 TZ2P 6 -769.432903 QZ4P 6 -770.413350 \n", "11 C2H4 TZP 6 -767.327518 QZ4P 6 -770.413350 \n", "12 C2H4 DZP 6 -764.413298 QZ4P 6 -770.413350 \n", "13 C2H4 DZ 6 -750.174511 QZ4P 6 -770.413350 \n", "14 C2H4 SZ 6 -934.655820 QZ4P 6 -770.413350 \n", "15 C2H2 TZ2P 4 -555.667290 QZ4P 4 -556.759053 \n", "16 C2H2 TZP 4 -552.956286 QZ4P 4 -556.759053 \n", "17 C2H2 DZP 4 -550.646181 QZ4P 4 -556.759053 \n", "18 C2H2 DZ 4 -537.100802 QZ4P 4 -556.759053 \n", "19 C2H2 SZ 4 -647.502984 QZ4P 4 -556.759053 \n", "\n", " Average Error \n", "0 0.103321 \n", "1 0.316373 \n", "2 0.701549 \n", "3 2.338466 \n", "4 30.184672 \n", "5 0.142180 \n", "6 0.367947 \n", "7 0.865977 \n", "8 2.731595 \n", "9 30.486847 \n", "10 0.163408 \n", "11 0.514305 \n", "12 1.000009 \n", "13 3.373140 \n", "14 27.373745 \n", "15 0.272941 \n", "16 0.950692 \n", "17 1.528218 \n", "18 4.914563 \n", "19 22.685983 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ref_results_df = results_df[results_df[\"Basis\"] == \"QZ4P\"]\n", "comp_results_df = results_df[results_df[\"Basis\"] != \"QZ4P\"]\n", "comp_results_df = comp_results_df.merge(ref_results_df, on=\"Formula\", suffixes=[\"\", \" (Ref)\"])\n", "comp_results_df[\"Average Error\"] = (\n", " abs(comp_results_df[\"Energy\"] - comp_results_df[\"Energy (Ref)\"]) / comp_results_df[\"NAtoms\"]\n", ")\n", "comp_results_df" ] }, { "cell_type": "code", "execution_count": 9, "id": "a16d5e4b-20fa-4100-bdb8-4bc7cd8a1cb4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BasisMAE [kcal/mol]
0TZ2P0.170462
1TZP0.537329
2DZP1.023938
3DZ3.339441
4SZ27.682812
\n", "
" ], "text/plain": [ " Basis MAE [kcal/mol]\n", "0 TZ2P 0.170462\n", "1 TZP 0.537329\n", "2 DZP 1.023938\n", "3 DZ 3.339441\n", "4 SZ 27.682812" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "benchmark_results_df = comp_results_df.groupby(\"Basis\", as_index=False)[\"Average Error\"].mean()\n", "benchmark_results_df.rename(columns={\"Average Error\": \"MAE [kcal/mol]\"}, inplace=True)\n", "benchmark_results_df.sort_values(by=\"MAE [kcal/mol]\", inplace=True, ignore_index=True)\n", "benchmark_results_df" ] }, { "cell_type": "code", "execution_count": null, "id": "5f4bec3c", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "jupytext": { "cell_metadata_filter": "-all", "executable": "/usr/bin/env plams", "main_language": "python", "notebook_metadata_filter": "-all" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.16" } }, "nbformat": 4, "nbformat_minor": 5 }