一键导入
bader-charge-analysis
Use when the user asks about Bader charge analysis, charge transfer, oxidation states from DFT, or electron density partitioning.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when the user asks about Bader charge analysis, charge transfer, oxidation states from DFT, or electron density partitioning.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Create and manage computational chemistry workflows with CatGo. Supports VASP, CP2K, ORCA, MLP, LAMMPS. Build OER/HER/CO2RR workflows, geometry optimization, frequency analysis, Gibbs energy calculations.
Run and resume the CatGo md-orchestration poll loop — delegate each poll to a subagent (keep main context lean), verify convergence by force, auto-advance each converged species per-species (pipeline, not barrier), and resume a campaign from disk after context compaction / new session. Use when driving or resuming a campaign's job-watch loop. Pairs with catgo-campaign.
Run a CatGo file-first md-orchestration "campaign" — a multi-step / high-throughput computational-materials study (e.g. SAA HER screening) driven from a human-readable folder + markdown tree, not the DB workflow engine. Use when the user says "跑一个 campaign", "md 模式跑", "high-throughput screening", or wants an agent-in-the-loop study with stages/funnel/analysis/report. Requires `catgo` on PATH.
Route computational chemistry requests to the correct software and task skill. Entry point for all CatGo agent interactions.
Drive a file-first, agent-in-the-loop computational campaign via a folder + markdown tree (no DB). Use when the user opts out of the visual workflow engine.
Authoring conventions for CatGo md-orchestration campaigns — progressive markdown, README+INDEX pairs and keeping them current, logging interventions to LESSONS, human-readable (never-hash) names, and the progressive (top→stage→calc) plan. Use when creating/editing any campaign markdown (plan/README/INDEX/STATUS/LESSONS) so the file tree stays navigable and resumable. Pairs with catgo-campaign.
| name | bader-charge-analysis |
| description | Use when the user asks about Bader charge analysis, charge transfer, oxidation states from DFT, or electron density partitioning. |
Bader analysis partitions the continuous electron density from DFT into atomic basins defined by zero-flux surfaces of the density gradient. This gives physically meaningful atomic charges and charge transfer values.
Bader analysis requires fine-grid charge density output:
LAECHG = .TRUE. # Write core charge density (AECCAR0, AECCAR2)
LCHARG = .TRUE. # Write valence charge density (CHGCAR)
NGXF, NGYF, NGZF # Fine FFT grid (2x default, e.g., NGXF=2*NGX)
The all-electron charge density is: AECCAR0 + AECCAR2, which is summed with the Bader code to avoid errors from pseudopotential smoothing.
{"tool": "catgo_workflow_engine", "arguments": {
"action": "add_task", "workflow_id": "wf_bader",
"task_type": "single_point",
"params": {
"software": "vasp",
"ENCUT": 520,
"LAECHG": true,
"LCHARG": true,
"PREC": "Accurate",
"system_name": "charge density"
}
}}
{"tool": "catgo_workflow_engine", "arguments": {
"action": "add_task", "workflow_id": "wf_bader",
"task_type": "charge_analysis",
"depends_on": "task_sp",
"params": {"method": "bader", "system_name": "Bader charges"}
}}
{"tool": "catgo_workflow_engine", "arguments": {
"action": "get_result", "workflow_id": "wf_bader", "task_id": "task_bader"
}}
{"tool": "catgo_analyze", "arguments": {
"action": "charges", "workflow_id": "wf_bader", "task_id": "task_bader"
}}
from catgo.workflow import Workflow
wf = Workflow("Bader charge - CO on Pt(111)")
inp = wf.add_task("structure_input", structure=co_pt_json)
# Relax first
opt = wf.add_task("geo_opt",
structure=inp.output.structure,
software="vasp", ENCUT=520)
# Single-point with charge density output
sp = wf.add_task("single_point",
structure=opt.output.structure,
software="vasp", ENCUT=520,
LAECHG=True, LCHARG=True, PREC="Accurate")
# Bader post-processing
bader = wf.add_task("charge_analysis",
chgcar=sp.output.chgcar,
aeccar0=sp.output.aeccar0,
aeccar2=sp.output.aeccar2,
method="bader")
wf.submit()
# Compare charges before and after adsorption
wf = Workflow("Charge transfer analysis")
# Clean slab Bader
slab_sp = wf.add_task("single_point",
structure=slab_opt.output.structure,
software="vasp", ENCUT=520, LAECHG=True, LCHARG=True)
slab_bader = wf.add_task("charge_analysis",
chgcar=slab_sp.output.chgcar,
aeccar0=slab_sp.output.aeccar0,
aeccar2=slab_sp.output.aeccar2)
# Slab+adsorbate Bader
ads_sp = wf.add_task("single_point",
structure=ads_opt.output.structure,
software="vasp", ENCUT=520, LAECHG=True, LCHARG=True)
ads_bader = wf.add_task("charge_analysis",
chgcar=ads_sp.output.chgcar,
aeccar0=ads_sp.output.aeccar0,
aeccar2=ads_sp.output.aeccar2)
wf.submit()
# After completion:
# dq = q_ads(atom) - q_clean(atom) for each surface atom
# Positive dq = atom lost electrons; Negative dq = atom gained electrons
structure --> geo_opt --> single_point(LAECHG) --> charge_analysis
Bader analysis returns per-atom data:
| Field | Description |
|---|---|
atom_index | 0-based atom index |
element | Element symbol |
bader_charge | Electrons in Bader basin |
valence_electrons | POTCAR valence electron count |
net_charge | valence_electrons - bader_charge (+ means cation) |
volume | Bader basin volume (A^3) |
| Element | ZVAL (valence e-) | Typical Net Charge Range |
|---|---|---|
| O | 6 | -0.8 to -1.4 (oxide) |
| Ti | 4 or 10 | +1.5 to +2.5 (TiO2) |
| Pt | 10 | -0.1 to +0.3 (metallic) |
| C | 4 | -0.5 to +1.0 (varies) |
| H | 1 | +0.4 to +0.6 (on O), -0.3 (on metal) |
dq_adsorbate = sum(net_charge of adsorbate atoms in slab+ads system)
- sum(net_charge of same atoms in isolated adsorbate)
charge_analysis post-processing.