我是一名研究人员,正在使用用 Fortran 编写的程序。我有非常基本的编码技能,所以我需要一些帮助才能正确编译一些代码。
在显示代码之前,我将提供一些背景知识。我正在处理大量数据,这将需要 64 位编译和大于 2 GB 的内存。我在代码中注意到的第一件事是许多变量被写成“真实”,但在我的研究中我发现“双精度”允许更大的变量,并且会是一个更灵活的选择,所以我改变了所有“真实”变量到“双精度”变量。
还有一个包含在 fortran 构建文件“dist.f”的编译中的文件,称为“geocoord.inc”。我发现变量被保存到一个公共块中,但我再次需要可以容纳大量数据的东西。正如我被引导相信的那样,一个模块将是一个更好的程序。我需要一些建议来将此包含文件转换为与模块程序一起正常工作,我将在下面列出。
区 f:
c Convert latitude and longitude to kilometers relative
c to center of coordinates by short distance conversion.
subroutine dist(xlat, xlon, xkm, ykm)
implicit none
c Parameters:
double precision xlat, xlon ! (input)
double precision xkm, ykm ! (output)
c Local variables:
double precision lat1, lat2, lat3
double precision q
double precision xx
double precision yp
include "geocoord.inc"
c Set up short distance conversion by subr. SETORG
q=60*xlat-olat
yp=q+olat
lat1=datan(rlatc*dtan(RAD*yp/60.0))
lat2=datan(rlatc*dtan(RAD*OLAT/60.0))
LAT3=(LAT2+LAT1)/2.
xx=60*xlon-olon ! - wegen LON E
q=q*aa
xx = xx*bb*dcos(LAT3)
IF(rotate.ne.0.) then
c** rotate coordinate system anticlockwise
yp=cost*q+sint*xx
xx=cost*xx-sint*q
q=yp
ENDIF
xkm=xx
ykm=q
return
end
Geocoord.inc:
double precision rearth
double precision ellip
double precision rlatc
double precision rad
double precision olat, olon
double precision aa, bb, bc
double precision sint, cost
double precision rotate
integer icoordsystem
common /GEO_COORSYSTEM/ rearth, ellip, rlatc, rad,
& olat, olon, aa, bb, bc, sint, cost, rotate,
& icoordsystem
感谢您提供的任何建议,并为我对 Fortran 的所有事情的相对无知表示歉意!