Fortran Coder

查看: 29405|回复: 11
打印 上一主题 下一主题

[求助] 如何将fortran77的数组编程fortran90的

[复制链接]

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

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

楼主
发表于 2016-9-7 20:38:13 | 显示全部楼层
这些老语法就是非常容易出错的。

对于虚参来说 DIMENSION GGGG(*), TTTT(*) 这种叫做 “假定大小”,是非常强烈不推荐使用的用法之一。它是万恶之源。
关于假定大小,建议看视频教程 http://v.fcode.cn/video-subroutine_and_function.html
当前的环境下,建议使用“假定形状”(具体用法视频教程中也有)

回到你的问题,在你的代码里,虚参 GGGG 和 TTTT ,只说明了 dimension ,而没有说明其变量类型。则遵循 IN 规则,它是 real 类型的
但是你给的实参,却是 integer 类型的。因此出错。

IN 规则也是极不推荐的用法之一。
当前环境下,建议使用 Implicit None 取消 IN 规则。
详见 http://define.w.fcode.cn

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

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

沙发
发表于 2016-9-8 11:36:58 | 显示全部楼层
再强调一次,不要用假定大小!建议改为自动数组,或假定形状。
如果你确实要用,那么我用下面的代码做了测试,分别用 ivf for windows 和 gfortran for linux,运行正常:
[Fortran] 纯文本查看 复制代码
program a
  implicit none
  integer :: work(5) = 3
  call b(work)
end program a

Subroutine b( GGGG )
  implicit none
  integer,dimension(*) :: GGGG
  call c(GGGG)
End Subroutine b

Subroutine c(xxxx)
  implicit none
  integer xxxx(5,1)
  write(*,*) xxxx
End Subroutine c
我是搞地球物理的。联系方式嘛,可以找我的邮箱 gao[AT]fcode.cn


1.jpg (7.19 KB, 下载次数: 364)

1.jpg

2.jpg (5.76 KB, 下载次数: 401)

2.jpg

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

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

板凳
发表于 2016-9-8 16:31:59 | 显示全部楼层
实际上,不管在 Fortran77 还是 Fortran90,这样写都是不符合语法规范的。
(你以前用的什么编译器?可能是 Compaq 。现在用的是 IVF 吧?请注意,Compaq 和 IVF 都是完全的 Fortran77 和 Fortran90 编译器!!)
你说的差别,应该是不同编译器的差别。有的编译器检查了这个错误,有的不检查。你可以让 IVF 不检查。

111.png (25.67 KB, 下载次数: 420)

111.png

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

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

地板
发表于 2016-9-9 19:34:20 | 显示全部楼层
-warn nointerfaces
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-18 07:36

Powered by Tencent X3.4

© 2013-2024 Tencent

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