{ "cells": [ { "cell_type": "markdown", "id": "634a9934-24de-474d-a0be-3586895293b0", "metadata": { "tags": [] }, "source": [ "The mechanism being studied frequently involves several intermediary species, which\n", "concentrations (partial pressure for species in the gas phase and coverage fraction for\n", "species that are adsorbed) change in a particular manner as the simulation progresses.\n", "However, after a particular simulation time, the concentration of all intermediate\n", "species remains constant. At that point, we say the system has reached a steady state\n", "configuration. Sadly, we are unable to anticipate the simulation time at which that\n", "stage will be reached. Therefore, the more logical approach to take is to: 1) run the\n", "simulation for a set period of time (initial guess), 2) determine if the system has\n", "reached a steady state, and 3) if so, consider the calculation to have converged and\n", "stop; otherwise, increase the simulation time and resume repeating all steps until\n", "convergence. With **pyZacros**, and much more directly with **Zacros**, this is laborious to\n", "complete manually. Thus, this tutorial aims to demonstrate how to accomplish this goal\n", "using the class ``ZacrosSteadyStateJob`` from the **pyZacros** extended components." ] }, { "cell_type": "markdown", "id": "eb34630d-d56e-4f89-a295-c940da703574", "metadata": {}, "source": [ "The first step is to import all packages we need:" ] }, { "cell_type": "code", "execution_count": 1, "id": "e945334f-3d14-4b1d-8c42-033386da8725", "metadata": {}, "outputs": [], "source": [ "import numpy\n", "import scm.pyzacros as pz\n", "import scm.pyzacros.models" ] }, { "cell_type": "markdown", "id": "77d72747-9ac1-4262-b23c-1eb159fa27fb", "metadata": {}, "source": [ "Then, we initialize the **pyZacros** environment. " ] }, { "cell_type": "code", "execution_count": 2, "id": "3a38d764-8ebd-46b1-b3e3-4fae44078658", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PLAMS working folder: /home/aguirre/Develop/pyzacros/examples/ZiffGulariBarshad/plams_workdir\n" ] } ], "source": [ "scm.pyzacros.init()" ] }, { "cell_type": "markdown", "id": "0d121033-472a-4684-8310-fe5aad561de7", "metadata": {}, "source": [ "Notice this command created the directory where all **Zacros** input and output files\n", "will be stored if they are needed for future reference (``plams_workdir`` by default).\n", "Typically, the user doesn't need to use these files." ] }, { "cell_type": "markdown", "id": "f8bfe2e3-a304-40e4-88b2-432790edf347", "metadata": {}, "source": [ "First, we define the physical system to study. Here we used the Ziff-Gulari-Bashard model.\n", "This simple model describes the catalytic processes of carbon monoxide oxidation to carbon\n", "dioxide ($\\text{CO}+\\frac{1}{2}\\text{O}_2\\longrightarrow \\text{CO}_2$) and accurately\n", "captures the interesting property of the phase transition between two surface poisoned\n", "states (either CO- or O-poisoned) and a steady state in between. It is named after Robert\n", "M. Ziff, Erdogan Gulari, and Yoav Barshad's pioneering work in 1986. Check the API\n", "documentation for more details about its implementation in pyZacros." ] }, { "cell_type": "code", "execution_count": 3, "id": "debf15c5-536c-45ea-bcec-fa24f378335f", "metadata": {}, "outputs": [], "source": [ "zgb = pz.models.ZiffGulariBarshad()" ] }, { "cell_type": "markdown", "id": "853bf90e-f3da-4d5a-8525-6a8aae339c95", "metadata": {}, "source": [ "Then, we set up the Zacros calculation. All parameters are set using a ``Setting`` object.\n", "To begin, we define the physical parameters: the molar fractions of the gas species\n", "(``CO`` and ``O2``), the temperature (in K), and the pressure (in bar). The calculation\n", "parameters are then set: ``species numbers`` (in s) determines how frequently information\n", "about the number of gas and surface species will be stored, ``max time`` (in s) specifies\n", "the maximum allowed simulated time, and \"random seed\" specifies the random seed to make\n", "the calculation precisely reproducible. Keep in mind that ``max time`` defines the\n", "calculation's stopping criterion, and it is the parameter we will control below to\n", "achieve the steady-state configuration. Finally, we create the ``ZacrosJob``, which\n", "uses the parameters we just defined as well as the Ziff-Gulari-Bashard model's lattice,\n", "mechanism, and cluster expansion. Notice we do not run this job, we use it as a reference\n", "for the steady-state calculation described below." ] }, { "cell_type": "code", "execution_count": 4, "id": "7d353384-2ac4-49f7-8ccb-e412fabbcb0f", "metadata": {}, "outputs": [], "source": [ "z_sett = pz.Settings()\n", "z_sett.molar_fraction.CO = 0.42\n", "z_sett.molar_fraction.O2 = 1.0 - z_sett.molar_fraction.CO\n", "z_sett.temperature = 500.0\n", "z_sett.pressure = 1.0\n", "z_sett.species_numbers = ('time', 0.1)\n", "z_sett.max_time = 100.0*0.1\n", "z_sett.random_seed = 953129\n", "\n", "job = pz.ZacrosJob( settings=z_sett,\n", " lattice=zgb.lattice,\n", " mechanism=zgb.mechanism,\n", " cluster_expansion=zgb.cluster_expansion )" ] }, { "cell_type": "markdown", "id": "ed58d304-3595-4a12-b087-7f3c9a7dabcb", "metadata": {}, "source": [ "It is now time to set up the steady state calculation. It also needs a ``Settings``\n", "object to set its parameters, as shown in the first block of code below. To begin,\n", "we define the parameters for calculating the turn-over frequency (TOF), which is\n", "the property that will be monitored to determine convergence as the steady state\n", "is reached. In a nutshell, for a given simulation time (that will be increased\n", "systematically), the simulation is divided into an ``turnover_frequency.nbatch``\n", "ensemble of contiguous batches (20 for this case) where the TOFs are calculated\n", "for each one. If the estimated confidence level for these TOFs is higher than the\n", "confidence level specified by the ``turnover frequency.confidence`` parameter\n", "(96% for this case), convergence is then considered to have been achieved. The\n", "``turnover frequency.nreplicas`` parameter allows several simulations to run in\n", "parallel to speed up the calculation at the expense of more computational power.\n", "For the time being, we will leave it at 1, but we will return to it later.\n", "\n", "In the second block of code, the ``ZacrosSteadyStateJob.Parameters()`` class allows\n", "us to specify the grid in ``max time``, which in this case ranges from 20 to 1000\n", "every 100 seconds. Take note that the convergence is verified for each point on\n", "this grid, and if it has not converged, the calculation is resumed up to the next\n", "point in ``max time``.\n", "\n", "Finally, we create ``ZacrosSteadyStateJob``, which references the ``ZacrosJob``\n", "defined above as well as the ``Settings`` object and parameters we just defined:" ] }, { "cell_type": "code", "execution_count": 5, "id": "925a20d9-45bb-4d7e-bb60-1e0bb8d31114", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[27.01|09:11:22] JOB plamsjob Steady State Convergence: Using nbatch=20,confidence=0.96,ignore_nbatch=1,nreplicas=1\n" ] } ], "source": [ "ss_sett = pz.Settings()\n", "ss_sett.turnover_frequency.nbatch = 20\n", "ss_sett.turnover_frequency.confidence = 0.96\n", "ss_sett.turnover_frequency.nreplicas = 1\n", "\n", "parameters = pz.ZacrosSteadyStateJob.Parameters()\n", "parameters.add( 'max_time', 'restart.max_time', numpy.arange(20.0, 1000.0, 100) )\n", "\n", "ss_job = pz.ZacrosSteadyStateJob( settings=ss_sett, reference=job, parameters=parameters )" ] }, { "cell_type": "markdown", "id": "edfca2bc-1bae-4135-9dda-598b102138ba", "metadata": {}, "source": [ "The steady-state calculation setup is ready. Therefore, we can start it\n", "by invoking the function ``run()``, which will provide access to the results via the\n", "``results`` variable after it has been completed. The sentence involving the method\n", "``ok()``, verifies that the calculation was successfully executed, and waits\n", "for the completion of every executed thread in case of parallel execution." ] }, { "cell_type": "code", "execution_count": 6, "id": "88a66496-70a7-48e0-bc2f-8361ddf0b76d", "metadata": { "tags": [ "cut_output=13_9" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[27.01|09:11:22] JOB plamsjob STARTED\n", "[27.01|09:11:22] JOB plamsjob RUNNING\n", "[27.01|09:11:22] JOB plamsjob/ss_iter000 Steady State: NEW\n", "[27.01|09:11:22] JOB plamsjob/ss_iter000 STARTED\n", "[27.01|09:11:22] JOB plamsjob/ss_iter000 RUNNING\n", "[27.01|09:11:22] JOB plamsjob/ss_iter000 FINISHED\n", "[27.01|09:11:23] JOB plamsjob/ss_iter000 SUCCESSFUL\n", "[27.01|09:11:23] species TOF error ratio conv?\n", "[27.01|09:11:23] CO -0.57600 0.08915 0.15478 False\n", "[27.01|09:11:23] O2 -0.29120 0.07190 0.24691 False\n", "[27.01|09:11:23] CO2 0.57667 0.08573 0.14866 False\n", "[27.01|09:11:23] JOB plamsjob Steady State Convergence: NO CONVERGENCE REACHED YET\n", "[27.01|09:11:23] JOB plamsjob/ss_iter001 Steady State: NEW (dep=plamsjob/ss_iter000)\n", "[27.01|09:11:23] JOB plamsjob/ss_iter001 STARTED\n", "[27.01|09:11:23] JOB plamsjob/ss_iter001 RUNNING\n", "[27.01|09:11:25] JOB plamsjob/ss_iter001 FINISHED\n", "[27.01|09:11:25] JOB plamsjob/ss_iter001 SUCCESSFUL\n", "[27.01|09:11:26] species TOF error ratio conv?\n", "[27.01|09:11:26] CO -0.59303 0.03157 0.05323 False\n", "[27.01|09:11:26] O2 -0.29656 0.01564 0.05274 False\n", "[27.01|09:11:26] CO2 0.59301 0.03157 0.05323 False\n", "[27.01|09:11:26] JOB plamsjob Steady State Convergence: NO CONVERGENCE REACHED YET\n", "[27.01|09:11:26] JOB plamsjob/ss_iter002 Steady State: NEW (dep=plamsjob/ss_iter001)\n", "[27.01|09:11:26] JOB plamsjob/ss_iter002 STARTED\n", "[27.01|09:11:26] JOB plamsjob/ss_iter002 RUNNING\n", "[27.01|09:11:28] JOB plamsjob/ss_iter002 FINISHED\n", "[27.01|09:11:28] JOB plamsjob/ss_iter002 SUCCESSFUL\n", "[27.01|09:11:28] species TOF error ratio conv?\n", "[27.01|09:11:28] CO -0.59362 0.03311 0.05578 False\n", "[27.01|09:11:28] O2 -0.29659 0.01641 0.05534 False\n", "[27.01|09:11:28] CO2 0.59360 0.03311 0.05579 False\n", "[27.01|09:11:28] JOB plamsjob Steady State Convergence: NO CONVERGENCE REACHED YET\n", "[27.01|09:11:28] JOB plamsjob/ss_iter003 Steady State: NEW (dep=plamsjob/ss_iter002)\n", "[27.01|09:11:28] JOB plamsjob/ss_iter003 STARTED\n", "[27.01|09:11:28] JOB plamsjob/ss_iter003 RUNNING\n", "[27.01|09:11:30] JOB plamsjob/ss_iter003 FINISHED\n", "[27.01|09:11:31] JOB plamsjob/ss_iter003 SUCCESSFUL\n", "[27.01|09:11:31] species TOF error ratio conv?\n", "[27.01|09:11:31] CO -0.59293 0.03062 0.05164 False\n", "[27.01|09:11:31] O2 -0.29640 0.01531 0.05166 False\n", "[27.01|09:11:31] CO2 0.59293 0.03062 0.05164 False\n", "[27.01|09:11:31] JOB plamsjob Steady State Convergence: NO CONVERGENCE REACHED YET\n", "[27.01|09:11:31] JOB plamsjob/ss_iter004 Steady State: NEW (dep=plamsjob/ss_iter003)\n", "[27.01|09:11:31] JOB plamsjob/ss_iter004 STARTED\n", "[27.01|09:11:31] JOB plamsjob/ss_iter004 RUNNING\n", "[27.01|09:11:33] JOB plamsjob/ss_iter004 FINISHED\n", "[27.01|09:11:34] JOB plamsjob/ss_iter004 SUCCESSFUL\n", "[27.01|09:11:35] species TOF error ratio conv?\n", "[27.01|09:11:35] CO -0.59345 0.02729 0.04598 False\n", "[27.01|09:11:35] O2 -0.29665 0.01365 0.04601 False\n", "[27.01|09:11:35] CO2 0.59345 0.02729 0.04598 False\n", "[27.01|09:11:35] JOB plamsjob Steady State Convergence: NO CONVERGENCE REACHED YET\n", "[27.01|09:11:35] JOB plamsjob/ss_iter005 Steady State: NEW (dep=plamsjob/ss_iter004)\n", "[27.01|09:11:35] JOB plamsjob/ss_iter005 STARTED\n", "[27.01|09:11:35] JOB plamsjob/ss_iter005 RUNNING\n", "[27.01|09:11:37] JOB plamsjob/ss_iter005 FINISHED\n", "[27.01|09:11:38] JOB plamsjob/ss_iter005 SUCCESSFUL\n", "[27.01|09:11:39] species TOF error ratio conv?\n", "[27.01|09:11:39] CO -0.61241 0.02564 0.04187 False\n", "[27.01|09:11:39] O2 -0.30638 0.01277 0.04169 False\n", "[27.01|09:11:39] CO2 0.61241 0.02564 0.04187 False\n", "[27.01|09:11:39] JOB plamsjob Steady State Convergence: NO CONVERGENCE REACHED YET\n", "[27.01|09:11:39] JOB plamsjob/ss_iter006 Steady State: NEW (dep=plamsjob/ss_iter005)\n", "[27.01|09:11:39] JOB plamsjob/ss_iter006 STARTED\n", "[27.01|09:11:39] JOB plamsjob/ss_iter006 RUNNING\n", "[27.01|09:11:41] JOB plamsjob/ss_iter006 FINISHED\n", "[27.01|09:11:41] JOB plamsjob/ss_iter006 SUCCESSFUL\n", "[27.01|09:11:42] species TOF error ratio conv?\n", "[27.01|09:11:42] CO -0.60345 0.02697 0.04469 False\n", "[27.01|09:11:42] O2 -0.30174 0.01346 0.04462 False\n", "[27.01|09:11:42] CO2 0.60345 0.02697 0.04469 False\n", "[27.01|09:11:42] JOB plamsjob Steady State Convergence: NO CONVERGENCE REACHED YET\n", "[27.01|09:11:42] JOB plamsjob/ss_iter007 Steady State: NEW (dep=plamsjob/ss_iter006)\n", "[27.01|09:11:42] JOB plamsjob/ss_iter007 STARTED\n", "[27.01|09:11:42] JOB plamsjob/ss_iter007 RUNNING\n", "[27.01|09:11:44] JOB plamsjob/ss_iter007 FINISHED\n", "[27.01|09:11:45] JOB plamsjob/ss_iter007 SUCCESSFUL\n", "[27.01|09:11:46] species TOF error ratio conv?\n", "[27.01|09:11:46] CO -0.60170 0.02183 0.03628 True\n", "[27.01|09:11:46] O2 -0.30081 0.01095 0.03639 True\n", "[27.01|09:11:46] CO2 0.60170 0.02183 0.03628 True\n", "[27.01|09:11:46] JOB plamsjob Steady State Convergence: CONVERGENCE REACHED. DONE!\n", "[27.01|09:11:46] JOB plamsjob FINISHED\n", "[27.01|09:11:47] JOB plamsjob SUCCESSFUL\n" ] } ], "source": [ "results = ss_job.run()\n", "\n", "if not ss_job.ok():\n", " print('Something went wrong!')" ] }, { "cell_type": "markdown", "id": "3531f619-9068-4ca7-bace-825e716f2c60", "metadata": {}, "source": [ "If the execution got up to this point, everything worked as expected. Hooray!\n", "\n", "Now, in the following lines, we just nicely print the results in a table. See\n", "the API documentation to learn more about how the ``results`` object is structured.\n", "Here we show the history of the simulation and see how it progresses as the\n", "``max_time`` is increased. We print the TOF for CO2 (in mol/s/site), its error,\n", "and whether the calculation converged. Notice that the calculation should have\n", "been converged at 720 s of ``max_time``." ] }, { "cell_type": "code", "execution_count": 7, "id": "3d5a4cf0-11f4-464c-ba74-13356e3b9ae3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "------------------------------------------------------------\n", " iter max_time TOF_CO2 error conv?\n", "------------------------------------------------------------\n", " 0 20.00 0.57667 0.08573 False\n", " 1 120.00 0.59301 0.03157 False\n", " 2 220.00 0.59360 0.03311 False\n", " 3 320.00 0.59293 0.03062 False\n", " 4 420.00 0.59345 0.02729 False\n", " 5 520.00 0.61241 0.02564 False\n", " 6 620.00 0.60345 0.02697 False\n", " 7 720.00 0.60170 0.02183 True\n" ] } ], "source": [ "print(60*'-')\n", "fline = \"{0:>8s}{1:>10s}{2:>15s}{3:>12s}{4:>10s}\"\n", "print( fline.format('iter', 'max_time', 'TOF_CO2', 'error', 'conv?') )\n", "print(60*'-')\n", "\n", "for i,step in enumerate(results.history()):\n", " fline = \"{0:8d}{1:>10.2f}{2:15.5f}{3:>12.5f}{4:>10s}\"\n", " print( fline.format(i,\n", " step['max_time'],\n", " step['turnover_frequency']['CO2'],\n", " step['turnover_frequency_error']['CO2'],\n", " str(all(step['converged'].values()))) )" ] }, { "cell_type": "markdown", "id": "4941214c-1e0f-4996-91c6-652dfc63d7fb", "metadata": {}, "source": [ "Now that all calculations are done, we can close the pyZacros environment:" ] }, { "cell_type": "code", "execution_count": 8, "id": "780f0cdb-df75-48eb-ab11-0beed723c61d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[27.01|09:11:47] PLAMS run finished. Goodbye\n" ] } ], "source": [ "scm.pyzacros.finish()" ] }, { "cell_type": "markdown", "id": "1137965a-2cf6-4a0f-a138-1b61053744a0", "metadata": {}, "source": [ "Additionally, you can see the aforementioned results visually if you have\n", "installed the package [matplotlib](https://matplotlib.org/). Please review\n", "the code below. In particular, pay close attention to how to obtain\n", "the \"children results\" (each thread executed) which are identified by\n", "their replica and iteration number. In the figure, each iteration is\n", "represented by a different color, and the stopping points on \"max time\" are\n", "represented by vertical gray dashed lines." ] }, { "cell_type": "code", "execution_count": 9, "id": "b00358ae-e41b-46b3-b22f-7916e186a57c", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "fig = plt.figure()\n", "ax = plt.axes()\n", "ax.set_xlabel('Time (s)', fontsize=14)\n", "ax.set_ylabel(\"CO$_2$ Production (mol/site)\", fontsize=14)\n", "\n", "colors = 'bgrcmykb'\n", "for i in range(results.niterations()):\n", " for j in range(results.nreplicas()):\n", " molecule_numbers = results.children_results(i,j).molecule_numbers(['CO2'], normalize_per_site=True)\n", " \n", " ax.plot( molecule_numbers['Time'], molecule_numbers['CO2'], lw=3, color=colors[i], zorder=-i )\n", " ax.vlines( max(molecule_numbers['Time']) , 0, max(molecule_numbers['CO2']), colors='0.8', linestyles='--',)\n", "\n", "plt.show()" ] } ], "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.12" } }, "nbformat": 4, "nbformat_minor": 5 }