2011-05-11 113 views
1

我已经在fortran中编写了一个遗传算法,以便能够用一个长双精度计算泛型适应度函数。第一个版本(双精度)是为gfortran写的,我已经实现了一个进度条。 现在我必须用ifort编译,因为gfortran不能执行真正的* 16计算。所有工作正常,但在这种情况下(ifort)进度条无法正常工作。即只有当整个循环完成时,进度条才会打印到标准输出。进度条。 [gfortran vs 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(但双精度)一切正常。

当我使用ifort时,哪里出错? 感谢名单

+0

解决:如果(率(ⅰ).gt.ratemax)然后 ratemax =率(ⅰ) 1100格式(1×,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 $ ratemax,'Progress:',100. * real(nmix)/ real(nmixing),'%' – emanuele 2011-05-11 10:09:12

+0

如果解决了问题,接受! – Simon 2011-05-11 15:22:29

+1

请务必使用标签[tag:fortran],并在必要时添加版本以区分您的问题是否具体。例如,您不能使用Fortran 2008,而只能使用Fortran 90。 – 2015-12-17 11:48:28

回答

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