[2018-04-16_16:38]
[/work2/am/2017.KYUSHU-HOKUBU.HEAVY.RAIN/OISST.ASCII.OUT]
[am@localhost]
$ OISST.ASCII.OUT.sh
-rw-rw-r-- 1 am am 110 4月 16 16:40 OISST.ASCII.OUT.nml
¶
infle="/misc/raid112MANDA/KakenA.H28/OISST//sst.day.mean.2017.v2.nc"
outdate="20170619"
julday=170
&end
COMPILE FINISED.
-rwxrwxr-x 1 am am 800K 4月 16 16:40 OISST.ASCII.OUT.exe
Program read_ncep starts.
Input: /misc/raid112MANDA/KakenA.H28/OISST//sst.day.mean.2017.v2.nc
ncid= 65536
status= 0.0000000E+00
.....
Done program OISST_ASCII.
julday: 170
Output: OISST.20170619.txt
[2018-04-16_16:40]
[/work2/am/2017.KYUSHU-HOKUBU.HEAVY.RAIN/OISST.ASCII.OUT]
[am@localhost]
$ srcdump.sh OISST.ASCII.OUT.sh OISST.ASCII.OUT.f90
#------------------------------
# List of the following files:
#------------------------------
OISST.ASCII.OUT.sh
OISST.ASCII.OUT.f90
#------------------------------
# Machine info
#------------------------------
localhost
/work2/am/2017.KYUSHU-HOKUBU.HEAVY.RAIN/OISST.ASCII.OUT
Mon Apr 16 16:41:04 JST 2018
#======================
# OISST.ASCII.OUT.sh
#======================
#!/bin/bash
src=$(basename $0 .sh).f90
if [ ! -f $src ]; then
echo
echo ERROR in $0 : NO SUCH FILE, $src
echo
exit 1
fi
#============================
yyyy=2017
mm=06
dd=19
#============================
outdate=${yyyy}${mm}${dd}
day0=${yyyy}0101
start=$day0
end=$outdate
starts=$(date -d "${start}" '+%s')
ends=$(date -d "${end}" '+%s')
times=$(expr $ends - $starts)
julday=$(expr $times / 86400 + 1)
indir=/misc/raid112MANDA/KakenA.H28/OISST/
infle=${indir}/sst.day.mean.${yyyy}.v2.nc
if [ ! -f $infle ]; then
echo
echo ERROR in $0 : No such file, $infle
echo
echo exit
fi
nml=$(basename $0 .sh).nml
cat<<EOF>$nml
¶
infle="${infle}"
outdate="${outdate}"
julday=${julday}
&end
EOF
echo
ls -lh $nml
echo
cat $nml
echo
exe=$(basename $0 .sh).exe
OPT="-L/usr/local/netcdf-4.1.3/lib -lnetcdf -lnetcdff -I/usr/local/netcdf-4.1.3/include"
ifort $src -o $exe $OPT
if [ $? -ne 0 ]; then
echo
echo COMPILE ERROR!
echo
exit 1
else
echo
echo COMPILE FINISED.
ls -lh $exe
echo
fi
$exe <$nml
#----------------------
# End of OISST.ASCII.OUT.sh
#----------------------
#======================
# OISST.ASCII.OUT.f90
#======================
program OISST_ASCII_OUT
! Description:
!
! Author: aym
!
! Host: aofd30
! Directory: /work1/aym/11.Work10/15.HeatBudjet/51.jcope2/32.NCEP_FLUX/11.test_read_flux/src
!
! Revision history:
! 2011-02-22 16:38
! Initial Version
! References
! http://www.rain.hyarc.nagoya-u.ac.jp/laboratory/OB/shimizu/HTML/netcdf.html
! 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
! use
! implicit none
include '/usr/local/include/netcdf.inc'
! ncid:ファイルのID番号、 varid: 変 数のID番号
integer ncid,varid
character infle*500,ofle*500
character var*50
real,allocatable :: lon(:),lat(:)
real(8),allocatable :: time(:)
real,allocatable :: sdata(:,:,:)
! real,allocatable :: sdata(:,:,:)
integer,allocatable :: dimids(:),nshape(:)
character*70 err_message
character*100 dimname !dimnameは各次元の名前。
character(len=8)::outdate
namelist /para/infle,outdate,julday
write(*,'(a)')'Program read_ncep starts.'
! write(*,*)''
read(*,nml=para)
im=1440
jm=720
nm=365
allocate(lon(im),lat(jm),time(nm),sdata(im,jm,nm))
print '(A,A)','Input: ',infle(1:lnblnk(infle))
sta = nf_open(infle, nf_nowrite, ncid) ! ファイルのopenとNetCDF ID(ncid)の取得
print *,'ncid= ',ncid
print *,'status= ',sta
print *
!もし、openが上手く行かなかったら、sta /= 0となる。
if(sta.ne.0) then
! その時のエラー を教えてくれる。
err_message = nf_strerror(sta)
write(6,*) err_message
endif
var='sst'
print '(A)',var(1:lnblnk(var))
! ファイルID(ncid)からvarで設定した変数のID(varid)を得る。
sta = nf_inq_varid(ncid,var,varid)
print *,'varid=', varid
print *,'sta= ', sta
print *
! スケールファクターを得る。(*1)
! sta = nf_get_att_real(ncid,varid,'scale_factor',scale)
! print *,'scale= ',scale
! print *,'sta= ',sta
! print *
! オフセットの 値を得る(*2)
! sta = nf_get_att_real(ncid,varid,'add_offset',offset)
! print *,'offset=', offset
! print *,'sta= ',sta
! print *
! varidからndimsを得る。ndimsとは次元の数。二次元データなら2
stat = nf_inq_varndims(ncid, varid, ndims)
print *,'ndims= ', ndims
print *
! varidからdimidsを得る。dimidsとはそれぞれの次元に対するID
allocate(dimids(ndims))
stat = nf_inq_vardimid(ncid, varid, dimids)
do i=1,ndims
write(6,'("dimids(",i2,")=",i9 )') i,dimids(i)
enddo
print *
allocate(nshape(ndims))
do i=1,ndims
! dimidsからnshapeを得る。
! nshapeとはそれぞれの次元に対する最大データ数 (格子数)
stat = nf_inq_dimlen(ncid, dimids(i), nshape(i))
write(6,'("nshape(",i2,")=",i9 )') i,nshape(i)
enddo !i
print *
do i=1,ndims
stat = nf_inq_dimname(ncid, dimids(i), dimname)
write(6,'("dimname(",i2,")=",1x,a23)') i,dimname
enddo
print *
print *,'Read ',var(1:lnblnk(var))
stat = nf_get_var_real(ncid, varid, sdata)
print *,'stat= ',stat
var='lon'
print '(A)',var(1:lnblnk(var))
! ファイルID(ncid)からvarで設定した変数のID(varid)を得る。
sta = nf_inq_varid(ncid,var,varid)
print *,'varid=', varid
print *,'sta= ', sta
print *,'Read ',var(1:lnblnk(var))
stat = nf_get_var_real(ncid, varid, lon)
print *,'stat= ',stat
var='lat'
print '(A)',var(1:lnblnk(var))
! ファイルID(ncid)からvarで設定した変数のID(varid)を得る。
sta = nf_inq_varid(ncid,var,varid)
print *,'varid=', varid
print *,'sta= ', sta
print *,'Read ',var(1:lnblnk(var))
stat = nf_get_var_real(ncid, varid, lat)
print *,'stat= ',stat
print *
ofle="OISST."//trim(outdate)//".txt"
open(20,file=ofle)
! Note: time index (n) is fixed and set to 1 here.
n=julday
write(20,'(A,i5)')'# n=',n
do j=1,jm
do i=1,im
varout=sdata(i,j,n) !*scale + offset
if(lon(i)>=100.and.lon(i)<=160.and.lat(j)>=20.and.lat(j)<=50)then
write(20,'(f9.3,f8.3,1x,e12.4)') &
lon(i),lat(j),varout
endif
enddo !i
enddo !j
close(20)
print *
write(*,'(a)')'Done program OISST_ASCII.'
write(*,*)
print '(A,i3)','julday: ',julday
print '(A,A)','Output: ',ofle(1:lnblnk(ofle))
print *
end program OISST_ASCII_OUT
! *1: scaleとは、ある変数の平均的なオーダー
! *2: offsetとは、ある変数の平均的な値
! data(i,j) = sdata(i,j) * scale + offset
! のようにして、本当のデータを得る
#----------------------
# End of OISST.ASCII.OUT.f90
#----------------------