Fortran Coder

楼主: heroinhell
打印 上一主题 下一主题

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

[复制链接]

9

帖子

2

主题

0

精华

入门

F 币
53 元
贡献
29 点
板凳
 楼主| 发表于 2016-9-8 11:25:00 | 只看该作者
fcode 发表于 2016-9-7 20:38
这些老语法就是非常容易出错的。

对于虚参来说 DIMENSION GGGG(*), TTTT(*) 这种叫做 “假定大小”,是非 ...
没有耳机,刚才拖着看了下视频,讲得非常棒。尤其期待openmp和mpi的部分。我刚才改了一下,在OTA声明的时候,声明成:
integer,dimension(*) :: GGGG,TTTT能编译过去了。

不过新的问题又产生了,我程序里调用分三层,表示一下:
A调用B,B调用C

在函数A里定义的数组是固定的,假设数组是integer类型的WORK(N)

A将WORK(N))传给B,而在B中WORK对应的形参就是 integer dimension(*)类型的,这一步经过层主的解答下已经通过了。

现在B调用C,将WORK数组继续传下去。我不解的问题来了:
C中定义的WORK对应的形参是一个固定长度的二维数组,与我们定义的 integer ,dimension(*)显然不匹配啊

因为程序在fortran77下是通过了的,所以我在移植过程中没做改动,出现了错误:
The type of the actual argument differs from the type of the dummy argument
我觉得应该有这错误。

现在是,有没有一种方法改动最少的代码,程序能够继续,并得到正确的结果?

顺便问下,楼主是做地球物理吗,同道中人,能否留个联系方式

1976

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1404 元
贡献
599 点

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

沙发
发表于 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
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-6-20 03:29

Powered by Tencent X3.4

© 2013-2024 Tencent

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