1. 循环是有损耗的。cycle 也是有损耗的。
2. ce(i,j,k)=dzz 单独一个赋值语句速度是很快的。
3. cycle并不能减少循环的次数,都是80*80*80*1000次。
4. cycle 损耗和赋值语句的损耗相当(差别不大—)。当有 if 的时候,执行 cycle不执行赋值。当没有 if 的时候,执行赋值但不执行cycle。因此,两者的区别也不大。
5. 你的代码写得啰嗦,又低效。你要知道,Fortran是矢量化的语言,它本身可以减少很多不必要的循环,不要用C语言的逻辑来写Fortran代码。
尝试用下面的代码,简练,直观,高效。
[Fortran] 纯文本查看 复制代码 MODULE CDAS1
REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: indt,ce
real dzz
ENDMODULE CDAS1
PROGRAM cs
USE CDAS1
IMPLICIT NONE
integer maxx,maxy,maxz
real time1,time2
dzz=0.6
maxz=80;maxy=80;maxx=80
allocate(indt(maxx,maxy,maxz),ce(maxx,maxy,maxz))
indt=0;ce=0
indt(:39,:,:)=1
call CPU_TIME(time1)
where(indt==1) ce=dzz
call CPU_TIME(time2)
print*,'time',time2-time1
ENDPROGRAM cs |