{
"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
}