24小时热门版块排行榜    

查看: 2621  |  回复: 18

liqizuiyang

木虫 (著名写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
为何不用fortran而用C++?学习成本?

科学计算偏数学,程序结构并不像其它软件那样复杂。C++好些高级特性可能用不上,而对数学表达式支持不佳的特点却很掣肘。
11楼2014-03-28 17:42:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wopyhj

新虫 (初入文坛)

引用回帖:
11楼: Originally posted by liqizuiyang at 2014-03-28 17:42:39
为何不用fortran而用C++?学习成本?

科学计算偏数学,程序结构并不像其它软件那样复杂。C++好些高级特性可能用不上,而对数学表达式支持不佳的特点却很掣肘。

因为在计算机方面,很多理论性的书籍是用c或者c++来描述的,很少有fortan的;而且西方目前计算软件的开发趋势是朝着C++或者其他面向对象的语言发展,出于可扩展性和可维护性的考虑吧。
计算软件架构师;计算软件开发工程师;c/c++; Linux;第一性原理;分子动力学
12楼2014-03-29 18:19:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wopyhj

新虫 (初入文坛)

引用回帖:
11楼: Originally posted by liqizuiyang at 2014-03-28 17:42:39
为何不用fortran而用C++?学习成本?

科学计算偏数学,程序结构并不像其它软件那样复杂。C++好些高级特性可能用不上,而对数学表达式支持不佳的特点却很掣肘。

From google: From my 15 years of thinking about scientific software: If your code runs 25% faster because you write it in Fortran, but it takes you 4 times as long to write it (no STL, difficulty implementing complex data structures, etc), then Fortran only wins if you spend a significant fraction of your day twiddling thumbs and waiting for your computations to finish. Given that for almost all of us the most valuable thing is our own time, the conclusion is this: use the language that allows you to develop, debug and test your code the fastest, within reason ignoring that it may be slower than maybe possible if you wrote it in Fortran.
计算软件架构师;计算软件开发工程师;c/c++; Linux;第一性原理;分子动力学
13楼2014-03-29 19:00:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

liqizuiyang

木虫 (著名写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
引用回帖:
13楼: Originally posted by wopyhj at 2014-03-29 19:00:05
From google: From my 15 years of thinking about scientific software: If your code runs 25% faster because you write it in Fortran, but it takes you 4 times as long to write it (no STL, difficulty im ...

程序运行快慢和编译器优化能力有关。若说到和语言的关系,fortran语法简单,可能更利于编译器优化。

有关用fortran开发时间长短的,楼主可以试下用C++写下这个例子:

科学计算涉及设定参数默认值及从输入文件中读取设定的值。设某程序运行共需要bar_1到bar_7 7个参数,这7个参数中,bar_1到bar_3为整型,bar_4到bar_5为浮点型,bar_6和bar_7为字符串。编写一程序,要求在程序开始为bar_1 - bar_10设定好默认值,然后读取input.in,若input.in中给出了某参数的设定值,则读取设定值;否则保持默认值。input.in中各参数可以以任意次序排列。

这个程序用fortran的namelist机制非常简单,不借助第三方库就能实现。

有关fortran自定义数据类型和面向对象设计的,可以看下Stephen J. Chapman编写的《Fortran 95/2003程序设计》(中国电力出版社)。

C/C++是通用型语言,而Fortran是专为科学计算设计的,有许多针对科学计算问题的特性。C语言问世于上世纪七十年代初,而许多晚于它的第一性原理程序却仍以Fortran编写,比如80年代末的VASP,2000年的abinit和2003年的pwscf。

当然,大的软件项目不同于百十行的小程序。既然决定了用C++,肯定有充分的原因。鄙人在这里班门弄斧了。
14楼2014-03-29 20:34:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chuanghua304

禁虫 (职业作家)


小木虫: 金币+0.5, 给个红包,谢谢回帖
送红花一朵
本帖内容被屏蔽

15楼2014-03-30 09:16:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chuanghua304

禁虫 (职业作家)


小木虫: 金币+0.5, 给个红包,谢谢回帖
本帖内容被屏蔽

16楼2014-03-30 09:19:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wopyhj

新虫 (初入文坛)

引用回帖:
14楼: Originally posted by liqizuiyang at 2014-03-29 20:34:44
程序运行快慢和编译器优化能力有关。若说到和语言的关系,fortran语法简单,可能更利于编译器优化。

有关用fortran开发时间长短的,楼主可以试下用C++写下这个例子:

科学计算涉及设定参数默认值及从输入文件 ...

这么多的参数传递在c++中一般是不需要的,传来传去传晕了。我之前用c,也用过vb,也用过matlab,总的来说面向过程的语言传递参数很麻烦,但面向对象很少在函数中传递参数。如果说单纯为了提高效率,我直接写内嵌汇编就行。在《intel微处理器》一书中提到,当处理器速度达到峰值的时候,汇编就显得尤为重要了。作为资深的处理器方面的专家,他这句话我想应该是有道理的。但我们主要采用c++来写,就是为了不把自己限制在数值计算软件领域......
计算软件架构师;计算软件开发工程师;c/c++; Linux;第一性原理;分子动力学
17楼2014-03-30 11:08:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dyc_2008

捐助贵宾 (著名写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
引用回帖:
9楼: Originally posted by wopyhj at 2014-03-28 15:46:48
不关心物理方面的问题,只关心软件工程方面,利用已知的东西把它工程化,不搞研究。...

也就是说
我们依然要使用VASP或者其他厂商提供的偃势文件,对吧
一布福田,二修菩提
18楼2014-03-31 10:18:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wopyhj

新虫 (初入文坛)

引用回帖:
18楼: Originally posted by dyc_2008 at 2014-03-31 10:18:22
也就是说
我们依然要使用VASP或者其他厂商提供的偃势文件,对吧...

使用已知的赝势。
计算软件架构师;计算软件开发工程师;c/c++; Linux;第一性原理;分子动力学
19楼2014-03-31 20:36:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wopyhj 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见