{ "cells": [ { "cell_type": "markdown", "id": "05a81f03-503e-414a-877b-4f8837d37eb5", "metadata": {}, "source": "## Initial imports" }, { "cell_type": "code", "execution_count": 1, "id": "3fe257a7-2374-49d6-94a2-d648a30c3ad4", "metadata": { "execution": { "iopub.execute_input": "2024-05-31T13:56:53.725480Z", "iopub.status.busy": "2024-05-31T13:56:53.725182Z", "iopub.status.idle": "2024-05-31T13:56:55.402544Z", "shell.execute_reply": "2024-05-31T13:56:55.401423Z" } }, "outputs": [], "source": [ "import scm.plams as plams\n", "from scm.params import ResultsImporter, ParAMSJob\n", "from scm.plams import Settings, AMSJob, log, Molecule\n", "from scm.simple_active_learning import SimpleActiveLearningJob\n", "from pathlib import Path\n", "import matplotlib.pyplot as plt\n", "\n", "# common_ru_h.py must exist in the current working directory\n", "from common_ru_h import (\n", " rotation,\n", " dft_settings,\n", " QEKPointsConfig,\n", " slice_slab,\n", " check_installation,\n", ")\n", "\n", "# register dependencies for AMSjobs, to support submitting this notebook directly to a cluster in AMS2025+\n", "# dependency: {} common_ru_h.py\n", "# dependency: {} initial_training_results" ] }, { "cell_type": "markdown", "id": "2c19c0f9-001b-4ced-96ce-19a0878f9806", "metadata": {}, "source": "## Initialize PLAMS working directory " }, { "cell_type": "code", "execution_count": 2, "id": "81d242b7-b776-491d-a463-cca1b62a70c0", "metadata": { "execution": { "iopub.execute_input": "2024-05-31T13:56:55.407179Z", "iopub.status.busy": "2024-05-31T13:56:55.407046Z", "iopub.status.idle": "2024-05-31T13:56:57.512149Z", "shell.execute_reply": "2024-05-31T13:56:57.510816Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": "Current AMS version: 2024.102\n05-31 15:56:55 m3gnet is installed: M3GNet ML Backend v[0.2.4] - build:0 [06668e0a45ce742d8f66ff23484b8a1e]\n05-31 15:56:56 qe is installed: Quantum ESPRESSO (AMSPIPE) v[7.1] - build:115 [777d72eb480fe4d632a003cc62e9c1cb]\nPLAMS working folder: /home/hellstrom/SALRuH/fix2024/plams_workdir.005\n" } ], "source": [ "load_model_dir = \"initial_training_results\"\n", "check_installation(load_model_dir)\n", "plams.init()" ] }, { "cell_type": "markdown", "id": "31ab389e-ad8d-4753-b0a2-ea8d434ad794", "metadata": {}, "source": "## Load the optimized bulk Ru structure from the job collection \n\nThe lattice was optimized in the previous notebook, and the structure was stored in the job collection.\n\nLet's retrieve it from the job collection and use it to construct Ru surface slabs." }, { "cell_type": "code", "execution_count": 3, "id": "380b978e-ee27-493e-ad72-61e59c719c6f", "metadata": { "execution": { "iopub.execute_input": "2024-05-31T13:56:57.516675Z", "iopub.status.busy": "2024-05-31T13:56:57.516360Z", "iopub.status.idle": "2024-05-31T13:56:58.509109Z", "shell.execute_reply": "2024-05-31T13:56:58.508277Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": "
" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "job_collection = ParAMSJob.load_external(load_model_dir).results.get_job_collection()\n", "optimized_bulk = job_collection[\"hcp_lattopt_Ru_dft\"].molecule\n", "slab = slice_slab(\n", " optimized_bulk, miller=(1, 0, 0), thickness=7.0, cell_z=15, ref_atom=0\n", ")\n", "min_z = min(at.coords[2] for at in slab)\n", "slab.translate((0, 0, -min_z + 2.0))\n", "slab = slab.supercell(3, 2, 1)\n", "plams.plot_molecule(slab, rotation=rotation)\n", "plt.title(\"Ru(10-10)\");" ] }, { "cell_type": "code", "execution_count": 4, "id": "d95bed1f", "metadata": { "execution": { "iopub.execute_input": "2024-05-31T13:56:58.513115Z", "iopub.status.busy": "2024-05-31T13:56:58.512865Z", "iopub.status.idle": "2024-05-31T13:56:58.517541Z", "shell.execute_reply": "2024-05-31T13:56:58.516789Z" } }, "outputs": [], "source": [ "min_z = min(at.coords[2] for at in slab)\n", "for i, at in enumerate(slab, 1):\n", " at.properties = Settings() # remove details about supercell generation\n", " if at.coords[2] == min_z:\n", " at.properties.region = \"very_cold\"\n", " else:\n", " at.properties.region = \"thermostatted\"" ] }, { "cell_type": "code", "execution_count": 5, "id": "a9c41a6a", "metadata": { "execution": { "iopub.execute_input": "2024-05-31T13:56:58.520962Z", "iopub.status.busy": "2024-05-31T13:56:58.520838Z", "iopub.status.idle": "2024-05-31T13:56:58.524450Z", "shell.execute_reply": "2024-05-31T13:56:58.523589Z" } }, "outputs": [], "source": [ "h_atom = plams.Molecule()\n", "h_atom.add_atom(plams.Atom(symbol=\"H\", coords=(0.0, 0.0, 0.0)))\n", "h_atom.atoms[0].properties.region = \"hydrogen\"" ] }, { "cell_type": "code", "execution_count": 6, "id": "d7ebe364", "metadata": { "execution": { "iopub.execute_input": "2024-05-31T13:56:58.529558Z", "iopub.status.busy": "2024-05-31T13:56:58.529136Z", "iopub.status.idle": "2024-05-31T13:56:58.534351Z", "shell.execute_reply": "2024-05-31T13:56:58.533341Z" } }, "outputs": [], "source": [ "main_system_name = \"\" # must be empty string\n", "projectile_name = \"projectile\"\n", "molecules_dict = {main_system_name: slab, projectile_name: h_atom}" ] }, { "cell_type": "markdown", "id": "e530e5d7", "metadata": {}, "source": "## Set up the MD settings\n\nBefore starting the active learning, let's set up a molecule gun simulation using the initially trained potential.\n\nThis is just to see that that simulation settings are somewhat reasonable." }, { "cell_type": "code", "execution_count": 7, "id": "72e5fa7c", "metadata": { "execution": { "iopub.execute_input": "2024-05-31T13:56:58.538881Z", "iopub.status.busy": "2024-05-31T13:56:58.538602Z", "iopub.status.idle": "2024-05-31T13:56:58.550147Z", "shell.execute_reply": "2024-05-31T13:56:58.549076Z" } }, "outputs": [], "source": [ "s = Settings()\n", "s.input.ams.Task = \"MolecularDynamics\"\n", "md_s = s.input.ams.MolecularDynamics\n", "md_s.NSteps = 5000 # will be increased later for active learning\n", "md_s.Trajectory.SamplingFreq = 10 # for testing purposes to check the trajectory\n", "md_s.InitialVelocities.Temperature = 100\n", "md_s.Thermostat = [\n", " Settings(\n", " Region=\"thermostatted\",\n", " Type=\"NHC\",\n", " Temperature=[300],\n", " Tau=100.0,\n", " ),\n", " Settings(\n", " Region=\"very_cold\",\n", " Type=\"NHC\",\n", " Temperature=[2.0],\n", " Tau=10.0,\n", " ),\n", "]\n", "md_s.RemoveMolecules.Frequency = 1\n", "md_s.RemoveMolecules.Formula = \"*\"\n", "md_s.RemoveMolecules.SinkBox.FractionalCoordsBox = \"0 1 0 1 0.90 0.99\"\n", "md_s.AddMolecules.System = projectile_name\n", "md_s.AddMolecules.Frequency = 1000\n", "md_s.AddMolecules.StartStep = 100\n", "# insert H atoms 4.5 angstrom above the surface\n", "max_z = max(at.coords[2] for at in slab)\n", "projectile_insertion_z = (4.5 + max_z) / slab.lattice[2][2]\n", "md_s.AddMolecules.FractionalCoordsBox = (\n", " f\"0 1 0 1 {projectile_insertion_z} {projectile_insertion_z + 0.01}\"\n", ")\n", "md_s.AddMolecules.VelocityDirection = (\n", " \"0 0 -1\" # shoot down towards slab (decrease z coordinate)\n", ")\n", "md_s.AddMolecules.DeviationAngle = 0.0\n", "md_s.AddMolecules.Velocity = 0.03" ] }, { "cell_type": "code", "execution_count": 8, "id": "33a2e72c", "metadata": { "execution": { "iopub.execute_input": "2024-05-31T13:56:58.554272Z", "iopub.status.busy": "2024-05-31T13:56:58.553977Z", "iopub.status.idle": "2024-05-31T13:56:58.616389Z", "shell.execute_reply": "2024-05-31T13:56:58.615454Z" } }, "outputs": [], "source": [ "test_md_job = AMSJob(\n", " settings=s\n", " + ParAMSJob.load_external(load_model_dir).results.get_production_engine_settings(),\n", " molecule=molecules_dict,\n", " name=\"test_molecule_gun\",\n", ")" ] }, { "cell_type": "code", "execution_count": 9, "id": "921e9a23", "metadata": { "execution": { "iopub.execute_input": "2024-05-31T13:56:58.623028Z", "iopub.status.busy": "2024-05-31T13:56:58.622907Z", "iopub.status.idle": "2024-05-31T14:01:58.029500Z", "shell.execute_reply": "2024-05-31T14:01:58.028374Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": "[31.05|15:56:58] JOB test_molecule_gun STARTED\n[31.05|15:56:58] JOB test_molecule_gun RUNNING\n[31.05|16:01:57] JOB test_molecule_gun FINISHED\n[31.05|16:01:58] JOB test_molecule_gun SUCCESSFUL\n" } ], "source": [ "test_md_job.run();" ] }, { "cell_type": "markdown", "id": "8db2457b", "metadata": {}, "source": "Open the trajectory in AMSmovie to check if it is reasonable. We'd expect some combination of the following events:\n\n* H atoms adsorbing on the Ru surface\n* H atoms diffusing into the subsurface\n* H atoms desorbing from the Ru surface\n* H atoms combining into H2 molecules and desorbing from the surface\n\nThe simulation seems reasonable, so let's couple it to the active learning with on-the-fly retraining.\n\n## Active Learning for Ru/H molecule gun simulation" }, { "cell_type": "code", "execution_count": 10, "id": "78a2fb9f", "metadata": { "execution": { "iopub.execute_input": "2024-05-31T14:01:58.032913Z", "iopub.status.busy": "2024-05-31T14:01:58.032776Z", "iopub.status.idle": "2024-05-31T14:01:58.218638Z", "shell.execute_reply": "2024-05-31T14:01:58.218077Z" } }, "outputs": [], "source": [ "plams.config.jobmanager.hashing = None\n", "al_s = plams.Settings()\n", "al_s.input.ams.ActiveLearning.Steps.Type = \"Linear\"\n", "al_s.input.ams.ActiveLearning.Steps.Linear.Start = 1000\n", "al_s.input.ams.ActiveLearning.Steps.Linear.StepSize = 5000\n", "# H atoms at high temperature, so let's decrease the minimum allowed distance a bit\n", "al_s.input.ams.ActiveLearning.ReasonableSimulationCriteria.Distance.MinValue = 0.50\n", "al_s.input.ams.ActiveLearning.MaxReferenceCalculationsPerAttempt = 1\n", "al_s.input.ams.ActiveLearning.SuccessCriteria.Forces.MaxDeviationForZeroForce = 0.65\n", "\n", "ml_s = plams.Settings()\n", "ml_s.input.ams.MachineLearning.Backend = \"M3GNet\"\n", "ml_s.input.ams.MachineLearning.LoadModel = Path(load_model_dir).resolve()\n", "ml_s.input.ams.MachineLearning.MaxEpochs = 50\n", "ml_s.input.ams.MachineLearning.RunAMSAtEnd = \"No\"\n", "\n", "ref_s = dft_settings(QEKPointsConfig(3, 3, 1), conv_thr=1e-4)\n", "\n", "new_md_s = s.copy()\n", "new_md_s.input.ams.MolecularDynamics.NSteps = 100000\n", "new_md_s.input.ams.MolecularDynamics.Trajectory.SamplingFreq = 100\n", "\n", "al_job = SimpleActiveLearningJob(\n", " name=\"sal\", settings=al_s + ml_s + ref_s + new_md_s, molecule=molecules_dict\n", ")" ] }, { "cell_type": "code", "execution_count": 11, "id": "33c24499", "metadata": { "execution": { "iopub.execute_input": "2024-05-31T14:01:58.222070Z", "iopub.status.busy": "2024-05-31T14:01:58.221831Z", "iopub.status.idle": "2024-06-01T09:31:05.464666Z", "shell.execute_reply": "2024-06-01T09:31:05.464158Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": "[31.05|16:01:58] JOB sal STARTED\n[31.05|16:01:58] JOB sal RUNNING\n[01.06|11:31:05] JOB sal FINISHED\n[01.06|11:31:05] JOB sal SUCCESSFUL\n" }, { "data": { "text/plain": "" }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "al_job.run()" ] }, { "cell_type": "code", "execution_count": null, "id": "76f7879f", "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.12" } }, "nbformat": 4, "nbformat_minor": 5 }