- 积分
- 544
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-4-17
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2016-4-6 16:01:57
|
显示全部楼层
The following read program in Fortran:
real*4 data(1440,400),datain(1440,400)
real lon
real lat
CHARACTER*1 cvarin (4), cvar (4)
C
EQUIVALENCE (cvarin, varin)
EQUIVALENCE (cvar, var)
c
c
open(10,file='3B42_daily.2009.05.31.6.bin',
+ access='DIRECT',status='OLD',recl=1440*400*4)
c
read(10,rec=1)datain
c
C This part is for Little Endian machine
C (The data was written in Big Endian).
C Now that the data has been read into the array, swap
C the byte order.
C
DO i = 1, 1440
DO j = 1, 400
varin = datain (i, j)
cvar (1) = cvarin (4)
cvar (2) = cvarin (3)
cvar (3) = cvarin (2)
cvar (4) = cvarin (1)
data (i, j) = var
END DO
END DO
c
c
c
do 15 jj=1,400
do 15 ii=1,1440
if (ii <= 720) then
lon = 0.125 + 0.25*(ii-1)
else
lon = 0.125 + 0.25*(ii-1) - 360.0
endif
lat = -49.875+0.25*(jj-1)
write(*,*)lon,lat,data(ii,jj)
15 continue
c
close(10)
c
end
A sample program in Matlab
% This program is to read a TRMM 3B42 daily binary file
fid = fopen('3B42_daily.2009.05.31.6.bin', 'r');
a = fread(fid, 'float','b');
fclose(fid)
data = a';
count = 1;
for i_lat = 1:400
for j_lon = 1:1440
lat = -49.875 + 0.25*(i_lat - 1)
if j_lon <= 720
lon = 0.125 + 0.25*(j_lon - 1)
else
lon = 0.125 + 0.25*(j_lon - 1) - 360.0
end
daily_rain_total = data(count)
count = count + 1;
end
end
这是readme文件说明 |
|