Thursday, June 20, 2013

编程风格问题-变量命名原则-转载

1. 匈牙利命名法
该方法最先由一位名叫 “Charles Simonyi” 的微软程序员提出。
匈牙利命名法的主要规范为,通过在变量名之前增加小写字母的符号前缀,以标识变量的属性、类型、作用域等参数。简单地说,即“变量名=属性+类型+对象描述”的形式。
示例:m_lpszStr,表示指向以 0 字符结尾的字符串的长指针成员变量。
2. 骆驼命名法
骆驼命令法,也叫驼峰式大小写。其主要规范为,混合使用大小写字母来构造变量名或函数名。即 “documentFormatType” 的命名形式。
示例:printEmployeePaychecks(),如代码所示,函数的每一个逻辑断点均用大写字母标识。
与此类似,普通的下划线法为:print_employee_paychecks(),逻辑断点使用下划线 “-” 而非字母大写化。
骆驼式命名法是较为流行的书写方式,具有简洁,阅读性强的特点。芒果在编写 PHP 时,一般也采用骆驼命名法。
3. 帕斯卡命名法
与骆驼命名法类似,骆驼命名法是首字母小写,而帕斯卡命名法则需要首字母大写。源自 Pascal 语言的命名惯例,也称为大驼峰式命名法。
示例:LoginCheck(),string UserName,二者都采用帕斯卡命名法。
当然,规范仅仅是规范,并不需要硬性遵守。但在团队开发中,一致的命名法则对软件的整体风格统一和功能实现,都是有帮助的。

Friday, June 7, 2013

cpmd and CP2K 的一些比较 转载

by ChemiAndy

首先看相同点,它们都是以第一原理(DFT)计算为主的模拟软件。

CPMD是单纯的基于平面波的DFT+赝势方法。这种平面波基組的DFT与gauss软件中那种计算气相孤立分子的、以原子核为中心的球形电子轨道基函数 不同,平面波函数是在整个周期盒子空间扩展的,它不属于任何具体的原子。这种平面波特别适合处理周期性固体体系。类似的平面波DFT计算软件很多,像 VASP, Castep, ABINIT, Quantum-espresso等等。CPMD的一大特色是支持Car-Pariinello MD分子动力学,这也是它名称的由来。Car-Parinello的核心思想是把电子波函数作为动力学变量,文献中称on the fly,即电子随着原子核运动在飞。

平面波的缺点是难以有效处理内层电子,因为内层电子的节面多,需要很多平面波来处理,大大增加计算量,所以一般要用赝势,然而赝势并不总是很好。对于需要 考虑所有电子的情况(个别材料的电、磁、极化等性质),我们不能使用赝势,怎么办呢?cp2k提出了使用gauss基函数处理内层电子,用平面波基函数来 处理外层电子的GPW方法。这是与CPMD的最大不同。

对于分子动力学模拟的支持也有所不同。cp2k也支持分子动力学,但是不能做CPMD,它只支持BOMD,这种MD不让电子飞,而是每一步去优化整个波函 数来计算原子核受力,这叫沿着着绝热面演进,而CPMD是靠近绝热面飞翔。当然了,CPMD也支持BOMD,因为BOMD很简单每步都做SCF就行了。

此外,设计思路不同。cp2k一开始就被设计为支持从QM, MM到QM/MM,从MD到MC,从DFT到从头算等各种模拟计算方法的平台。包含若干模块。而CPMD的功能相对单一,不支持从头算,QM/MM也需要额外的软件和界面。