/work2/kunoki/to_manda_sensei/Tools/MGDSST.Map.Stations
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= -CB -traceback -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=mgdsst2gmt
TARGET2=
TARGETS=$(TARGET1) $(TARGET2)
#j MOD (Fortran90以降のモジュールファイル)
MOD=
#j SRC7 (Fortran77のソースファイル)
SRC7=
#j SRC9 (Fortran90のソースファイル)
SRC9=mgdsst2gmt.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
mgdsst2gmt.f90
program mgdsst2gmt
implicit none
integer :: year,mon,day
integer :: i,j,jj
integer,parameter :: im=1440
integer,parameter :: jm=720
integer :: isst(im,jm),ist
real :: sst(im,jm)
real :: undef = -999
real :: lon(im),lat(jm)
open(55,file="mgdsst.Jun15",status='old',form='formatted')
read(55,*) year,mon,day
write(6,*) year,mon,day
do j=1,jm
read(55,10) (isst(i,j),i=1,im)
enddo
close(55)
10 format(1440i3)
do j=1,jm
do i=1,im
jj = jm -j +1
ist = isst(i,jj)
if(ist .eq. 888 .or. ist.eq.999) then
sst(i,j) = undef
else
sst(i,j) = real(ist)*0.1 + 273.15
endif
enddo
enddo
do i=1,im
lon(i)=0.0 + 0.25*float(i-1)
enddo !i
do j=1,jm
lat(j)=-89.875 + 0.25*float(j-1)
enddo !j
open(77,file='mgdsst.Jun15.txt')
do j=1,jm
do i=1,im
if(sst(i,j) /= undef)then
write(77,'(2f12.5,f10.2)') lon(i),lat(j),sst(i,j)
endif
enddo !
enddo !j
close(77)
end program mgdsst2gmt
作図用シェルスクリプト: pl.mgdsst.sh
#!/bin/bash
# Description:
#
# Author: kunoki
#
# Host: aofd165.fish.nagasaki-u.ac.jp
# Directory: /work2/kunoki/to_manda_sensei/Tools/MGDSST.Map.Stations
#
# Revision history:
# This file is created by /usr/local/mybin/ngmt.sh at 08:59 on 10-29-2014.
. ./gmtpar.sh
echo "Bash script $0 starts."
range=126/133/28/34
size=5
xanot=a2f1
yanot=a2f1
anot=${xanot}/${yanot}WSne
in=mgdsst.Jun15.txt
if [ ! -f $in ]; then
echo Error in $0 : No such file, $in
exit 1
fi
#figdir="../fig/"
#if [ ! -d ${figdir} ];then
# mkdir -p $figdir
#fi
out=${figdir}$(basename $in .txt).ps
grd=$(basename $in .txt).grd
cpt=$(basename $in .txt).cpt
echo
echo Input : $in
echo Output : $out
echo
#awk '{print $1,$2,$3-273.15}' $in |\
#surface -R$range -T0.5 -I0.03125 -G$grd
#grd2xyz $grd
makecpt -Chaxby -T20.5/27.5/0.5 > $cpt
grdimage $grd -R$range -JM$size -C$cpt -K -X1.5 -Y2 -P > $out
grdcontour $grd -R -JM -W5/${white} -C0.5 -A2f12 -G1/2 -O -K \
-Gl127.5/24/127.5/35 \
>> $out
pscoast -R -JM -W4 -G200 -Di -O -K >> $out
psbasemap -R -JM -B$anot -O -K >> $out
pstext <<EOF -R -JM -O -K >> $out
131.2 33.0 16 0 0 MC Kyushu
131.2 32.7 16 0 0 MC Island
EOF
psscale -D2.5/-0.7/3/0.1h -Ba1f.5:"${deg}C": -C$cpt -E -O -K >>$out
psxy MandA2012Leg3.stations.txt -R -JM -St0.13 -W5/${white} -G0 -O -K >> $out
pstext MandA2012Leg3.station.number.txt -R -JM -O -K -S8/${white} -G0 >> $out
xoffset=
yoffset=6.5
comment=
. ./note.sh
rm -vf $cpt #$grd
echo "Done $0.sh"
gmtpar.sh
#
# GMTのパラメータの設定 (version 4以上対象)
#
# 長さの単位はインチとする
gmtset MEASURE_UNIT INCH
gmtset LABEL_FONT_SIZE 18
gmtset HEADER_FONT_SIZE 20
gmtset ANOT_FONT_SIZE 18
gmtset TICK_PEN 4
# 地図の縦横軸に縞々を使わない
gmtset BASEMAP_TYPE PLAIN
# 紙のサイズはA4
gmtset PAPER_MEDIA A4
# 地図の°の記号
gmtset DEGREE_SYMBOL = degree # Available for ver. 4 or later
# 空白文字の設定
sp="\040" # White space
# =の記号
eq="\075" # equal
# 温度の°の記号
deg="\260" #deg="\312" # degree symbol
# 色のRGB値を設定 (線や点に色をつけるときRGB値を直接指定するより分かりやすい)
red="255/0/0"
orenge="255/165/0"
pink="255/192/203"
green="0/255/0"
blue="0/0/255"
midnightblue="25/25/112"
yellow="255/255/0"
gold="255/215/0"
purple="160/32/240"
magenta="255/0/255"
white="255/255/255"
# 線種を指定
dash="t15_5:15"
dot="t5_5:5"
dotdash="t12_5_5_5:5"
#その他の線種の例
# -W5t20_5:5
# -W5t15_5:5
# -W5t20_5_5_5_5_5:5
# -W5t30_5_5_5:5
# -W5t20_5_10_5:5
# 数字の出力フォーマット(project, grd2xzy等で使う)
gmtset D_FORMAT %lg #デフォルト(規定値)
# 桁数を指定(例:123.45678)
#gmtset D_FORMAT %12.6f
# 状況に応じて
#gmtset D_FORMAT %12.5g
note.sh
# Print time, current working directory and output filename
export LANG=C
currentdir=`pwd`
if [ ${#currentdir} -gt 90 ]; then
curdir1=${currentdir:1:90}
curdir2=${currentdir:91}
else
curdir1=$currentdir
curdir2="\ "
fi
now=`date`
host=`hostname`
#comment=" "
time1=$(ls -l $in | awk '{print $6, $7, $8}')
pstext -JX6/1.2 -R0/1/0/1.2 -N -X${xoffset:-0} -Y${yoffset:-0} << EOF -O >> $out
0 1.1 9 0 1 LM $0 $@
0 0.95 9 0 1 LM ${now}
0 0.80 9 0 1 LM ${host}
0 0.65 9 0 1 LM ${curdir1}
0 0.50 9 0 1 LM ${curdir2}
0 0.35 9 0 1 LM Input: ${in} (${time1})
0 0.1 9 0 1 LM ${comment:-""}
EOF
# Output: ${out}
測点の位置のサンプルデータ:MandA2012Leg3.stations.txt
129.557 32.5414 16 0 0 1
129.604 32.3677 16 0 0 2
129.786 32.1521 16 0 0 3
129.871 32.0480 16 0 0 4
130.006 31.9070 16 0 0 5
130.012 31.7205 16 0 0 6
130 31.4864 16 0 0 7
130.003 31.3434 16 0 0 8
130.008 31.1561 16 0 0 9
130.08 30.9609 16 0 0 10
129.993 30.7565 16 0 0 11
129.805 30.5166 16 0 0 12
129.646 30.3081 16 0 0 13
129.603 30.2938 16 0 0 14
129.482 30.1333 16 0 0 15
129.422 29.9550 16 0 0 16
129.423 29.7799 16 0 0 17
129.413 29.3908 16 0 0 18
129.32 28.9772 16 0 0 19
測点座標データから、測点番号プロット用のデータを作成するシェルスクリプト:create.station.number.sh
#!/bin/sh
in=MandA2012Leg3.stations.txt
out=MandA2012Leg3.station.number.txt
echo
echo $in
echo $out
echo
awk '{print $1-0.25 ,$2, "11 0 0 CM",NR }' $in > $out