[2014年 11月 7日 金曜日 13:08:56 JST]
[~/to_manda_sensei/Tools/Sonde.Velocity]
[kunoki@aofd165]
$ proc.meisei.run.sh
$ make clean; make
$ sonde_vertical_shear.run.sh
$ pl.vp.run.sh
proc.meisei.run.sh
#!/bin/bash
# Description:
#
# Author: AM
#
# Host: aofd165.fish.nagasaki-u.ac.jp
# Directory: /work2/kunoki/to_manda_sensei/Tools/Sonde.AM
#
# Revision history:
# This file is created by /usr/local/mybin/nbscr.sh at 10:07 on 06-05-2014.
cruise=MandA2012Leg3
list_out=$(basename $0 .sh).${cruise}.list.dat
indir="input"
outdir="proc1"
outdir2="output"
if [ ! -d $indir ]; then
echo No such directory, $indir
exit 1
fi
if [ ! -d $outdir ]; then
mkdir -vp $outdir
fi
if [ ! -d $outdir2 ]; then
mkdir -vp $outdir2
fi
postfix=filter
inlist=input.list.csv.txt
cat <<EOF > $inlist
${indir}/F2012061511S7101823.edit.CSV stn01
${indir}/F2012061512S7201269.edit.CSV stn02
${indir}/F2012061513S7201271.edit.CSV stn03
${indir}/F2012061514S7201274.edit.CSV stn04
${indir}/F2012061515S7201275.edit.CSV stn05
${indir}/F2012061516S7201270.edit.CSV stn06
${indir}/F2012061517S7201268.edit.CSV stn07
${indir}/F2012061518S7201267.edit.CSV stn08
${indir}/F2012061519S7201265.edit.CSV stn09
${indir}/F2012061520S7201264.edit.CSV stn10
${indir}/F2012061521S7201266.edit.CSV stn11
${indir}/F2012061522S7101814.edit.CSV stn12
${indir}/F2012061600S7101812.edit.CSV stn14
${indir}/F2012061601S7101816.edit.CSV stn15
${indir}/F2012061602S7101815.edit.CSV stn16
${indir}/F2012061603S7201257.edit.CSV stn17
${indir}/F2012061605S7201256.edit.CSV stn18
${indir}/F2012061607S7201260.edit.CSV stn19
EOF
exe=proc.meisei.sh
if [ ! -f $exe ]; then
echo Error in $0 : No such file, $exe
exit 1
fi
echo "# ${cruise}" > ${list_out}
#varlist="rh" #t rh p"
while read BUF ; do
ary=(`echo $BUF`) # 配列に格納
input=${ary[0]}
stn=${ary[1]}
# for var in $varlist; do
out="./${outdir}/${stn}.filter.txt"
out_check="./${outdir}/${stn}.check.txt"
${exe} $input ${out} ${out_check}
echo ${out} >> ${list_out}
# done # var
done < $inlist
exit 0
proc.meisei.sh
#!/bin/bash
# Description:
#
# Author: AM
#
# 明星ゾンデデータ整理
#
#
# Host: aofd165.fish.nagasaki-u.ac.jp
# Directory: /work2/kunoki/to_manda_sensei/Tools
#
# Revision history:
# This file is created by /usr/local/mybin/nbscr.sh at 10:00 on 06-05-2014.
if [ $# -ne 3 ]; then
echo Error in $0 : Wrong number of arugments
echo Usage: $0 input output output_check
exit 1
fi
in=$1
#var=$2
out=$2
out_check=$3
echo $(basename $0)
echo "Input: $in"
echo "Output: $out"
# awk : 必要なデータの抜き出し
# $12=高度 $10=風向 $11=風速 $21=気圧 $22=気温 $23=湿度
#
# sort: 並べ替え
# filter1d: 平滑化
#if [ $var = "t" ]; then
col1=11
#fi
#if [ $var = "rh" ]; then
col2=10
#fi
#if [ $var = "p" ]; then
col3=21
#fi
tmp1=$(basename $0 .sh).tmp1.txt
tmp2=$(basename $0 .sh).tmp2.txt
D2R=$(echo "scale=10; 3.14159265358979 / 180.0" | bc)
# echo $D2R
# Using height as a vertical coordinate
awk -v d2r=$D2R 'BEGIN{FS=","}{if (NR>7) print $12, \
$'"$col1"'*cos((270.0-$'"$col2"')*d2r), \
$'"$col1"'*sin((270.0-$'"$col2"')*d2r), \
$22 }' $in \
|\
sort -n | \
filter1d -Fb50 -T50/5000/50 -N4/0 > $tmp2
#awk '{if ($1!="NaN" && $2!="NaN" && $3!="NaN" && $4!="NaN") {print $0} \
#else {print $1,-999., -999., -999.}}' $tmp1 > $tmp2
nd=$(wc -l $tmp2 |awk '{print $1}')
echo $tmp2 $nd
echo "# input : $in" > $out
echo "# nd= $nd" >> $out
echo "# z[m], U[m/s], V[m/s] T[degC]" >> $out_check
cat $tmp2 >> $out
echo "# input : $in" > $out_check
echo "# CHECK FILE" >> $out_check
echo "# z, U, V, ws, wdir(azimuth), wdir" >> $out_check
awk -v d2r=$D2R 'BEGIN{FS=","}{if (NR>7) print $12, \
$'"$col1"'*cos((270.0-$'"$col2"')*d2r), \
$'"$col1"'*sin((270.0-$'"$col2"')*d2r),\
$'"$col1"', $'"$col2"' , 270.0- $'"$col2"'}' $in >> $out_check
# Using pressure as a vertical coordinate
#awk 'BEGIN{FS=","}{if (NR>7) print $21,$10,$11,$12,$22,$23}' $in|\
#sort -n |\
#filter1d -Fb5 -T100/1020/5 -N6/0 > $out
rm -f $tmp1 $tmp2
echo
sonde_vertical_shear.run.sh
#!/bin/bash
# Description:
#
# Author: kunoki
#
# Host: aofd165.fish.nagasaki-u.ac.jp
# Directory: /work2/kunoki/to_manda_sensei/Tools/Sonde.Prof.Thermo
#
# Revision history:
# This file is created by /usr/local/mybin/nbscr.sh at 15:18 on 10-13-2014.
echo "Shell script, $(basename $0) starts."
echo
exe=sonde_vertical_shear
namelist=$exe.namelist.txt
indir=proc1
odir=output
mkdir -vp $indir
mkdir -vp $odir
i=1
n=19
while [ $i -le $n ]; do
no=$(printf %02d $i)
cat <<EOF >$namelist
¶
infle="${indir}/stn${no}.filter.txt"
ofle="${odir}/stn${no}.shear.txt"
&end
EOF
${exe} < $namelist
i=$(expr $i + 1)
done #i
echo "Done $0"
echo
sonde_vertical_shear.f90
program sonde_vertical_shear
! Description:
!
! Author: kunoki
!
! Host: aofd165.fish.nagasaki-u.ac.jp
! Directory: /work2/kunoki/to_manda_sensei/Tools
!
! Revision history:
! This file is created by /usr/local/mybin/nff.sh at 14:41 on 10-13-2014.
! use
! implicit none
character(len=1000)::strm
character(len=500)::infle,ofle
real,allocatable,dimension(:)::z,u,v,t
real,allocatable,dimension(:)::dudz,dvdz,shear
real,parameter::rmiss=-999.9
namelist /para/infle,ofle
read(*,nml=para)
open(11,file=infle,action="read")
read(11,*)
read(11,'(A)'),strm
is=index(strm,"=")+1
read(strm(is:),*)nd
print *,'nd=',nd
allocate(z(nd),u(nd),v(nd),t(nd), &
& dudz(nd),dvdz(nd),shear(nd))
do i=1,nd
read(11,*)z(i),u(i),v(i),t(i)
enddo !i
close(11)
dudz(:)=rmiss
dvdz(:)=rmiss
shear(:)=rmiss
do i=2,nd-1
dudz(i)=(u(i+1)-u(i-1))/(z(i+1)-z(i-1))
dvdz(i)=(v(i+1)-v(i-1))/(z(i+1)-z(i-1))
shear(i)=sqrt(dudz(i)**2+dvdz(i)**2)
enddo !i
open(21,file=ofle)
write(21,'(A,A)')'# Input: ',trim(infle)
write(21,'(A)')'# z[m], u[m/s], v[m/s], dudz[1/s], dvdz[1/s], shear[1/s] T[degC]'
do i=1,nd
write(21,'(f8.1,2f10.2,3e12.4,f9.2)')&
& z(i),u(i),v(i),dudz(i),dvdz(i),shear(i),t(i)
enddo !i
write(*,'(A,A)')'Input : ',trim(infle)
write(*,'(A,A)')'Output: ',trim(ofle)
end program sonde_vertical_shear
makefile
#
#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 = #-convert big_endian -module ${OBJDIR}
#-----------------------------------------
#j リンク用のオプション
#-----------------------------------------
LDFLAGS=-module ${OBJDIR}
#j ターゲット名(最終的に作りたい実行ファイル名)
TARGET1=sonde_vertical_shear
TARGET2=
TARGETS=$(TARGET1) $(TARGET2)
#j MOD (Fortran90以降のモジュールファイル)
MOD=
#j SRC7 (Fortran77のソースファイル)
SRC7=
#j SRC9 (Fortran90のソースファイル)
SRC9=sonde_vertical_shear.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}
$(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