- 积分
- 0
- 注册时间
- 2005-3-23
- 仿真币
-
- 最后登录
- 1970-1-1
|
fortran简单循环问题求助!
在FORTRAN的三重循环中,每重为3次循环,总共有27次循环,但循环到20次时则无法进行下去,
百思不得其解,现上网求助各位高手。谢谢!
以下先贴出全部3个程序,其中第1个为主程序program callcdi,第2、第3个为被调用的子程序
subroutine cdi(kxyzi,wi,nIntPnts,nDim)和subroutine kxcd1(xc,hc,nIntPnt1)。问题出在第2个
子程序subroutine cdi(kxyzi,wi,nIntPnts,nDim)的
else if (nDim==3) then
i=0
do 40 r=1,nIntPnt1
do 50 s=1,nIntPnt1
do 60 t=1,nIntPnt1
i=i+1
kxyzi(1,i)=xc(r)
kxyzi(2,i)=xc(s)
kxyzi(3,i)=xc(t)
wi(i)=hc(r)*hc(s)*hc(t)
60 end do
50 end do
40 end do
end if
中。
如果直接把第2个子程序的变量nIntPnts改为常数27,则可顺利执行完其3重循环共27次,
但在第1个主程序仍仅能输出到20次循环的结果,即使也依照处理第2个子程序的办法,
也把把第1个主程序的变量nIntPnts改为常数27,问题也无法等到解决。所以上网来请
教大家。希望大家不吝指教。谢谢大家!
贴子的最后贴出各种调试中间结果和出错信息。
完整的3个程序:
program callcdi
external cdi
integer nIntPnts,nDim,i,j
double precision kxyzi(3,20),wi(20)
open (1,file='cdio.txt',status='unknown')
write(*,*) '请输入总积分点nIntPnts值:'
read(*,*) nIntPnts
write(*,*) '请输入维数nDim值:'
read(*,*) nDim
call cdi(kxyzi,wi,nIntPnts,nDim)
do 10 i=1,nIntPnts
do 20 j=1,nDim
write(1,100) 'kxyzi=(',j,i,')',kxyzi(j,i),'wi=(',i,')',wi(i)
100 format(1x,a10,2i5,a2,e15.2,a10,i5,a2,e15.2)
20 end do
10 end do
close(1)
end program callcdi
subroutine cdi(kxyzi,wi,nIntPnts,nDim)
external kxcd1
integer nIntPnts,nDim,nIntPnt1,r,s,t,i,j
double precision kxyzi(nDim,nIntPnts),wi(nIntPnts),xc(nIntPnts),&
& hc(nIntPnts)
open (1,file='cdio.txt',status='old')
nIntPnt1=exp(log(nIntPnts*1.0)/(1.0*nDim))
write(1,11) 'nDim=',nDim
11 format(1x,a10,i10)
write(1,15) 'nIntPnts=',nIntPnts
15 format(1x,a10,i10)
write(1,100) 'nIntPnt1=',nIntPnt1
100 format(1x,a10,i10)
do 70 i=1,nIntPnts
do 80 j=1,nDim
write(1,90) 'kxyzi=(',j,i,')',kxyzi(j,i),'wi=(',i,')',wi(i)
90 format(1x,a10,2i5,a2,e15.2,a10,i5,a2,e15.2)
80 end do
70 end do
call kxcd1(xc,hc,nIntPnt1)
do 85 j=1,nIntPnt1
write(1,95) 'xc=(',j,')',xc(j),'hc=(',j,')',hc(j)
95 format(1x,a10,i5,a2,e15.2,a10,i5,a2,e15.2)
85 end do
if (nDim==1) then
do 10 i=1,nIntPnt1
kxyzi(1,i)=xc(i)
wi(i)=hc(i)
10 end do
else if (nDim==2) then
i=0
do 20 s=1,nIntPnt1
do 30 t=1,nIntPnt1
i=i+1
kxyzi(1,i)=xc(s)
kxyzi(2,i)=xc(t)
wi(i)=hc(s)*hc(t)
30 end do
20 end do
else if (nDim==3) then
i=0
do 40 r=1,nIntPnt1
do 50 s=1,nIntPnt1
do 60 t=1,nIntPnt1
i=i+1
write(1,110) 'r=',r
110 format(1x,a10,i10)
write(1,115) 's=',s
115 format(1x,a10,i10)
write(1,1000) 't=',t
1000 format(1x,a10,i10)
write(1,1100) 'i=',i
1100 format(1x,a10,i10)
write(1,25) 'nIntPnts=',nIntPnts
25 format(1x,a10,i10)
kxyzi(1,i)=xc(r)
kxyzi(2,i)=xc(s)
kxyzi(3,i)=xc(t)
wi(i)=hc(r)*hc(s)*hc(t)
write(1,1200) 'kxyzi=(',1,i,')',kxyzi(1,i),'wi=(',i,')',wi(i)
1200 format(1x,a10,2i5,a2,e15.2,a10,i5,a2,e15.2)
write(1,1300) 'kxyzi=(',2,i,')',kxyzi(2,i),'wi=(',i,')',wi(i)
1300 format(1x,a10,2i5,a2,e15.2,a10,i5,a2,e15.2)
write(1,1400) 'kxyzi=(',3,i,')',kxyzi(3,i),'wi=(',i,')',wi(i)
1400 format(1x,a10,2i5,a2,e15.2,a10,i5,a2,e15.2)
60 end do
50 end do
40 end do
end if
! close(1)
return
end subroutine cdi
subroutine kxcd1(xc,hc,nIntPnt1)
double precision xc(nIntPnt1),hc(nIntPnt1)
if (nIntPnt1==1) then
xc(1)=0.0
hc(1)=2.0
else if (nIntPnt1==2) then
xc(1)=-0.577350269189626
xc(2)=-xc(1)
hc(1)=1.0
hc(2)=1.0
else if (nIntPnt1==3) then
xc(1)=-0.774596669241483
xc(2)=0.0
xc(3)=-xc(1)
hc(1)=0.555555555555556
hc(2)=0.888888888888889
hc(3)=hc(1)
end if
return
end subroutine kxcd1
用作调试的中间结果:
nDim= 3
nIntPnts= 27
nIntPnt1= 3
kxyzi=( 1 1 ) 0.00E+00 wi=( 1 ) 0.00E+00
kxyzi=( 2 1 ) 0.00E+00 wi=( 1 ) 0.00E+00
kxyzi=( 3 1 ) 0.00E+00 wi=( 1 ) 0.00E+00
kxyzi=( 1 2 ) 0.00E+00 wi=( 2 ) 0.00E+00
kxyzi=( 2 2 ) 0.00E+00 wi=( 2 ) 0.00E+00
kxyzi=( 3 2 ) 0.00E+00 wi=( 2 ) 0.00E+00
kxyzi=( 1 3 ) 0.00E+00 wi=( 3 ) 0.00E+00
kxyzi=( 2 3 ) 0.00E+00 wi=( 3 ) 0.00E+00
kxyzi=( 3 3 ) 0.00E+00 wi=( 3 ) 0.00E+00
kxyzi=( 1 4 ) 0.00E+00 wi=( 4 ) 0.00E+00
kxyzi=( 2 4 ) 0.00E+00 wi=( 4 ) 0.00E+00
kxyzi=( 3 4 ) 0.00E+00 wi=( 4 ) 0.00E+00
kxyzi=( 1 5 ) 0.00E+00 wi=( 5 ) 0.00E+00
kxyzi=( 2 5 ) 0.00E+00 wi=( 5 ) 0.00E+00
kxyzi=( 3 5 ) 0.00E+00 wi=( 5 ) 0.00E+00
kxyzi=( 1 6 ) 0.00E+00 wi=( 6 ) 0.00E+00
kxyzi=( 2 6 ) 0.00E+00 wi=( 6 ) 0.00E+00
kxyzi=( 3 6 ) 0.00E+00 wi=( 6 ) 0.00E+00
kxyzi=( 1 7 ) 0.00E+00 wi=( 7 ) 0.00E+00
kxyzi=( 2 7 ) 0.00E+00 wi=( 7 ) 0.00E+00
kxyzi=( 3 7 ) 0.00E+00 wi=( 7 ) 0.00E+00
kxyzi=( 1 8 ) 0.00E+00 wi=( 8 ) 0.00E+00
kxyzi=( 2 8 ) 0.00E+00 wi=( 8 ) 0.00E+00
kxyzi=( 3 8 ) 0.00E+00 wi=( 8 ) 0.00E+00
kxyzi=( 1 9 ) 0.00E+00 wi=( 9 ) 0.00E+00
kxyzi=( 2 9 ) 0.00E+00 wi=( 9 ) 0.00E+00
kxyzi=( 3 9 ) 0.00E+00 wi=( 9 ) 0.00E+00
kxyzi=( 1 10 ) 0.00E+00 wi=( 10 ) 0.00E+00
kxyzi=( 2 10 ) 0.00E+00 wi=( 10 ) 0.00E+00
kxyzi=( 3 10 ) 0.00E+00 wi=( 10 ) 0.00E+00
kxyzi=( 1 11 ) 0.00E+00 wi=( 11 ) 0.00E+00
kxyzi=( 2 11 ) 0.00E+00 wi=( 11 ) 0.00E+00
kxyzi=( 3 11 ) 0.00E+00 wi=( 11 ) 0.00E+00
kxyzi=( 1 12 ) 0.00E+00 wi=( 12 ) 0.00E+00
kxyzi=( 2 12 ) 0.00E+00 wi=( 12 ) 0.00E+00
kxyzi=( 3 12 ) 0.00E+00 wi=( 12 ) 0.00E+00
kxyzi=( 1 13 ) 0.00E+00 wi=( 13 ) 0.00E+00
kxyzi=( 2 13 ) 0.00E+00 wi=( 13 ) 0.00E+00
kxyzi=( 3 13 ) 0.00E+00 wi=( 13 ) 0.00E+00
kxyzi=( 1 14 ) 0.00E+00 wi=( 14 ) 0.00E+00
kxyzi=( 2 14 ) 0.00E+00 wi=( 14 ) 0.00E+00
kxyzi=( 3 14 ) 0.00E+00 wi=( 14 ) 0.00E+00
kxyzi=( 1 15 ) 0.00E+00 wi=( 15 ) 0.00E+00
kxyzi=( 2 15 ) 0.00E+00 wi=( 15 ) 0.00E+00
kxyzi=( 3 15 ) 0.00E+00 wi=( 15 ) 0.00E+00
kxyzi=( 1 16 ) 0.00E+00 wi=( 16 ) 0.00E+00
kxyzi=( 2 16 ) 0.00E+00 wi=( 16 ) 0.00E+00
kxyzi=( 3 16 ) 0.00E+00 wi=( 16 ) 0.00E+00
kxyzi=( 1 17 ) 0.00E+00 wi=( 17 ) 0.00E+00
kxyzi=( 2 17 ) 0.00E+00 wi=( 17 ) 0.00E+00
kxyzi=( 3 17 ) 0.00E+00 wi=( 17 ) 0.00E+00
kxyzi=( 1 18 ) 0.00E+00 wi=( 18 ) 0.00E+00
kxyzi=( 2 18 ) 0.00E+00 wi=( 18 ) 0.00E+00
kxyzi=( 3 18 ) 0.00E+00 wi=( 18 ) 0.00E+00
kxyzi=( 1 19 ) 0.00E+00 wi=( 19 ) 0.00E+00
kxyzi=( 2 19 ) 0.00E+00 wi=( 19 ) 0.00E+00
kxyzi=( 3 19 ) 0.00E+00 wi=( 19 ) 0.00E+00
kxyzi=( 1 20 ) 0.00E+00 wi=( 20 ) 0.00E+00
kxyzi=( 2 20 ) 0.00E+00 wi=( 20 ) 0.00E+00
kxyzi=( 3 20 ) 0.00E+00 wi=( 20 ) 0.00E+00
kxyzi=( 1 21 ) 0.57-312 wi=( 21 ) 0.00E+00
kxyzi=( 2 21 ) 0.00E+00 wi=( 21 ) 0.00E+00
kxyzi=( 3 21 ) 0.00E+00 wi=( 21 ) 0.00E+00
kxyzi=( 1 22 ) 0.00E+00 wi=( 22 ) 0.00E+00
kxyzi=( 2 22 ) 0.00E+00 wi=( 22 ) 0.00E+00
kxyzi=( 3 22 ) 0.21-313 wi=( 22 ) 0.00E+00
kxyzi=( 1 23 ) 0.21-313 wi=( 23 ) 0.00E+00
kxyzi=( 2 23 ) 0.00E+00 wi=( 23 ) 0.00E+00
kxyzi=( 3 23 ) 0.00E+00 wi=( 23 ) 0.00E+00
kxyzi=( 1 24 ) 0.00E+00 wi=( 24 ) 0.00E+00
kxyzi=( 2 24 ) 0.00E+00 wi=( 24 ) 0.00E+00
kxyzi=( 3 24 ) 0.00E+00 wi=( 24 ) 0.00E+00
kxyzi=( 1 25 ) 0.00E+00 wi=( 25 ) 0.00E+00
kxyzi=( 2 25 ) 0.00E+00 wi=( 25 ) 0.00E+00
kxyzi=( 3 25 ) 0.00E+00 wi=( 25 ) 0.00E+00
kxyzi=( 1 26 ) 0.00E+00 wi=( 26 ) 0.00E+00
kxyzi=( 2 26 ) 0.00E+00 wi=( 26 ) 0.00E+00
kxyzi=( 3 26 ) 0.00E+00 wi=( 26 ) 0.00E+00
kxyzi=( 1 27 ) 0.00E+00 wi=( 27 ) 0.00E+00
kxyzi=( 2 27 ) 0.00E+00 wi=( 27 ) 0.00E+00
kxyzi=( 3 27 ) 0.00E+00 wi=( 27 ) 0.00E+00
xc=( 1 ) -0.77E+00 hc=( 1 ) 0.56E+00
xc=( 2 ) 0.00E+00 hc=( 2 ) 0.89E+00
xc=( 3 ) 0.77E+00 hc=( 3 ) 0.56E+00
r= 1
s= 1
t= 1
i= 1
nIntPnts= 27
kxyzi=( 1 1 ) -0.77E+00 wi=( 1 ) 0.17E+00
kxyzi=( 2 1 ) -0.77E+00 wi=( 1 ) 0.17E+00
kxyzi=( 3 1 ) -0.77E+00 wi=( 1 ) 0.17E+00
r= 1
s= 1
t= 2
i= 2
nIntPnts= 27
kxyzi=( 1 2 ) -0.77E+00 wi=( 2 ) 0.27E+00
kxyzi=( 2 2 ) -0.77E+00 wi=( 2 ) 0.27E+00
kxyzi=( 3 2 ) 0.00E+00 wi=( 2 ) 0.27E+00
r= 1
s= 1
t= 3
i= 3
nIntPnts= 27
kxyzi=( 1 3 ) -0.77E+00 wi=( 3 ) 0.17E+00
kxyzi=( 2 3 ) -0.77E+00 wi=( 3 ) 0.17E+00
kxyzi=( 3 3 ) 0.77E+00 wi=( 3 ) 0.17E+00
r= 1
s= 2
t= 1
i= 4
nIntPnts= 27
kxyzi=( 1 4 ) -0.77E+00 wi=( 4 ) 0.27E+00
kxyzi=( 2 4 ) 0.00E+00 wi=( 4 ) 0.27E+00
kxyzi=( 3 4 ) -0.77E+00 wi=( 4 ) 0.27E+00
r= 1
s= 2
t= 2
i= 5
nIntPnts= 27
kxyzi=( 1 5 ) -0.77E+00 wi=( 5 ) 0.44E+00
kxyzi=( 2 5 ) 0.00E+00 wi=( 5 ) 0.44E+00
kxyzi=( 3 5 ) 0.00E+00 wi=( 5 ) 0.44E+00
r= 1
s= 2
t= 3
i= 6
nIntPnts= 27
kxyzi=( 1 6 ) -0.77E+00 wi=( 6 ) 0.27E+00
kxyzi=( 2 6 ) 0.00E+00 wi=( 6 ) 0.27E+00
kxyzi=( 3 6 ) 0.77E+00 wi=( 6 ) 0.27E+00
r= 1
s= 3
t= 1
i= 7
nIntPnts= 27
kxyzi=( 1 7 ) -0.77E+00 wi=( 7 ) 0.17E+00
kxyzi=( 2 7 ) 0.77E+00 wi=( 7 ) 0.17E+00
kxyzi=( 3 7 ) -0.77E+00 wi=( 7 ) 0.17E+00
r= 1
s= 3
t= 2
i= 8
nIntPnts= 27
kxyzi=( 1 8 ) -0.77E+00 wi=( 8 ) 0.27E+00
kxyzi=( 2 8 ) 0.77E+00 wi=( 8 ) 0.27E+00
kxyzi=( 3 8 ) 0.00E+00 wi=( 8 ) 0.27E+00
r= 1
s= 3
t= 3
i= 9
nIntPnts= 27
kxyzi=( 1 9 ) -0.77E+00 wi=( 9 ) 0.17E+00
kxyzi=( 2 9 ) 0.77E+00 wi=( 9 ) 0.17E+00
kxyzi=( 3 9 ) 0.77E+00 wi=( 9 ) 0.17E+00
r= 2
s= 1
t= 1
i= 10
nIntPnts= 27
kxyzi=( 1 10 ) 0.00E+00 wi=( 10 ) 0.27E+00
kxyzi=( 2 10 ) -0.77E+00 wi=( 10 ) 0.27E+00
kxyzi=( 3 10 ) -0.77E+00 wi=( 10 ) 0.27E+00
r= 2
s= 1
t= 2
i= 11
nIntPnts= 27
kxyzi=( 1 11 ) 0.00E+00 wi=( 11 ) 0.44E+00
kxyzi=( 2 11 ) -0.77E+00 wi=( 11 ) 0.44E+00
kxyzi=( 3 11 ) 0.00E+00 wi=( 11 ) 0.44E+00
r= 2
s= 1
t= 3
i= 12
nIntPnts= 27
kxyzi=( 1 12 ) 0.00E+00 wi=( 12 ) 0.27E+00
kxyzi=( 2 12 ) -0.77E+00 wi=( 12 ) 0.27E+00
kxyzi=( 3 12 ) 0.77E+00 wi=( 12 ) 0.27E+00
r= 2
s= 2
t= 1
i= 13
nIntPnts= 27
kxyzi=( 1 13 ) 0.00E+00 wi=( 13 ) 0.44E+00
kxyzi=( 2 13 ) 0.00E+00 wi=( 13 ) 0.44E+00
kxyzi=( 3 13 ) -0.77E+00 wi=( 13 ) 0.44E+00
r= 2
s= 2
t= 2
i= 14
nIntPnts= 27
kxyzi=( 1 14 ) 0.00E+00 wi=( 14 ) 0.70E+00
kxyzi=( 2 14 ) 0.00E+00 wi=( 14 ) 0.70E+00
kxyzi=( 3 14 ) 0.00E+00 wi=( 14 ) 0.70E+00
r= 2
s= 2
t= 3
i= 15
nIntPnts= 27
kxyzi=( 1 15 ) 0.00E+00 wi=( 15 ) 0.44E+00
kxyzi=( 2 15 ) 0.00E+00 wi=( 15 ) 0.44E+00
kxyzi=( 3 15 ) 0.77E+00 wi=( 15 ) 0.44E+00
r= 2
s= 3
t= 1
i= 16
nIntPnts= 27
kxyzi=( 1 16 ) 0.00E+00 wi=( 16 ) 0.27E+00
kxyzi=( 2 16 ) 0.77E+00 wi=( 16 ) 0.27E+00
kxyzi=( 3 16 ) -0.77E+00 wi=( 16 ) 0.27E+00
r= 2
s= 3
t= 2
i= 17
nIntPnts= 27
kxyzi=( 1 17 ) 0.00E+00 wi=( 17 ) 0.44E+00
kxyzi=( 2 17 ) 0.77E+00 wi=( 17 ) 0.44E+00
kxyzi=( 3 17 ) 0.00E+00 wi=( 17 ) 0.44E+00
r= 2
s= 3
t= 3
i= 18
nIntPnts= 27
kxyzi=( 1 18 ) 0.00E+00 wi=( 18 ) 0.27E+00
kxyzi=( 2 18 ) 0.77E+00 wi=( 18 ) 0.27E+00
kxyzi=( 3 18 ) 0.77E+00 wi=( 18 ) 0.27E+00
r= 3
s= 1
t= 1
i= 19
nIntPnts= 27
kxyzi=( 1 19 ) 0.77E+00 wi=( 19 ) 0.17E+00
kxyzi=( 2 19 ) -0.77E+00 wi=( 19 ) 0.17E+00
kxyzi=( 3 19 ) -0.77E+00 wi=( 19 ) 0.17E+00
r= 3
s= 1
t= 2
i= 20
nIntPnts= 27
kxyzi=( 1 20 ) 0.77E+00 wi=( 20 ) 0.27E+00
kxyzi=( 2 20 ) -0.77E+00 wi=( 20 ) 0.27E+00
kxyzi=( 3 20 ) 0.00E+00 wi=( 20 ) 0.27E+00
r= 3
s= 1
t= 3
i= 21
nIntPnts= 27
调试输出窗口信息:
“callcdi.exe”: 已加载“E:\...\callcdi\Debug\callcdi.exe”,已加载符号。
“callcdi.exe”: 已加载“C:\WINDOWS\system32\ntdll.dll”,未加载任何符号。
“callcdi.exe”: 已加载“C:\WINDOWS\system32\kernel32.dll”,未加载任何符号。
“callcdi.exe”: 已加载“C:\WINDOWS\system32\imagehlp.dll”,未加载任何符号。
“callcdi.exe”: 已加载“C:\WINDOWS\system32\msvcrt.dll”,未加载任何符号。
“callcdi.exe”: 已加载“C:\WINDOWS\system32\dbghelp.dll”,未加载任何符号。
“callcdi.exe”: 已加载“C:\WINDOWS\system32\version.dll”,未加载任何符号。
“callcdi.exe”: 已加载“C:\WINDOWS\system32\advapi32.dll”,未加载任何符号。
“callcdi.exe”: 已加载“C:\WINDOWS\system32\rpcrt4.dll”,未加载任何符号。
callcdi.exe 中的 0x0040e5ea 处未处理的异常: 用户断点 。
程序“[3784] callcdi.exe: 本机”已退出,返回值为 0 (0x0)。
附图为另一调试输出窗口信息: |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|