{ "cells": [ { "cell_type": "markdown", "id": "heading", "metadata": {}, "source": [ "## Reduction and oxidation potentials\n", "\n", "This example runs the three PLAMS redox recipes for benzoquinone in water and compares their computed oxidation/reduction potentials.\n" ] }, { "cell_type": "markdown", "id": "imports-md", "metadata": {}, "source": [ "### Import PLAMS recipe classes and utilities.\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "imports-code", "metadata": { "tags": [] }, "outputs": [], "source": [ "from typing import Iterable\n", "\n", "from scm.plams import CRSJob, Settings, from_smiles, view\n", "from scm.plams.recipes.redox import (\n", " AMSRedoxDirectJob,\n", " AMSRedoxScreeningJob,\n", " AMSRedoxThermodynamicCycleJob,\n", ")" ] }, { "cell_type": "markdown", "id": "molecule-md", "metadata": {}, "source": [ "### Build benzoquinone and define solvent settings.\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "molecule-code", "metadata": { "tags": [] }, "outputs": [], "source": [ "molecule = from_smiles(\"C1=CC(=O)C=CC1=O\", forcefield=\"uff\")\n", "view(molecule, width=260, height=220)\n", "solvent_name = \"Water\"\n", "solvent_coskf = CRSJob.database() + \"/Water.coskf\"\n", "reduction = True\n", "oxidation = True\n", "vibrations = True" ] }, { "cell_type": "markdown", "id": "settings-md", "metadata": {}, "source": [ "### Define ADF settings used by the direct and thermodynamic-cycle workflows.\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "settings-code", "metadata": { "tags": [] }, "outputs": [], "source": [ "adf_settings = Settings()\n", "adf_settings.input.adf.basis.type = \"DZP\"\n", "adf_settings.input.adf.xc.gga = \"PBE\"\n", "adf_settings.input.ams.GeometryOptimization.Convergence.Quality = \"Basic\"" ] }, { "cell_type": "markdown", "id": "helpers-md", "metadata": {}, "source": [ "### Create helper printing function and instantiate jobs." ] }, { "cell_type": "code", "execution_count": 4, "id": "helpers-code", "metadata": { "tags": [] }, "outputs": [], "source": [ "def print_results(jobs: Iterable) -> None:\n", " she = 4.42 # eV, absolute SHE scale\n", " print(\"The experimental reduction potential of benzoquinone is +0.10 V vs. SHE\")\n", " print(\n", " f\"{'Jobname':24s} {'Eox(vib,rel-to-SHE)[V]':24s} {'Ered(vib,rel-to-SHE)[V]':24s} \"\n", " f\"{'Eox(rel-to-SHE)[V]':24s} {'Ered(rel-to-SHE)[V]':24s}\"\n", " )\n", "\n", " for job in jobs:\n", " row = f\"{job.name:24s}\"\n", " for vib in [True, False]:\n", " try:\n", " eox = f\"{job.results.get_oxidation_potential(vibrations=vib) - she:.2f}\"\n", " except Exception:\n", " eox = \"N/A\"\n", " row += f\" {eox:24s}\"\n", "\n", " try:\n", " ered = f\"{job.results.get_reduction_potential(vibrations=vib) - she:.2f}\"\n", " except Exception:\n", " ered = \"N/A\"\n", " row += f\" {ered:24s}\"\n", " print(row)\n", "\n", "\n", "jobs = [\n", " AMSRedoxScreeningJob(\n", " name=\"quick_screening\",\n", " molecule=molecule,\n", " reduction=reduction,\n", " oxidation=oxidation,\n", " solvent_coskf=solvent_coskf,\n", " ),\n", " AMSRedoxDirectJob(\n", " name=\"direct_best_method\",\n", " molecule=molecule,\n", " settings=adf_settings,\n", " reduction=reduction,\n", " oxidation=oxidation,\n", " vibrations=vibrations,\n", " solvent=solvent_name,\n", " ),\n", " AMSRedoxThermodynamicCycleJob(\n", " name=\"thermodynamic_cycle\",\n", " molecule=molecule,\n", " settings=adf_settings,\n", " reduction=reduction,\n", " oxidation=oxidation,\n", " vibrations=vibrations,\n", " solvent=solvent_name,\n", " ),\n", "]" ] }, { "cell_type": "markdown", "id": "run-md", "metadata": {}, "source": [ "### Run all workflows and print per-workflow plus summary tables" ] }, { "cell_type": "code", "execution_count": 5, "id": "run-code", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[02.04|12:29:07] JOB quick_screening STARTED\n", "[02.04|12:29:07] JOB quick_screening RUNNING\n", "[02.04|12:29:07] JOB quick_screening/dftb_go_0 STARTED\n", "[02.04|12:29:07] JOB quick_screening/dftb_go_0 RUNNING\n", "[02.04|12:29:08] JOB quick_screening/dftb_go_0 FINISHED\n", "[02.04|12:29:08] JOB quick_screening/dftb_go_0 SUCCESSFUL\n", "[02.04|12:29:08] JOB quick_screening/dftb_go_ox STARTED\n", "[02.04|12:29:08] JOB quick_screening/dftb_go_ox RUNNING\n", "[02.04|12:29:09] JOB quick_screening/dftb_go_ox FINISHED\n", "[02.04|12:29:09] JOB quick_screening/dftb_go_ox SUCCESSFUL\n", "[02.04|12:29:09] JOB quick_screening/dftb_go_red STARTED\n", "[02.04|12:29:09] JOB quick_screening/dftb_go_red RUNNING\n", "[02.04|12:29:10] JOB quick_screening/dftb_go_red FINISHED\n", "[02.04|12:29:10] JOB quick_screening/dftb_go_red SUCCESSFUL\n", "[02.04|12:29:10] JOB quick_screening/gencoskf_0 STARTED\n", "[02.04|12:29:10] JOB quick_screening/gencoskf_0 RUNNING\n", "[02.04|12:29:10] JOB quick_screening/gencoskf_0/gas STARTED\n", "[02.04|12:29:10] JOB quick_screening/gencoskf_0/gas RUNNING\n", "[02.04|12:29:20] JOB quick_screening/gencoskf_0/gas FINISHED\n", "[02.04|12:29:20] JOB quick_screening/gencoskf_0/gas SUCCESSFUL\n", "[02.04|12:29:20] JOB quick_screening/gencoskf_0/solv STARTED\n", "[02.04|12:29:20] JOB quick_screening/gencoskf_0/solv RUNNING\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_0/solv FINISHED\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_0/solv SUCCESSFUL\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_0/sigma STARTED\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_0/sigma RUNNING\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_0/sigma FINISHED\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_0/sigma SUCCESSFUL\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_0 FINISHED\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_0 SUCCESSFUL\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_ox STARTED\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_ox RUNNING\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_ox/gas STARTED\n", "[02.04|12:29:31] JOB quick_screening/gencoskf_ox/gas RUNNING\n", "[02.04|12:29:46] JOB quick_screening/gencoskf_ox/gas FINISHED\n", "[02.04|12:29:46] JOB quick_screening/gencoskf_ox/gas SUCCESSFUL\n", "[02.04|12:29:46] JOB quick_screening/gencoskf_ox/solv STARTED\n", "[02.04|12:29:46] JOB quick_screening/gencoskf_ox/solv RUNNING\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_ox/solv FINISHED\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_ox/solv SUCCESSFUL\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_ox/sigma STARTED\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_ox/sigma RUNNING\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_ox/sigma FINISHED\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_ox/sigma SUCCESSFUL\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_ox FINISHED\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_ox SUCCESSFUL\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_red STARTED\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_red RUNNING\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_red/gas STARTED\n", "[02.04|12:30:02] JOB quick_screening/gencoskf_red/gas RUNNING\n", "[02.04|12:30:14] JOB quick_screening/gencoskf_red/gas FINISHED\n", "[02.04|12:30:14] JOB quick_screening/gencoskf_red/gas SUCCESSFUL\n", "[02.04|12:30:14] JOB quick_screening/gencoskf_red/solv STARTED\n", "[02.04|12:30:14] JOB quick_screening/gencoskf_red/solv RUNNING\n", "[02.04|12:30:33] JOB quick_screening/gencoskf_red/solv FINISHED\n", "[02.04|12:30:33] JOB quick_screening/gencoskf_red/solv SUCCESSFUL\n", "[02.04|12:30:33] JOB quick_screening/gencoskf_red/sigma STARTED\n", "[02.04|12:30:33] JOB quick_screening/gencoskf_red/sigma RUNNING\n", "[02.04|12:30:33] JOB quick_screening/gencoskf_red/sigma FINISHED\n", "[02.04|12:30:33] JOB quick_screening/gencoskf_red/sigma SUCCESSFUL\n", "[02.04|12:30:33] JOB quick_screening/gencoskf_red FINISHED\n", "[02.04|12:30:33] JOB quick_screening/gencoskf_red SUCCESSFUL\n", "[02.04|12:30:33] JOB quick_screening/activitycoef_0 STARTED\n", "[02.04|12:30:33] JOB quick_screening/activitycoef_0 RUNNING\n", "[02.04|12:30:33] JOB quick_screening/activitycoef_0 FINISHED\n", "[02.04|12:30:33] JOB quick_screening/activitycoef_0 SUCCESSFUL\n", "[02.04|12:30:33] JOB quick_screening/activitycoef_ox STARTED\n", "[02.04|12:30:33] JOB quick_screening/activitycoef_ox RUNNING\n", "[02.04|12:30:33] JOB quick_screening/activitycoef_ox FINISHED\n", "[02.04|12:30:34] JOB quick_screening/activitycoef_ox SUCCESSFUL\n", "[02.04|12:30:34] JOB quick_screening/activitycoef_red STARTED\n", "[02.04|12:30:34] JOB quick_screening/activitycoef_red RUNNING\n", "[02.04|12:30:34] JOB quick_screening/activitycoef_red FINISHED\n", "[02.04|12:30:34] JOB quick_screening/activitycoef_red SUCCESSFUL\n", "[02.04|12:30:34] JOB quick_screening FINISHED\n", "[02.04|12:30:34] JOB quick_screening SUCCESSFUL\n", "[02.04|12:30:34] JOB direct_best_method STARTED\n", "[02.04|12:30:34] JOB direct_best_method RUNNING\n", "[02.04|12:30:34] JOB direct_best_method/job_0 STARTED\n", "[02.04|12:30:34] JOB direct_best_method/job_0 RUNNING\n", "[02.04|12:33:01] JOB direct_best_method/job_0 FINISHED\n", "[02.04|12:33:01] JOB direct_best_method/job_0 SUCCESSFUL\n", "[02.04|12:33:01] JOB direct_best_method/job_ox STARTED\n", "[02.04|12:33:01] JOB direct_best_method/job_ox RUNNING\n", "[02.04|12:36:54] JOB direct_best_method/job_ox FINISHED\n", "[02.04|12:36:54] JOB direct_best_method/job_ox SUCCESSFUL\n", "[02.04|12:36:54] JOB direct_best_method/job_red STARTED\n", "[02.04|12:36:54] JOB direct_best_method/job_red RUNNING\n", "[02.04|12:40:07] JOB direct_best_method/job_red FINISHED\n", "[02.04|12:40:07] JOB direct_best_method/job_red SUCCESSFUL\n", "[02.04|12:40:07] JOB direct_best_method FINISHED\n", "[02.04|12:40:07] JOB direct_best_method SUCCESSFUL\n", "[02.04|12:40:07] JOB thermodynamic_cycle STARTED\n", "[02.04|12:40:07] JOB thermodynamic_cycle RUNNING\n", "[02.04|12:40:07] JOB thermodynamic_cycle/go_0_vacuum STARTED\n", "[02.04|12:40:07] JOB thermodynamic_cycle/go_0_vacuum RUNNING\n", "[02.04|12:41:13] JOB thermodynamic_cycle/go_0_vacuum FINISHED\n", "[02.04|12:41:13] JOB thermodynamic_cycle/go_0_vacuum SUCCESSFUL\n", "[02.04|12:41:13] JOB thermodynamic_cycle/go_0_vacuum_sp_solvated STARTED\n", "[02.04|12:41:13] JOB thermodynamic_cycle/go_0_vacuum_sp_solvated RUNNING\n", "[02.04|12:41:20] JOB thermodynamic_cycle/go_0_vacuum_sp_solvated FINISHED\n", "[02.04|12:41:20] JOB thermodynamic_cycle/go_0_vacuum_sp_solvated SUCCESSFUL\n", "[02.04|12:41:20] JOB thermodynamic_cycle/go_0_solvated STARTED\n", "[02.04|12:41:20] JOB thermodynamic_cycle/go_0_solvated RUNNING\n", "[02.04|12:43:35] JOB thermodynamic_cycle/go_0_solvated FINISHED\n", "[02.04|12:43:35] JOB thermodynamic_cycle/go_0_solvated SUCCESSFUL\n", "[02.04|12:43:35] JOB thermodynamic_cycle/go_0_solvated_sp_vacuum STARTED\n", "[02.04|12:43:35] JOB thermodynamic_cycle/go_0_solvated_sp_vacuum RUNNING\n", "[02.04|12:43:40] JOB thermodynamic_cycle/go_0_solvated_sp_vacuum FINISHED\n", "[02.04|12:43:40] JOB thermodynamic_cycle/go_0_solvated_sp_vacuum SUCCESSFUL\n", "[02.04|12:43:40] JOB thermodynamic_cycle/go_ox_vacuum STARTED\n", "[02.04|12:43:40] JOB thermodynamic_cycle/go_ox_vacuum RUNNING\n", "[02.04|12:45:28] JOB thermodynamic_cycle/go_ox_vacuum FINISHED\n", "[02.04|12:45:28] JOB thermodynamic_cycle/go_ox_vacuum SUCCESSFUL\n", "[02.04|12:45:28] JOB thermodynamic_cycle/go_ox_vacuum_sp_solvated STARTED\n", "[02.04|12:45:28] JOB thermodynamic_cycle/go_ox_vacuum_sp_solvated RUNNING\n", "[02.04|12:45:38] JOB thermodynamic_cycle/go_ox_vacuum_sp_solvated FINISHED\n", "[02.04|12:45:38] JOB thermodynamic_cycle/go_ox_vacuum_sp_solvated SUCCESSFUL\n", "[02.04|12:45:38] JOB thermodynamic_cycle/go_ox_solvated STARTED\n", "[02.04|12:45:38] JOB thermodynamic_cycle/go_ox_solvated RUNNING\n", "[02.04|12:49:19] JOB thermodynamic_cycle/go_ox_solvated FINISHED\n", "[02.04|12:49:19] JOB thermodynamic_cycle/go_ox_solvated SUCCESSFUL\n", "[02.04|12:49:19] JOB thermodynamic_cycle/go_ox_solvated_sp_vacuum STARTED\n", "[02.04|12:49:19] JOB thermodynamic_cycle/go_ox_solvated_sp_vacuum RUNNING\n", "[02.04|12:49:27] JOB thermodynamic_cycle/go_ox_solvated_sp_vacuum FINISHED\n", "[02.04|12:49:27] JOB thermodynamic_cycle/go_ox_solvated_sp_vacuum SUCCESSFUL\n", "[02.04|12:49:27] JOB thermodynamic_cycle/go_red_vacuum STARTED\n", "[02.04|12:49:27] JOB thermodynamic_cycle/go_red_vacuum RUNNING\n", "[02.04|12:51:03] JOB thermodynamic_cycle/go_red_vacuum FINISHED\n", "[02.04|12:51:03] JOB thermodynamic_cycle/go_red_vacuum SUCCESSFUL\n", "[02.04|12:51:03] JOB thermodynamic_cycle/go_red_vacuum_sp_solvated STARTED\n", "[02.04|12:51:03] JOB thermodynamic_cycle/go_red_vacuum_sp_solvated RUNNING\n", "[02.04|12:51:11] JOB thermodynamic_cycle/go_red_vacuum_sp_solvated FINISHED\n", "[02.04|12:51:11] JOB thermodynamic_cycle/go_red_vacuum_sp_solvated SUCCESSFUL\n", "[02.04|12:51:11] JOB thermodynamic_cycle/go_red_solvated STARTED\n", "[02.04|12:51:11] JOB thermodynamic_cycle/go_red_solvated RUNNING\n", "[02.04|12:54:17] JOB thermodynamic_cycle/go_red_solvated FINISHED\n", "[02.04|12:54:17] JOB thermodynamic_cycle/go_red_solvated SUCCESSFUL\n", "[02.04|12:54:17] JOB thermodynamic_cycle/go_red_solvated_sp_vacuum STARTED\n", "[02.04|12:54:17] JOB thermodynamic_cycle/go_red_solvated_sp_vacuum RUNNING\n", "[02.04|12:54:24] JOB thermodynamic_cycle/go_red_solvated_sp_vacuum FINISHED\n", "[02.04|12:54:24] JOB thermodynamic_cycle/go_red_solvated_sp_vacuum SUCCESSFUL\n", "[02.04|12:54:24] JOB thermodynamic_cycle FINISHED\n", "[02.04|12:54:24] JOB thermodynamic_cycle SUCCESSFUL\n" ] } ], "source": [ "for job in jobs:\n", " job.run()\n", "\n", "for job in jobs:\n", " job.ok()" ] }, { "cell_type": "code", "execution_count": 6, "id": "7665717a-f67d-4129-b675-cb60068168fe", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Final summary:\n", "The experimental reduction potential of benzoquinone is +0.10 V vs. SHE\n", "Jobname Eox(vib,rel-to-SHE)[V] Ered(vib,rel-to-SHE)[V] Eox(rel-to-SHE)[V] Ered(rel-to-SHE)[V] \n", "quick_screening 2.95 0.44 2.95 0.44 \n", "direct_best_method 2.61 -0.08 2.72 -0.08 \n", "thermodynamic_cycle 2.63 -0.07 2.71 -0.11 \n" ] } ], "source": [ "print(\"Final summary:\")\n", "print_results(jobs)" ] }, { "cell_type": "code", "execution_count": null, "id": "3ad00af4-7964-41d5-81f8-bf7ec8e65b86", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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 }