如何在fortran中退出“重复直到循环”?

时间:2015-08-28 13:25:39

标签: fortran

我定义了两个2D数组hhh。我想为hh分配新值。对于特定的k',如果条件

,我需要hh(k',j)=1
h(k',j)>0

是真的;一旦条件为假,即h(k',j')<0,则对任何j>j'hh(k',j)=0。我使用了以下DO WHILE循环:

  do k=1, npair
    do j =1, movie
      hh(k,j)=0.0
    enddo
  enddo

  do k=1, npair
    do j =1, nmovie
       do while (h(k,j)>0)
         hh(k,j)=h(k,j)
       enddo
    enddo

但如果条件(h(k,j)>0)始终为真,则会出现无限循环!你能否建议如何实施它?

1 个答案:

答案 0 :(得分:1)

在我看来,您可以根据hh的值设置h的每个值。我还假设hhh的大小相同。所以你应该{h}每个元素do。我推荐以下内容:

do k=1,N1    ! N1 and N2 are the limits of the hh and h array.
   do j=1,N2
      if ( h(k,j) > 0) then    ! Check the condition for a specific element in h
         hh(k,j) = 1
      else
         ! -- We need to set *all* values in the desired range
         hh(k,j:N2) = 0

         ! -- And we need to stop loop from overwriting values hh(k,j+1), for example
         ! -- So we break out of the j loop
         exit
      endif
   enddo
enddo

您应该检查以确保这符合您的想法。请注意,我使用冒号表示法在hh数组中指定一系列值。 此外,如果h(k,j)完全为0,您还不清楚会发生什么。