!-------------------------------------- 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 varoutlow_glb,6
      use mod4dv, only : l4dvar
#if defined (DOC)
*
***s/r varoutlow_glb  - For grd_typ = 'GU', lcv_hemis = .false.
*                       Output analysis increments at analysis resolution onto RPN standard file.
*
#endif
!Author  : Luc Fillion - ARMA/EC - 12 Aug 2010
!Revision:

C
      use modfgat, only : nstamplist
      IMPLICIT NONE
*implicits
#include "taglam4d.cdk"
#include "pardim.cdk"
#include "comdim.cdk"
#include "comlun.cdk"
#include "comgem.cdk"
#include "compost.cdk"
#include "cvcord.cdk"
#include "rpnstd.cdk"
#include "comgdpar.cdk"
#include "comcst.cdk"
#include "cominterp.cdk"
#include "comct0.cdk"
#include "comfilt.cdk"
#include "comgrd_param.cdk"
#include "comgrd.cdk"
#include "comgemla.cdk"
#include "comcva.cdk"
#include "comleg.cdk"
*
      integer vfstluk,write_encode_hyb,fstecr
      integer jvar, jcol
      integer jlev,inbrlev,imode,inbitstr,ilimlvhu
      integer gddst
      integer ezgdef_fmem
#include "localpost.cdk"
C
      integer idatyp_la,inbits_la
      integer itrlgid,ip0gid,igidv_trl,iip1,iip2,ji,jj,jk
      integer ip1_pak_trl,ip1_vco_trl,ip1_pak_anl,ip1_vco_anl
      integer ip1_pak_inclr,ip1_pak_hy,ip1_vco_inclr,iip1_hyb_prm
      integer itrlnlev,iwindnlev,igdgid,iip3
      integer iip2_image,iip3_image
      integer iig1,iig2,iig3,iig4,ezgprm,ikey,iwindgid,vezsint
      integer iig1V,iig2V,iig3V,iig4V
      integer ibrpstamp,inpak_inc
      integer iig4wind,ikind
!
      integer  k,koutmpg
      integer ig1tic,ig2tic,ig3tic,ig4tic
      integer ig1in,ig2in,ig3in
      integer iip1s_inclr(jpnflev)
      integer ig1in_u,ig2in_u,ig3in_u
      integer ig1in_v,ig2in_v,ig3in_v
      integer ezqkdef
!
      real*8 zmin,zmax,zdlon,zwork
      real*8 zptophr, zprefhr,zrcoefhr
      real*8 zlowvar(mni_in,mnj_in)
!
      real zptop4, zpref4,zrcoef4,zdummy
      real ax(mni_in),ay(mnj_in)
      real ax_u(mni_in),ay_v(mnj_in)
      real zxlon1_4,zxlat1_4,zxlon2_4,zxlat2_4

!
      character*1 cltypinc,cltypanl
      character*1 clstring
      character*2 clvar
      character*3 clname
      character*3 clnomvar_image
      character*3 clnomvar_3
      LOGICAL llimplemented
      data cltypinc,cltypanl /'R','A'/
!
!!
      WRITE(NULOUT,FMT='(/,4X,"Starting varoutlow_glb",//)')
!
!
!*1   File labels
!     -----------
!
      idatyp_la = 5    ! can be used for other grd_typ also
      inbits_la = -32  ! can be used for other grd_typ also
      cetikinc='ANINCLOW'
!
      if(l4dvar) then
        ibrpstamp=nstamplist(1)
      else
        ibrpstamp=nbrpstamp
      endif
!
!*2   Grid properties
!     ---------------
!
      igdgid = ezqkdef(ni, nj, 'G', 0,0,0,0,0)
!
!*2.1   Set hybrid vertical coordinate parameters from trial field
!
        call gethybprm2(ninmpg,nulout,-1,-1,' ',-1,zptop4,zpref4,zrcoef4
     &                  ,iip1_hyb_prm,ntrials)
        zptophr = zptop4
        zprefhr = zpref4
        zrcoefhr= zrcoef4
        write(nulout,*)'varoutlow_glb:zptop4,zpref4,zrcoef4 '
     &                   ,zptophr,zprefhr,zrcoefhr
!
!*2.2 Writing HY to analysis file
!
      if(nulstd.ne.0) then
        write(nulout,*) 'Writing variable HY on analysis file'
!
!       Determine the style in which ip1 is encoded (15bits or 31 bits)
!       A value <= 32767 (2**16 -1)  means that ip1 is compacted in 15 bits
!       Determine the type of P which was encoded in IP1
!
        if(iip1_hyb_prm .le. 32767) then
          ip1_pak_hy = 3
        else
          ip1_pak_hy = 2
!         set encoding of IP1 to 28 bits for write_encode_hyb
          imode = 0
          CALL CONVIP(iip1_hyb_prm,ZDUMMY,IKIND,imode,clstring,.false.)
        endif
        ierr    = write_encode_hyb(nulstd,'HY',nip2,niter,cetikinc
     &              ,ibrpstamp,zptop4,zpref4,zrcoef4)
        ierr    = write_encode_hyb(nulinclr,'HY',nip2,niter,cetikinc
     &              ,ibrpstamp,zptop4,zpref4,zrcoef4)
        ierr    = write_encode_hyb(nulinchr,'HY',nip2,niter,cetikinc
     &              ,ibrpstamp,zptop4,zpref4,zrcoef4)
      endif
!
!*3   Output
!     ******
!
      nip2 = 0
      niter=0
      clgrtyp='G'
!
      do jvar = 1,nppcvar
        do jlev = 1,mdimppcvar(jvar)
          call gdout2(cppcvar(jvar),zlowvar,mni_in,mnj_in
     &                ,jlev,llimplemented,IIP1S_INCLR(jlev))
!
!          write(nulout,*) 'varoutlow_glb: inbits_la =',inbits_la
!          write(nulout,*) 'varoutlow_glb: nulinclr =',nulinclr
!          write(nulout,*) 'varoutlow_glb: ibrpstamp =',ibrpstamp
!          write(nulout,*) 'varoutlow_glb: ideet =',ideet
!          write(nulout,*) 'varoutlow_glb: inpas =',inpas
!          write(nulout,*) 'varoutlow_glb: mni_in =',mni_in
!          write(nulout,*) 'varoutlow_glb: mnj_in =',mnj_in
!          write(nulout,*) 'varoutlow_glb: jlev =',jlev
!          write(nulout,*) 'varoutlow_glb: iip1s_inclr(jlev) =',iip1s_inclr(jlev)
!          write(nulout,*) 'varoutlow_glb: nip2 =',nip2
!          write(nulout,*) 'varoutlow_glb: niter =',niter
!          write(nulout,*) 'varoutlow_glb: cltypinc =',cltypinc
!          write(nulout,*) 'varoutlow_glb: jvar =',jvar
!          write(nulout,*) 'varoutlow_glb: cppcvar(jvar) =',cppcvar(jvar)
!          write(nulout,*) 'varoutlow_glb: cetikinc =',cetikinc
!          write(nulout,*) 'varoutlow_glb: clgrtyp =',clgrtyp
!          write(nulout,*) 'varoutlow_glb: ig1in =',ig1in
!          write(nulout,*) 'varoutlow_glb: ig2in =',ig2in
!          write(nulout,*) 'varoutlow_glb: ig3in =',ig3in
!          write(nulout,*) 'varoutlow_glb: idatyp_la =',idatyp_la
!
!          if(cppcvar(jvar).eq.'P0') then
!            zlowvar(:,:) = 1010.e3
!            cetikinc = 'CST1010'
!          endif
          IERR  = VFSTECR(zlowvar,zwork,inbits_la
     &            ,nulinclr,ibrpstamp,ideet,npas,ni,nj,1,iip1s_inclr(jlev)
     &            ,nip2,niter,cltypinc,cppcvar(jvar),cetikinc,clgrtyp,nig1
     &            ,nig2,nig3,nig4,nidatyp,.true.)
!stag          cetikinc='ANINCLOW'
!
          if(ierr.lt.0) then
            write(nulout,*) 'varoutlow_glb: writing field ',cppcvar(jvar)
            call abort3d(nulout,'varoutlow_glb: ierr < 0')
          endif
        enddo
      enddo
!
      write(nulout,*) 'END of varoutlow_glb'
!
      RETURN
      END