sisl:生成 TranSiesta 电势修正
用真实碳链TBtrans文件生成外部Poisson修正,展示完整网格、单位、边界和粗网格插值误差。
阅读本篇目录
stoolbox ts-fft用于为TranSiesta生成带指定电极边界的Poisson修正文件。本例沿用集群真实完成的零偏压碳链计算,实际运行工具、提取电势并画图,不把辅助场称为新的DFT自洽电势或输运结果。
1. 先下载并得到图片#
下载真实输入、六组原生网格与复算绘图脚本,约87 MiB,保存为 sisl-ts-fft-wave220.zip。
unzip sisl-ts-fft-wave220.zip -d sisl-poisson
cd sisl-poisson
bash view.sh
cat analysis-reference/metrics.csv
生成图片位于 figures-reference/;这一步只读取已有数据,不重新计算,不需要安装PyAMG。重复操作使用新解压目录,避免混用已有结果。

2. 需要哪些真实输入#
ls inputs
cat inputs/MESH.txt
InitMesh: MESH = 300 x 90 x 90 = 2430000
device.TBT.nc来自此前真实的SIESTA5.4.2/TranSiesta/TBtrans零偏压计算,包含32个原子的位置、晶胞与电极分组。device.XV来自同次计算,用于恢复真实C元素。这个教学碳链沿a方向排列,晶胞为40.64×12×12 Å。
| 分组 | 原子编号,从0开始 | 作用 |
|---|---|---|
| high | 0–7 | 第一组电极 |
| Device | 8–23 | 器件区域 |
| low | 24–31 | 第二组电极 |
TBT文件不保存真实元素种类,sisl直接读入时可能使用H占位符;画结构应结合对应XV恢复C标签,不能据占位符判断体系元素。本例工具显式指定1.5 Å球半径,求解使用真实坐标和电极分组,不根据占位元素自动选择半径。
3. 一条提交命令完成重算#
sbatch job.slurm
提交脚本按CPU整节点56核编写,内部最多并行4个单线程子任务。自动完成四组直接完整网格计算、两组插值对照、CSV提取与画图。
脚本加载 sisl/0.16.4;可选依赖PyAMG5.4.1只安装在本目录的 python-deps/,不修改公共环境。首次重算需要从PyPI获取依赖。实际环境为Python3.11.16、NumPy2.3.5、SciPy1.16.3;PyAMG使用官方二进制wheel。
任务结束后:
cat analysis/metrics.csv
ls figures
ls cases/plus010_full
主要输出是各目录中的 potential.TSV.nc,以及统一汇总的CSV和图片。新算结果在 analysis/、figures/,已有参考结果的图和表使用 *-reference目录。
4. 原生工具命令怎样写#
提交脚本已包含实际调用;如果要在已分配资源中手动运行,完整网格命令如下:
module load sisl/0.16.4
export PYTHONPATH="$PWD/python-deps"
stoolbox ts-fft --geometry inputs/device.TBT.nc \
--shape 300 90 90 \
--boundary-condition-a d d \
--boundary-condition-b p p \
--boundary-condition-c p p \
--elec-V high 0.1 --elec-V low -0.1 \
--radius 1.5 --dtype f64 --tolerance 1e-10 \
--out potential.TSV.nc
--shape要对应实际计算的网格,不是任选的画图分辨率。电极名称要和TBT中的名称一致;本例是high/low,不应直接换成别的教程里的Left/Right。
d d表示a方向两端Dirichlet边界;b/c方向采用周期边界。--radius决定哪些网格点落在固定电极电势区域,不是直接读取的原子半径。自己的体系若采用不同边界,应据实际物理模型重新设置。工具背景见sisl官方Poisson说明。
5. 四组完整网格计算得到什么#
| 目录 | high / low,eV数值 | 求解与输出网格 |
|---|---|---|
| plus010_full | +0.1 / −0.1 | 300×90×90 |
| plus020_full | +0.2 / −0.2 | 300×90×90 |
| minus010_full | −0.1 / +0.1 | 300×90×90 |
| zero_full | 0 / 0 | 300×90×90 |
电极电势数值加倍后,全网格与原结果两倍的最大偏差约 3.19E-14 eV;交换偏压符号后,与原结果负值的最大偏差约 1.58E-14 eV;零偏压结果为0。完整网格电势范围与所设边界一致,浮点尾差约1E-12 eV。
head analysis-reference/centerline.csv
cat analysis-reference/metrics.csv
中心线CSV对应y=z=6 Å的实际网格线。它是辅助修正场,不是沿轨迹采样得到的统计平均,也不代表重新完成了电子结构自洽。
6. 为什么本例不默认用粗网格加速#
工具允许增加 --shape-solver 60 18 18,先在小网格求解,再插值到实际输出网格。本例保留了两种真实对照:
| 求解网格 | 插值后的最大电势,eV | 相对直接完整网格的最大差异,eV |
|---|---|---|
| 60×18×18 | +0.10819 | 0.08684 |
| 120×36×36 | +0.10820 | 0.06381 |
两组都超过了所设+0.1边界。原始结果完整保留,metrics.csv中的 maximum_principle_pass=False明确标记它们的范围问题;不要将它们当作本例已通过范围检查的主要输入。

本版CLI调用二阶插值,Grid默认使用wrap方式。本例采用直接完整网格求解,未裁剪或截幅来掩盖越界;线性求解容差与插值误差也应分别检查,不能只因容差很小就认为网格转换可靠。该结论来自当前版本与本例,不作为所有版本或所有几何的普遍误差估计。
7. TSV文件的单位与轴顺序#
原始NetCDF中的 V、Vmin、Vmax单位是 Ry,原生变量顺序为 V(c,b,a)。sisl读回时转换为eV,数组顺序为(a,b,c)。直接用netCDF4读数时,不能把Ry数值原样当成eV,或把第一维当作a方向。
此外,本版TSV读取器会将读回Grid的边界标记设为周期,不能据此反推原计算边界;实际条件应由各目录的 COMMAND.json保留。资料包只把其中的路径改成可复算的相对路径,数值选项与原运行一致。
8. 交给TranSiesta时做什么#
将对应 potential.TSV.nc复制到新的器件计算目录,在FDF中指定:
TS.Poisson potential.TSV.nc
文件的晶胞、网格和电势边界要与实际器件计算对应,使用支持NetCDF的构建。不要混用不同Poisson设置下的旧TSDE续算。本篇完成了外部修正文件生成、读回和数值对照,没有重新执行使用此文件的自洽输运;完整器件流程见TranSiesta实操。
9. 换成自己的结构#
先完成自己的零偏压器件及TBtrans计算,取同源TBT/XV文件;从实际输出读取InitMesh,核对电极名、传输方向和六个边界;再生成修正,检查范围、网格变化和单位,最后在一致的TranSiesta设置中使用。不要仅替换文件名就沿用本例300×90×90网格与high/low标签。