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 手順を簡単なものに縮小できない限り、ネストされたループを (自明ではなく) 削除する方法はありません。

これを確認する最良の方法は、各サブループがそのスーパーループの少なくとも 1 つの値に依存することです。したがって、最も内側の計算がプロセス全体を数学的に単純化できるようなものでない限り、それはすでにその中に入っています。最も単純な形。

それほど多くのレベルの入れ子を見たくない場合は、5 つの個別のインデックスの代わりにインデックスの配列を使用して 5 次元空間を平坦化することができます。その後、かなり醜い 1 次元ループを作成する必要があります。これは、5 つのインデックスのそれぞれの境界をチェックし、インデックス配列を適切に進めます。

于 2013-10-25T23:14:16.160 に答える