24小时热门版块排行榜    

查看: 2233  |  回复: 20

1xiaohua1

木虫 (正式写手)

[求助] 请高手指点如何成功运行fun.f90和main.f90

  假如现在有两个Fortran程序fun.f90和main.f90,其中main.f90是主程序,fun.f90是在主程序中调用的子程序,将这两个文件放到一个目录下,如何使用fortran成功编译并运行主程序,获得运算结果?
              (需要在主程序中添加什么语句,以及如何运行和编译主程序,一切都在window系统VS软件下进行)
  
求高手指点,给出详细的操作
回复此楼
活着,就要不停地做事
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

zhg19

金虫 (小有名气)

引用回帖:
4楼: Originally posted by 1xiaohua1 at 2013-11-11 15:06:14
谢谢了,我加了运行不了...

你的那个fun.90里的子程序是按subroutine定义的?
6楼2013-11-11 17:52:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

virtualzx

木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★
1xiaohua1: 金币+4, ★★★★★最佳答案 2013-11-15 09:28:29
1xiaohua1: 金币+1 2013-12-13 22:50:53
引用回帖:
19楼: Originally posted by 1xiaohua1 at 2013-11-14 09:12:30
另一个...

在fun.f90里,把
real,intent(out)::z
改为
real::z
然后在main.f90里,把
real, external :: fun
改为
real, external :: funm
然后再编译就行了。

$ gfortran *.f90 -o test.x
$ ./test.x
   8.00000000
20楼2013-11-15 06:39:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

Carpathia

银虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2013-11-12 01:23:20
1xiaohua1: 金币+2 2013-11-14 16:39:40
1xiaohua1: 金币+1 2013-12-13 22:51:01
前提两个文件都加入project,主程序中要加入interface,指定fun里面的函数,main里面确定要有program入口,然后可以编译了
追求理想的道路上东张西望
2楼2013-11-10 20:47:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhg19

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★
感谢参与,应助指数 +1
1xiaohua1: 金币+1 2013-11-11 15:06:45
jjdg: 金币+1, 感谢参与 2013-11-12 01:23:27
1xiaohua1: 金币+2 2013-11-14 16:39:46
楼主可尝试在主程序末尾添加:
include 'fun.f90'
3楼2013-11-10 23:05:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

1xiaohua1

木虫 (正式写手)

引用回帖:
3楼: Originally posted by zhg19 at 2013-11-10 23:05:33
楼主可尝试在主程序末尾添加:
include 'fun.f90'

谢谢了,我加了运行不了
活着,就要不停地做事
4楼2013-11-11 15:06:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

1xiaohua1

木虫 (正式写手)

引用回帖:
2楼: Originally posted by Carpathia at 2013-11-10 20:47:04
前提两个文件都加入project,主程序中要加入interface,指定fun里面的函数,main里面确定要有program入口,然后可以编译了

你好,你说的我不太明白,能不能给个例子
        main主程序:
                       program  main
                                implicit none
                                real::a=2,b=3
                                  real::c
                                  c=fun(a,b)
                         end   program

              function  fun(x,y)
                                real,intent(in)  ::   x  ,   y
                                  real::z
                                z=x+y
                end function
对这样简单的例子,我该对主程序怎样修改??
活着,就要不停地做事
5楼2013-11-11 15:12:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

totu2013

新虫 (初入文坛)

引用回帖:
6楼: Originally posted by zhg19 at 2013-11-11 17:52:16
你的那个fun.90里的子程序是按subroutine定义的?...

正解。
7楼2013-11-11 22:53:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhg19

金虫 (小有名气)

引用回帖:
7楼: Originally posted by totu2013 at 2013-11-11 22:53:40
正解。...

应该可以啊,不过,没代码,问题不好说。。。
8楼2013-11-11 23:55:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhg19

金虫 (小有名气)

【答案】应助回帖

引用回帖:
5楼: Originally posted by 1xiaohua1 at 2013-11-11 15:12:20
你好,你说的我不太明白,能不能给个例子
        main主程序:
                       program  main
                                implicit none
                                real::a=2,b=3
    ...

貌似fun(a,b)木有返回值啊。。。
9楼2013-11-12 00:03:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

virtualzx

木虫 (著名写手)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
1xiaohua1: 金币+2 2013-11-14 16:40:03
引用回帖:
5楼: Originally posted by 1xiaohua1 at 2013-11-11 02:12:20
你好,你说的我不太明白,能不能给个例子
        main主程序:
                       program  main
                                implicit none
                                real::a=2,b=3
    ...

先改下主程序,加上
real, external :: fun

然后改一下子程序
function  fun(x,y) result(z)

然后直接编译,就可以了
10楼2013-11-12 01:56:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 1xiaohua1 的主题更新
信息提示
请填处理意见