::::::::::::::
0.Readme.txt
::::::::::::::
--------------------------------------
From AVISO <aviso@oceanobs.com>
To manda@nagasaki-u.ac.jp
日付 2010年6月3日18:14
件名 RE : [aviso] Application form to get access Aviso products CRM:02183668
https://mail.google.com/mail/?hl=ja&shva=1#search/aviso/128fd1af86bf9459
1.Access to MSLA/MADT gridded data in Near Real-Time and Delayde-Time:
Your request to Duacs NRT/DT gridded data has been approved.
We are pleased to send you the ftp address.
You will find Duacs data for you at the following server (authentificated ftp):
ftp.aviso.oceanobs.com
Your login/password is : nagasaki_manda / 2blan63
Informations about data processing, format/name of files, maps and handbooks are
available at: http://www.aviso.oceanobs.com/duacs/
2. Access to Geophysical Data Records:
The access to Geophysical Data Records (GDR) is anonymous,
see: http://www.aviso.oceanobs.com/en/data/products/sea-surface-height-products/global/gdr-and-igdr/index.html
--------------------------------------
MADT - (Maps of) Absolute Dynamic Topography & absolute geostrophic velocities
http://www.aviso.oceanobs.com/en/data/products/sea-surface-height-products/global/madt/index.html
ftp> ls
227 Entering Passive Mode (91,207,20,75,250,126).
150 Opening ASCII mode data connection for file list
drwxr-xr-x 5 f_datase dataserv 8192 Mar 4 2010 global
lrwxrwxrwx 1 root duacs 57 Apr 13 2010 pub -> /donnees/ftpsedr/ftpanonymous/pub/oceano/AVISO/SSH/duacs/
drwxr-xr-x 4 f_duacs duacs 8192 Sep 17 2009 quality_report
-rw-rw-r-- 1 f_duacs duacs 38 May 18 13:12 readme.msg
drwxr-xr-x 5 f_datase dataserv 8192 Mar 4 2010 regional-blacksea
drwxr-xr-x 5 f_duacs duacs 8192 Mar 4 2010 regional-gomex
drwxr-xr-x 5 f_duacs duacs 8192 Mar 4 2010 regional-mersea
drwxr-xr-x 5 f_datase dataserv 8192 Mar 4 2010 regional-mfstep
-rw-rw-r-- 1 f_duacs duacs 476 May 18 13:12 welcome.msg
226 Transfer complete.
ftp> cd global
250 CWD command successful
ftp> ls
227 Entering Passive Mode (91,207,20,75,235,222).
150 Opening ASCII mode data connection for file list
drwxr-xr-x 5 f_duacs duacs 8192 Sep 21 10:29 dt
drwxr-xr-x 7 f_duacs duacs 8192 Jul 8 12:41 nrt
drwxr-xr-x 7 f_duacs duacs 8192 Sep 17 2009 rt
226 Transfer complete.
ftp> cd dt
250 CWD command successful
ftp> ls
227 Entering Passive Mode (91,207,20,75,210,196).
150 Opening ASCII mode data connection for file list
drwxr-xr-x 3 f_duacs duacs 8192 May 2 2010 geosat
drwxr-xr-x 6 f_duacs duacs 8192 Sep 21 09:42 ref
drwxr-xr-x 6 f_duacs duacs 8192 Sep 21 10:43 upd
226 Transfer complete.
ftp> cd upd
250 CWD command successful
ftp> ls
227 Entering Passive Mode (91,207,20,75,250,127).
150 Opening ASCII mode data connection for file list
drwxr-xr-x 3 f_duacs duacs 8192 Sep 21 10:30 madt
drwxr-xr-x 3 f_duacs duacs 8192 Sep 21 10:29 msla
226 Transfer complete.
ftp> cd madt
250 CWD command successful
ftp> ls
227 Entering Passive Mode (91,207,20,75,213,247).
150 Opening ASCII mode data connection for file list
drwxr-xr-x 4 f_duacs duacs 8192 Sep 21 10:30 merged
226 Transfer complete.
ftp> cd merged
::::::::::::::
readhnc.f90
::::::::::::::
program readhnc
! Description:
!
! Author: aym
!
! Host: oceani18.fish.nagasaki-u.ac.jp
! Directory: /home/aym/11.Work10/96.AvisoMSLA-MADT/01.sample_data
!
! Revision history:
! 2010-10-17 16:03
! Initial Version
!
! References
! Tips: NetCDF. http://iprc.soest.hawaii.edu/users/sasakiyo/Japanese/misc/tips_netcdf.html
! NetCDF Tips. http://www.sci.hokudai.ac.jp/grp/poc/top/software/other/netcdf_tips/index.htm
! implicit none
! use
include 'netcdf.inc'
integer, parameter :: ysz=915 !721 ! 配列サイズ(緯度方向)
integer, parameter :: xsz=1080 !1440 ! 配列サイズ(経度方向)
integer :: ncid, status, rlatid, rlonid, rhid
character :: infle*500,ofle*500 !入出力ファイル名
character varname*10 !変数名
real,allocatable :: sla(:,:) ! データを収納するための変数
character :: latname*20,lonname*20
double precision,allocatable :: Lat(:), Lon(:) !緯度経度のデータ **倍精度**
real fillvalue !欠損値
namelist /para/infle,ofle
write(*,'(a)')'Prog.: readhnc'
read(5,para)
! infle='data/h/dt_ref_global_merged_madt_h_qd_20091104_20091104_20100602.nc'
! ofle='tmp.txt'
fillvalue=1.8E+19
varname='Grid_0001' ! slaの変数設定名
latname='NbLatitudes' !緯度
lonname='NbLongitudes' !経度
! 配列寸法の決定
allocate(sla(ysz,xsz))
allocate(Lat(ysz), Lon(xsz))
write(*,'(A,A)')' Input: ',trim(adjustl(infle))
write(*,'(A,A)')' Output: ',trim(adjustl(ofle))
write(*,*)
write(*,*)'xsz= ',xsz
write(*,*)'ysz= ',ysz
write(*,'(A,e12.4)')' Fillvalue (missing data) = ',fillvalue
write(*,*)
status = nf_open(infle, nf_nowrite, ncid) ! ファイルのopenとNetCDF ID(ncid)の取得
if(status .ne. nf_noerr) call handle_err(status) !エラーチェック
! 緯度読み込み
write(*,'(a,a)')' Read ',trim(adjustl(latname))
status = nf_inq_varid(ncid, latname, rlatid) ! 変数のID取得
if(status .ne. nf_noerr) call handle_err(status)
status = nf_get_var_double(ncid, rlatid, lat)
if(status .ne. nf_noerr) call handle_err(status)
! 経度読み込み
write(*,'(a,a)')' Read ',trim(adjustl(lonname))
status = nf_inq_varid(ncid, lonname, rlonid) ! 変数のID取得
if(status .ne. nf_noerr) call handle_err(status)
status = nf_get_var_double(ncid, rlonid, lon)
if(status .ne. nf_noerr) call handle_err(status)
! sla読込み
write(*,'(a,a)')' Read ',trim(adjustl(varname))
status = nf_inq_varid(ncid, varname, rhid) ! 変数のID取得
if(status .ne. nf_noerr) call handle_err(status)
status = nf_get_var_real(ncid, rhid, sla)! 変数読み込み
if(status .ne. nf_noerr) call handle_err(status)
write(*,*)''
! 出力
iu2=20
open(iu2,file=ofle)
write(*,'(A,A,A)')' Open ',trim(adjustl(ofle)),'.'
call print_header(iu2)
! slaの1番目の添え字は緯度を表し、2番目の添え字は経度を表している
do j=1,ysz
do i=1,xsz
if(sla(j,i).le.fillvalue)then
write(iu2,'(2f14.6,f10.3)')lon(i),lat(j),sla(j,i)
endif
enddo !i
enddo !j
close(iu2)
status = nf_close(ncid) ! ファイルのclose
if(status .ne. nf_noerr) call handle_err(status)
write(*,*)'Input file closed.'
write(*,'(a)')'Done.'
write(*,*)
stop
end program readhnc
subroutine handle_err(status)
integer,intent(in) :: status
write(*,*)nf_strerror(status)
stop
end subroutine handle_err
subroutine print_header(iunit)
! Description: ヘッダ情報の書き出し
! このサブルーチンは, gfortran, ifortで動作することを確認している.
!
! 作成したデータが、何時、何処で、誰が、どのプログラムを使って作成した
! か記録しておくと、後々作業をし直す必要が生じたときに役に立つ.
! また、以前使ったプログラムを一部改変して利用するときなど、そのプログ
! ラムを探すのに役に立つことが多い
!
!
! Author: aym
!
integer,intent(in) :: iunit
!
character dirinfo*144, userinfo*72, hostinfo*72
INTEGER date_time(8)
CHARACTER REAL_CLOCK(3)*12
character progname*100
integer idxpn, idx
character shellinfo*80
!
! Get date, time, current directory, username, and hostname
! p.345 of for_lang.pdf (intel fortran user manual)
! DATE_AND_TIME is an intrisic S/R and works on most of Fotran 90
! Compilers. g77 also supports this S/R.
CALL DATE_AND_TIME (REAL_CLOCK (1), REAL_CLOCK (2), &
& REAL_CLOCK (3), date_time)
call getenv("PWD", dirinfo)
call getenv("USER", userinfo)
!j 使用しているシェルのチェック
!j 現在, sh, bash, csh, tcshのみに対応
call getenv("SHELL",shellinfo)
idxcsh=index(shellinfo,"/csh")
idxtcsh=index(shellinfo,"/tcsh")
idxsh=index(shellinfo,"/sh")
idxbash=index(shellinfo,"/bash")
if(idxcsh.ne.0.or.idxtcsh.ne.0)then
call getenv("HOST", hostinfo) !csh, tcsh, etc.
else if(idxsh.ne.0.or.idxbash.ne.0)then
call getenv("HOSTNAME", hostinfo) !sh, bash, etc.
endif
write(iunit,'(a, &
& i2.2,a,i2.2,a,i4.4, a,i2.2,a,i2.2,a,i2.2, a,i3.2,a)') &
& '# Date and time: ', &
& date_time(2),'/',date_time(3),'/',date_time(1), &
& ' at ',date_time(5),':',date_time(6),':',date_time(7), &
& ' ',-date_time(4)/60,':00'
write(iunit,'(A,A)')'# hostname: ',trim(adjustl(hostinfo))
write(iunit,'(A,A)')'# cwd: ',trim(adjustl(dirinfo))
write(iunit,'(A,A)')'# user: ',trim(adjustl(userinfo))
! Get program name
call getarg( 0, progname)
write(iunit,'(A,A)')'# program name: ',trim(adjustl(progname))
return
end subroutine print_header
::::::::::::::
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=ifc
#FC=gfortran
#FC=g95
#FC=g77
#FC=f90
#FC=f77
#FC=fort
#j ターゲット名(最終的に作りたい実行ファイル名)
TARGET1=rn
TARGET2=
TARGETS=$(TARGET1) $(TARGET2)
#j OBJDIR (オブジェクトファイルをおくディレクトリ)
OBJDIR=obj
#j MOD (Fortran90以降のモジュールファイル)
MOD=
#j SRC7 (Fortran77のソースファイル)
SRC7=
#j SRC9 (Fortran90のソースファイル)
SRC9=readhnc.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 コンパイルオプション(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 obj
#-----------------------------------------
#j リンク用のオプション
#-----------------------------------------
LDFLAGS= -L/usr/local/lib -lnetcdf #-module ${OBJDIR}
#-----------------------------------------
#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
#j tarファイルを作る
tar:
tar cvf $(TARGET1).tar ./*.f90 ./*.f ./*.c ./*.h ./*.txt makefile
::::::::::::::
readhnc.f90
::::::::::::::
program readhnc
! Description:
!
! Author: aym
!
! Host: oceani18.fish.nagasaki-u.ac.jp
! Directory: /home/aym/11.Work10/96.AvisoMSLA-MADT/01.sample_data
!
! Revision history:
! 2010-10-17 16:03
! Initial Version
!
! References
! Tips: NetCDF. http://iprc.soest.hawaii.edu/users/sasakiyo/Japanese/misc/tips_netcdf.html
! NetCDF Tips. http://www.sci.hokudai.ac.jp/grp/poc/top/software/other/netcdf_tips/index.htm
! implicit none
! use
include 'netcdf.inc'
integer, parameter :: ysz=915 !721 ! 配列サイズ(緯度方向)
integer, parameter :: xsz=1080 !1440 ! 配列サイズ(経度方向)
integer :: ncid, status, rlatid, rlonid, rhid
character :: infle*500,ofle*500 !入出力ファイル名
character varname*10 !変数名
real,allocatable :: sla(:,:) ! データを収納するための変数
character :: latname*20,lonname*20
double precision,allocatable :: Lat(:), Lon(:) !緯度経度のデータ **倍精度**
real fillvalue !欠損値
namelist /para/infle,ofle
write(*,'(a)')'Prog.: readhnc'
read(5,para)
! infle='data/h/dt_ref_global_merged_madt_h_qd_20091104_20091104_20100602.nc'
! ofle='tmp.txt'
fillvalue=1.8E+19
varname='Grid_0001' ! slaの変数設定名
latname='NbLatitudes' !緯度
lonname='NbLongitudes' !経度
! 配列寸法の決定
allocate(sla(ysz,xsz))
allocate(Lat(ysz), Lon(xsz))
write(*,'(A,A)')' Input: ',trim(adjustl(infle))
write(*,'(A,A)')' Output: ',trim(adjustl(ofle))
write(*,*)
write(*,*)'xsz= ',xsz
write(*,*)'ysz= ',ysz
write(*,'(A,e12.4)')' Fillvalue (missing data) = ',fillvalue
write(*,*)
status = nf_open(infle, nf_nowrite, ncid) ! ファイルのopenとNetCDF ID(ncid)の取得
if(status .ne. nf_noerr) call handle_err(status) !エラーチェック
! 緯度読み込み
write(*,'(a,a)')' Read ',trim(adjustl(latname))
status = nf_inq_varid(ncid, latname, rlatid) ! 変数のID取得
if(status .ne. nf_noerr) call handle_err(status)
status = nf_get_var_double(ncid, rlatid, lat)
if(status .ne. nf_noerr) call handle_err(status)
! 経度読み込み
write(*,'(a,a)')' Read ',trim(adjustl(lonname))
status = nf_inq_varid(ncid, lonname, rlonid) ! 変数のID取得
if(status .ne. nf_noerr) call handle_err(status)
status = nf_get_var_double(ncid, rlonid, lon)
if(status .ne. nf_noerr) call handle_err(status)
! sla読込み
write(*,'(a,a)')' Read ',trim(adjustl(varname))
status = nf_inq_varid(ncid, varname, rhid) ! 変数のID取得
if(status .ne. nf_noerr) call handle_err(status)
status = nf_get_var_real(ncid, rhid, sla)! 変数読み込み
if(status .ne. nf_noerr) call handle_err(status)
write(*,*)''
! 出力
iu2=20
open(iu2,file=ofle)
write(*,'(A,A,A)')' Open ',trim(adjustl(ofle)),'.'
call print_header(iu2)
! slaの1番目の添え字は緯度を表し、2番目の添え字は経度を表している
do j=1,ysz
do i=1,xsz
if(sla(j,i).le.fillvalue)then
write(iu2,'(2f14.6,f10.3)')lon(i),lat(j),sla(j,i)
endif
enddo !i
enddo !j
close(iu2)
status = nf_close(ncid) ! ファイルのclose
if(status .ne. nf_noerr) call handle_err(status)
write(*,*)'Input file closed.'
write(*,'(a)')'Done.'
write(*,*)
stop
end program readhnc
subroutine handle_err(status)
integer,intent(in) :: status
write(*,*)nf_strerror(status)
stop
end subroutine handle_err
subroutine print_header(iunit)
! Description: ヘッダ情報の書き出し
! このサブルーチンは, gfortran, ifortで動作することを確認している.
!
! 作成したデータが、何時、何処で、誰が、どのプログラムを使って作成した
! か記録しておくと、後々作業をし直す必要が生じたときに役に立つ.
! また、以前使ったプログラムを一部改変して利用するときなど、そのプログ
! ラムを探すのに役に立つことが多い
!
!
! Author: aym
!
integer,intent(in) :: iunit
!
character dirinfo*144, userinfo*72, hostinfo*72
INTEGER date_time(8)
CHARACTER REAL_CLOCK(3)*12
character progname*100
integer idxpn, idx
character shellinfo*80
!
! Get date, time, current directory, username, and hostname
! p.345 of for_lang.pdf (intel fortran user manual)
! DATE_AND_TIME is an intrisic S/R and works on most of Fotran 90
! Compilers. g77 also supports this S/R.
CALL DATE_AND_TIME (REAL_CLOCK (1), REAL_CLOCK (2), &
& REAL_CLOCK (3), date_time)
call getenv("PWD", dirinfo)
call getenv("USER", userinfo)
!j 使用しているシェルのチェック
!j 現在, sh, bash, csh, tcshのみに対応
call getenv("SHELL",shellinfo)
idxcsh=index(shellinfo,"/csh")
idxtcsh=index(shellinfo,"/tcsh")
idxsh=index(shellinfo,"/sh")
idxbash=index(shellinfo,"/bash")
if(idxcsh.ne.0.or.idxtcsh.ne.0)then
call getenv("HOST", hostinfo) !csh, tcsh, etc.
else if(idxsh.ne.0.or.idxbash.ne.0)then
call getenv("HOSTNAME", hostinfo) !sh, bash, etc.
endif
write(iunit,'(a, &
& i2.2,a,i2.2,a,i4.4, a,i2.2,a,i2.2,a,i2.2, a,i3.2,a)') &
& '# Date and time: ', &
& date_time(2),'/',date_time(3),'/',date_time(1), &
& ' at ',date_time(5),':',date_time(6),':',date_time(7), &
& ' ',-date_time(4)/60,':00'
write(iunit,'(A,A)')'# hostname: ',trim(adjustl(hostinfo))
write(iunit,'(A,A)')'# cwd: ',trim(adjustl(dirinfo))
write(iunit,'(A,A)')'# user: ',trim(adjustl(userinfo))
! Get program name
call getarg( 0, progname)
write(iunit,'(A,A)')'# program name: ',trim(adjustl(progname))
return
end subroutine print_header
::::::::::::::
para.txt
::::::::::::::
#
#
#
¶
infle="data/h/dt_upd_global_merged_madt_h_20090506_20090506_20100503.nc",
ofle="tmp2.txt"
&end