| 查看: 3231 | 回复: 17 | ||||
| 【奖励】 本帖被评价4次,作者donkeypku增加金币 3.5 个 | ||||
| 当前主题已经存档。 | ||||
[资源]
【分享】ABINIT的前世今生(转)
|
||||
|
[转载] 材料性质的第一性原理计算:ABINIT软件工程 myid520 译 来源: 南京大学小百合站 http://bbs.nju.edu.cn/vd100000/b ... amp;file=1134716454 ChemiAndy转注:本文从软件工程学的角度,给出了ABINIT第一性原理分子动力学软件的理论与技术的一个完美剖面。翻译者具备良好的理论计算功底和编程基础。原帖散失了所有公式。待查补。译者myid520,研究理论催化,现在吉林。译者博客http://myid520.blog.163.com/ First-principle computation of material properties: the ABINIT software project X. Gonze, J.-M. Beuken, R. Caracas, F. Detraux, M. Fuchs, G.-M. Rignanese, L. Sindic, M. Verstraete, G. Zerah, F. Jollet, M. Torrent, A. Roy, M. Mikami, Ph. Ghosez, J.-Y. Raty, and D.C. Allan Comput. Materials Science 25, 478 (2002). 摘要: 用密度泛函理论(DFT)计算电子结构、总能量和材料的其他性能是一个不断发展的领域。为了站在知识的最前沿,处理恰当的话,一个DFT软件工程能够很好的得益于广泛的合作。另外,现代软件工程思想可以使软件开发相当容易。ABINIT工程依赖下列信念:资源的自由性、可靠性、可移植性和在开发复杂的平面波赝势时所强调的个人文档。 在这里,我们介绍在GNU公共软件协议下发布的ABINIT3.0版,给出其功能和一直使用到现在的各种软件技术:用perl脚本和cpp指令处理处理Fortran90资源文件的独立集合来为各种操作系统产生并行或串行目标代码;200多个自动测试来保护现有的功能;一直坚持的严格的编码规则;在线帮助、自学教程、网页资源等文档。 关键词:密度泛函理论,软件工程,电子结构 pacs:71.15.-m,81.05.Zx,31.15.Ew,89.88.+h 1.引言 在过去的20年中,以量子力学和电磁理论为基础的材料性能的第一性原理计算已经经历了巨大的进步,而应用广泛的密度泛函理论正处在这个快速发展的领域的核心。他已经在各种计算机代码和和一般理论(如时间依赖泛函理论)中应用,或者用作很多复杂形式体系的基础。下面,我们不加综合地列举这一领域80年代中期以来的一些里程碑,来看一下它的持续发展,并多花一些笔墨在赝势的使用上。 1985年,Car和Parrinello建议了一个把DFT和分子动力学统一起来的算法[4],同年,Hybertsen和Louie独自地把Hedin[5]的基态近似应用于单电子的叠加和移动能的计算。1987年,固体的动力学和介电性能上的线性响应方法被Baroni,Giannozzi 和Testa[7]实现。Allan和Teter[8]建议用分离Kleinman- Bylander[9]赝势和Car-Parrinello的技术进行结合,1990年,Vanderbilt设计了一个超软赝势[10],三年后,和King-Smith一起指出电子极化是一个几何相[11];同时,举行串行运算(原文为大规模并行。CA)的计算机上的运用开始出现。赝势方面更加精细的思想也产生了导致了Blochl的投影放大波方法[13](即PAW方法。CA)。为了处理激发态,含时DFT和Bethe-Sapeter方程[13-18]最近已被实现。 因此,为了和时代同步,用来进行材料到第一性原理计算的计算机程序必须包括越来越多的功能,随着发展,这些功能变成基本的功能,而在原有的计算机代码上测试一个新想法也明显变得无效。另外,由于软件越来越多的功能需要合并,一个人很难在不牺牲自己研究的情况下来继续这一软件的维护和开发。而DFT形式系统及其应用、应用领域的改进、普遍化需要10年甚至更长的时间。所以,小组开发,甚至国际合作是必要的,在这种情况下,各种现代软件工程技术证明时非常有用的。 ABINIT软件工程开始于1997年,在这个基础上,作为一个开放的软件工程,它对功能没有限定,并且使用多种软件工程技术来方便很多开发组之间的国际合作。ABINIT的主程序使用平面波和赝势,来进行材料性能的密度泛函计算。它的一些特殊的功能还能处理反应函数。 现在,软件有下面四个特点:1.开放源代码(可以在GNU公共软件协议下使用),2.自我测试,3.在不同的操作系统下进行并行、串行运算的可移植性,4.个人文档。另外还提供给使用这一个自学程序。而为了方便国际合作,还制定了旨在要求各个开发组要有统一明确代码风格的协议。网站[20]提供官方版本、赝势、各种应用程序、基准结果、电子邮件列表和参考文献信息。 本文将以3.0版为例进行介绍。以前的版本不是在GNU GPL下开发的,网站也将不提供这些版本。 和ABINIT软件包所包含的各种应用程序一样,ABINIT主程序也是用Fortran90编写的,它包括300多个子程序,大约10万行,其中大约三分之一是注释。软件包包括文档文件、自动测试脚本和赝势文件。 ABINIT v3.0于2000年12月第一次发布,从那时起,程序的错误被定期的报告并在网上公布(现在的3.06版)另外,软件开发的主流一直超过3.0版,包括现在的3.1和3.2版,本文的作者对3.0版作出了主要的贡献,另外还有50多人对本版本也作出了贡献,他们改动了一个或一部分子程序,或发现了一些程序错误。 现在,一些其他代码,如基于平面波和赝势,和基于投影防大波(即PAW方法.CA)(超软赝势形式的改进)的代码可以获得,我们提供的列表[21-31]可能不太详尽,他们中的有些是商业软件,其他的可以通过和主要开发组合作来获得,或者直接从网上下载。 在未来,发展与下列两种团队的合作是有意义的,一种是在GNU GPL下提供他们代码的团队(这对开发者和使用者都提供了法律的保护),另一种是免费提供源代码的团队。和组包括相互检测软件精度和速度,以及共享子程序和函数库。显然,在这方面,最根本的是要开放源代码。 在本文中,我们首先集中介绍ABINIT3.0版的特色功能(第二部分),其中有些是一些基本功能,已经在相似的代码中使用的很久一段时间,我们在这里不进行太详细地介绍。其他的是第一次应用的功能,也是我们将详细解释的。当然,全面地描述还将会另外发表。另外,我们还将粗略的给出软件包的结构和输入文件的组织形式,然后在第三部分,我们将叙述世界范围内小组开发的组织形式,而现在软件工程的思想(自我测试、脚本可移植性、个人文档、使用者自学)使这种组织成为可能。在最后一部分,我们将批判地讨论现在的成就和我们所遵循的开发模型,同时指出需要改进的地方。 |
» 收录本帖的淘帖专辑推荐
VASP | soft study |
» 猜你喜欢
垃圾破二本职称评审标准
已经有18人回复
职称评审没过,求安慰
已经有53人回复
毕业后当辅导员了,天天各种学生超烦
已经有5人回复
26申博自荐
已经有3人回复
A期刊撤稿
已经有4人回复
EST投稿状态问题
已经有7人回复
» 本主题相关商家推荐: (我也要在这里推广)
★ ★
fegg7502(金币+2,VIP+0):thanks
fegg7502(金币+2,VIP+0):thanks
|
2 特色功能 ABINIT软件包包括主程序及应用程序MERGE、IFC和CUT3D。主程序是用来驱动不同密度泛函的基础计算的。下面我们将区分ABINIT在基态计算、结构相关计算(最优化和分子动力学)和反映函数计算方面的特色功能。对大部分功能,给出了许多出版物作参考,包括粗略的描述。然而,有两种情况:自旋轨道影响的处理和绝热联结波动耗散理论(adiabatic-connection fluctuation dissipation theorem, ACFDT),ABINIT时用艺术态来处理的(原文为state-of-the-art,达到最新技术发展水平的),同时给出大量的解释(下面我会有解释)。而应用程序MERGE、IFC和CUT3D将在一个单独的部分描述。 2.1 电子基态计算功能 密度泛函计算中的赝势平面波技术是Payne和其同事来审查的(has been reviewed )。ABINIT 3.0版支持下列密度泛函近似:Perdew-Zunger[34]和Teter[35]的局域(自旋)密度近似(LSDA),Perdew-Buike和Ernzerhof[36]的广义梯度近似(GGA),Van Leeuwen-Baerends[37]GGA,以及早些时候Gunnarsson-Lundpuist[38]的非自旋极化局域密度近似(LDA),Wigner[39]和Slater(X-alpha)[40]。 ABINIT能够单独使用的赝势有下列各类型: --在数值格点上的标准正则赝势(normconserving PP模守恒赝势),例如但是不仅限于Troullier-Martins[41]赝势。 --Goedecker-Teter-Hutter[35]赝势或Hartwigsen-Goedecker-Hutter[42]赝势,这两种赝势的解析形式特别简洁。 -- Teter[43]推荐的扩展的正则赝势。 网站上给出了LDA赝势的两个完全或者说准完全集,一个是Troullier-Martins类型的,另一个是Hartwigsen-Goedecker-Hutter类型的。Fritz-Habor-Institute代码可以用来产生新的赝势,特别是那些用在GGA中的。Hartwigsen-Goedecker-Hutter有一个自旋轨道的部分,与其相对应,Martins赝势代码[45]的最新版本也能产生自旋轨道依赖赝势。 根据Louie,Froyen和Cohen或Tetet的建议,非线性相关中的核心相关是可以处理的。最后,用于研究核心水平化学位移的核心洞赝势也是可以使用的。 在每个k点(倒易空间的波矢,通常在第一布里渊区),波函数用平面波有限集的数字系数来表示,这个系数由动能的截断值决定。k点的集合可按照Monkhorst-Pack[48]系统或一般形式自动产生。在倒易空间中,由于规则地分隔在不同直线上的k点可以自动的产生,电子带结构的结果也可以很容易的形成。 对称性用来减少布里渊区取样所需k点数目,所以,只用不可约去的部分才需要取样。ABINIT 3.0提供不同的可能性来描述倒易空间的波函数(平面波系数)。通常,波函数的系数是复数,是旋量空间的标量。利用独立的自旋和反自旋波函数,以及自旋轨道耦合、旋量波函数,ABINIT 3.0能处理共线磁化(铁磁性和反铁磁性)。能处理自旋轨道耦合是ABINIT的一个想当高级的功能,我们也将在一个单独的部分中介绍。但是ABINIT 3.0中还没有处理非线性磁化的能力。对具体的波矢在时间反转(和通过倒格子矢量的转变)下的不变形,如(0 0 0)或(1/2 0 0)……,波函数用适量的平面波系数的二分集代表。 在实验有效势中,决定波函数的算法是Teter 、Payne 、Allan的连接梯度算法的改进型算法。电子密度就是通过这些波函数构造,并且用来产生势的Hatree能和交换相关能部分。这样,输入实验势就和输出势联系了起来。各种算法允许反复地建立向Kohn-Sham势(输入势和输出势相同的固定点)收敛的实验势,Kohn-Sham势包括:简单混合[50],Anderson势[51]和基于势的连接梯度算法[52,53]。这种势的预处理通过典型介电函数或近似介电函数完成。 当电子密度已经自洽地建立,相应的势可以非自洽地用来简并非占有态(需要带结构简并,或ACFD形式,见2.5部分)。态依赖占有数可以用多种方式处理,可以手工建立(每个能带同时建立,或每个自旋、每个k点或能带单独建立),也可以自动加载。对后一种情况,使用者可以选择半导体填充或金属填充,当然,这要根据不同的抹去方案,看是高斯smearing(Fu和Ho[55]),厄米—高斯smearing(Methfessel和Paxton[56]),还是cold smearing(Marzari[57])。 2.2 有关结构方面计算的能力 ABINIT给出了对称规范的不同选择。假如给出了原胞中的原子位置,则对称操作能被自动识别,相反,如果给出了对称操作和不能约去的原子,原胞中余下的原子也能自动产生 空间点群能够根据国际晶体表[58]给出,在这种情况下,对称操作表可以通过一个数据库初始化。假如晶格常数和对称操作已经给出,ABINIT就能建立布拉菲格子和点对称群(ABINIT3.0版中还没有点对称群)。 得益于Hellmann-Feynman理论和密度泛函理论中的应力理论,以和应力在所有情况下都可以计算,除旋转轨道情况外,总能量在这种情况下也都能计算出来,也就是总能量的计算适合标量波函数和自选极化情况、金属和绝缘体材料,以及各种交换相关函数。 使用Broyden算法[61]、改进型Broyden算法[62]、当离子的运动方向和力的方向相反时运算立即停止的Verlet算法[63],力和应力可以用来最优化结构(最小化力和应力,任意限制它们的分量);使用Verlet算法[64]或Numerov算法[65],力和应力还可以用来产生分子动力学轨道。Verlet算法情况下,可以使用Nose-Hoover 和Langevin热浴[66-70]来取样正则系综。 另外,代码能自动分析键长键角,以及xyz形式的原子坐标。 2.3 相应函数方面计算的能力 我们首先考虑对原子位移和静态同类电子场的相应。 在Berry相形式下,可以计算出介电极化,这一特色功能对绝缘体、磁体和非磁体可用,但是,自旋轨道分裂情况出现时还不可用。 线性响应技术(密度泛函微扰理论)[7,71-74]可以用来计算对原子位移和同类电子场的响应。计算将产生在选择的波矢处的动力学矩阵、Born有效电荷、或者(电子)介电常数。这些量放在一个数据库中,可以用MERGE和IFC来分析(后面还要专门讲到)。对ABINIT3.0版来说,线性响应在自旋极化情况、旋量波函数情况和对交换相关函数的GGA近似情况还不可用。 磁化矩阵和介电矩阵(在频率为0,和对倒格矢)可以通过对整个态公式求和[77,78]计算出来。 电子激发也可以在时间依赖密度泛函理论下研究。 2.4 自旋轨道耦合方面计算的能力 自旋轨道耦合在平面赝势代码中不是经常用到,在力、应力、响应函数可以利用的ABINIT3.0版,它的执行将详细描述[79]。我们在这里给出一个简略的描述,描述他在计算总能量时的执行情况。从狄拉克方程开始,能够得到和薛定谔方程相类似的方程,这个方程和相对论波函数的最大最小分量相混合,具有1/c 的数量级。对每个l+ 和l- 轨道,赝势都能产生,对赝势进行适量的线性组合,将产生标量相对论部分 和自选轨道部分 。按照参考文献[42,81],重新组合赝势,写出电子--离子势,离子势是标量相对论相(SR)和自旋轨道相(SO)的和:Vei= + (1) 标准波函数基扩展到旋量波函数基,旋量波函数基的元素由 表示的二分量波函数。一般矩阵元的自旋独立部分为: (2) 自旋轨道部分为: (3) 在Kleinman-Bylander公式中,自旋独立相的结果就是著名的: =4π(2l+1)fl(|G|)fl(|G’|)Pl( (4),其中 、fl(G)是倒易空间中Kleinman-Bylander形式的因子,Pl是勒让得多项试。这个结果,从增加的定理: (5) 到得到自旋轨道项的相似算符,我们首先考虑矢量: 。利用定义L=r p,恒等式 和 ,我们得到: = -i 。因此,我们把矩阵元素变换成:。 (6) 最后一项的计算模仿自旋独立项的计算。注意,由于与 叉乘, 项无贡献。最后,我们得到: (7) 其中 是 的一阶微分。 通过这个公式,我们能够求出体系的总能量,同时,通过对原子位移和原胞变形微分,我们能求出力和应力。 2.5 绝热连接波动耗散理论 DFT中的局域密度近似和广义梯度近似经常产生固体、表面、分子物理和化学性能的有效精确描述。特别是它们能给出原子结构的实际的计算,以及弹性和震动性质。虽然在分子相互作用和相关势能面方面,GGA比LDA有改进,这也是GGA的典型部分,但是,我们还是需要更精确的函数来克服临界时的缺陷,例如,GGA还不能在化学精度下预测化学反应热力学(分子分裂能、反应热和激活能垒),和LDA一样,不能恰当的包括远距离子系统间的范德瓦尔斯相互作用。 绝热连接波动耗散理论(adiabatic-connection fluctuation-dissipation theorem ACFDF)允许产生完整的非局域交换相关函数,这个函数在远距离情况下包括范德瓦尔斯相互作用或精确的非局域相关,因此,这一理论超越了传统的局域密度近似和广义修正近似。并明确给出了密度为 的电子系统的交换相关能[82]: (8), 其中 (虚频率)是通过一个标量库伦势 产生电子相互作用的系统的动力学密度响应函数,它进入一个修改的外部势,以便对物理( )基态密度保持不变。对 ,我们处理无相互作用的Kohn-Sham系统,它的响应函数由Kohn-Sham本征态 和本征值 ,即: (9), 其中求和包括所有占有态( =1)和非占有态( =0)。当 时,相互作用和Kohn-Sham响应函数通过代森型屏幕方程相关,代森型屏幕方程为: = + (10), 其中 = 库伦和交换相关核函数,它在时间依赖密度泛函理论[83]中建立。就像在参考文献[84]中提到的一样,交换相关能的相关部分和交换部分可以分开。方程8-10可以归结为ACFDT形式。原则上,它能产生精确的密度泛函交换相关能,但实际上,通过对未知的时间依赖交换相关核函数、Kohn-Sham响应函数、和(或)代森方程的解使用具体的近似,从各种近似的动力学密度响应函数都可以产生近似函数。 在ABINIT3.0版中,初始的Kohn-Sham基态(也就是 )是在LDA或GGA条件下计算的,而把响应函数和核函数看作 点,并在定义的平面波代表中处理,例如,对 ,通过 = 来处理,其中G是倒格矢。通过对方程(9)中的所有态求和,得到Kohn-Sham响应函数。使用不同的时间依赖交换相关核函数,我们不需要进一步近似就解出代森方程(10),因为线性方程系统如下: = (11) 为得到交换相关能,我们给相关能付值为: (12) 因此,增加了交换能泛函[86-88]。至于对 和u积分,我们重复解方程(9)和(11),并使用高斯求积分公式。 功能的实现还处于试验阶段,还需要最优化。我们的初始目标是评定ACFDT家族的各种函数的精度。 |
2楼2008-12-03 10:23:59
★ ★
fegg7502(金币+2,VIP+0):thanks
fegg7502(金币+2,VIP+0):thanks
|
2.6 并行计算能力 我们已经实现不同水平的并行计算:把不同的k点、和给定k点中不同的态相关的工作、与各波函数的系数相关的工作分配在不同的处理器上。当然,还有很大的空间来最优化各水平的并行计算,所以,我们这一部分的目的不是给出加速多少的详细分析,只是给出并行计算下的基本思想。 最有效的并行计算(和通讯有关的大量计算)基于k点的分配,它利用MPI库实现,对两个以上k点的情况(电子结构、确定总能量、响应函数)都适用。它工作在大型并行或SMP机上,或者网络基通讯的机群上。不幸的是,k点数目和原胞尺寸的比值随着原子数目的增加而减小。尽管如此,还有一些情况是工作量和k点数目都比较大(例如金属、响应函数下小单元的性质)。下面我们举几个例子,在有25个处理器的SGI Origin 2000(处理器是R12k,300MHz)上,可以得到比一般情况快20倍的速度,而在有25个Intel奔腾III处理器(550MHz),操作系统为Linux的机群上,速度依然是一般运算的15倍以上。 在给定k点内各态相关的工作的扩展中,ABINIT3.0版仅仅实现了在响应函数情况下的扩展。正如k点的分配,它利用MPI库实现,工作在大型并行或SMP机上,以及网络基通讯的机群上。他的缩放比例和系统尺寸的大小是线性关系,并且和k点的反缩放比例反平衡: k点数目和态数目的成绩大约是个常数,对相似的系统用相似的精度处理,它的典型的值在200和1000多之间。对响应函数计算来说,在处理器间通讯的数量方面,态基并行运算只比k点的分配大一点点,然而,ABINIT3.0版中,每个处理器所需的内存不因处理器的增加而减小。 最后,使用OpenMP编译指令,可以在SMP机的处理器上分配和波函数的系数有关的工作。 利用这一技术,FFT算法和对波函数的非局域算符的应用已经可以并行运算,然而,这个应用是三个并行运算中最新的,效率还不是太高,一个典型的速度是在四个处理器上并行计算时,速度是在一个处理器上运算的2倍。有意思的是,MPIO和penMP并行计算可以同时使用。 2.7 应用程序 应有程序MERGE和IFC时用来分析数据库的,这些数据库是ABINIT程序产生的总能量对原子位移的微分数据库和ABINIT程序产生的同类电子场数据库。数据库还包括动力学矩阵、波恩有效电荷以及电子介电张量。MERGE时用来进行数据库处理的,而IFC时进行数据库分析的。 根据参考文献[74],IFC分析数据的功能如下: (1) 基于波恩有效电荷张量和电子介电张量,建立原子间力常数,包括其渐进行为。 (2) 通过数据库提供的动力学矩阵的傅立叶插值,在布里渊区中的任意点建立动力学矩阵,从而建立相应的本征矢和本征值,其中本征值形成声子带结构。 (3) 建立在零波矢时绳子的对称特征。 (4) 在准谐波近似的情况下,通过在布里渊区中对声子自由度积分,用波松-爱因斯坦占有因子建立热力学性质(如自由能、热容和熵)。 (5) 频率低于电子隙的情况下,建立频率依赖介电张量。 应用程序CUT3D用来分析ABINIT程序产生的实空间三位密度或势文件。特别是在一个与三维原胞相交的二位平面上顺着某一直线或在任意一个点,它都能添加已知的密度或势到一个三维任意地卡尔体积中去。另外,它还能使原来非格式化的的密度或势文件格式化,以便作为图形文件MATLAB[75]和MOLEKEL[76]的输入文件。 |
3楼2008-12-03 10:25:55
★ ★
fegg7502(金币+2,VIP+0):thanks
fegg7502(金币+2,VIP+0):thanks
|
3 软件开发的组织 就像在前言中提到的一样,ABINIT软件工程依靠一大批开发者,他们属于不同的国际开发组。为了协调这种软件工的开发,计算机科学家开发了软件工程技术,其中有些软件工程技术包括辅助软件,一般在GNU一般公共协议些可以得到,另外一些软件工程技术是引导开发者工作的一些思想。在这些软件工程技术中,有一部分已经在ABINIT中采用,我们将在这一部分叙述,另外一些还没有使用,这将在讨论部分中叙述。 3.1 软件共享:GNU一般公共协议 GNU组织提出了重要的自由软件思想:软件的版权属于开发者,但是软件在一个协议下发布,这个协议保证用户有权利得到源代码、更改源代码、甚至有权利重新发布软件。这一思想在一个法律文件中进行了详尽的阐述,这一文件可以在GNU网站[19]得到。所谓的GNU一般公共协议已在现在所能得到的绝大部分自由软件中使用。 我们已经选择在这个协议下发布ABINIT,其软件包中源文件和文档文件的版权属于其作者和发布协议。通过这种方法,开发者保留他们努力得到的知识,同时允许别人在未来的版本中改进他们的工作,用户也有权得到源代码,并且可以在调试方面做出自己的贡献。 3.2 自动测试 开发者修改工作可能引入错误,这个在代码开发中的问题源在一个大的开发作加入时变得更为严重:大部分开发者仅仅知道代码中有限的部分,同时开发者小心的水平也是千差万别。为了避免这一缺点,引入了自我测试。 在一个完整的ABINIT软件包中包括200多个测试,每个测试的测试环境包括一个输入文件、赝势以及为运行测试批和自动分析他们的结果所需的脚本。对ABINIT的每一个功能都存在一个或多个测试,这些测试都在软件实现时建立。在个人电脑(CPU为800MHz的奔腾III)上运行时,每个测试一般情况运行几十秒。 自动测试环境的最终目的是当一切正常时,程序返回一个正值(一个字节),否则返回适当的失败分析(当然超过一个字节)。在ABINIT3.0版中测试是多水平的: (1) 第一个脚本叫fldiff(浮点差别),它写在PERL中,它用来计算结果文件和参考文件的差别, 是用这种方法,由于不同平台和计算机的果有差别引起的浮点错误在一定范围内将会被忽略。这个工具要求结果文件和参考文件要十分相似,也就是只存在浮点方面的差别。测试成功的话,只有几行文字写到概要文件中去,集中了自动测试批的测试结果。 (2) 当有不可忽略的差别时,unix命令diff的结果将会自动得到,它允许对更复杂复杂差别进行简单测试。 (3) 每次ABINIT运行,都有一个详细的log文件,其中列出了运行的错误、警告、注释信息。 当要是他们的开发生效时,每个对ABINIT工作的贡献者都要求建立一个测试,修改的原文件、测试用到的输入文件和参考文件都将在包含在下一个版本中。开发者把参考文件送给负责官方版本的人也是必要的,这样能够确保软件的新功能确实是安全的。 最后,还有一小部分测试不是用来测试软件功能的,而是用来标定软件速度的,他们比较不同版本的需要大量CPU的程序, 并允许用户比较不同机器的速度。 3.3 可移植性 ABINIT3.0版安装在了一下平台: (1) 使用Linux操作系统,编译器(波兰特集团公司)或富士通编译器,奔腾、奔腾II、奔腾III处理器的个人电脑。 (2) 使用Windows 98或NT操作系统,PGI工作站程序组,英特尔486或奔腾II处理器的个人电脑。 (3) 基于阿尔法处理器(EV56,EV6或EV678),使用操作系统固件的康柏计算机。 (4) 基于阿尔法处理器(EV56),使用Linux操作系统的康柏计算机。 (5) 基于Power2和Power3+处理器(型号590,3终端,夜鹰级)的IBM RS6000计算机。 (6) 基于R1000处理器的SGI Origin2000计算机。 (7) CRAY T3E 计算机。 (8) 富士通VPP700计算机。 (9) 太阳公司ultraspare II计算机。 (10) NEC SX4和SX5计算机。 (11) 日立SR8000计算机. (12) 苹果公司的麦金托什机。 对平台(1)到(7)来说,主代码的最优化非常高级,对其它平台来说,主代码的最优化可能更好。开发者开发了用于大部分平台的二进制代码,这些都能在ABINIT网站上得到。 由于cpp指令,以及MAKE文件和各种脚本的使用,ABINIT已经可以成功的安装在很多平台上。ABINIT援文件的唯一集是在编译时匆忙的预处理的,它产生时间依赖代码,结果,ABINIT可以在UNIX型、Windows型以及Macos型的操作系统下工作。 对ABINIT安装的每一个平台,一个包括编译器名、选项和为预处理而选择的信息的机器依赖文件必须准备(大约15行)。这个机器依赖文件对ABINIT的版本依赖很小,一旦这个文件安装在一个平台上,进一步安装在相同的平台上就十分相似了。 相同的软件技术用来维持ABINIT串行和并行版,他们都通过源文件特别集的预处理产生。 ABINIT MPI版已经在SMP结点的集群上测试和工作,机群由上面提到的计算机组成(太阳公司ultraspare II计算机除外),工作环境为UNIX型操作系统。ABINIT的OpenMP版已经在下列SMP计算机上测试,这些计算机包括:SGI Origin2000计算机、44个Power3+处理器的IBM RS6000计算机(每个节点四个处理器)、以及康柏/数据设备公司的ES40 EV67计算机(每个节点四个处理器)。 |
4楼2008-12-03 10:26:25
★ ★
fegg7502(金币+2,VIP+0):thanks
fegg7502(金币+2,VIP+0):thanks
|
3.4 自动测试的可移植性 可移植性和自动测试的相互影响带来很有意思的问题。就像在3.2部分提到的一样,结果的分析包括和参考文件的比较,参考文件时曾旭在一个特定的平台上运行产生的,虽然fldiff能够把浮点运算结果放在一个能忍受的水平(如果来个浮点数的差小于10e-12,它就认为这两个数相等),这已经足够消除大部分因平台改变带来的误差,但是在设计测试输出结果方面,还需要额外的注意是,否则,大部分测试情况的结果都会包含大量的平台以来部分,这很不适合自动测试。 产生大量的数字差别的第一种情况是由于矩阵的对角化。本征值是简并的,则相应的本征矢可以在得到的矢量字空间中任意取值,即使是非简并的情况,波矢的位相也是没定义的。大部分的计算量()不依赖矢量和位相的特定选择,然而,不是总是这样。确实,下面是我们所感兴趣的: (1) 通过动力学矩阵对角化产生的输出结果和原子本征位移的可视化。 (2) 从不同的空间几何,通常是有更高对称性的空间几何产生的波函数来初始化电子波函数(为了能很好的收敛)。 这两种情况,由于相和矢量相等的线性组合的选择,排除任何合理的简单自动分析,输出文件的具体部分可能完全不同。 ABINIT3.0版用两个方法解决这一问题,第一(程序fxphas.f)通过最大化他们的平方和,来固定本征矢的位相,然后选择第一个非零元素的符号为正;第二(程序phfeq3.f和mkkin.f),通过在每1.0e12部分区一个部分的水平,来稍微改变动力学和动能矩阵的对称性。 移植问题的第二种情况由算法本身的不稳定产生。例如,基于Broden算法的原子间距离的最优化包括海赛形式的矩阵的时间反演,如果从一个分子的两个原子间开始最优化,而且在这个区域中,原子间势的二阶微分几乎为零的话,很小的平台依赖差别将会被放大,以至浮点结果不能满足所需的要求。 在ABINIT3.0版中,这个问题是通过下面方法解决的:首先尽量避免在这些区域中进行测试,如果确实不能避免,就要让这一算法在一两个循环之后,在结果在不同的机器上还没发散之前就停下来。 移植问题的第三种情况是由于实数的分类问题产生的。假设在一个大部分数不相等的列表中,有两个数是相等的,如果这种情况不小心的处理,分类算法将会对他们进行对称分类,但是这将因平台的不同而改变。在ABINIT3.0版中,遇到的这些问题的物理实现如下: (1) 以原子间距离为顺序,产生相应原子的近邻列表(对称性经常在相同的距离处给出原子),如程序bonds.f 和rsiaf9.f。 (2) 以k点的量级为顺序,产生相应k点的列表(为了有效的填满不可简约的布里渊区),如程序listk.f。 (3) 为了打印,找到密度的最大最小点,如程序prtrhomxmn.f。 为了纠正这一问题,采取的措施是在一定差别允许范围内,让算法知道这两个数是相等的,同时保留着两个数字原有列表(分类前的列表)的顺序。 可移植性中的第四个问题和物理意义没有直接的关系,假如一些浮点数必须打印,如果截断精度小于自动分析工具所允许的值(如使用f8.2的FORTRAN输出格式),由于数字和轴离的太近,舍入情况在不同的机器上也不同。 要解决这一问题,必须在打印数字之前,使用应用机器独立的截断函数,然而这还没在ABINIT3.0版中应用。 即使这四个问题都解决了,还有一些测试情况,它的结果文件和参考文件中的浮点数差别超过所选的容许范围,这些测试情况通常包括响应函数计算,这是由于初始的基态计算有点缺少可移植性,而这少量可移植性的缺乏又在随后的响应函数计算中被放大,这样在基态计算中可以忽略的部分由于在反应函数中被放大而不能忽略。得到了缺乏可移植性的观测结果不等于程序中有错误,然而,有关输出文件中不同部分的意义的知识还是必需的,以此来验证程序是否出现了反常情况。 尽管还存在缺乏可移植性的部分,但是使用自动测试工具,对测试的完全集进行的概要的检查也就至多需要2到3分钟。 |
5楼2008-12-03 10:26:47
★ ★
fegg7502(金币+2,VIP+0):thanks
fegg7502(金币+2,VIP+0):thanks
|
3.5 个人文档 当人们说起大型科学的代码(如ABINIT)时,个人文档的软件思想就经常被提到。我们应该注意,为了使开发者不需对软件包有详尽的了解就能维持这些程序,和一个程序有关的文档应该定位在这个程序,或者通过一个链接定位到这个程序。这一思想在“有文化的程序设计”中实现[83]。个人文档工具允许开发者不需保持两个独立的文档就能够利用源代码编写程序文档。用户能用自动的方法掌握代码的整个结构,所有文档都有本地文档产生。在一些局部,必须使用一些标签来引导自动工具。 自动工具能产生有超级链接的HTML文件,例如每个程序的页眉都显示在屏幕上,包括他功能的描述、调用他的程序(父程序)的名字以及他所调用的程序(子程序)的名字。所有程序的目录和搜索工具都能够建立。很多其他功能,例如数学方程的自动格式化也能够建立。为了系统地实现上述功能,开发者必须为他们的注释使用并坚持使用一个标准的格式。由于这经常被看作是额外的负担,在这方面所作的工作应尽量少。 在ABINIT3.0版中,各种辅助程序用来实现这一思想。 这些程序中的第一个程序是ROBODoc[90],它是个文档工具,用来从源文件中提取特别格式的的注释页眉。他自动地从原文本中为每个程序产生HTML文档文件,还包括连接其它程序的超级链接。ROBODoc能在很多语言环境下工作,包括Fortran90。ABINIT的开发者必须为每一个函数建立标准的页眉,包括包括函数或称序所有的信息,这样ROBODoc为变量、类程、函数等建立索引表。 然而,ROBODoc不提供父子程序的自动列表,虽然如果提供了这个的列表,把它们连接起来的超级链接将由ROBODoc自动建立。一个叫“父页面”的PERL脚本已经设计,它可以用来在ROBODoc处理之前自动地在每个程序之前插入父程序。 数学方程是ROBODoc遇的的另外一个问题,这个问题主要是通过用免费软件scr2tex[91]来解决的,这个软件能从子程序的原文件中产生有很好格式方程的LATEX文件。每个程序中插入LATEX风格的方程格式是ABINIT格式的一部分。在scr2tex中使用的格式可以同时在ROBODoc中使用。 在ABINIT3.0版中,源代码是从ROBODoc和scr2tex出发来确定格式的,以便HTML和LATEX文件可以分别作为在线和离线文档。由于例如TtH的转变,在未来的版本中,将写一些像HTML文件一样易于获得的LATEX格式的文档。 3.6 用户自学 ABINIT3.0版中另一个有意义的方面涉及到不需要联系开发者或到学校去学习就可以学会怎么使用他们。为了这个目的,开发者建立了自学教程,教程是HTML格式的,共有5课,每课2小时(包括在一个CPU为800MHz的奔腾III的个人电脑上计算的时间),用来引导学生入门。 其中教程的前两课是为了使学生熟悉是用各种算法和交换相关函数,来计算氢原子的格式化的总能量、电子结构和最优化原子间距离。第三课通过一个绝缘体的范例—硅的电子结构的计算,来介绍固态思想。第四课集中介绍金属铝以及其表面能的计算。第五课介绍绝缘体AlAs的动力学性质和介电性质,包括伽玛点的声子、介电常数、波恩有效电荷、LO-TO分裂以及整个布里渊区中的声子。 在线手册和帮助文件的有效性,以及自动测试中输入文件的有效性使ABINIT基本使用方法的介绍更完备,在线手册和帮助文件包括了所有输入变量的详细描述,而自动测试中的输入文件给出了ABINIT所有功能具体适用的例子。 我们已经尽量简化了ABINIT的使用,其中输入文件的组织依赖于两个文件,第一个文件是“files”型的软件,用户在这个文件中给出了输入文件和输出文件,以及所使用的赝势。这个文件很短,一般6到7行。在另外一个输入文件中,用户具体给出了那些默认值将不考虑的所有变量的值,这个文件由ABINIT解释执行,解释执行前ABINIT检查其中使用的输入变量的关键字。ABINIT中有150多个输入变量,但是在这个文件中要记住的不超过20个。元字符允许个输入变量集在一个单独的文件中具体指出,甚至为了基于以前计算的结果初始化计算,而允许在同一个计算中把各个输入变量链接起来。 3.7合作协议 自由软件、自我测试、个人文档和用户自学的思想的思想对国际合作开发来说重要性是明显的。组织同步工作也是值得的。 在单独开发组的水平,我们鼓励使用软件CVS[94]来开发ABINIT,然而,所有开发者都必须能得到CVS库,因为这个软件同步开发工作。另为,开发者之间的协商也是需要的。SoureForge[95]网站允许在一个很大的范围内交换CVS思想,在不同的组,来自不同的国家的开发者能够得到相同的库。我们从2000年13月开始试者使用SoureForge库,但是,对ABINIT规模的软件,通向它的速度太慢了。因此,我们从1997年开始一直坚持的合作开发协议还一直有效。 我们工作在一个反复的分散—集中模型中:反复的第一步是官方本版在ABINIT网站上发布,一段时间后,来自不同组的非交迭、持续开发工程列表将建立并公布;每个开发组在ABINIT已经暂时加上去的部分程序上共作2到3个月,然后把各个开发组的贡献(资源的改变部分和测试情况)汇集到一块,再用两三个周把各个贡献融合到一块,在新的官方版本发布前,软件还要至少在5个平台上测试和连接。 最后,我们谈一下ABINIT的代码风格。为了使代码风格相同,我们在“代码规则”文档中明确地写出了每个开发组都要遵守的规则。这个文件在软件包中可以找到,并且经常更新。它的建了基于在过去几年来的开发中获得经验(包括在不同平台间移植的经验),以及为了避免程序出现各种错误。例如在所有FORTRAN程序中,要求使用“含蓄的不”。 “代码规则”包括:需要遵守的变量说明风格、变量名的选择风格、FORTRAN援文件格式的风格(特别地,格式必须能够用ROBODoc处理)、数据流控制的结构、数组的使用风格、一些好的代码实例、具体的例外处理方面的代码规则、一些旧的应该避免的代码风格的实例、BLAS和LAPACK子程序的使用、以及当今反射出来的一些主题。 4 讨论和ABINIT工程的特定相比较,很多还要在3.0版的基础上去做。我们现在首先描述现在已经实现的功能,然后描述还缺少的功能,最后叙述现在已经部分使用或还没使用的软件工程思想。现在,对本软件做出贡献的开发组已不限于作者所列出的。可以通过网站[20],来更详细地了解本软件共输出的状态。 下面是和雄心勃勃的软件工程相关的部分: (1) Blochl[13]的投影放大波技术和超软赝势[10]的使用。 (2) 包含基态代码的界面ABINIT. (3) 非线性磁化情况下旋量波函数(包括自旋轨道)的处理。 (4) 现在,在所用情况下,响应函数计算的结果都可以为基态计算所利用。 (5) 手工处理并行运算,以及现在实现的并行运算的最优化,特别是不同水平的并行运算的同时运用。 下面是我们的开发工作所涉及到的部分: (1) 实空间群数目的识别。 (2) 密度泛函微扰理论中的2n+1定则[71]。 (3) Kohn-sham精确交换。 (4) Shubnikov(反铁磁)对陈群。 (5) 表面偶极子的处理。 (6) 频率依赖传导。 (7) 和极化Berry相计算有关的高级特色功能[97]。 (8) 晶格Wannier函数的自动产生。 下面是需要做但是还没给出具体做的时间的部分: (1) 非局域算符的实空间处理[97]。 (2) 态密度在原子轨道分量上的分解。 (3) 对弹性和炼金术微扰得相应。 (4) 几何形状最优化的新方法和转变态的计算。 在软件工程水平下,首先是持续的努力来处理个人文档中的方程。然后得到应该使用的数据类型(在ABINIT3.0版中很少出现)。FORTRAN90面向对象的特色功能也没在ABINIT3.0版中使用:ORTRAN90面向对象的特色功能虽然没有C++的发达,但是也应该应用。F900面向对象的特色功能方面的局限也必定带来现在的ABINIT基本操作的局限:由于历史的原因(已存在代码的再利用),我们建立的是F90代码。作为另一个可选的语言C++,现在很多开放源代码的工程同时使用Python脚本语言和其它语言来计算任务(一般是C语言,但是为什么不是F90呢)。我们仍然这样认为,我们工程的基本选项应该使它在很多年中一直是可行的和成功的。 我们感觉ABINIT工程是成功的,从工程的开始算起,我们在相对较短的时间能建立了大量的功能。合作的组织使很多人都可以对这个软件工程做出贡献。我们实际上一直根据计算机科学通讯中Linux的开发[98]的例子来开发本软件。 和本文不集中在实际地使用ABINIT来得到有用的计算结果对比,本工程的目的是使用从头计算的方法为与预测材料性能建立可靠的、艺术态的计算程序。在这一思想的指导下,网站[20]上列出了70多篇已发表的文献,来显示其广泛的应有范围,以及迄今为止已使用本代码的了个人和团体。有用输出量的增加是我们成功的基本量度. 5 致谢 我们首先感谢ABINTI的顾问委员会,包括本文的作者和不是本文的作者的:N.Hill,K.Rabe,和D.Teter.我们还要感谢对本软件工程、ABINIT3.0版及以后的版本做出贡献者以及给我们提出建议和热情的支持的人们,包括:A.Alouges,S.Bernard,J.-.Charlier, .Deutsh, S.Erwin, A.Filipetti, R.Godby, S.Goedecker, A.Horsfield, A.Khein,D.D.Klug, C.Lee, Z.Levine, B.Magne,H.Matthis, J.-.Minet, V.Olevano, G,IbudamA.Quandt, Na.Sai,M.Stengel,J.Sullivan,P.Tepesch,P.Thibaudeau,J.Tse,D.Vanderbilt,B.Van Renterghem , M.Veithen,A.Zaitsev.We(X.G.,J.-Y.R.,和G.-M.R.),感谢国家科学研究基金(比利时)在财政和计算资源方面(FRFC工程,NB2.4556.99)的支持.我们还要感谢“pole d’attraction interuniversitaire”(阶段五,比利时联邦政府)和“Action de recherche concerte-interaction electron-vibration dans les nanostructures”的财政支持。 |
6楼2008-12-03 10:27:00
7楼2008-12-04 21:59:48
8楼2008-12-10 17:32:31
9楼2008-12-13 21:34:45
10楼2009-04-29 16:44:14
11楼2009-04-29 21:27:30
13楼2009-07-16 21:57:30
15楼2009-07-17 08:25:20
16楼2009-07-18 00:56:47
17楼2009-07-19 20:47:25
简单回复
NKDMS12楼
2009-04-30 01:45
回复

wuchenwf14楼
2009-07-16 22:54
回复
xujiajing18楼
2009-07-27 14:42
回复















回复此楼

