Fortran Coder

查看: 19222|回复: 17
打印 上一主题 下一主题

[混编] Fortran和C/C++混编

[复制链接]

30

帖子

8

主题

0

精华

熟手

F 币
212 元
贡献
104 点
跳转到指定楼层
楼主
发表于 2016-1-12 23:09:03 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
从来没有做过混编,求助如何进行Fortran和C/C++的混编!

具体情况是这样的:

目前我们有个规模比较大的程序,是用fortran 90/95写的,大概有三四百个子程序。由于工作要求以及后续的平台规划,需要逐步将原先的fortran代码转化为c/c++代码。考虑到原始程序规模比较大,一次性改写所有子程序不太现实,目前打算逐个子程序进行修改测试。这样的话就涉及到混编的问题。

我们使用的是VS2010+IVF2011,不知道具体该怎么做?比如:整个改写过程是用c调用fortran还是fortran调用c?具体怎么调用?需要建立两个项目(分别是c和fortran)还是将所有代码建立在一个项目中?编译器、链接器如何设置?还有就是我想到个感觉比较麻烦的事情就是原来fortran代码里面的common变量不知道如何处理?

最后就是转化成c还是c++?原来的程序中没有面向对象的东西,那转化成c还是c++好一些?目前这个计算程序的界面倒是QT C++写的,不知道是否有影响或者有关系?

还请指导!先谢过!
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩
世界上有 10 种人:懂 10 进制的人,和不懂 10 进制的人。

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

18#
发表于 2016-1-14 08:30:46 | 只看该作者
sharpcoder 发表于 2016-1-13 22:05
我们的代码确实比较长,仅有效行数就超十万了,所以完全重新成本会非常高,混编也有很多不好处理的问题, ...

时代在进步,不能抱残守缺,以前十万行的fortran77代码,用C++重写可能二万行足矣,换成matlab或许5000就行,因为数值计算领域有很多现成饭可以吃

30

帖子

8

主题

0

精华

熟手

F 币
212 元
贡献
104 点
17#
 楼主| 发表于 2016-1-13 22:12:11 | 只看该作者
pasuka 发表于 2016-1-13 17:55
1、fortran代码对编译器的依赖性言真得很低了;
2、一个一个改,搞得不伦不类,只会事倍功半,不如另开一 ...

我们主要是做一些热工水力计算,感觉现在的程序走c/c++的路线还是比较多,而且一些最新的模型库、计算库之类的也很少用fortran了,所以考虑自己的程序还是转c/c++,当然也是趁着现在我们还有开发时间。

github和sourceforge确实不错,我们倒是给忽略了(主要还是公司不能上外网,很悲剧),回头去找找一些现成的东西用用,非常感谢提醒!
世界上有 10 种人:懂 10 进制的人,和不懂 10 进制的人。

30

帖子

8

主题

0

精华

熟手

F 币
212 元
贡献
104 点
16#
 楼主| 发表于 2016-1-13 22:05:39 | 只看该作者
fcode 发表于 2016-1-13 18:30
书上只会讲语法如何规范接口,并不会讲具体的编辑环境的操作。
使用VS的话,Fortran和C要分别位于两个不同 ...

我们的代码确实比较长,仅有效行数就超十万了,所以完全重新成本会非常高,混编也有很多不好处理的问题,看来还是得慎重考虑下怎么弄比较合适。。。
世界上有 10 种人:懂 10 进制的人,和不懂 10 进制的人。

30

帖子

8

主题

0

精华

熟手

F 币
212 元
贡献
104 点
15#
 楼主| 发表于 2016-1-13 22:03:32 | 只看该作者
pasuka 发表于 2016-1-13 17:55
1、fortran代码对编译器的依赖性言真得很低了;
2、一个一个改,搞得不伦不类,只会事倍功半,不如另开一 ...

嗯嗯,明白,确实感觉非常麻烦啊~

其实研究了一天,我的感觉就是用c/c++完全重写可能比改要稳妥一些,毕竟重新设计是个独立的体系。我在考虑是不是说服一下决策层改变方案。。。
世界上有 10 种人:懂 10 进制的人,和不懂 10 进制的人。

2022

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1598 元
贡献
689 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

14#
发表于 2016-1-13 18:30:12 | 只看该作者
书上只会讲语法如何规范接口,并不会讲具体的编辑环境的操作。
使用VS的话,Fortran和C要分别位于两个不同的工程。但可以位于同一个解决方案(当然两个解决方案也可以)

越长的代码,我是越不希望改写。因为改写会有很大的风险,很难确定在各种数据模型的情况下都能得到原来正确的结果。

混编是极好的。fortran 代码改好了,比C/C++更容易维护。

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

13#
发表于 2016-1-13 17:55:33 | 只看该作者
本帖最后由 pasuka 于 2016-1-13 17:56 编辑
sharpcoder 发表于 2016-1-13 15:50
理论上是想完全推倒重来,但是考虑到代码量太大了,所以打算一个一个子程序的改,改完一个测试一个,以免 ...

1、fortran代码对编译器的依赖性言真得很低了;
2、一个一个改,搞得不伦不类,只会事倍功半,不如另开一个C++项目,这边的fortran代码只做维护
熟悉有限元软件的话,abaqus的内核就是下决心用C++重写,ANSYS的mechanical classical内核不变,重心转移到workbench平台,nastran的内核抱着fortran不放,93版的nastran源代码现在github上面就有,也没见几个人去玩,虽然有老外说编译无大问题
github和sf上面科学计算的开源程序,要么C\C++,要么python、matlab,还在坚守fortran的寥寥无几

30

帖子

8

主题

0

精华

熟手

F 币
212 元
贡献
104 点
12#
 楼主| 发表于 2016-1-13 15:58:29 | 只看该作者
pasuka 发表于 2016-1-13 10:33
“之前我们都是把fortran打包成dll或者so文件直接调用”
  -------------都是一个路数,iso c binding就 ...

唉,总之感觉前期技术路线没有规划好,我也是后来才逐渐接手的。

现在要改c/c++,所以打算好好规划一下路线,要不以后会越来越麻烦,后续再修改的代价也会更高了。
世界上有 10 种人:懂 10 进制的人,和不懂 10 进制的人。

30

帖子

8

主题

0

精华

熟手

F 币
212 元
贡献
104 点
11#
 楼主| 发表于 2016-1-13 15:56:40 | 只看该作者
fcode 发表于 2016-1-13 11:03
打包成 dll 或 so 就可以了,我们也是做商业化程序,经常会使用到混编,打包成 dll 是很常见的路数。
包括 ...

我大致看了下modern fortran explained中的第12章,有个问题就是不知道如何建立项目?fortran和c代码都放在一个项目解决方案里面吗?还是说分别建立各自的,先分别编译,然后再一起链接?不知道哪里有具体的实践例子,书里面的感觉主要讲一些偏理论的东西了。
世界上有 10 种人:懂 10 进制的人,和不懂 10 进制的人。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-24 00:13

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表