Fortran Coder

查看: 10260|回复: 1

[子程序] 求助,函数传参

[复制链接]

1

帖子

1

主题

0

精华

新人

F 币
10 元
贡献
4 点
发表于 2014-3-15 15:50:39 | 显示全部楼层 |阅读模式
各位专家,大家好,新手向求教一个问题,请大家不吝赐教。
就是当我给一个函数传参时候,在函数调用之前,输出参数为正确值,但是到了函数里面该参数变得不可思议,从而导致参数计算失败。在群力讨论,大家说可能是参数类型不一致。可是在函数里面,没有再作参数的类型声明,应该不是这个问题吧。对了,我的编译器是cvf6.5,操作系统是win xp sp3。
下面这个问题代码块和输出结果
print*,'fre and theta =',fre,theta
    print*,'sm,sig,cl,st,poro,sv,cv=',sm,sig,cl,st,poro,sv,cv
c do 2010 clNo = 1,2,1
c  cl = testCl(clNo)
  slope1=sig/cl
     Zs = sig**2/cl
  if(itype.eq.1) slope=1.414*sig/cl
     if(itype.eq.2) slope=sig/cl  !这里不是矛盾吗?
  print*,'sm in AIEM is:',sm
  print*,'fre in AIEM is:',fre
c  er=dcmplx(err,eri) !er指的是介电常数
c  call mois2dc(sm,fre,sv,cv,poro,st,er)!由土壤水分和频率计算介电常数,err和
  call SM_DC(sm,fre,sv,cv,poro,st,er) 被调用的函数
函数内部:
SUBROUTINE SM_DC(sm,fre,sv,cv,poro,st,er)

! implicit real*4(a-h,o-z)
implicit byte(n)
integer i,j
! real*4 params(5),coe
! real*4 poro,st,sv,cv,sm,idcw,idcs,idcw_2,idcs_2
! complex*8 dcsoil,dcsoil_2
! complex*16 er
print*,"sm in Dobson is :",sm
print*,'fre in Dobson is:',fre


Res.JPG

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

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

发表于 2014-3-15 15:57:37 | 显示全部楼层
主程序中 sm 和 fre 为双精度,在子程序中,也应该为双精度。没有再做声明是不对的,建议 Implicit None 并声明全部变量
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-3-29 15:28

Powered by Tencent X3.4

© 2013-2024 Tencent

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