!-------------------------------------- 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 --------------------------------------
!
C
C X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
C
subroutine inmi_tend0(pvort,pdiv,pgz,plnps,pgdpsi,ldwrite,lddiab) 2,6
*
***s/r inmi_tend0 - Computes time-tendencies required by INMI scheme.
* i.e.: d(Vort,Div,T,lnps)/dt
* ref: Temperton, C., M. Roch, 1991: Implicit Normal Mode Initialization
* for an Operational Regional Model, MWR 119, 667-677.
* See p. 670. before eqn. (3.1).
*
*Author : Luc Fillion - 25 Apr. 2007.
*Revision:
* Luc Fillion - ARMA/EC - May 2010 - Implemented in v_11_01b of 3dvar.
*
* -------------------
** Purpose: Used for LA-XD-Var analysis
*
*Arguments
*
implicit none
#include "taglam4d.cdk"
#include "comdim.cdk"
#include "comgrd_param.cdk"
#include "comcst.cdk"
#include "comcva.cdk"
#include "comgd0.cdk"
#include "comgd1.cdk"
#include "compdg.cdk"
#include "comlun.cdk"
#include "comcorr.cdk"
#include "comgdpar.cdk"
#include "comin.cdk"
#include "comode.cdk"
!
logical ldwrite,lddiab
real*8 pvort(ni,nflev,nj)
real*8 pdiv(ni,nflev,nj)
real*8 pgz(ni,nflev,nj)
real*8 plnps(ni,nj)
real*8 pgdpsi(ni,nflev,nj)
!
character*3 clvar
character*8 clletiket
logical llout
integer ji,jj,jk,nip1,njp1,jk1,jk2,ilev,ifois
integer ilen,ierr
integer idum1,idum2,idum3,idum4
!
real*8 zmin,zmax,zcscl
real*8 zvort(ni,nflev,nj)
real*8 zdiv(ni,nflev,nj)
real*8 zvort1(ni,nflev,nj)
real*8 zdiv1(ni,nflev,nj)
real*8 ztt0(ni,nflev,nj)
real*8 ztt(ni,nflev,nj)
real*8 zgz(ni,nflev,nj)
real*8 zgz1(ni,nflev,nj)
real*8 zp(ni,nflev,nj)
real*8 zps(ni,nj)
real*8 zps0(ni,nj)
!
*
**
! write(nulout,*) 'INMI_TEND BEGINS'
!
ilev = nflev/2
!
!*1. Prepare fields ready for TL call
! --------------------------------
!
zp(:,:,:) = 0.0
!
! call pc2UVg_c(zu0,zv0,pgdpsi,zp) ! Divergence-free Rossby modes
!
! do jk=1,nflev
! do ji=0,ni+1
! do jj=0,nj+1
! ut0(ji,jk,jj) = zu0(ji,jk,jj)
! vt0(ji,jk,jj) = zv0(ji,jk,jj)
! enddo
! enddo
! enddo
!
!*2. Compute (Vort,Div,GZ) at time 0
! -------------------------------
!
! call UV2zdg_c(zvort,zdiv,zu0,zv0)
!
do jk=1,nflev
do jj=1,nj
do ji=1,ni
ztt0(ji,jk,jj) = tt0(ji,jk,jj)
enddo
enddo
enddo
!
! GZ
do ji=1,ni
do jj=1,nj
zps0(ji,jj) = gps0(ji,1,jj)
enddo
enddo
!
call ltt2phi_inmi
(zgz,ztt0)
!
!*3. Call TLM
! --------
!
if(lddiab) then
call putdx2
('K')
call getdx
('K')
else
call putdx2
('I')
call getdx
('I')
endif
!
!*4. Compute (Vort,Div,GZ) at later time
! -----------------------------------
!
!*4.2 compute vort,div
!
! call UV2zdg_c(zvort1,zdiv1,zu0,zv0)
!
!*4.3 compute GZ
!
do jk=1,nflev
do jj=1,nj
do ji=1,ni
ztt(ji,jk,jj) = tt0(ji,jk,jj)
enddo
enddo
enddo
!
call ltt2phi_inmi
(zgz1,ztt)
!
!*4.4 compute tendencies
!
write(nulout,*) 'inmi_tend: delt_tl = ',delt_tl
do jk=1,nflev
do jj=1,nj
do ji=1,ni
pvort(ji,jk,jj) = (zvort1(ji,jk,jj)-zvort(ji,jk,jj))/delt_tl
pdiv(ji,jk,jj) = (zdiv1(ji,jk,jj)-zdiv(ji,jk,jj))/delt_tl
pgz(ji,jk,jj) = (zgz1(ji,jk,jj)-zgz(ji,jk,jj))/delt_tl
enddo
enddo
enddo
!
plnps(:,:) = 0.0
do jj = mjobsbufs,nj-mjobsbufn
do ji = miobsbufw,ni-miobsbufe
plnps(ji,jj) = (gps0(ji,1,jj)-zps0(ji,jj))
& /(delt_tl*gpsg(ji,1,jj))
enddo
enddo
!
if(ldwrite.or.lminend) then
clletiket='INMITEND'
clvar = 'DD '
do jk=1,nflev
do jj=1,nj
do ji=1,ni
zp(ji,jk,jj)=pdiv(ji,jk,jj)
enddo
enddo
enddo
! call write_fld(zp,clvar,clletiket,nflev)
!
clletiket='INMITEND'
clvar = 'QQ '
do jk=1,nflev
do jj=1,nj
do ji=1,ni
zp(ji,jk,jj)=pvort(ji,jk,jj)
enddo
enddo
enddo
! call write_fld(zp,clvar,clletiket,nflev)
!
clletiket='INMITEND'
clvar = 'GZ '
do jk=1,nflev
do jj=1,nj
do ji=1,ni
zp(ji,jk,jj)=pgz(ji,jk,jj)
enddo
enddo
enddo
! call write_fld(zp,clvar,clletiket,nflev)
!
clletiket='INMITEND'
clvar = 'P0 '
do jj=1,nj
do ji=1,ni
zps(ji,jj)=plnps(ji,jj)
enddo
enddo
! call write_fld(zps,clvar,clletiket,1)
endif
!
return
end