!-------------------------------------- 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_ptend(pvort,pdiv,pp,pgz,plnps,ldwrite),6
*
***s/r inmi_ptend - From input time-tendencies of (Vort,Div,TT,lnps),
* computes vertically projected time-tendencies required by INMI scheme.
* i.e.: d(Vort,Div,P)/dt (on vertical normal modes).
* ref: Temperton, C., M. Roch, 1991: Implicit Normal Mode Initialization
* for an Operational Regional Model, MWR 119, 667-677.
* See p. 670. eqn. (3.1).
*
*Author : Luc Fillion - 27 Apr. 2007.
*Revision:
*: Luc Fillion - ARMA/EC - May 2010 - Implemented in v_11_01b of 3dvar.
*
* -------------------
** Purpose: Used for LAM4D analysis
*
*Arguments
*
* out:
* pvort = Vertically projected vorticity time-tendency
* pdiv = Vertically projected Divergence time-tendency
* pp = Vertically projected P mass time-tendency
*
* in:
* pvort = Vorticity time-tendency on physical vertical grid.
* pdiv = Divergence time-tendency on physical vertical grid.
* pgz = GZ time-tendency on physical vertical grid.
* plnps = Lnps time-tendency on physical grid.
*
implicit none
#include "taglam4d.cdk"
#include "comdim.cdk"
#include "comcst.cdk"
#include "comlun.cdk"
#include "comode.cdk"
#include "comin.cdk"
!
logical ldwrite
real*8 pvort(ni,nflev,nj)
real*8 pdiv(ni,nflev,nj)
real*8 pgz(ni,nflev,nj)
real*8 pp(ni,nflev,nj)
real*8 plnps(ni,nj)
!
character*3 clvar
character*8 clletiket
logical llwrite
integer ji,jj,jk,jk1,jk2
integer ilen,ierr
integer idum1,idum2,idum3,idum4
!
real*8 zmin,zmax
real*8 zvert1(nflev),zvert2(nflev)
real*8 zp(ni,nflev,nj)
*
**
! write(nulout,*) 'INMI_PTEND BEGINS'
!
!*1. Compute P time-tendency
! -----------------------
!
do ji=1,ni
do jj=1,nj
do jk=1,nflev
pp(ji,jk,jj) = pgz(ji,jk,jj)+rd*tstar*plnps(ji,jj)
enddo
enddo
enddo
!
!*2. Compute Vertically projected time-tendencies
! --------------------------------------------
!
! Vort
do jj=1,nj
do ji=1,ni
do jk=1,nflev
zvert1(jk)=pvort(ji,jk,jj)
enddo
call mxv
(zvert2,vinv,zvert1,nflev,nflev)
do jk=1,nflev
pvort(ji,jk,jj) = zvert2(jk)
enddo
enddo
enddo
!
! Div
do jj=1,nj
do ji=1,ni
do jk=1,nflev
zvert1(jk)=pdiv(ji,jk,jj)
enddo
call mxv
(zvert2,vinv,zvert1,nflev,nflev)
do jk=1,nflev
pdiv(ji,jk,jj) = zvert2(jk)
enddo
enddo
enddo
!
! PP
do jj=1,nj
do ji=1,ni
do jk=1,nflev
zvert1(jk)=pp(ji,jk,jj)
enddo
call mxv
(zvert2,vinv,zvert1,nflev,nflev)
do jk=1,nflev
pp(ji,jk,jj) = zvert2(jk)
enddo
enddo
enddo
!
if(ldwrite) then
! QQ
clletiket='INMIPTEN'
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)
!
! DD
clletiket='INMIPTEN'
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)
! PP
clletiket='INMIPTEN'
clvar = 'GZ '
do jk=1,nflev
do jj=1,nj
do ji=1,ni
zp(ji,jk,jj)=pp(ji,jk,jj)
enddo
enddo
enddo
call write_fld
(zp,clvar,clletiket,nflev)
endif
!
return
end