MANAL を読んでテキスト出力

MANAL を読んでテキスト出力する tcsh スクリプトのサンプル

スクリプトのダウンロード

研究室への説明文 (2009.1)

研究室の皆さん、特に山田君

玉川です。気象庁客観解析データの MANAL を
読み出して、経度、緯度、データの形のテキストファイルをつくる
スクリプトのサンプルを送ります。

このまま、 192.168.1.12 の PC 上へ置いて
chmod +x Textdump.tcsh
./Textdump.tcsh
とすると、最初だけ wgrib.c を取りに行きますが、
2008 8 27 06Z の 1000mb の気温データを読み出して
経度 緯度 気温 のデータを並べたデータセットを作成します。
このデータの中から、例えば欲しい場所の周囲のデータを
下の行のように、経度、緯度を使って (上限 下限をそれぞれ x1, x2, y1, y2 と書いていますが
実際には、数値をいれてください )

awk '{if( x1 <= $1 && $1 <= x2 && y1 <= $2 && $2 <= y1 ) print $1, $2, $3}' < 2005082706_TMP_1000mb.txt

などとして、とりだして使ってください。

最初の方の読み出すデータ名や、WGRIB の行の
TMP 1000 mb の付近を適当に変更すると、他のデータ、他の項目も
読み出せます。

他のPCで使う時も、最初の方の FC や GRBFILE を適切に設定しなおせば
OKです。

--------------------------------------------------------------------------------
〒 501-1193 岐阜市柳戸1-1
岐阜大学 流域圏科学研究センター
玉川一郎 (e-mail: tama@green.gifu-u.ac.jp)
phone/fax 兼用: 058-293-2430
WWW: 	http://tama.green.gifu-u.ac.jp/~tama
--------------------------------------------------------------------------------
#!/bin/tcsh
set WGRIB = ./wgrib
set GRBFILE = /work/JMA/manal/2005/08/MANAL_2005082706.grb
set OUTFILE = 2005082706_TMP_1000mb
set FC     = gfortran


if( -e wgrib.c)  then
echo ok
else
 echo no
   wget ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib/wgrib.c
endif


cc $WGRIB.c -o $WGRIB

$WGRIB $GRBFILE |  grep TMP | grep '1000 mb' | $WGRIB $GRBFILE -i -bin -nh -o ${OUTFILE}.bin

# ./wgrib ~/JMA_DATA/MANAL_200508/MANAL_2005082706.grb \
#   | grep TMP | grep '1000 mb' |\
#   ./wgrib ~/JMA_DATA/MANAL_200508/MANAL_2005082706.grb -i -bin -nh -o 2005082706_TMP_1000mb.bin2


cat << ENDPROGRAM > bin2txt_manal.f90

program bin2txt_manal
implicit none
  integer, parameter :: m=361, n=289
  real :: x(m), lat, lon
  character(len=1024) :: infile, outfile
  integer :: argc, i, j

  argc = iargc()
  if( argc < 2 ) then
   write(0,*) 'Please give me filename to read and write'
   write(0,*) './bin2txt_manal  infile.bin outfile.txt'
   stop
  end if
  call getarg(1, infile)
  call getarg(2, outfile)

  open(unit=10, file=infile, err=900, &
    access='direct', form='unformatted', recl=4*m )
  open(unit=11, file=outfile, err=910)

  do j=1, n
    read(unit=10, rec=j) (x(i), i=1,m)
    do i=1, m
     call ijtolatlon( i, j, lon, lat, m, n )
     write(11,*) lon, lat, x(i)
    end do
  end do

  close(10); close(11)


 stop

900  write(0,*) 'Open error ' ,infile
 stop

910  write(0,*) 'Open error ' ,outfile
 stop
 end

subroutine ijtolatlon( i, j, lon, lat, m, n )
!   for MANAL from JMA (10km grid)

  integer :: i, j
  real    :: lat, lon

  integer :: m, n
  integer :: j1
  integer :: xs=245, ys=205
  real*8 :: xp, yp
  real*8, parameter    :: fact=180.0/3.14159265358979323846
  real, parameter    :: dx=1.0e4, dy=1.0e4

 j1 = n+1 -j

   xp = (i-xs)*dx
   yp = 7.71061e6 + (j1-ys)*dy

!   write(*,*) 'xp, yp:', xp, yp

   lat = 90.0 - 2.0*fact*atan((1.37003e-10)*((xp**2 + yp**2 )**0.69875))
   lon = 1.39750*fact*atan2(xp, yp)+140.0
end subroutine



ENDPROGRAM

$FC bin2txt_manal.f90 -o bin2txt_manal

./bin2txt_manal ${OUTFILE}.bin ${OUTFILE}.txt

echo ${OUTFILE}.txt is produced
echo each line show 'longitude lattude value'

サンプルのページへ
CReSS に関連して MANAL の処理のページへ
研究室のページへ