ERA-interimåè§£æãã€ããªãFortranã§èªã¿èŸŒãæ¹æ³
æ¥åžžç掻ã«ãããŠåè§£æããŒã¿ã®ãçµµæãããããæã¯GrADSã䜿ãã°è¯ãã®ã ãïŒããŸã«ã¡ãã£ãšè€éãªè§£æãããããšããå Žåã¯Fortrançã§èšç®ããæ¹ãæ¥œãªããšããããèšèªã¯Fortranã§ãªããŠãè¯ãã®ã ãïŒäŒçµ±çã«ã¿ããªäœ¿ã£ãŠããŠæ
å ±éãå€ããšããäºæ
ããFortranã§ããããšã«ããããŸãERA-interimã§ãªããŠãïŒJRA-55ã ãããšNCEPã ãããšã»ãŒåãããã«ããŠã§ãã(ã¯ã)ã
(A) ãã€ããªãã¡ã€ã«(.grd,.bin)ããªãïŒGRIBãã¡ã€ã«(.grb,.grib)ãããªãå Žå
èªåã§å
¬åŒããããŠã³ããŒãããå ŽåïŒã»ãŒGRIB圢åŒã§åŸããããGRIBã¯ãã®ãŸãŸFortranã§ã¯(ç°¡åã«ã¯)èªããªãã®ã§ïŒãã€ããªåœ¢åŒã«å€æ(ãã€ããªãã³ã)ããå¿
èŠããããGRIBã«ã¯GRIB-1圢åŒãšGRIB-2圢åŒãããïŒããããwgribãšwgrib2ãšããç°ãªãã³ãã³ãã䜿ã£ãŠãã³ããããããæ¹ã¯æ©åŽå
çã®ãµã€ã(ããããã)ã«è©³ãããæ°ãåããããã®ããã°ã§ãèšäºãæžãã
åºåããéã«ã¯yæ¹åã®æ ŒçŽé (åâå or åâå)ïŒzæ¹åã®æ ŒçŽé (äžå±€âäžå±€ or äžå±€âäžå±€)ã«æ³šæãGrADSã§ãèªããããã«ããå Žåã¯ãããç¡ã(wgrib -nh / wgrib2 -no_header)ã«ããã
ãã€ããªãã¡ã€ã«ãäœã£ããæ¬¡ã®(B)ã«é²ãã
(B) ãã€ããªãã¡ã€ã«(.grd,.bin)ãšGrADSçšctlãã¡ã€ã«ãããå Žå
ãšããããïŒãããèŠãã°è¯ãããã ããu(lat, lon, lev)ããšããéšåã¯ãu(lon, lat, lev)ãã®èª€ãã ãšèããããã
æ°è±¡ããŒã¿ã®ãã€ããªãã¡ã€ã«ã¯æéïŒå€æ°ïŒé«åºŠïŒç·¯åºŠïŒçµåºŠã®èŸæžé ã«æ ŒçŽãããŠãããçµåºŠã¯è¥¿âæ±ã®é ã緯床ãšé«åºŠã®æ ŒçŽé ã¯å Žåã«ãããïŒããã¯ãã®ãã€ããªãã¡ã€ã«ã«å¯Ÿå¿ããctlãã¡ã€ã«ãèŠãã°è¯ããoptionsã«yrevãšæžãããŠããã°åâåïŒããã§ãªããã°åâåãzrevãšæžãããŠããã°äžå±€âäžå±€ãããã§ãªããã°äžå±€âäžå±€ã§ããã
2010幎1æã®ãžãªããã³ã·ã£ã«ã®ãã€ããª"z.201001.grd"ãã135E 30Nã®ãžãªããã³ã·ã£ã«é«åºŠã6æéããšåºåãããµã³ãã«ã³ãŒãã¯ä»¥äžã®éãã
program read_data
implicit none
integer, parameter :: nlon = 240
integer, parameter :: nlat = 121
integer, parameter :: nlev = 37
real(4), parameter :: cnst_g = 9.81
real(4), dimension(nlon,nlat) :: dat
open(11, file="z.201001.grd", access="direct", form="unformatted", recl=4*nlon*nlat)
z = 22
do t = 1, 31*4
   read(11, rec=(t-1)*nlev+z) dat
  write(*,*) dat(91,41)/cnst_g
end do
close(11)
z=22ã¯500hPaïŒ91ã135EïŒ41ã30Nã«å¯Ÿå¿ãããreclã®4*ã¯4ããããã€ããªã ãããããã«åãããŠdatãreal(4)ãšããŠãããreclã®é·ãã¯å¿
ãããããã§ããå¿
èŠã¯ãªãïŒrecl=4*nlon*nlat*nlev*ntimãšããŠread(11, rec=1)ãšããŠäžæ¬ã§èªãããšãã§ãã(ã¡ã¢ãªãé£ãã)ããããã¯recl=4ïŒrec=(t-1)*nlev*nlat*nlon+(z-1)*nlat*nlon+(y-1)*nlon+xãšããŠ1ã€ãã€ãèªã¿èŸŒãããšãã§ããã
ã³ã³ãã€ã«ããæã«ã¯ïŒã³ã³ãã€ã«ãªãã·ã§ã³ãã€ããå¿
èŠããã
gfortran -fconvert=big-endian -frecord-marker=4 hoge.f90
ifort -convert big_endian -assume byterecl hoge.f90
ãã€ããªãã¡ã€ã«ã«ã¯ããã°ãšã³ãã£ã¢ã³ãšãªãã«ãšã³ãã£ã¢ã³ãšåŒã°ãã2ã€ã®çš®é¡ã®ãã®ããããæ°è±¡ããŒã¿ã®ãã€ããªã¯éåžžããã°ãšã³ãã£ã¢ã³ãçšããããã®ã§ïŒåè
ã®ãªãã·ã§ã³ãã€ããå¿
èŠãããã
ãŸãreclã®åäœã«ã¯wordãšbyteãããïŒããã§ã¯byteã§èªã¿åºãããã®ã§åŸè
ã®ãªãã·ã§ã³ãã€ãããgfortranã®å Žå㯠-frecord-marker=4ãæå®ããªããŠãããŸããããïŒifortã®å Žå㯠-assume byterecl ã¯å¿
é ã