{ "cells": [ { "cell_type": "markdown", "id": "4f95bcb099f34720adb706b141203fd3", "metadata": {}, "source": [ "## Custom M3GNet model example (bulk Ru)\n", "Use a custom M3GNet model (trained by ParAMS or Simple Active Learning) by pointing to a parameter directory. The example below uses the RuH parameters for bulk Ru (hexagonal system)." ] }, { "cell_type": "code", "execution_count": 3, "id": "a7b9dbf9-c304-412d-b223-6538ccc1ee8c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Lattice angles: [ 90. 90. 120.]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from ase.build import bulk\n", "from scm.base import ChemicalSystem\n", "from scm.plams import view\n", "\n", "ru = ChemicalSystem.from_ase_atoms(bulk(\"Ru\", a=2.7, c=4.28))\n", "print(\"Lattice angles: \", ru.lattice.get_angles(unit=\"degree\"))\n", "view(ru, direction=\"tilt_x\", height=150, width=150)" ] }, { "cell_type": "code", "execution_count": 4, "id": "44c096f1-3247-4831-a0f1-96d7cd327619", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10.02|08:31:56] JOB m3gnet_custom_ru STARTED\n", "[10.02|08:31:56] JOB m3gnet_custom_ru RUNNING\n", "[10.02|08:32:06] JOB m3gnet_custom_ru FINISHED\n", "[10.02|08:32:06] JOB m3gnet_custom_ru SUCCESSFUL\n", "Custom M3GNet (RuH params): final energy -5131.675 eV\n" ] } ], "source": [ "from scm.plams import Settings, AMSJob\n", "\n", "s2 = Settings()\n", "s2.runscript.nproc = 1\n", "s2.input.ams.Task = \"GeometryOptimization\"\n", "s2.input.ams.GeometryOptimization.OptimizeLattice = \"Yes\"\n", "s2.input.ams.GeometryOptimization.Convergence.Quality = \"Basic\"\n", "s2.input.MLPotential.Model = \"Custom\"\n", "s2.input.MLPotential.Backend = \"m3gnet\"\n", "# ams can handle environment variables when parsing the input - no need to expand it here\n", "s2.input.MLPotential.ParameterDir = \"$AMSHOME/atomicdata/MLPotential/M3GNet/RuH\"\n", "\n", "job2 = AMSJob(settings=s2, molecule=ru, name=\"m3gnet_custom_ru\")\n", "job2.run()\n", "\n", "energy2 = job2.results.get_energy(unit=\"eV\")\n", "print(f\"Custom M3GNet (RuH params): final energy {energy2:.3f} eV\")" ] }, { "cell_type": "code", "execution_count": 5, "id": "8c709008-c714-4763-86f2-2eaeadc445c4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "density=12.49 g/cm3\n" ] } ], "source": [ "optimized_ru = job2.results.get_main_system()\n", "density = optimized_ru.density(unit=\"g/cm3\")\n", "print(f\"{density=:.2f} g/cm3\")" ] }, { "cell_type": "markdown", "id": "1b7c78b8-ff85-465d-bab4-3f7c0dfdc32b", "metadata": {}, "source": [ "A lattice optimization may introduce a small amount of noise in the lattice:" ] }, { "cell_type": "code", "execution_count": 6, "id": "fe0ff4f7-17d2-45b9-8d68-2d6cecfd7911", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 89.99999993 89.99999998 119.99999996]\n" ] } ], "source": [ "print(optimized_ru.lattice.get_angles(unit=\"degree\"))" ] }, { "cell_type": "markdown", "id": "c1b4a76d-10f8-4ee1-98c2-c365cd3b273a", "metadata": {}, "source": [ "For symmetric systems it's a good idea to symmetrize the cell after a lattice optimization:" ] }, { "cell_type": "code", "execution_count": 7, "id": "7f97e681-d9ce-40c5-bb1d-9e18a7425488", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 90. 90. 120.]\n" ] } ], "source": [ "optimized_ru.symmetrize_cell()\n", "print(optimized_ru.lattice.get_angles(unit=\"degree\"))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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 }