我在 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 (但双精度)中一切正常。