24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2344  |  回复: 4

liqizuiyang

木虫 (著名写手)

[交流] 有关编程语言的选择已有4人参与

刚打完一大段回复结果被告知含有敏感词,瞬间被吞,连个修改的机会都不改。木虫的系统还需要改善啊。

有关于与solarman的讨论,再加上数年来混迹于各语言相关论坛,对科研人员学习哪种语言更好有些感慨,写在此处,还望众虫友多指点。

在长篇大论之前,先罗列下基本出发点。这就好比构建一套数学理论,先要阐述定义和公理。

一、人精力有限,分配到细枝末节上的越多,拿来做正事的就越少;
二、凡是能犯错误的地方,肯定会有人犯错误(好象是《编程匠艺》里的一句话);

整个科研流程中涉及计算的环节主要有搭建模型,编写输入文件,提交任务和数据处理三步。

现在的建模软件,比如MS导出的格式与计算用程序输入文件的格式,比如VASP的POSCAR,之间存在一些差别,也就是说要转换之后才能用。像VASP还有VESTA可用,而其它的程序就要自己手动转换,至少要手动提取原子坐标,有时还要计算原胞基矢。这些事由人来做很是劳心费力,并且重复做一件事很容易让人厌烦。写脚本来完成这项任务是一个不错的选择。这项任务的特点是计算量微乎其微,但是问题比较刁钻,逻辑结构很复杂,涉及字符串、整数、浮点数等多种数据类型。这种情况下适合用python/perl一类的脚本程序。计算量很小,因此不需要考虑执行速度。又因为文件长度因文件而异,需要灵活处理。同时需要内置对字符串强大支持。用C之类的编译型语言不合适,首先变量必须先声明,而忘记声明这种事时常发生,因此处理"undefined identifier"这样的低级错误就会浪费不少精力。而且每个文件长度不固定,用python一个readlines()函数就能搞定任务,用C就要更多的代码,可能还会用到指针这种危险的东西。

编写输入文件,一般以某个模板为基础,再根据计算需求作相应修改。相信各位做过大量计算的虫友都有自己的一套模板。实际操作过程一般是先新建文件夹,再切换到模板所在文件夹,复制,粘贴,再用UltraEdit之类的文本编辑器修改。用TotalCommander这样的软件会提高一部分效率,但直接用类Unix系统效率更高,可以在同一行命令上完成需要点好多下鼠标切换好多个窗口才能完成的任务。如果需要经常重复某项操作,比如复制某个目录下面某几个文件,还可以写成函数或这脚本。因此这一步操作不需要编程,当然会shell script更好

提交任务这一环节就不细说了,shell script的主场。

数据处理是最需要编程的地方,归纳起来,大概有这么几种:

一、待处理文件有固定的格式,计算量很大,比如读取不同的CHGCAR计算差分电荷密度,或者求静电势在某个晶面上的均值。因为计算量比较大,因此首选编译型语言,又因为这种数据多以三维数组形式给出,且数组大小与动能截断、晶格常数有关,因此需要用到在运行时才能知道其大小的数组。如果问题更复杂,可能需要一个输入文件指定输入参数。这种情况下Fortran是首选,因为天生支持动态数组和有名参数列表,会节省很多宝贵的时间。如果C++ STL学得好,也可以用C++。更进一步,如果指针玩得好,可以保证无内存泄漏,同时对字符串处理函数很熟,可以从输入文件中灵活抽取不同类型变量的值,也可以用C。

二、同上一种,计算量较小,比如结合OUTCAR和EIGENVAL将能带数据转换成更易于作图的格式。这种任务复杂程度比上一种高,因此需要更为灵活的语言。同时计算量相对较小,效率已经不是首要因素。这种情况下最好用python/perl脚本,也可以用编译型语言。

三、提取某个物理量的值,把从多少行到多少行数据的某几列相加或者相减,对某几行排序等。这种情况下最好用awk, grep, sort等工具和管道,经常使用的复杂命令可以写成shell script。UNIX家族发展了几十年,很多实际需求前人早已经想到了。实在找不到相应的工具,可以用python/perl编写。

综上所述,个人认为:
1. shell script必学;
2. python/perl推荐学;
3. Fortran用时再学;

以上针对一般人。大牛即使用汇编也能随心所欲,完成各种任务。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月下叹逍遥

银虫 (初入文坛)


小木虫: 金币+0.5, 给个红包,谢谢回帖
建模有openbabel,各种格式相互转化
python最好是会,作图、处理数据都挺方便的,像ATK就是用py做输入脚本
fortran,一般用不到。。。学了对编程也没什么作用
2楼2014-10-20 14:37:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shi398914439

木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
初级菜鸟,顶礼膜拜
3楼2014-10-20 18:44:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

stractor

金虫 (著名写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
支持,做计算程序语言非常重要。
shell script+FOTRAN或者shell script+C++
4楼2014-10-21 11:53:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hopedream

银虫 (著名写手)

5楼2016-03-06 17:10:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 liqizuiyang 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见