1

我在 Fortran 中编写了一个遗传算法,以便能够以长双精度计算通用适应度函数。第一个版本(双精度)是为 gfortran 编写的,我在其中实现了一个进度条。

现在我必须用 ifort 编译,因为 gfortran 无法执行real*16计算。一切正常,但在这种情况下(ifort)进度条无法正常工作。也就是说,只有当整个循环完成时,进度条才会打印到标准输出。

这是进度条的一段代码:

if (rate(i).gt.ratemax) then

ratemax=rate(i)

write(*,"(1x,A57,D12.4,A27,f6.2,A1)",advance="no") &

'\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b ff: ', & 

ratemax,'             Progress:',100.*real(nmix)/real(nmixing),'%'

end if

我使用 64 位的 Intel Xeon,ifort 的选项是:

ifort -O2 -assume bscc FFevalLD.f90  func.o -o FFevalLD

而当使用 gfortran 时,我以这种方式编译:

gfortran -ffree-form -O2 -fbackslash FFeval.f func.o -o FFeval

在 gfortran (但双精度)中一切正常。

4

1 回答 1

1

这是一个解决方案:

if (rate(i).gt.ratemax) then 
  ratemax=rate(i)
  1100 format(1x,A57,D12.4,A27,f6.2,A1,$) 
  write(*,1100) &
  '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\‌​b\b\b\b\b\b\b$ ratemax,' Progress:',100.*real(nmix)/real(nmixing),'%' 
于 2011-09-02T14:10:26.037 回答