Fortran Coder

查看: 9093|回复: 3

[子程序] 子程序变量无初值问题

[复制链接]

5

帖子

3

主题

0

精华

入门

F 币
50 元
贡献
27 点
发表于 2014-5-7 23:18:52 | 显示全部楼层 |阅读模式
call sub1(X,Y,T,a,b,c,d,ans) 时,X, Y,T的参数传递有问题,全部都是(10,10,10),需要怎么改正程序?请各位大神帮忙解答以下,谢谢各位啊!
[Fortran] 纯文本查看 复制代码
program main
implicit none
call sub2()
end program main

subroutine sub1(X,Y,T,a,b,c,d,ans)
implicit none
real::PI=3.1415926
real::PM=1
real::M=1
real::PL=1
real::PT=1
real,parameter::X0=20
real,parameter::Y0=20
real,parameter::T0=20
real::a(X0,Y0,T0)
real::b(X0,Y0,T0)
real::c(X0,Y0,T0)
real::d(X0,Y0,T0)
real::ans(X0,Y0,T0)
real X
real Y
real T 
real::x1,x2,dx,y1,y2,dy,t1,t2,dt
integer::i,j,k,Nx,Ny,Nt
x1=0.5
x2=10
y1=0.5
y2=10
t1=0.5
t2=10
dx=0.5
dy=0.5
dt=0.5
Nx=(x2-x1)/dx
Ny=(y2-y1)/dy
Nt=(t2-t1)/dt
open(unit=10,file="data1.txt")
do i=1,Nx+1
X=x1+(i-1)*dx
do j=1,Ny+1
y=y1+(j-1)*dy
do k=1,Nt+1 
T=t1+(k-1)*dt
a(i,j,k)=PM*M/(4*(PI**1)*(PL**0.5)*(PT**0.5)*(T**1))
b(i,j,k)=-1/(2*PL*T)
c(i,j,k)=((X-T)/(2*PL*T))**2
d(i,j,k)=((X-T)**2)/(4*PL*T)+(y**2/(4*PT*T))
ans(i,j,k)=(PM*M/(4*(PI**1)*(PL**0.5)*(PT**0.5)*(T**2)))*((-1/(2*PL*T))+((((X-T)/(2*PL*T))**2)**2))*(exp(-(((X-T)**2)/(4*PL*T)+(y**2/(4*PT*T)))))
write(10,"('(',f5.2,',',f5.2,','f5.2')=',(2X,F9.6),(2X,F9.6),(2X,F9.6),(2X,F9.6),(2X,F9.6))") X,Y,T,a(i,j,k),b(i,j,k),c(i,j,k),d(i,j,k),ans(i,j,k)
end do
end do
end do
return
end

subroutine sub2()
implicit none
integer,parameter:: i0=20
integer,parameter:: j0=20
integer,parameter:: k0=20
integer i
integer j
integer k
real X
real Y
real T
real::a(i0,j0,k0)
real::b(i0,j0,k0)
real::c(i0,j0,k0)
real::d(i0,j0,k0)
real::ans(i0,j0,k0)
call sub1(X,Y,T,a,b,c,d,ans)
open(unit=11,file='data2.txt')
do i=1,i0
do j=1,j0
do k=1,k0
if (ans(i,j,k)>-0.01.and.ans(i,j,k)<0.01) then
write(11,"('(',f5.2,',',f5.2,','f5.2')=',(2X,F9.6),(2X,F9.6),(2X,F9.6),(2X,F9.6),(2X,F9.6))") X,Y,T,a(i,j,k),b(i,j,k),c(i,j,k),d(i,j,k),ans(i,j,k)
end if
end do
end do
end do
return 
end


1980

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1418 元
贡献
607 点

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

发表于 2014-5-8 11:18:33 | 显示全部楼层
sub2里面的 X Y T 没有初值,能出现 10,10,10 就不错了。多数时候他们的值是不确定的。

你希望他们是多少,就给他们赋值即可。

136

帖子

3

主题

0

精华

版主

F 币
1964 元
贡献
1677 点

帅哥勋章管理勋章爱心勋章新人勋章热心勋章元老勋章

发表于 2014-5-8 11:30:59 | 显示全部楼层
fcode 发表于 2014-5-8 11:18
sub2里面的 X Y T 没有初值,能出现 10,10,10 就不错了。多数时候他们的值是不确定的。

你希望他们是多少 ...

嗯,我都没看,只看到了I,J,K

819

帖子

2

主题

0

精华

大宗师

F 币
3862 元
贡献
2301 点
发表于 2014-5-10 19:41:31 | 显示全部楼层
你这代码,最终的结果就是:x=x2=10,Y=y2=10,T=t2=10.
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-6-24 18:33

Powered by Tencent X3.4

© 2013-2024 Tencent

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