GPAW专题

GPAW有限电场与分子极化率

对固定水分子施加正负电场,使用原生极化率工具,并独立比较偶极差分、能量曲率和场强步长。

更新于 2026-11-09约 4 分钟阅读按任务与环境选择适用配置
阅读本篇目录

有限电场法先计算无场状态,再施加小电场,观察偶极或能量如何变化。本例计算固定水分子的完整电子极化率张量,并用两种场强检查差分结果。

1 运行示例#

下载有限电场与极化率实操包,保存为gpaw-field.zip。新SCF在CPU资源中运行;从登录节点可提交sbatch job.slurm。分配CPU资源后:

python3 -m zipfile -e gpaw-field.zip .
cd gpaw-finite-field
bash setup.sh
bash run.sh
bash verify.sh
bash plot.sh

例程为1 MPI进程、4线程。它包含9个实际条件:无场、x/y/z三个正电场、对应三个负电场,以及z方向一对双倍场强。结果在results/VALIDATION.json,两张图在plots/。

2 输入和原生工具#

水分子几何、PBE、FD间距0.25 Å与盒保持不变。能量曲率对小能量差敏感,因此这里使用更紧的电子设置:

calc = GPAW(
    legacy_gpaw=True, mode='fd', h=0.25, xc='PBE',
    convergence={'energy':1e-8,'density':1e-7,'eigenstates':1e-10},
    maxiter=200
)
atoms.calc = calc
alpha_forward = static_polarizability(atoms, strength=0.02)

原生static_polarizability使用每个方向的正电场前向差分。完整程序另外计算负场,得到独立的中心差分;z方向还比较±0.04 V/Å。

external = ConstantElectricField(0.02, [0,0,1])

这里场强单位是V/Å,方向向量指定极化方向。不能将0.02当作原子单位场强直接代入。整个过程中原子位置固定,所以得到的是电子响应,不包含离子移动产生的贡献。

3 两种公式与单位#

alpha_mu = [mu(+F) - mu(-F)] / (2F)
alpha_E  = -[E(+F) + E(-F) - 2E(0)] / F^2

代码保留原生单位e²Å²/eV。按照GPAW接口约定,乘以ASE中的Bohr*Hartree,约14.399645,即转换为常用的ų表示。不要把两个单位下的数值直接互相比。

实际水分子的偶极变化与扣除线性项后的能量曲率

4 实际结果#

中心差分得到的对角元为:

分量 极化率/ų
αxx 1.564825
αyy 1.609834
αzz 1.590392

该取向下非对角元接近零。z方向场强改为±0.04 V/Å,得到1.590419 ų,与±0.02结果相近;三个方向的能量曲率也与偶极差分一致。

实际完整极化率张量与独立能量曲率对照

这只是固定几何、固定网格和盒的小例,不代表已完成基组、盒大小、泛函或分子构型的全面收敛。场强太小会放大SCF数值误差,太大又可能引入明显非线性,应像本例一样同时检查正负场与步长。

5 终端导出张量和场响应#

source env.sh
"$YS_PY" - <<'PYCODE'
import json, csv, numpy as np
from pathlib import Path
f=json.loads(Path('results/VALIDATION.json').read_text())
a=np.array(f['own_central_tensor_A3'])
print('central tensor / angstrom^3:'); print(a)
print('energy curvature diagonal:',f['own_energy_diagonal_A3'])
np.savetxt('water-polarizability.dat',a)
with open('water-field-response.csv','w',newline='') as out:
    w=csv.writer(out);w.writerow(['case','axis','field_V_A','energy_eV','mux_eA','muy_eA','muz_eA'])
    for r in f['results']:
        w.writerow([r['name'],r['axis'],r['field_V_A'],r['energy_eV'],*r['dipole_eA']])
PYCODE
bash plot.sh --reference

后一条只重绘归档结果到reference-plots/。完整输入在run.py,环境为GPAW 26.7.0、GCC 13.3、HPC-X/OpenMPI 5、MKL 2023.2、Libxc 7.0.0,PAW数据26.8.0。场强和接口单位见GPAW外场说明。时间相关激发可继续阅读水分子TDDFT。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗