[Thu Feb 23 18:13:07 JST 2017]
[~/2017.Heavy.Rain/Radar.Precip.1hr]
[am@aofd165]
$ ls
10min.to.1hr/ quick.msm.ncl
10min_to_1hour* quick.msm.run.sh*
Fig/ r1h.ctl
R1h.20160829_09.eps r1h.gs
R1h.20160830_00.eps radar.precip.10m.ncl
R1h.20160830_09.eps radar.precip.10m.run.sh*
intm.data/ radar.precip.1hr.run.sh*
jmaradar2bin* read_jmaradar/
namelist.10min_to_1hour.txt runncl.sh*
obj/ view_radar.ctl
output/
$ cd read_jmaradar/
$ ls
Makefile data_write.c read_section3.c swapping.c
README grib2.h read_section4.c swapping_float.c
auto_endian_check.c main.c read_section5.c view_radar.ctl
check_next.c read_section0.c read_section6.c
check_radar.c read_section1.c read_section7.c
$ make clean; make
.....................
cp -v jmaradar2bin ..
`jmaradar2bin' -> `../jmaradar2bin'
$ cd ..
$ cd 10min.to.1hr/
$ make clean; make
if [ ! -d ../obj ]; then \
mkdir -p ../obj ; \
fi
ifort -c -traceback -module ../obj -c -o ../obj/10min_to_1hour.o 10min_to_1hour.f90
ifort -o 10min_to_1hour ../obj/10min_to_1hour.o -module ../obj
cp 10min_to_1hour ..
$ radar.precip.1hr.run.sh 20160830 09
......
Output time: 20160830 09
......
GrADS control file, r1h.ctl
dset output/20160830_09.bin
undef -999.9
xdef 2560 LINEAR 118.006250 0.012500
ydef 3360 LINEAR 20.004167 0.008333
zdef 1 LEVELS 1000
tdef 1 LINEAR 09:00Z30Aug2016 1hr
vars 1
rr 0 0 rainfall
endvars
$ grads -bcp "r1h.gs"
......
Output: R1h.20160830_09.eps
[Thu Feb 23 18:22:50 JST 2017]
[~/2017.Heavy.Rain/Radar.Precip.1hr]
[am@aofd165]
$ srcdump.sh radar.precip.1hr.run.sh 10min.to.1hr/*.f90 10min.to.1hr/makefile r1h.gs>tmp.txt
------------------------------
List of the following files:
------------------------------
radar.precip.1hr.run.sh
10min.to.1hr/10min_to_1hour.f90
10min.to.1hr/makefile
r1h.gs
------------------------------
Machine info
------------------------------
aofd165.bio.mie-u.ac.jp
/work1/am/2017.Heavy.Rain/Radar.Precip.1hr
Thu Feb 23 18:23:48 JST 2017
======================
radar.precip.1hr.run.sh
======================
#!/bin/sh
rdir=/mnt/raid112MANDA/KakenA.H28/JMA-Radar
nx=2560
ny=3360
x0=118.006250
y0=20.004167
dx=0.012500
dy=0.008333
if [ $# -ne 2 ]; then
echo ERROR in $0: Wrong argument.
echo
echo Usage: $0 yyyymmdd hh
echo
exit 1
fi
yyyymmdd_i=$1
hh_i=$2
ss="00"
if [ $hh_i -lt 0 -o $hh_i -gt 23 ]; then
echo
echo ERROR in $0
echo "hh must be 0 <= hh <= 23."
echo
exit 1
fi
if [ $hh_i = "00" ]; then
yyyymmdda[0]=$(date -d"${yyyymmdd_i}"-1days '+%Y%m%d')
hha[0]="23"
mia[0]="10"
yyyymmdda[1]=${yyyymmdda[0]}
hha[1]="23"
mia[1]="20"
yyyymmdda[2]=${yyyymmdda[0]}
hha[2]="23"
mia[2]="30"
yyyymmdda[3]=${yyyymmdda[0]}
hha[3]="23"
mia[3]="40"
yyyymmdda[4]=${yyyymmdda[0]}
hha[4]="23"
mia[4]="50"
yyyymmdda[5]=${yyyymmdd_i}
hha[5]="00"
mia[5]="00"
else
yyyymmdda[0]=${yyyymmdd_i}
hha[0]=$(printf %02d $(expr ${hh_i} - 1))
mia[0]="10"
yyyymmdda[1]=${yyyymmdd_i}
hha[1]=${hha[0]}
mia[1]="20"
yyyymmdda[2]=${yyyymmdd_i}
hha[2]=${hha[0]}
mia[2]="30"
yyyymmdda[3]=${yyyymmdd_i}
hha[3]=${hha[0]}
mia[3]="40"
yyyymmdda[4]=${yyyymmdd_i}
hha[4]=${hha[0]}
mia[4]="50"
yyyymmdda[5]=${yyyymmdd_i}
hha[5]=${hh_i}
mia[5]="00"
fi
outdir="Fig"
mkdir -vp $outdir
itmdir="intm.data"
mkdir -vp $itmdir
dirs="$rdir $itmdir $outdir"
for dir in $dirs; do
if [ ! -d $dir ]; then
echo Error in $0 : No such directory, $dir
exit 1
fi
done
prefix="Z__C_RJTD_"
postfix="_RDR_JMAGPV_Ggis1km_Prr10lv_ANAL_grib2.bin"
cwd=$(pwd)
i=0
while [ $i -le 5 ]; do
yyyymmdd=${yyyymmdda[$i]}
yyyy=${yyyymmdd:0:4}
mm=${yyyymmdd:4:2}
dd=${yyyymmdd:6:2}
hh=${hha[$i]}
mi=${mia[$i]}
echo "$yyyy $mm $dd $hh $mi"
indir=$rdir"/"$yyyy"/"$mm"/"$dd
if [ ! -d $indir ]; then
echo
echo Error in $0 : No such directory, $dir
echo
exit 1
fi
yyyymmddhhmiss=${yyyy}${mm}${dd}${hh}${mi}${ss}
input[$i]=${indir}/${prefix}${yyyymmddhhmiss}${postfix}
if [ ! -f ${input[$i]} ]; then
for f in ${indir}/${prefix}${yyyymmddhhmiss}_RDR_JMAGPV__grib2.tar; do
echo
echo "Going to ${indir} ..."
echo
cd ${indir}
tar -xvf ${f}
if [ $? -ne 0 ]; then
echo
echo ERROR in $0 while running tar command.
echo tar file: ${f}
echo
echo "Going back to ${cwd} ..."
echo
cd ${cwd}
echo "ABNORMAL END"
echo
exit 1
fi
done
echo
echo "Going back to ${cwd} ..."
echo
cd ${cwd}
fi
if [ ! -f ${input[$i]} ]; then
echo
echo Error in $0 : No such file, ${input[$i]}
echo
exit 1
fi
intmfile[$i]=${itmdir}/${yyyy}${mm}${dd}_${hh}${mi}${sc}_radar10m.bin
command="./jmaradar2bin ${input[$i]} ${intmfile[$i]}"
echo
echo $command
echo
$command
if [ $? -ne 0 ]; then
echo
echo "Error in $0 while running the following:"
echo " $command"
echo
exit 1
fi
i=$(expr $i + 1)
done #i
i=0
echo
while [ $i -le 5 ]; do
echo "Input file: ${input[$i]}"
i=$(expr $i + 1)
done #i
i=0
echo
while [ $i -le 5 ]; do
echo "Intermidiate file: ${intmfile[$i]}"
i=$(expr $i + 1)
done #i
echo
exe=10min_to_1hour
if [ ! -f $exe ]; then
echo
echo ERROR in $0: No such file, $exe
echo
exit 1
fi
namelist="namelist.${exe}.txt"
outdir="output"
mkdir -vp $outdir
output="${outdir}/${yyyymmdd_i}_${hh_i}.bin"
cat <<EOF >$namelist
¶
im=${nx},
jm=${ny},
input0="${intmfile[0]}",
input1="${intmfile[1]}"
input2="${intmfile[2]}"
input3="${intmfile[3]}"
input4="${intmfile[4]}"
input5="${intmfile[5]}"
output="${output}"
&end
EOF
command="$exe < $namelist"
echo
echo $command
echo
$exe < $namelist
if [ $? -ne 0 ]; then
echo
echo "Error in $0 while running the following:"
echo " $command"
echo
exit 1
fi
yyyy=${yyyymmdd_i:0:4}
mm=${yyyymmdd_i:4:2}
dd=${yyyymmdd_i:6:2}
hh=${hh_i}
if [ $mm = "01" ]; then mmm="Jan"; fi
if [ $mm = "02" ]; then mmm="Feb"; fi
if [ $mm = "03" ]; then mmm="Mar"; fi
if [ $mm = "04" ]; then mmm="Apr"; fi
if [ $mm = "05" ]; then mmm="May"; fi
if [ $mm = "06" ]; then mmm="Jun"; fi
if [ $mm = "07" ]; then mmm="Jul"; fi
if [ $mm = "08" ]; then mmm="Aug"; fi
if [ $mm = "09" ]; then mmm="Sep"; fi
if [ $mm = "10" ]; then mmm="Oct"; fi
if [ $mm = "11" ]; then mmm="Nov"; fi
if [ $mm = "12" ]; then mmm="Dec"; fi
ctl=r1h.ctl
cat <<EOF>$ctl
dset ${output}
undef -999.9
xdef ${nx} LINEAR ${x0} ${dx}
ydef ${ny} LINEAR ${y0} ${dy}
zdef 1 LEVELS 1000
tdef 1 LINEAR ${hh}:00Z${dd}${mmm}${yyyy} 1hr
vars 1
rr 0 0 rainfall
endvars
EOF
echo
echo "Output time: ${yyyymmdd_i} ${hh_i}"
echo
echo
echo GrADS control file, $ctl
echo
cat $ctl
echo
exit 0
----------------------
End of radar.precip.1hr.run.sh
----------------------
======================
10min.to.1hr/10min_to_1hour.f90
======================
program ten2one
! Description:
!
! Host: aofd165.fish.nagasaki-u.ac.jp
! Directory: /work2/kunoki/to_manda_sensei/Tools/JMA_radar/10min.to.1hr
!
! ifortの場合以下のようにオプション-assume bytereclを付けてコンパイルすること。
! $ ifort -assume byterecl hoge.f90
! こうしないと、"recl"がbyte単位ではなく、word単位になってしまう
!
! use
! implicit none
real,allocatable:: rr(:,:),rr1(:,:)
integer im,jm
character(len=500)::input0, input1, input2, input3, input4, input5
character(len=500)::output
namelist /para/im,jm,input0, input1, input2, input3, input4, input5, output
read(*,nml=para)
print '(A,A)','Input: ',trim(input0)
print '(A,A)','Input: ',trim(input1)
print '(A,A)','Input: ',trim(input2)
print '(A,A)','Input: ',trim(input3)
print '(A,A)','Input: ',trim(input4)
print '(A,A)','Input: ',trim(input5)
print '(A,A)','Output: ',trim(output)
print *
allocate(rr(im,jm),rr1(im,jm))
rr(:,:)=0.0
open(10,file=input0,form="unformatted",access="direct",recl=4*im*jm,action="read")
read(10,rec=1)rr1
rr(:,:)=rr(:,:)+rr1(:,:)
close(10)
open(10,file=input1,form="unformatted",access="direct",recl=4*im*jm,action="read")
read(10,rec=1)rr1
rr(:,:)=rr(:,:)+rr1(:,:)
close(10)
open(10,file=input2,form="unformatted",access="direct",recl=4*im*jm,action="read")
read(10,rec=1)rr1
rr(:,:)=rr(:,:)+rr1(:,:)
close(10)
open(10,file=input3,form="unformatted",access="direct",recl=4*im*jm,action="read")
read(10,rec=1)rr1
rr(:,:)=rr(:,:)+rr1(:,:)
close(10)
open(10,file=input4,form="unformatted",access="direct",recl=4*im*jm,action="read")
read(10,rec=1)rr1
rr(:,:)=rr(:,:)+rr1(:,:)
close(10)
open(10,file=input5,form="unformatted",access="direct",recl=4*im*jm,action="read")
read(10,rec=1)rr1
rr(:,:)=rr(:,:)+rr1(:,:)
close(10)
rr(:,:)=rr(:,:)/6.0
open(10,file=output,form="unformatted",access="direct",recl=4*im*jm)
write(10,rec=1)rr
close(10)
end program ten2one
----------------------
End of 10min.to.1hr/10min_to_1hour.f90
----------------------
======================
10min.to.1hr/makefile
======================
#
#
#j Fortran77とFortran90/95の混成プログラムのコンパイル用makefile
#
#j 作成 Sun Feb 15 15:16:02 2009
#
#j 注:ごく簡単な動作チェックしか行っていない
#j サフィックスルールがこれで正しいかどうかチェックする必要あり
#
#j 参考文献
#j makefile の書き方
#j http://www.eis.osakafu-u.ac.jp/~yabu/soft/makefile.html
#j Makefile小技と新バージョンのDelFEM(FEMとUIの日記@New York)
#j http://d.hatena.ne.jp/etopirika5/20091207/1260207955
#
#-----------------------------------------
#j マクロの定義
#-----------------------------------------
#j コンパイラの指定
FC=ifort
#FC=gfortran
#FC=g77
#FC=f77
#j OBJDIR (オブジェクトファイルをおくディレクトリ)
OBJDIR=../obj
#-----------------------------------------
#j コンパイルオプション(ifort)
#-----------------------------------------
#j デバッグ用オプション(はじめて実行するときには必ずこのオプションをつけてコンパイルする)
FDFLAGS= -traceback #-CB -fpe0
#j コンパイルオプション
FFLAGS=-module ${OBJDIR}
#j -module : モジュールファイル(.mod)を置く場所を指定する
#j 最適化用(他にも何種類かある. ifort -helpかマニュアルを見て調べる)
#FFLAGS = -O3 -module ${OBJDIR}
#j 倍精度
#FFLAGS = -r8 -module ${OBJDIR}
#j 入力データのバイト・スワップ(大型計算機のバイナリデータを読む時などにつかう)
#FFLAGS = -assume byterecl #-convert big_endian -module ${OBJDIR}
#-----------------------------------------
#j リンク用のオプション
#-----------------------------------------
LDFLAGS=-module ${OBJDIR}
#j ターゲット名(最終的に作りたい実行ファイル名)
TARGET1=10min_to_1hour
TARGET2=
TARGETS=$(TARGET1) $(TARGET2)
#j MOD (Fortran90以降のモジュールファイル)
MOD=
#j SRC7 (Fortran77のソースファイル)
SRC7=
#j SRC9 (Fortran90のソースファイル)
SRC9=10min_to_1hour.f90
#j OBJ1 (ターゲットを作るのに必要なオブジェクトファイル名)
OBJM=$(MOD:.f90=.o)
OBJ7=$(SRC7:.f=.o)
OBJ9=$(SRC9:.f90=.o)
OBJTMP=$(OBJM) $(OBJ7) $(OBJ9)
OBJ1=$(OBJTMP:%=${OBJDIR}/%)
MOD2=
#j SRC7 (Fortran77のソースファイル)
SRC72=
#j SRC9 (Fortran90のソースファイル)
SRC92=
#j OBJ (ターゲットを作るのに必要なオブジェクトファイル名)
OBJM2=$(MOD2:.f90=.o)
OBJ72=$(SRC72:.f=.o)
OBJ92=$(SRC92:.f90=.o)
OBJTMP2=$(OBJM2) $(OBJ72) $(OBJ92)
OBJ2=$(OBJTMP2:%=${OBJDIR}/%)
OBJ=$(OBJ1) $(OBJ2)
#-----------------------------------------
#j ここからコンパイルのルールの記述
#-----------------------------------------
all: mkobjd $(TARGETS)
$(TARGET1): $(OBJ1)
$(FC) -o $@ $(OBJ1) ${LDFLAGS}
cp $(TARGET1) ..
$(TARGET2): $(OBJ2)
$(FC) -o $@ $(OBJ2) ${LDFLAGS}
#j 暗黙のサフィックスルールを無効にする
.SUFFIXES:
#j サフィックスの追加
.SUFFIXES: .o .f .f90
#j f77のソースファイルのコンパイル(.f用のサフィックスルール)
${OBJDIR}/%.o : %.f
$(FC) -c ${FDFLAGS} ${FFLAGS} -c -o $@ $<
#j f90のソースファイルのコンパイル(.f90用のサフィックスルール)
${OBJDIR}/%.o : %.f90
$(FC) -c ${FDFLAGS} ${FFLAGS} -c -o $@ $<
#j オブジェクトファイルを削除
clean:
rm -rf $(OBJ) ${OBJDIR}/*.mod
#j オブジェクトファイルと実行ファイルを削除
distclean:
rm -rf $(OBJ) ${OBJDIR}/*.mod $(TARGETS) \
rm -rf ${OBJDIR}
#j オブジェクトファイルを置くディレクトリを作成
mkobjd:
if [ ! -d ${OBJDIR} ]; then \
mkdir -p ${OBJDIR} ; \
fi
run:
cd .. ; \
./run.sh 2>&1 > log.txt ; \
cd src
#j tarファイルを作る
tar:
tar cvf $(TARGET1).tar ./*.f90 ./*.f ./*.c ./*.h ./*.txt makefile
----------------------
End of 10min.to.1hr/makefile
----------------------
======================
r1h.gs
======================
ctl='r1h.ctl'
'open 'ctl
'cc'
'q dims'
line=sublin(result,5)
datetime=subwrd(line,6)
hh=substr(datetime,1,2)
dd=substr(datetime,4,2)
mmm=substr(datetime,6,3)
yyyy=substr(datetime,9,4)
timeutc=hh'00UTC' dd mmm yyyy
say
say timeutc
say
if(mmm='JAN');mm='01';endif
if(mmm='FEB');mm='02';endif
if(mmm='MAR');mm='03';endif
if(mmm='APR');mm='04';endif
if(mmm='MAY');mm='05';endif
if(mmm='JUN');mm='06';endif
if(mmm='JUL');mm='07';endif
if(mmm='AUG');mm='08';endif
if(mmm='SEP');mm='09';endif
if(mmm='OCT');mm='10';endif
if(mmm='NOV');mm='11';endif
if(mmm='DEC');mm='12';endif
'color 10 100 10 -kind white->rainbow'
'set gxout shade2'
'd rr'
'cbarn'
'draw title 'timeutc' R`b1h`n [mm/hr]'
fig='R1h.'yyyy''mm''dd'_'hh'.eps'
'gxprint 'fig
say
say 'Output: 'fig
say
'close 1'
'quit'
----------------------
End of r1h.gs
----------------------