3

我需要使用每个变量的值(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
4

1 回答 1

1

除非可以将 tracklopes/trackconvolve 过程简化为简单的东西,否则就没有办法(非平凡地)删除嵌套循环。

看到这一点的最好方法是每个子循环至少依赖于它的一个超级循环的值,所以除非最内层的计算使得整个过程可以在数学上简化,否则它已经在它的最简单的形式。

如果您只是不喜欢看那么多级别的嵌套,您可以尝试通过使用索引数组而不是 5 个不同的索引来展平 5-D 空间,然后您必须编写一个相当丑陋的 1-D 循环它检查 5 个索引中的每一个的边界,然后适当地推进索引数组。

于 2013-10-25T23:14:16.160 回答