2015-09-15 67 views
0

我正在調試一個Fortran項目,其中的一些高頻操作發生在循環索引的邏輯語句上。由於@Ross的評論,有問題的當前的代碼是:多層循環中循環索引的Fortran邏輯語句

integer:: nz=5,na=10,nb=10,nk=10,nxi=10 
real(8),dimension(nz,na*nb*nk*nxi):: pi_ub 
integer:: i,j,k 
real(8), dimension(nz,na*nb*nk*nxi,na*nb*nk):: nnpc,nndiv,obj_func 

do i=1,nz 
    do j=1,na*nb*nk*nxi 
    pi_ub(i,j)=some value 
     do k=1,na*nb*nk 
      nnpc(i,j,k)=some value 
      nndiv(i,j,k)=some value 
     end do 
    end do 
end do 

obj_func=0.0d0 

do i=1,nz 
    do k=1,na*nb*nk 
     do j=1,na*nb*nk*nxi 
     !Want to show the value of pi_ub(5,910) when k=1 
      if (i==5 .and. j==910 .and. k==1) then 
       print *, "pi_ub(5,910)", pi_ub(5,910) 
      end if 

     !----------------------------------------------------------- 
      if (nnpc(i,j,k)<0.0d0 .or. nndiv(i,j,k)<0.0d0) then 
       exit 
      else if (nnpc(i,j,k) >=0.0d0 .and. nndiv(i,j,k)>0.0d0) 
       obj_func=some value 
      end if 
     !------------------------------------------------------------ 
     end do 
    end do 
end do 

的pi_ub(5910)可以被適當地不IF-ENDIF句話在兩條虛線打印。但是,如果有這樣一個句子,沒有什麼是印刷的。看起來「退出」命令搞砸了。但是不應該在「退出」之前編碼嗎?非常感謝!

+1

這在測試時對我有效。你如何編譯和運行?這是完整的代碼嗎? – Ross

+0

感謝您的跟進,@Ross!原始代碼中有一個IF語句,這似乎是問題所在。我會修改這個問題。謝謝! – Woodpecker

+0

我不清楚你在做什麼,但我很高興你解決了你的問題。 你可能會混淆'exit'和'cycle' - 你應該看看兩者。 – Ross

回答

0

後續:好的,我對「退出」的理解是錯誤的。該代碼在「i == 5。和。j == 910。和。k == 1」之前退出循環,並執行打印命令。所以這一切都很有意義