我使用一个小型内部集群(约31台机器)来帮助完成数值地下水模型的平行运行。在地下水模型完成后,一个短后处理器操作一些数据,供正在收集平行运行输出的代码使用。它曾经是后处理器,用Fortran编写,并使用Vis内部的英特尔Visual Fortran编译。 Studio 2010是可分发的,这意味着我可以将.exe放入群集中分发的其他文件中,并在各种机器上运行。但是,如果我使用Visual Studio 2012与Intel Fortran XE 2013编译完全相同的Fortran,则在群集计算机上出现错误消息:“程序无法启动,因为MSVCRR110.dll从计算机中丢失。请尝试重新安装解决这个问题的计划。“Fortran .exe不再是“独立的”吗?
我喜欢使用Fortran的原因之一是它曾经是独立的。换句话说,如果我编写了一些小程序来用另一种语言(比如说R或者Python)来完成一些短小精悍的任务,那么我必须在所有集群机器上安装这些程序,或者用我的分布式文件“沙箱”安装这些程序。忘记试图使用C#或VB等,因为那么群集机器需要安装.NET框架。目前我可以回去使用VS2010进行编译,但是我不希望这个选项对我来说可用时间更长。在VS2012中保持Fortran程序“独立”还有另一种选择吗?正如你可以在下面的代码,没有什么复杂的,没有理由看它不会是一个自包含可执行文件:
program Calc_Seep
implicit none
! Variables
integer reason
real wp,time,ft,fts,fr,fo,fst,fro,loss1,loss2,loss3
character (len=120) line
character*50 txt
character*20 fmt
wp = 9.38 !a needed constant value
!read(*,*) txt
open(5,file='balance.out')
read(5,'(A)') line
do while (.NOT.line.EQ.'')
read(5,'(A)',IOSTAT=Reason) line
if (Reason < 0) exit
end do
read(line,*) time,ft,fts,fr,fo,fst,fro
!acre-ft/mi/yr
loss1 = (ft/time)*0.3048*5280*208*24/(0.3048**3)/43560.17
!ft/day
loss2 = (ft/time)*24/(0.3048**2)/wp
!cfs/mi
loss3 = (ft/time)*24/(0.3048**2)*5280/86400
close(5)
!now write the processed values to a file
open(5,file="Seepage.out")
write(5,'(A)') "acre-ft/mi/yr ft/day cfs/mi"
write(5,100) loss1, loss2, loss3
100 format(3f13.6)
close(5)
end program Calc_Seep
在每台机器上安装visual C运行库并不难。但很可能你不再编译“静态”应用程序,这会将任何“外部”库直接放入exe。 –
只需将程序运行时库复制或使用'-static'或'-static-intel'编译即可。 –
请参阅http://msdn.microsoft.com/en-us/library/2kzt1wy3%28v=vs.110%29.aspx – steabert