{ "cells": [ { "cell_type": "markdown", "id": "22d177dc-6cfb-4de2-9509-f1eb45e10cf2", "metadata": {}, "source": [ "# Bader Charge\n", "\n", "For the source code, see [bader](https://workgraph-collections.readthedocs.io/en/latest/qe/module.html#workgraph_collections.ase.espresso.bader.bader_workgraph).\n", "\n", "## Example: H2O molecule\n", "\n", "### Prepare the inputs and submit the workflow\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "8ee799d2-0b5b-4609-957f-6b3f2cd451f0", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from aiida import load_profile\n", "from aiida.orm import Dict, KpointsData, StructureData, load_code\n", "from aiida_pseudo.data.pseudo import UpfData\n", "from ase.build import molecule\n", "from workgraph_collections.qe.bader import BaderWorkgraph\n", "\n", "\n", "load_profile()\n", "#===============================================================================\n", "# load the codes\n", "pw_code = load_code(\"pw-7.4@localhost\")\n", "pp_code = load_code(\"pp-7.4@localhost\")\n", "bader_code = load_code(\"bader@localhost\")\n", "# ===============================================================================\n", "# create input structure\n", "atoms = molecule(\"H2O\")\n", "atoms.center(vacuum=3.0)\n", "atoms.pbc = True\n", "structure = StructureData(ase=atoms)\n", "# create input parameters node\n", "scf_paras = Dict(\n", " {\n", " \"CONTROL\": {\n", " \"calculation\": \"scf\",\n", " },\n", " \"SYSTEM\": {\n", " \"ecutwfc\": 30,\n", " \"ecutrho\": 240,\n", " \"occupations\": \"smearing\",\n", " \"smearing\": \"gaussian\",\n", " \"degauss\": 0.1,\n", " },\n", " }\n", ")\n", "kpoints = KpointsData()\n", "kpoints.set_kpoints_mesh([1, 1, 1])\n", "# Load the pseudopotential kjpaw.\n", "pseudos = {\"H\": UpfData(\"/home/xing/data/ase/espresso_pseudo/kjpaw/H.pbe-kjpaw_psl.1.0.0.UPF\"),\n", " \"O\": UpfData(\"/home/xing/data/ase/espresso_pseudo/kjpaw/O.pbe-n-kjpaw_psl.1.0.0.UPF\")}\n", "#\n", "#\n", "metadata = {\n", " \"options\": {\n", " \"resources\": {\n", " \"num_machines\": 1,\n", " \"num_mpiprocs_per_machine\": 1,\n", " },\n", " }\n", "}\n", "# ===============================================================================\n", "inputs = {\"scf\":{\n", " \"pw\": {\n", " \"parameters\": scf_paras,\n", " \"pseudos\": pseudos,\n", " \"metadata\": metadata\n", " },\n", " \"kpoints\": kpoints,\n", " },\n", "\n", " \"pp_valence\": {\n", " \"parameters\": Dict({\n", " \"INPUTPP\": {\"plot_num\": 0},\n", " \"PLOT\": {\"iflag\": 3},\n", " }),\n", " \"metadata\": metadata,\n", " },\n", " \"pp_all\": {\n", " \"parameters\": Dict({\n", " \"INPUTPP\": {\"plot_num\": 21},\n", " \"PLOT\": {\"iflag\": 3},\n", " }),\n", " \"metadata\": metadata,\n", " },\n", " \"bader\": {\n", " \"metadata\": metadata,\n", " }\n", "}\n", "# prepare inputs and submit\n", "wg = BaderWorkgraph.build_graph(structure=structure, pw_code=pw_code,\n", " pp_code=pp_code, bader_code=bader_code,\n", " inputs=inputs)\n", "wg.to_html()" ] }, { "cell_type": "markdown", "id": "21537606", "metadata": {}, "source": [ "Run the WorkGraph:\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "5a935c67", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "09/02/2025 01:54:31 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|continue_workgraph]: tasks ready to run: PwBaseWorkChain\n", "09/02/2025 01:54:32 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|on_wait]: Process status: Waiting for child processes: 175332\n", "09/02/2025 01:54:39 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175332|PwBaseWorkChain|run_process]: launching PwCalculation<175335> iteration #1\n", "09/02/2025 01:54:52 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175332|PwBaseWorkChain|results]: work chain completed after 1 iterations\n", "09/02/2025 01:54:52 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175332|PwBaseWorkChain|on_terminated]: remote folders will not be cleaned\n", "09/02/2025 01:54:53 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|update_task_state]: Task: PwBaseWorkChain, type: WORKCHAIN, finished.\n", "09/02/2025 01:54:58 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|continue_workgraph]: tasks ready to run: PpCalculation,PpCalculation1\n", "09/02/2025 01:55:01 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|on_wait]: Process status: Waiting for child processes: 175341, 175342\n", "09/02/2025 01:55:16 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|update_task_state]: Task: PpCalculation1, type: CALCJOB, finished.\n", "09/02/2025 01:55:17 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|update_task_state]: Task: PpCalculation, type: CALCJOB, finished.\n", "09/02/2025 01:55:23 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|continue_workgraph]: tasks ready to run: BaderCalculation\n", "09/02/2025 01:55:25 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|on_wait]: Process status: Waiting for child processes: 175353\n", "09/02/2025 01:55:35 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|update_task_state]: Task: BaderCalculation, type: CALCJOB, finished.\n", "09/02/2025 01:55:40 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n", "09/02/2025 01:55:41 PM <1365991> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [175329|WorkGraphEngine|finalize]: Finalize workgraph.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Bader charges:\n", "Index Symbol Charge\n", " 0 O 7.147\n", " 1 H 0.427\n", " 2 H 0.427\n" ] } ], "source": [ "wg.run()\n", "\n", "#------------------------- Print the output -------------------------\n", "charges = wg.outputs.bader_charge.value.get_array(\"charge\")\n", "print(\"Bader charges:\")\n", "print(\"Index Symbol Charge\")\n", "for i, charge in enumerate(charges):\n", " print(f\"{i:5d} {atoms.get_chemical_symbols()[i]:5s} {charge:5.3f}\")\n" ] } ], "metadata": { "kernelspec": { "display_name": "aiida", "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.11.0" } }, "nbformat": 4, "nbformat_minor": 5 }