我需要使用每个变量的值进行函数调用(wndspeed,xh,yh,A和B) 有没有人知道如何在不使用这些嵌套循环的情况下完成它?
do i=1,windsteps
wndspeed =windinc*float(i-1)+windstart
write(*,*)i,wndspeed
do j=1,ixsteps
xh=xinc*float(j-1)
xh=xh/height
do k=1,iysteps
yh=10.*float(k-1)*1e3
yh=yinc*float(k-1)
yh=yh/height
do l=1,iasteps
A=(ainc*float(l-1)+50)*1e3
do m=1,ibsteps
B=binc*float(m-1)+1
Pdelt=wndspeed*wndspeed*rho*exp(1.)/B
call trackslopes(elevang,wndspeed,coxmkcor,skewpeak,
1 numslops,slopary,tanumax,xh,yh,A,B,Pdelt,height,numchips,
2 bkgrdwnd,antgain)
skewpeak=0
call trackconvolve(height,tanumax,numslops,slopary,numchips,
1 stppchip,deadband,elevang,convary)
enddo
enddo
enddo
enddo
答案 0 :(得分:1)
除非tracklopes / trackconvolve程序可以简化为简单的程序,否则无法(非平凡地)删除嵌套循环。
看到这个的最好方法是每个子循环取决于其至少一个超级循环的值,因此除非最内部计算使得整个过程可以在数学上简化,否则它是已经是最简单的形式。
如果你不喜欢看那么多级别的嵌套,你可以尝试使用索引数组而不是5个不同的索引来展平5-D空间,然后你必须写一个相当难看的1 -D循环检查5个索引中每个索引的边界,然后适当地推进索引数组。