{ "cells": [ { "cell_type": "markdown", "id": "22d177dc-6cfb-4de2-9509-f1eb45e10cf2", "metadata": {}, "source": [ "# Bader charge analysis\n", "\n", "For the source code, see [bader](https://workgraph-collections.readthedocs.io/en/latest/ase/espresso/module.html#workgraph_collections.ase.espresso.bader.bader_workgraph).\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "efa095d0", "metadata": {}, "source": [ "## Example: H2O\n", "\n", "### Prepare the inputs and visualize the WorkGraph\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 ase.build import molecule\n", "from aiida import load_profile\n", "\n", "from workgraph_collections.ase.espresso.bader import BaderWorkgraph\n", "from aiida_pythonjob.config import config\n", "# allow pickle\n", "config[\"allow_pickle\"] = True\n", "\n", "load_profile()\n", "\n", "atoms = molecule('H2O', vacuum=3.0)\n", "atoms.pbc = True\n", "\n", "\n", "metadata = {\n", " \"options\": {\n", " 'prepend_text' : \"\"\"eval \"$(conda shell.posix hook)\"\n", " conda activate aiida\n", " export OMP_NUM_THREADS=1\n", " \"\"\",\n", " }\n", "}\n", "pseudopotentials = {\"H\": \"H.pbe-kjpaw_psl.1.0.0.UPF\", \n", " \"O\": \"O.pbe-n-kjpaw_psl.1.0.0.UPF\"}\n", "pseudo_dir = \"/home/xing/data/ase/espresso_pseudo/kjpaw\"\n", "# pseudo_dir = \"/home/wang_x3/datas/pseudos/psl\"\n", "scf_input_data = {\n", " \"control\": {\"calculation\": \"scf\",\n", " },\n", " \"system\": {\"ecutwfc\": 30, \"ecutrho\": 240,\n", " \"occupations\": \"smearing\",\n", " \"degauss\": 0.01,\n", " \"smearing\": \"cold\"\n", " },\n", "}\n", "\n", "inputs = {\n", " \"scf\": {\n", " \"input_data\": scf_input_data,\n", " \"kpts\": [1, 1, 1],\n", " \"metadata\": metadata\n", " },\n", " \"pp_valence\": {\n", " \"metadata\": metadata\n", " },\n", " \"pp_all\": {\n", " \"metadata\": metadata\n", " },\n", " \"bader\": {\n", " \"metadata\": metadata\n", " }\n", "}\n", "#------------------------- Set the inputs -------------------------\n", "wg = BaderWorkgraph.build_graph(atoms=atoms,\n", " pw_command=\"mpirun -np 1 pw.x\",\n", " pp_command=\"mpirun -np 1 pp.x\",\n", " bader_command=\"bader\",\n", " computer=\"localhost\",\n", " pseudopotentials=pseudopotentials,\n", " pseudo_dir=pseudo_dir,\n", " inputs=inputs)\n", "wg.to_html()" ] }, { "cell_type": "markdown", "id": "9deaa83d", "metadata": {}, "source": [ "### Run the WorkGraph\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "26768641", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "09/04/2025 07:17:28 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|continue_workgraph]: tasks ready to run: pw_calculator\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|continue_workgraph]: tasks ready to run: pw_calculator\n", "09/04/2025 07:17:29 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|on_wait]: Process status: Waiting for child processes: 180002\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|on_wait]: Process status: Waiting for child processes: 180002\n", "09/04/2025 07:17:46 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|update_task_state]: Task: pw_calculator, type: PYTHONJOB, finished.\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|update_task_state]: Task: pw_calculator, type: PYTHONJOB, finished.\n", "09/04/2025 07:17:49 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|continue_workgraph]: tasks ready to run: pp_calculator,pp_calculator1\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|continue_workgraph]: tasks ready to run: pp_calculator,pp_calculator1\n", "09/04/2025 07:17:51 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|on_wait]: Process status: Waiting for child processes: 180018, 180024\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|on_wait]: Process status: Waiting for child processes: 180018, 180024\n", "09/04/2025 07:18:04 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|update_task_state]: Task: pp_calculator, type: PYTHONJOB, finished.\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|update_task_state]: Task: pp_calculator, type: PYTHONJOB, finished.\n", "09/04/2025 07:18:07 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n", "09/04/2025 07:18:07 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|on_wait]: Process status: Waiting for child processes: 180024\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|on_wait]: Process status: Waiting for child processes: 180024\n", "09/04/2025 07:18:12 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|update_task_state]: Task: pp_calculator1, type: PYTHONJOB, finished.\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|update_task_state]: Task: pp_calculator1, type: PYTHONJOB, finished.\n", "09/04/2025 07:18:15 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|continue_workgraph]: tasks ready to run: bader_calculator\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|continue_workgraph]: tasks ready to run: bader_calculator\n", "09/04/2025 07:18:16 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|on_wait]: Process status: Waiting for child processes: 180036\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|on_wait]: Process status: Waiting for child processes: 180036\n", "09/04/2025 07:18:27 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|update_task_state]: Task: bader_calculator, type: PYTHONJOB, finished.\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|update_task_state]: Task: bader_calculator, type: PYTHONJOB, finished.\n", "09/04/2025 07:18:29 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|continue_workgraph]: tasks ready to run: \n", "09/04/2025 07:18:30 AM <564861> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [179998|WorkGraphEngine|finalize]: Finalize workgraph.\n", "REPORT:aiida.orm.nodes.process.workflow.workchain.WorkChainNode:[179998|WorkGraphEngine|finalize]: Finalize workgraph.\n" ] } ], "source": [ "#------------------------- Submit the calculation -------------------\n", "wg.run()\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "9d20300e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Bader charges:\n", "Index Symbol Charge\n", " 0 O 7.148\n", " 1 H 0.426\n", " 2 H 0.426\n" ] } ], "source": [ "#------------------------- Print the output -------------------------\n", "charges = wg.outputs.result.value.value\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 }