2014年1月19日日曜日

gen1d.f90

↓最近作ったプログラム(2012年夏)。

! This script extracts the 1-D data from 3-D offline dynamics.

program generate1d
implicit none
INCLUDE 'netcdf.inc'
integer,parameter::jpi=499,jpj=604,jpk=46,jpt=31
integer::ncid,ncfile,tempid,saliid,windid,wateid,swrnid,turbid,icecid,dim1,dim2,dim3,dim4,it,dtemp,dsali,dwind,dicec,dswrn,dturb,dwate
real,dimension(jpi,jpj,jpk,jpt)::temp,sali
real,dimension(jpi,jpj,jpt)::wind,wate,swrn,turb,icec
integer,dimension(3)::stnx,stny,dim1d
integer,dimension(4)::dim2d
real,dimension(3,1,jpk,jpt)::temp1,sali1
real,dimension(3,1,jpt)::wind1,wate1,swrn1,turb1,icec1

! Open the data file
ncfile=nf_open('Lab_T_94_07.nc',nf_nowrite,ncid)
! Inquire the variables
ncfile=nf_inq_varid(ncid,'votemper',tempid)
ncfile=nf_inq_varid(ncid,'vosaline',saliid)
ncfile=nf_inq_varid(ncid,'sowindsp',windid)
ncfile=nf_inq_varid(ncid,'sowaflcd',wateid)
ncfile=nf_inq_varid(ncid,'soshfldo',swrnid)
ncfile=nf_inq_varid(ncid,'somixhgt',turbid)
ncfile=nf_inq_varid(ncid,'soicecov',icecid)
! Extract 3D data
ncfile=nf_get_var_real(ncid,tempid,temp)
ncfile=nf_get_var_real(ncid,saliid,sali)
ncfile=nf_get_var_real(ncid,windid,wind)
ncfile=nf_get_var_real(ncid,wateid,wate)
ncfile=nf_get_var_real(ncid,swrnid,swrn)
ncfile=nf_get_var_real(ncid,turbid,turb)
ncfile=nf_get_var_real(ncid,icecid,icec)
! Close the data file
ncfile=nf_close(ncid)

stnx=(/ 282, 301, 350 /)
stny=(/ 382, 416, 500 /)
do it=1,3
 temp1(it,1,:,:)=temp(stnx(it),stny(it),:,:)
 sali1(it,1,:,:)=sali(stnx(it),stny(it),:,:)
 wind1(it,1,:)=wind(stnx(it),stny(it),:)
 wate1(it,1,:)=wate(stnx(it),stny(it),:)
 swrn1(it,1,:)=swrn(stnx(it),stny(it),:)
 turb1(it,1,:)=turb(stnx(it),stny(it),:)
 icec1(it,1,:)=icec(stnx(it),stny(it),:)
end do

ncfile=nf_create('Lab_T_1d_94_07.nc',nf_share,ncid)
ncfile=nf_def_dim(ncid,'nlon',3,dim1)
ncfile=nf_def_dim(ncid,'nlat',1,dim2)
ncfile=nf_def_dim(ncid,'ndepth',jpk,dim3)
ncfile=nf_def_dim(ncid,'ntime',jpt,dim4)
dim2d(1)=dim1
dim2d(2)=dim2
dim2d(3)=dim3
dim2d(4)=dim4
dim1d(1)=dim1
dim1d(2)=dim2
dim1d(3)=dim4
ncfile=nf_def_var(ncid,'nvotemper',nf_real,4,dim2d,dtemp)
ncfile=nf_def_var(ncid,'nvosaline',nf_real,4,dim2d,dsali)
ncfile=nf_def_var(ncid,'nsowindsp',nf_real,3,dim1d,dwind)
ncfile=nf_def_var(ncid,'nsoshfldo',nf_real,3,dim1d,dswrn)
ncfile=nf_def_var(ncid,'nsoicecov',nf_real,3,dim1d,dicec)
ncfile=nf_def_var(ncid,'nsowaflcd',nf_real,3,dim1d,dwate)
ncfile=nf_def_var(ncid,'nsomixhgt',nf_real,3,dim1d,dturb)
ncfile=nf_enddef(ncid)
ncfile=nf_put_var_real(ncid,dtemp,temp1)
ncfile=nf_put_var_real(ncid,dsali,sali1)
ncfile=nf_put_var_real(ncid,dwind,wind1)
ncfile=nf_put_var_real(ncid,dswrn,swrn1)
ncfile=nf_put_var_real(ncid,dicec,icec1)
ncfile=nf_put_var_real(ncid,dwate,wate1)
ncfile=nf_put_var_real(ncid,dturb,turb1)
ncfile=nf_close(ncid)

end program generate1d

subroutine handle_err(errcode)
        implicit none
        include 'netcdf.inc'
        integer errcode
       
        print *, 'Error: ', nf_strerror(errcode)
        stop 2
        end

0 件のコメント:

コメントを投稿