大家好!我有个关于派生结构读取数据的问题,想请教一下。
现在我有一个别人写好的程序,利用派生结构读取数据,但是我在自己IVF(Windows)下调试时,IVF就卡住自动重启了,主要的代码如下:
[Fortran] 纯文本查看 复制代码 TYPE type_rad_FY3
INTEGER :: yyyy,mn,dd,hh,mm,ss
INTEGER :: iscanline,iscanpos
REAL*4 :: rlat,rlon !lat/lon in degrees for Anfovs
INTEGER :: isurf_height, isurf_type !height/type for Anfovs
REAL*4 :: satzen,satazi,solzen,solazi !scan angles for Anfovs
REAL*4 :: tbb(20) !bright temperatures
! REAL*4 :: btemps(20)
INTEGER :: iavhrr(13),ihirsflag
INTEGER :: iprepro(5) ! values from pre-processing
REAL*4 :: clfra ! Cloud cover (<1.0)
REAL*4 :: ts ! Skin temperature
REAL*4 :: tctop ! Cloud top temperature
END TYPE type_rad_FY3
do iscan=1,nscan
! 1.0 Read fy3 data
read(lnbufr,end=1000) rad !//此句
num_tovs_file = num_tovs_file + 1
! 2.0 Extract observation location and other required information
! QC1: judge if data is in the domain, read next record if not
!------------------------------------------------------------------------
! rlat = bfr1bhdr(bufr_lat)
! rlon = bfr1bhdr(bufr_lat)
! if (rlon < 0.0) rlon = rlon+360.0
info%lon=rad%rlon
info%lat=rad%rlat
! call da_llxy(info,loc,outsside,outside_all)
if (outside_all) cycle
ifov=rad%iscanpos
year=rad%yyyy
month=rad%mm
day=rad%dd
hour=rad%hh
minute=rad%mm
second=rad%ss
......
程序在运行到红色read语句就重启了。我查看的参考书对于派生结构的读取时rad%yyyy,但是他的程序用到了DO循环,按道理type定义应该是数组才对,利用rad(i)%yyyy来读取,我是这么理解。
所以我就不到程序的原作者为什么这么写?详细的程序在附件里(出错语句在243行)。谢谢大家!
|