{ "cells": [ { "cell_type": "markdown", "id": "7362d9ac-c021-4ca6-8d31-b365ad8e5722", "metadata": {}, "source": [ "## Initial Imports \n", "Import PLAMS components and set up to run jobs in tandem." ] }, { "cell_type": "code", "execution_count": 1, "id": "f374ae87-bf97-4f0c-b089-0c5d6b12210a", "metadata": {}, "outputs": [], "source": [ "from scm.plams import Settings, AMSJob, Molecule, Atom, FCFJob, config, JobRunner, init\n", "from scm.plams.recipes.fcf_dos import FCFDOS" ] }, { "cell_type": "code", "execution_count": 2, "id": "7f720674-0fbf-4133-afda-190f4ff4c4e5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PLAMS working folder: /path/plams/examples/ADFVibronicDOS/plams_workdir\n" ] } ], "source": [ "config.default_jobrunner.parallel = JobRunner(parallel=True, maxjobs=2)\n", "\n", "# this line is not required in AMS2025+\n", "init()" ] }, { "cell_type": "markdown", "id": "cc8ff96a-5a22-45f5-806d-c6523a8e17e8", "metadata": {}, "source": [ "## Setup Molecules\n", "Create the NO2 molecules using pre-optimized geometries (usually the geometry optimization step would come first)." ] }, { "cell_type": "code", "execution_count": 3, "id": "e1b8fb64-c210-4691-9dd0-604e3ce921b3", "metadata": {}, "outputs": [], "source": [ "no2_radical = Molecule()\n", "no2_radical.add_atom(Atom(atnum=7, coords=(0.0, 0.0, -0.01857566)))\n", "no2_radical.add_atom(Atom(atnum=8, coords=(0.0, 1.09915770, -0.49171967)))\n", "no2_radical.add_atom(Atom(atnum=8, coords=(0.0, -1.09915770, -0.49171967)))\n", "\n", "no2_anion = Molecule()\n", "no2_anion.add_atom(Atom(atnum=7, coords=(0.0, 0.0, 0.12041)))\n", "no2_anion.add_atom(Atom(atnum=8, coords=(0.0, 1.070642, -0.555172)))\n", "no2_anion.add_atom(Atom(atnum=8, coords=(0.0, -1.070642, -0.555172)))" ] }, { "cell_type": "markdown", "id": "a424725a-1beb-4eb1-b3c0-0aeac432b9e1", "metadata": {}, "source": [ "## Calculate Vibrational Frequencies\n", "Create the settings objects for the ADF donor/acceptor vibrational frequencies calculations. Run the calculations in parallel." ] }, { "cell_type": "code", "execution_count": 4, "id": "0711fd28-a8f7-4f53-86c3-e7aa27fc7b1e", "metadata": {}, "outputs": [], "source": [ "settings_freq = Settings()\n", "settings_freq.input.adf.symmetry = \"NoSym\"\n", "settings_freq.input.adf.basis.type = \"DZP\"\n", "settings_freq.input.adf.basis.core = \"None\"\n", "settings_freq.input.adf.xc.lda = \"SCF VWN\"\n", "settings_freq.input.ams.Task = \"SinglePoint\"\n", "settings_freq.input.ams.Properties.NormalModes = \"Yes\"\n", "settings_freq.input.adf.title = \"Vibrational frequencies\"\n", "\n", "settings_freq_radical = settings_freq.copy()\n", "settings_freq_radical.input.ams.system.charge = 0\n", "settings_freq_radical.input.adf.spinpolarization = 1\n", "settings_freq_radical.input.adf.unrestricted = \"Yes\"\n", "\n", "settings_freq_anion = settings_freq.copy()\n", "settings_freq_anion.input.ams.system.charge = -1" ] }, { "cell_type": "code", "execution_count": 5, "id": "c6e7e4db-8a1e-44d6-aab2-78239865ba22", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10.02|14:22:57] JOB fsradical STARTED\n", "[10.02|14:22:57] JOB fsradical RUNNING\n", "[10.02|14:23:08] JOB fsradical FINISHED\n", "[10.02|14:23:08] JOB fsradical SUCCESSFUL\n", "[10.02|14:23:08] JOB fsanion STARTED\n", "[10.02|14:23:08] JOB fsanion RUNNING\n", "[10.02|14:23:17] JOB fsanion FINISHED\n", "[10.02|14:23:17] JOB fsanion SUCCESSFUL\n" ] } ], "source": [ "freq_job_radical = AMSJob(molecule=no2_radical, settings=settings_freq_radical, name=\"fsradical\")\n", "freq_job_anion = AMSJob(molecule=no2_anion, settings=settings_freq_anion, name=\"fsanion\")\n", "\n", "freq_results = (freq_job_radical.run(), freq_job_anion.run())" ] }, { "cell_type": "markdown", "id": "ddfbeb12-765d-4dda-b387-2e433b952b06", "metadata": {}, "source": [ "## Calculate Vibronic Spectra\n", "Use Frank-Condon jobs to calculate the vibronic spectra." ] }, { "cell_type": "code", "execution_count": 6, "id": "16d4ea89-77f2-48b4-b6bc-dd1e81e01737", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10.02|14:23:17] JOB fcfabs STARTED\n", "[10.02|14:23:17] JOB fcfabs RUNNING\n", "[10.02|14:23:19] JOB fcfabs FINISHED\n", "[10.02|14:23:19] JOB fcfabs SUCCESSFUL\n", "[10.02|14:23:19] JOB fcfemi STARTED\n", "[10.02|14:23:19] JOB fcfemi RUNNING\n", "[10.02|14:23:20] JOB fcfemi FINISHED\n", "[10.02|14:23:20] JOB fcfemi SUCCESSFUL\n" ] } ], "source": [ "def fcf_job(state1, state2, spctype, name):\n", " settings_fcf = Settings()\n", " settings_fcf.input.spectrum.type = spctype\n", " settings_fcf.input.state1 = state1\n", " settings_fcf.input.state2 = state2\n", " return FCFJob(inputjob1=state1, inputjob2=state2, settings=settings_fcf, name=name)\n", "\n", "\n", "freq_radical = freq_results[0].rkfpath(file=\"adf\")\n", "freq_anion = freq_results[1].rkfpath(file=\"adf\")\n", "\n", "fc_abs = fcf_job(freq_radical, freq_anion, \"absorption\", \"fcfabs\")\n", "fc_emi = fcf_job(freq_anion, freq_radical, \"emission\", \"fcfemi\")\n", "\n", "fc_results = (fc_abs.run(), fc_emi.run())" ] }, { "cell_type": "markdown", "id": "c65d3b27-7f98-44af-a608-768b7cce82e1", "metadata": {}, "source": [ "## Calculate Density of States\n", "\n", "Calculate the DOS by computing the overlap of the absorption and emission FCF spectra." ] }, { "cell_type": "code", "execution_count": 7, "id": "891fd21a-ddae-4b3a-b4f5-8404aad29d3a", "metadata": {}, "outputs": [], "source": [ "job = FCFDOS(fc_results[0].kfpath(), fc_results[1].kfpath(), 10000.0, 10000.0)\n", "dos = job.dos()" ] }, { "cell_type": "code", "execution_count": 8, "id": "340ab36d-ff8b-4b04-bd55-f780f9ca581e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The density of states is 1.30090295e-08\n" ] } ], "source": [ "print(f\"The density of states is {dos:.8e}\")" ] }, { "cell_type": "code", "execution_count": null, "id": "a9b68f1a-684e-4401-b14a-f85bd23e83d4", "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 }