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