首页 文章

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

提问于
浏览
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(但双精度)一切正常 .

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),'%'
    

相关问题