!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
! version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
!
subroutine subggrd 2,2
! use modfgat, only : nstamplist, nobsgid, nobs, notag, nstepobs
!
IMPLICIT NONE
#if defined (DOC)
*
*s/r subggrd :
!
*Author: L. Fillion - 21 March 2005 - MSC/CAN
* L. Fillion ARMA/EC May 2006: LAM4D upgrade to v10_0_0.
* L. Fillion ARMA/EC 13 Jan 2009: LAM4D upgrade to v10_1_2.
*
*-----------------------------------------------------------------------
*
* Purpose: Set geometrical arrays related to NLM computational grid.
*
*-----------------------------------------------------------------------
*
* Argument:
*
#endif
*
#include "taglam4d.cdk"
#include "pardim.cdk"
#include "comdim.cdk"
#include "comlun.cdk"
#include "comcst.cdk"
#include "comgdpar.cdk"
#include "namgdpar.cdk"
#include "compdg.cdk"
#include "comgem.cdk"
#include "comgemla.cdk"
#include "comgembgh.cdk"
#include "comgrd_param.cdk"
#include "comgrd.cdk"
#include "rpnstd.cdk"
*
integer ji,jj,jk,jlev
integer ikey, ierr, iabt, igrchk, ini, inj, ink
*
integer ip2t,vfstlir,vfstluk
integer idtyp, ip1, ip2, ip3, ig1, ig2, ig3, ig4, idt, ipas
+ , ibits,iswa, ilng, idltf, iubc, ix1, ix2, ix3
integer iip2,iip3,itrlnlev
integer iig1,iig2,iig3,iflag
integer ip1kind,ip1style,itrlgid,ibrpstamp
integer k,koutmpg
integer iip1s_trl(jpnflev)
!
character*2 cnom
character*8 cetiket,cletiket
character*1 clgr, ctyp, cltypvar
*
integer ip1_pak_trl,ip1_vco_trl,ip0gid
integer k,koutmpg
integer idatet
integer fstinf, fstprm
integer ezqkdef
real*8 z2d(90,114)
real*8 zfld(nit+njt)
real*8 zlatbeg,zlonbeg,zdlon,zdlat,zlat,zsave,ztol,zcon
!
!!
write(nulout,*) 'SUBGGRD: Set arrays of the Basic-state geometry'
write(nulout,*) 'SUBGGRD: reading from unit ',ninmpg(1)
!
! call getfldprm2(IIP1S_TRL,IIP2,IIP3,ITRLNLEV,CLETIKET,CLTYPVAR
! & ,IP0GID,clnomvar,ibrpstamp,jpnflev,ninmpg
! & ,nulout,ip1_pak_trl,ip1_vco_trl,ntrials,koutmpg)
!
! Longitudes
cletiket = ' '
cltypvar = ' '
ikey = fstinf(ninmpg(1), INI, INJ, INK, -1,cletiket, nig1t
& ,nig2t,nig3t,cltypvar,'>>')
ikey = vfstluk
(zfld, ikey, INI, INJ, INK)
!
! do ji=1,nit
! write(nulout,*) 'subggrd: ji, trial longitude = ',ji,zfld(ji)
! enddo
!
do ji=1,nit-1
zdlon=abs(zfld(ji+1)-zfld(ji))
enddo
!
zsave=0.
ztol=1.e-4
iflag = 0
do ji=1,nit-1
zdlon=abs(zfld(ji+1)-zfld(ji))*rdeg2rad
zcon=abs((zsave-zdlon)/zdlon)
zsave=zdlon
if((zcon.gt.ztol).and.(grd_typ.eq.'LU')) then
if(ji.ne.1) then
iflag = 1
endif
endif
enddo
if(iflag.eq.1) then
write(nulout,*) 'SUBGGRD: Analysis grd_typ is LU '
write(nulout,*) 'SUBGGRD: But Non-uniform Basic-State grid'
endif
!
do jj= 1,njt
do ji= 1,nit
rlon_bgh(ji,jj)=rdeg2rad*zfld(ji)
enddo
enddo
!
! Latitudes
!
cletiket = ' '
cltypvar = ' '
ikey = fstinf(ninmpg, INI, INJ, INK, -1,cletiket, nig1t
& ,nig2t,nig3t,cltypvar,'^^')
ikey = vfstluk
(zfld, ikey, INI, INJ, INK)
!
! do jj=1,njt
! write(nulout,*) 'subggrd: jj, trial latitude = ',jj,zfld(jj)
! enddo
!
zsave=0.
if(iflag.eq.0) then
do jj=1,njt-1
zdlat=abs(zfld(jj+1)-zfld(jj))*rdeg2rad
zcon=abs((zsave-zdlat)/zdlat)
zsave=zdlat
if((zcon.gt.ztol).and.(grd_typ.eq.'LU')) then
if(ji.ne.1) then
iflag = 1
endif
endif
enddo
endif
!
do jj= 1,njt
do ji= 1,nit
rlat_bgh(ji,jj)=rdeg2rad*zfld(jj)
enddo
enddo
!
if(iflag.eq.1) then
write(nulout,*) 'SUBGGRD: Analysis grd_typ is LU '
write(nulout,*) 'SUBGGRD: But Non-uniform Basic-State grid'
else
write(nulout,*) 'subggrd: LON UNIFORM SPACING = ',zdlon*rrad2deg
write(nulout,*) 'subggrd: LAT UNIFORM SPACING = ',zdlat*rrad2deg
endif
!
do jj= 1,njt
do ji= 1,nit
rdlon_bgh(ji,jj) = zdlon
rdlat_bgh(ji,jj) = zdlat
enddo
enddo
c
c* Get distance between grid points in meters
c
cletiket = ' '
cltypvar = ' '
ibrpstamp= -1
!
! call getfldprm2(IIP1S_TRL,IIP2,IIP3,ITRLNLEV,CLETIKET,CLTYPVAR
! & ,ITRLGID,'UU',ibrpstamp,jpnflev,ninmpg
! & ,nulout,ip1style,ip1kind,ntrials,koutmpg)
!
! cletiket = ' '
! ikey = fstinf(koutmpg,ini,inj,ink,-1,cletiket,
! & -1,-1,-1,' ','UU')
! write(nulout,*) 'subgpar: ini,inj,ink=',ini,inj,ink
! ierr = fstprm(ikey,idatet,idt,ipas,ini,inj,ink,ibits,idtyp,
! & ip1,ip2,ip3,ctyp,cnom,cetiket,clgr,ig1,ig2,ig3,ig4,
! & iswa,ilng,idltf,iubc,ix1,ix2,ix3)
! if (ikey.lt.0) then
! ikey = fstinf(koutmpg,ini,inj,ink,-1,' ',
! & -1,-1,-1,' ',' ')
! ierr = fstprm(ikey,idatet,idt,ipas,ini,inj,ink,ibits,idtyp,
! & ip1,ip2,ip3,ctyp,cnom,cetiket,clgr,ig1,ig2,ig3,ig4,
! & iswa,ilng,idltf,iubc,ix1,ix2,ix3)
! ierr = fstprm(ikey,idatet,idt,ipas,ini,inj,ink,ibits,idtyp,
! & ip1,ip2,ip3,ctyp,cnom,cetiket,clgr,ig1,ig2,ig3,ig4,
! & iswa,ilng,idltf,iubc,ix1,ix2,ix3)
! write(nulout,9600) 'UU', cetiket, ini, inj
! 9600 format(///,4x,'In SUGETGD: cannot find a record with ',/,
! & ' NOMVAR=',a2,' and ETIKET=',a8,' in the trial',/,
! & ' field file.',/,10x,'JOB IS ABORTED',//,
! & ' The dimensions INI,INJ found',
! & ' in the trial field file are: ',2i6 )
! call abort3d(nulout
! & ,'SUBGPAR: Problem with trial field file')
! endif
!
! nigdgid = ezqkdef(ini, inj, 'Z', ig1, ig2, ig3, ig4, ninmpg)
!
! call sudxdy(zdx,zdx,ninmpg,nit,njt)
!
! ierr=vfstlir(z2d,ninmpg,ini,inj,1,nstamplist(1)
! & ,cletiket,0,0,0,'P',cfstvar2d(1))
! write(nulout,*) 'subggrd: z2d=',z2d
!
return
end