!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%

      subroutine diagnosurf (f,v,fsiz,vsiz,m,ni,nk,trnch,itask) 1,48
*
#include "impnone.cdk"
*
      integer fsiz, vsiz, m, ni, nk, itask, trnch
      real f(fsiz), v(vsiz)
*
*Author
*          B. Bilodeau (Sept 1999)
*
*Revisions
* 001      B. Bilodeau (Nov 2000) - New comdeck phybus.cdk
*
*
*Object
*          Time-series and zonal diagnostics extractions
*          of surface-related variables
*
*Arguments
* 
*          - Input/Output -
* F        permanent variables bus
* V        volatile (output)   bus
*
*          - Input -
* FSIZ     dimension of F
* VSIZ     dimension of V
* M        horizontal dimensions of fields
* NI       number of elements processed in the horizontal
*          (could be a subset of M in future versions)
*          (not used for the moment)
* NK       vertical dimension
* TRNCH    row number
* ITASK    task number
* 
*
*Notes
*
*IMPLICITES
*
*
#include "indx_sfc.cdk"
#include "phy_macros_f.h"
#include "phybus.cdk"
#include "options.cdk"
*
*MODULES
*
***
      integer ierget, it
      real heurser
      external serget
*
**
      it = itask
*
      CALL SERGET ('HEURE', HEURSER, 1, IERGET)
*
*
*     inverse of Monin-Obukhov length
      CALL SERXST ( F(ILMO+(indx_agrege-1)*NI),
     $                           'IL' , TRNCH, NI, 0.,      1., -1    )
      CALL MZONXST( F(ILMO+(indx_agrege-1)*NI),
     $                           'IL' , TRNCH, NI, HEURSER, 1., -1, IT)
*
*     diagnostic specific humidity at screen level
      CALL SERXST (F(QDIAG)    , 'DQ' , TRNCH, NI, 0.0    , 1., -1    )
      CALL MZONXST(F(QDIAG)    , 'DQ' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     specific humidity at the surface
      CALL SERXST ( F(QSURF+(indx_agrege-1)*NI),
     $                           'QG' , TRNCH, NI, 0.0    , 1., -1    )
      CALL MZONXST( F(QSURF+(indx_agrege-1)*NI),
     $                           'QG' , TRNCH, NI, HEURSER, 1., -1, IT)
*
*     glacier surface temperature
      CALL SERXST ( F(TGLACIER), 'I9' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL MZONXST( F(TGLACIER), 'I9' , TRNCH ,NI ,HEURSER, 1., -1, IT)
      CALL SERXST ( F(TGLACIER+NI), '9I' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL MZONXST( F(TGLACIER+NI), '9I' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     marine ice temperature (3 levels)
      CALL SERXST ( F(TMICE)   , 'I7' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL MZONXST( F(TMICE)   , 'I7' , TRNCH ,NI ,HEURSER, 1., -1, IT)
      CALL SERXST ( F(TMICE+NI), '7I' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL MZONXST( F(TMICE+NI), '7I' , TRNCH ,NI ,HEURSER, 1., -1, IT)
      CALL SERXST ( F(TMICE+2*NI),'8I', TRNCH ,NI ,0.0    , 1., -1    )
      CALL MZONXST( F(TMICE+2*NI),'8I', TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     marine ice thickness
      CALL SERXST ( F(ICEDP)   , 'I8' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL MZONXST( F(ICEDP)   , 'I8' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     snow thickness (soil, glacier and marine ice)
      CALL SERXST ( F(SNODP+(indx_soil-1)*NI)   , 'S1' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL MZONXST( F(SNODP+(indx_soil-1)*NI)   , 'S1' , TRNCH ,NI ,HEURSER, 1., -1, IT)
      CALL SERXST ( F(SNODP+(indx_glacier-1)*NI), 'S2' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL MZONXST( F(SNODP+(indx_glacier-1)*NI), 'S2' , TRNCH ,NI ,HEURSER, 1., -1, IT)
      CALL SERXST ( F(SNODP+(indx_ice-1)*NI)    , 'S4' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL MZONXST( F(SNODP+(indx_ice-1)*NI)    , 'S4' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     surface albedo (soil, glacier, marine ice, water and average)
      CALL SERXST ( F(ALVIS+(indx_soil-1)*NI),
     $                           'XS' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL SERXST ( F(ALVIS+(indx_glacier-1)*NI),
     $                           'XG' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL SERXST ( F(ALVIS+(indx_water-1)*NI),
     $                           'XW' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL SERXST ( F(ALVIS+(indx_ice-1)*NI),
     $                           'XI' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL SERXST ( F(ALVIS+(indx_agrege-1)*NI),
     $                           'AL' , TRNCH ,NI ,0.0    , 1., -1    )
*
*     soil temperature
      CALL SERXST ( F(TSOIL)   , 'I0' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL MZONXST( F(TSOIL)   , 'I0' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     soil temperature
      CALL SERXST ( F(TSURF)   , 'TS' , TRNCH ,NI ,0.0    , 1., -1    )
      CALL MZONXST( F(TSURF)   , 'TS' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     deep soil temperature
      CALL SERXST (F(TSOIL+NI) , 'TP' , TRNCH ,NI, 0.0    , 1., -1    )
      CALL MZONXST(F(TSOIL+NI) , 'TP' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     radiative surface temperature
      CALL SERXST (F(TSRAD)    , 'G3' , TRNCH, NI, 0.0    , 1., -1     )
      CALL MZONXST(F(TSRAD)    , 'G3' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     diagnostic air temperature at screen level
      CALL SERXST (F(TDIAG)    , 'TJ' , TRNCH, NI, 0.0    , 1., -1     )
      CALL MZONXST(F(TDIAG)    , 'TJ' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     diagnostic U component of the wind at screen level
      CALL SERXST (F(UDIAG)    , 'UD' , TRNCH, NI, 0.0    , 1., -1    )
      CALL MZONXST(F(UDIAG)    , 'UD' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     diagnostic V component of the wind at screen level
      CALL SERXST (F(VDIAG)    , 'VD' , TRNCH, NI, 0.0    , 1., -1    )
      CALL MZONXST(F(VDIAG)    , 'VD' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     soil moisture content
      CALL SERXST (F(WSOIL)    , 'WG' , TRNCH, NI, 0.0    , 1., -1    )
      CALL MZONXST(F(WSOIL)    , 'WG' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*     deep soil moisture content
      CALL SERXST (F(WSOIL+NI) , 'WR' , TRNCH ,NI, 0.0    , 1., -1    )
      CALL MZONXST(F(WSOIL+NI) , 'WR' , TRNCH ,NI ,HEURSER, 1., -1, IT)
*
*
      if (ischmsol.eq.3) then              ! isba
*
*
*                             Outputs for time series
*
*
*     liquid water stored on canopy
      CALL SERXST( F(WVEG)     , 'C5' , TRNCH, NI, 0.0    , 1., -1     )
*
*     mass of snow cover
      CALL SERXST( F(SNOMA)    , 'C6' , TRNCH, NI, 0.0    , 1., -1     )
*
*     snow albedo
      CALL SERXST( F(SNOAL)    , 'C7' , TRNCH, NI, 0.0    , 1., -1     )
*
*     snow density
      CALL SERXST( F(SNORO)    , 'C8' , TRNCH, NI, 0.0    , 1., -1     )
*
*     net radiation
      CALL SERXST( V(RNET_S)   , 'C9' , TRNCH, NI, 0.0    , 1., -1     )
*
*     latent heat flux over bare ground
      CALL SERXST( V(LEG)      , 'D3' , TRNCH, NI, 0.0    , 1., -1     )
*
*     latent heat flux over vegetation
      CALL SERXST( V(LEV)      , 'D4' , TRNCH, NI, 0.0    , 1., -1     )
*
*     latent heat flux over snow
      CALL SERXST( V(LES)      , 'D5' , TRNCH, NI, 0.0    , 1., -1     )
*
*     direct latent heat flux from vegetation leaves
      CALL SERXST( V(LER)      , 'D6' , TRNCH, NI, 0.0    , 1., -1     )
*
*     latent heat of evapotranspiration
      CALL SERXST( V(LETR)     , 'D7' , TRNCH, NI, 0.0    , 1., -1     )
*
*     runoff
      CALL SERXST( V(OVERFL)   , 'E2' , TRNCH, NI, 0.0    , 1., -1     )
*
*     drainage
      CALL SERXST( F(DRAIN)    , 'E3' , TRNCH, NI, 0.0    , 1., -1     )
*
*     fraction of the grid covered by snow
      CALL SERXST( V(PSN)      , 'E5' , TRNCH, NI, 0.0    , 1., -1     )
*
*     fraction of bare ground covered by snow
      CALL SERXST( V(PSNG)     , 'E6' , TRNCH, NI, 0.0    , 1., -1     )
*
*     fraction of vegetation covered by snow
      CALL SERXST( V(PSNV)     , 'E7' , TRNCH, NI, 0.0    , 1., -1     )
*
*     stomatal resistance
      CALL SERXST( V(RS)       , 'E8' , TRNCH, NI, 0.0    , 1., -1     )
*
*     specific humidity of the surface
      CALL SERXST( V(HUSURF)   , 'E9' , TRNCH, NI, 0.0    , 1., -1     )
*
*     Halstead coefficient (relative humidity of veg. canopy)
      CALL SERXST( V(HV)       , 'G1' , TRNCH, NI, 0.0    , 1., -1     )
*
*     soil volumetric ice content
      CALL SERXST( F(ISOIL)    , 'G4' , TRNCH, NI, 0.0    , 1., -1     )
*
*     liquid water in snow
      CALL SERXST( F(WSNOW)    , 'G5' , TRNCH, NI, 0.0    , 1., -1     )
*
*     liquid precip. rate
      CALL SERXST( V(RAINRATE) , 'G6' , TRNCH, NI, 0.0    , 1., -1     )
*
*     solid precip. rate
      CALL SERXST( V(SNOWRATE) , 'G7' , TRNCH, NI, 0.0    , 1., -1     )
*
*
*
      endif
*
      return
      end