进度条不是在ifort中连续写入的,而是在gfortran中

时间:2011-05-11 09:27:41

标签: fortran gfortran intel-fortran

我在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位的英特尔至强,ifort的选项是:

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

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

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

在gfortran中(但是精度为double)一切正常。

1 个答案:

答案 0 :(得分: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),'%'