2014年1月19日日曜日

convert5day2mm.f90

昔作ったプログラム、その弐。

program mmtest
! converts 5-day average data into monthly average data
implicit none
INCLUDE 'netcdf.inc'

integer,parameter::jpi=544,jpj=336,jptcon=1468,jpt=73
integer::i,jan(6),feb(6),mar(6),apr(6),may(6),jun(6)
integer::jul(6),aug(7),sep(6),oct(6),nov(6),dec(6)
character(2)::yrpar(10),monpar(12)
character(100)::filnam
character(5)::dirnam
character(8)::param
integer::ncfile,varid,value,ncid,ncid2,newvarid,r,rrr
! rgyr=regularyear(365days),lpyr=leapyear(366days)
integer::idvar,dim1,dim2,dim3,dim4,dimty(3)
real,dimension(jpi,jpj,46,jpt)::varhu
real,dimension(544,336,46)::janhu,febhu,marhu,aprhu,mayhu,junhu,julhu,sephu,octhu,novhu,dechu
real,dimension(544,336,46)::mmjan,mmfeb,mmmar,mmapr,mmmay,mmjun,mmjul,mmaug,mmsep,mmoct,mmnov,mmdec
real,dimension(544,336,46)::aughu
real,dimension(544,336,46,12)::mm
real,dimension(12,46,336,544)::mmyear_fixed

yrpar=(/'01','02','03','04','05','06','07','08','09','10'/)

jan=(/(i,i=1,6)/)
feb=(/(i,i=7,12)/)
mar=(/(i,i=13,18)/)
apr=(/(i,i=19,24)/)
may=(/(i,i=25,30)/)
jun=(/(i,i=31,36)/)
jul=(/(i,i=37,42)/)
aug=(/(i,i=43,49)/)
sep=(/(i,i=50,55)/)
oct=(/(i,i=56,61)/)
nov=(/(i,i=62,67)/)
dec=(/(i,i=68,73)/)

do rrr=1,10
!!!!!!!!!!!!!!!! change the three lines !!!!!!!!!!!!!!!!
dirnam='P/POS'
filnam='NAO_'//dirnam//'NAO_5d_00'//yrpar(rrr)//'0101_00'//yrpar(rrr)//'1231_grid_T.nc'
param='vosaline'
ncfile=nf_open(filnam,nf_nowrite,ncid)
ncfile=(nf_inq_varid(ncid,param,varid))
ncfile=(nf_get_var_real(ncid,varid,varhu))
ncfile=nf_close(ncid)

!dat1=varhu(:,:,:,1:6)
!janhu=sum(dat1,dim=4)

janhu=sum(varhu(:,:,:,jan),dim=4)
febhu=sum(varhu(:,:,:,feb),4)
marhu=sum(varhu(:,:,:,mar),4)
aprhu=sum(varhu(:,:,:,apr),4)
mayhu=sum(varhu(:,:,:,may),4)
junhu=sum(varhu(:,:,:,jun),4)
julhu=sum(varhu(:,:,:,jul),4)
aughu=sum(varhu(:,:,:,aug),4)
sephu=sum(varhu(:,:,:,sep),4)
octhu=sum(varhu(:,:,:,oct),4)
novhu=sum(varhu(:,:,:,nov),4)
dechu=sum(varhu(:,:,:,dec),4)

!end do

mm(:,:,:,1)=janhu/float(6)
mm(:,:,:,2)=febhu/float(6)
mm(:,:,:,3)=marhu/float(6)
mm(:,:,:,4)=aprhu/float(6)
mm(:,:,:,5)=mayhu/float(6)
mm(:,:,:,6)=junhu/float(6)
mm(:,:,:,7)=julhu/float(6)
mm(:,:,:,8)=aughu/float(7)
mm(:,:,:,9)=sephu/float(6)
mm(:,:,:,10)=octhu/float(6)
mm(:,:,:,11)=novhu/float(6)
mm(:,:,:,12)=dechu/float(6)

!mmyear=(/mmjan,mmfeb,mmmar,mmapr,mmmay,mmjun,mmjul,mmaug,mmsep,mmoct,mmnov,mmdec/)
!mmyear=reshape((/mmjan,mmfeb,mmmar,mmapr,mmmay,mmjun,mmjul,mmaug,mmsep,mmoct,mmnov,mmdec/),shape(mmyear))
monpar=(/'01','02','03','04','05','06','07','08','09','10','11','12'/)

do r=1,12

ncfile=nf_create('NAO_'//dirnam//'NAO_grid_'//param//'_year'//yrpar(rrr)//'_month' //monpar(r)//'.nc',nf_share,ncid2)
ncfile=nf_def_dim(ncid2,'x',544,dim1)
ncfile=nf_def_dim(ncid2,'y',336,dim2)
ncfile=nf_def_dim(ncid2,'z',46,dim3)
!ncfile=nf_def_dim(ncid2,'month',12,dim4)
dimty(1)=dim1
dimty(2)=dim2
dimty(3)=dim3
!dimty(4)=dim4
ncfile=nf_def_var(ncid2,param,nf_real,3,dimty,newvarid)
ncfile=nf_enddef(ncid2)
ncfile=nf_put_var_real(ncid2,newvarid,mm(:,:,:,r))
ncfile=nf_close(ncid2)

end do
end do
end program mmtest


subroutine h(status)
      integer::status
      INCLUDE 'netcdf.inc'
      if (status .ne. NF_NOERR) then
         print *, NF_STRERROR(status)
         stop 'stopped here'
      end if
      return
      end

0 件のコメント:

コメントを投稿