! This program extracts temperature data from grid_T file
! so that the file size does not exceed the memory size on stokes
! created by Hakase Hayashida on Jan.18.2012
program convertnetcdfdata
implicit none
INCLUDE 'netcdf.inc'
integer,parameter::jpi=304,jpj=334,jpk=46,jpt=72,nmonth=12
integer::ncid,ncfile,dim1,dim2,dim3,dim4,dimtx(4)
integer::tempid,saliid,meriid,vertid,deftemp,defsali,defmeri,defvert
integer::ind1,tt,vartemp,varsali,varmeri,varvert
real,dimension(jpi,jpj,jpk,jpt)::temp,sali,meri,vert
real,dimension(jpi,jpj,jpk,nmonth)::montemp,monsali,monmeri,monvert
!Opening netcdf data file from grid_t,v,w
ncfile=nf_open('grid_t28.nc',nf_nowrite,ncid)
ncfile=nf_inq_varid(ncid,'votemper',tempid)
ncfile=nf_inq_varid(ncid,'vosaline',saliid)
ncfile=nf_get_var_real(ncid,tempid,temp)
ncfile=nf_get_var_real(ncid,saliid,sali)
ncfile=nf_close(ncid)
ncfile=nf_open('grid_v28.nc',nf_nowrite,ncid)
ncfile=nf_inq_varid(ncid,'vomecrty',meriid)
ncfile=nf_get_var_real(ncid,meriid,meri)
ncfile=nf_close(ncid)
ncfile=nf_open('grid_w28.nc',nf_nowrite,ncid)
ncfile=nf_inq_varid(ncid,'vovecrtz',vertid)
ncfile=nf_get_var_real(ncid,vertid,vert)
ncfile=nf_close(ncid)
!Converting the 5day-mean data into monthly-mean data
ind1=1
do tt=1,12
montemp(:,:,:,tt)=sum(temp(:,:,:,ind1:ind1+5),dim=4)/float(6)
monsali(:,:,:,tt)=sum(sali(:,:,:,ind1:ind1+5),dim=4)/float(6)
monmeri(:,:,:,tt)=sum(meri(:,:,:,ind1:ind1+5),dim=4)/float(6)
monvert(:,:,:,tt)=sum(vert(:,:,:,ind1:ind1+5),dim=4)/float(6)
ind1=ind1+6
end do
!Creating netcdf data file for temperature
ncfile=nf_create('lab28_mm_tsvw.nc',nf_share,ncid)
ncfile=nf_def_dim(ncid,'x',jpi,dim1)
ncfile=nf_def_dim(ncid,'y',jpj,dim2)
ncfile=nf_def_dim(ncid,'deptht',jpk,dim3)
ncfile=nf_def_dim(ncid,'time_counter',nmonth,dim4)
dimtx(1)=dim1
dimtx(2)=dim2
dimtx(3)=dim3
dimtx(4)=dim4
ncfile=nf_def_var(ncid,'votemper',nf_real,4,dimtx,deftemp)
ncfile=nf_def_var(ncid,'vosaline',nf_real,4,dimtx,defsali)
ncfile=nf_def_var(ncid,'vomecrty',nf_real,4,dimtx,defmeri)
ncfile=nf_def_var(ncid,'vovecrtz',nf_real,4,dimtx,defvert)
ncfile=nf_enddef(ncid)
ncfile=nf_put_var_real(ncid,deftemp,montemp)
ncfile=nf_put_var_real(ncid,defsali,monsali)
ncfile=nf_put_var_real(ncid,defmeri,monmeri)
ncfile=nf_put_var_real(ncid,defvert,monvert)
ncfile=nf_close(ncid)
end program convertnetcdfdata
subroutine handle_err(errcode)
implicit none
include 'netcdf.inc'
integer errcode
print *, 'Error: ', nf_strerror(errcode)
stop 2
end
0 件のコメント:
コメントを投稿