隐含在Fortran中做循环

时间:2015-09-22 20:53:28

标签: loops fortran gfortran do-loops

如何用隐含的do循环做同样的事情? 我想用两个隐含的do循环替换现有的Vcvo和Vcvonew循环?

这是我的代码:

Program DO_LOOPS

Implicit none

Integer::i,j
Integer,parameter::BrCv=15,BrSat=24

Real,dimension(0:BrCv-1,BrSat)::Vcvo
Real,dimension(BrCv-1,BrSat)::Vcvonew

Do i=0,BrCv-1
   do j=1,BrSat

Vcvo(i,j)=i+j*BrCv/BrSat

 end do
End do

Do i=1,BrCv-1
   do j=1,BrSat


   Vcvonew(i,j)=Vcvo(i,j)

   end do
End do

Stop
End program DO_LOOPS

1 个答案:

答案 0 :(得分:2)

隐含的do循环将是:

Vcvo = reshape([((i + j*real(BrCv)/real(Brsat), i=0,BrCv-1), j=1,Brsat)],[BrCv,BrSat])

第一个。

对于第二个,你不需要隐含的循环。如已建议的那样,简单的数组赋值将执行:

Vcvonew = vcvo(1:,:)

第一个看起来并不比显式循环更清晰。但如果您想要更紧凑的解决方案,可以使用do concurrent

do concurrent (i = 0:BrCv-1, j=1:Brsat)
    Vcvo(i,j) = i + j*real(BrCv)/real(Brsat)
end do

你有几行。

在分割之前,我也冒昧地将BrCv和BrSat转化为真实。它可能不是你想要的,但它是你注意的东西。