爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10074|回复: 10

[求助] fortran程序调用子程序问题

[复制链接]

新浪微博达人勋

发表于 2012-12-20 14:39:11 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我是一个fortran菜鸟,我有一个关于fortran调用子程序的问题想请教一下各位大神:
我的子程序为subroutine cffc(z,k,h,A,B,C)其中的A,B,C是要用于主程序计算的
在主程序中需要调用cffc五次,那就得到5组不同的A,B,C的值,因为不想设置那么多的变量,就想用二维数组来定义A(16,5),B(16,5),C(16,5),但是这样定义后调用子程序call cffc(z,ku,vcoeff,a(ny,1),b(ny,1),c(ny,1))的时候结果就只有A(16,1),B(16,1),C(16,1)一层的数据,其余层的都是0,难道这个只能定义成A1,A2,A3,A4,A5吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-20 15:51:49 | 显示全部楼层
第一次调用call cffc(z,ku,vcoeff,a(ny,1),b(ny,1),c(ny,1))
第二次是:call cffc(z,ku,vcoeff,a(ny,2),b(ny,2),c(ny,2))吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-12-20 16:58:06 | 显示全部楼层

不是
第一次调用call cffc(z,ku,vcoeff,a(ny,1),b(ny,1),c(ny,1))
第二次调用call cffc(z,kt,nteff,a(ny,2),b(ny,2),c(ny,2))
     
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-20 21:05:53 | 显示全部楼层
我觉得,是不是第二次调用时
第二次是:call cffc(z,ku,vcoeff,a(ny,2),b(ny,2),c(ny,2))
如果一直用call cffc(z,ku,vcoeff,a(ny,1),b(ny,1),c(ny,1))
这样只能一直重复书写第一维数
而第二维数等一直没有计算写入
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-12-20 21:52:34 | 显示全部楼层
sunlight 发表于 2012-12-20 21:05
我觉得,是不是第二次调用时
第二次是:call cffc(z,ku,vcoeff,a(ny,2),b(ny,2),c(ny,2))
如果一直用cal ...

不是,我运行程序的感觉是调用子程序的出的值只是最后一项a(16,1)的值,不能得到整个数组的值,而如果写成call cffc(z,ku,vcoeff,a,b,c)这样的话就能得到整个a数组的值
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-12-21 14:44:49 | 显示全部楼层
调用的时候只需要用数组名传递就可以了
call s1(x,y,z)
子程序如下
subroutine s1(x,y,x)
其中子程序中的xyz可以使输入或者输出变量···
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-12-22 09:16:39 | 显示全部楼层
言深深 发表于 2012-12-21 14:44
调用的时候只需要用数组名传递就可以了
call s1(x,y,z)
子程序如下

这我知道呀,可是我要调用好几次,然后我不想设置那么多的变量,我想把调用子程序得到的A1,A2,A3...等用一个数组A(n)表示,这样好像不行
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-12-22 09:48:38 | 显示全部楼层
你call的时候这边call cffc(z,ku,vcoeff,a(ny,1),b(ny,1),c(ny,1))
这就用abc,不要写成数组的形式
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-12-22 13:20:24 | 显示全部楼层
言深深 发表于 2012-12-22 09:48
你call的时候这边call cffc(z,ku,vcoeff,a(ny,1),b(ny,1),c(ny,1))
这就用abc,不要写成数组的形式

我明白你的意思,但是我要调用好几次,那你的意思是只能写成a1,b1,c1,a2,b2,c2这样子的,我不想设那么多变量,想着对a1,a2,a3这样的能不能设一个数组a(ny,3)然后这样调用呢?不知道你有米有明白我的意思
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-12-22 21:22:20 | 显示全部楼层
一颗梅子在南京 发表于 2012-12-22 13:20
我明白你的意思,但是我要调用好几次,那你的意思是只能写成a1,b1,c1,a2,b2,c2这样子的,我不想设那么多变 ...

额····我明白你的意思了,但是你没有明白我的意思···调用数组(将所有需要调用的参数都赋值到这个数组里面)的时候,调用形式是这样的call sub(a,b,c)
其中abc可以是任何数组······比如这样一个程序
real a(100)
do i=1,100
a(i)=i
enddo
call sub(a)
end

subroutine sub(a)
do i=1,100
print*,x(i)
enddo
end

这个程序就是将主程序中的数组a,传递到子程序中,并print出来
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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