subroutine omegtes_gc(njeff,nsize_ar,rcl,
     &                   qg,dphi,dlam,thg,thgx,thgy,dg,ug,vg,vvel)           
 
!
! hmhj : this is modified hybrid by finite difference from henry juang
!       thg can be t or h
!
      use machine , only : kind_phys
 
      use resol_def
      use coordinate_def
      use physcons, rd => con_rd, cp => con_cp
      implicit none
 
      integer njeff,nsize_ar
      integer i,k
 
      real(kind=kind_phys) rcl
      real(kind=kind_phys) dg(nsize_ar,levs), ug(nsize_ar,levs),
     &                     vg(nsize_ar,levs), vvel(nsize_ar,levs),
     &                    thg (nsize_ar,levs),
     &                    thgx(nsize_ar,levs),  thgy(nsize_ar,levs),
     &                     dphi(nsize_ar), dlam(nsize_ar), qg(nsize_ar)
 
       real(kind=kind_phys)
     &      tki(njeff,levp1), tkxy(njeff,levp1),
     &      pp (njeff,levp1),  dpx(njeff,levp1), dpy(njeff,levp1),
     &      dpp(njeff,levs),   dppx(njeff,levs),dppy(njeff,levs),
     &       db(njeff,levp1),  appx(njeff,levs),appy(njeff,levs) 
 
      real(kind=kind_phys) cons0,cons0p5,cons1,cons2,clog2   !constant
      real(kind=kind_phys) rmin,rmax,rkappa,tkrt0
 
!     print *,' enter  omegtes_gc_fd '				! hmhj
!
!     print *,' in omegtes_gc_fd vertcoord_id =',vertcoord_id

      cons0   = 0.d0      !constant
      cons0p5 = 0.5d0     !constant
      cons1   = 1.d0      !constant
      cons2   = 2.d0      !constant
      clog2=log(cons2)     ! constant
      rkappa = cp / rd

      do k=1,levp1
      do i=1,njeff
        pp (i,k)=ak5(k) + bk5(k)*qg(i)
        dpx(i,k)=bk5(k)*dlam(i)*rcl
        dpy(i,k)=bk5(k)*dphi(i)*rcl
      enddo
      enddo
! -----------------
      if( vertcoord_id.eq.3. ) then
      tki = 0.0
      tkxy= 0.0
      do k=2,levs
        do i=1,njeff
          tkrt0 = (thg(i,k-1)+thg(i,k))/(thref(k-1)+thref(k))
          tki (i,k)=ck5(k)*tkrt0**rkappa
          tkxy(i,k)=tki(i,k)*rkappa/(thg(i,k-1)+thg(i,k))
        enddo
      enddo
      do k=2,levs
        do i=1,njeff
          pp (i,k)=pp (i,k) + tki(i,k)
          dpx(i,k)=dpx(i,k)+tkxy(i,k)*(thgx(i,k-1)+thgx(i,k))
          dpy(i,k)=dpy(i,k)+tkxy(i,k)*(thgy(i,k-1)+thgy(i,k))
        enddo
      enddo
      endif
! -------------------
 
      do k=1,levs
        do i=1,njeff
          dpp (i,k) = pp (i,k) - pp (i,k+1)
          dppx(i,k) = dpx(i,k) - dpx(i,k+1)
          dppy(i,k) = dpy(i,k) - dpy(i,k+1)
          appx(i,k) = dpx(i,k) + dpx(i,k+1)
          appy(i,k) = dpy(i,k) + dpy(i,k+1)
        enddo
      enddo
      do i=1,njeff
        db(i,levs+1) = 0.e0
      enddo
      do k=levs,1,-1
        do i=1,njeff
          db(i,k)=db(i,k+1)+dpp(i,k)*dg(i,k)
     &                     +ug(i,k)*dppx(i,k)+vg(i,k)*dppy(i,k)
        enddo
      enddo
      do k=1,levs
        do i=1,njeff
          vvel(i,k)= ug(i,k)*appx(i,k)+vg(i,k)*appy(i,k)
     &              -db(i,k)-db(i,k+1)
          vvel(i,k)= 0.5 * vvel(i,k)
        enddo
      enddo

!     print *,' leave omegtes_gc_h. '				! hmhj
 
      return
      end