我在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)一切正常。
答案 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),'%'