北京大学陈默涵课题组
用户2166
ABACUS开发者文档
分享
Introduction to ABACUS: Path to PW calculation - Summary 1
输入“/”快速插入内容
Introduction to ABACUS: Path to PW calculation - Summary 1
作者:黄一珂,邮箱:
huangyk@aisi.ac.cn
;金祖鑫,邮箱:
jinzx@aisi.ac.cn
审核:陈默涵,邮箱:
mohanchen@pku.edu.cn
🏮
写在前面
经过Introduction to ABACUS: Path to
PW
calculation的Part1到5,我们已经阅读过上百行程序。在继续之前,有必要将已经解读过的内容再次就重点进行回顾,并凝练和一定程度的抽象。牢记本系列内容组织的两原则:
1.
不脱离代码——避免读者看完手册后对代码没有一丁点概念
2.
不堆砌代码解释——避免平庸的代码解释,努力兼顾拉近读者和代码距离的同时,做到提纲挈领,不逐行复制代码后进行停留在代码语义上的解释
主题1:dataflow
1.
全局变量
不仅在上篇(
Part 5
)的最后,在k点分发时我们看到了在
GlobalC
中声明为
extern
的
Parallel_Kpoints
类对象
Pkpoints
,在很多地方会被直接调用的
UnitCell
类对象
ucell
,以及实际上最一开始看到的
Input
类对象
INPUT
,也被声明为
extern
。
extern
标识变量的好处(1)是跨文件/跨模块可用,以至于可以尽量缩减每个函数的
形参
表体积,(2)维持变量的唯一性,若又有其他变量具有相同名字,则编译阶段无法通过。但缺点是
extern
变量可能被修改,修改后则所有用到该
extern
变量的地方均受影响。另外
extern
的使用不当可能会(1)破坏封装性,为函数、变量、类、模块带来深度
耦合
,为之后的开发工作带来困难,(2)带来异常大的程序
运行内存
开销——因为有些变量确实可以具有短于整个程序的生命周期。
另一方面,如果有
extern
变量的生命周期和整个程序相同,可能给开发者带来困难:判断其何时何阶段具有何值就更有难度。
2.
输入文件读取
综合前5篇介绍的内容,结合ABACUS workflow的赋值顺序,将有关的全局变量总结如下: