!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%
***** S/P CLASS271
*
#include "phy_macros_f.h"

      SUBROUTINE CLASS271 (F,LONCLEF,V,VSIZ,,81
     +                  UGCM,VGCM,TTA,QA,PRESSG,SG,SELOC,
     +                  GAMAZA,ILG,NK,IL1,IL2,JL,DT,KOUNT) 

#include "impnone.cdk"
*           
      INTEGER ILG
      REAL GAMAZA(ILG)
      INTEGER LONCLEF,VSIZ,NK,IL1,IL2,JL,KOUNT
      REAL F(LONCLEF),V(VSIZ),UGCM(ILG),VGCM(ILG),TTA(ILG),
     +     QA(ILG),PRESSG(ILG),SG(ILG),SELOC(ILG,NK)
      REAL DT
*
*Author
*          Y. Delage / J.-M. Belanger (May 1995)
*Revisions
* 001      M. Desgagne (Nov 1995) - Unified physics interface
* 002      Y. Delage (Apr 1997) - Call to CLASSPAR
* 003      Y. Delage (May 1997) - Choice of evaporation scheme from bare soil
* 004      J. Mailhot (Oct 1998) - New SURFACE interface
* 005      B. Bilodeau (Nov 1998) - Merge phyexe and param4
* 006      J. Mailhot (Feb 1999) - Change name from CLASS270 to CLASS271 due to
*                                  changes in calling sequence
*
*Object
*          Connection to CLASS, version 2.6
*
*Arguments
*
*          - Input/Output -
* F        field of permanent physics variables
* V        volatile bus
*
*          - Input -
* LONCLEF  dimension of F
* VSIZ     dimension of V
* UGCM     U component of wind vector at 1st level above ground (t-dt) 
* VGCM     V component of wind vector at 1st level above ground (t-dt) 
* TTA      Air temperature at 1st level above ground (t-dt) 
* QA       Specific air humidity at 1st level above ground (t-dt) 
* PRESSG   Surface pressure (t-dt) 
* SG       Local sigma values of 1st level above ground
* SELOC    Local sigma values of staggered levels
*
*          - Input -
* GAMAZA   adiabatic temperature displacement
* ILG      Maximum number of horizontal points in a slice     
* NK       Number of vertical levels
* IL1      Lower limit of horizontal points to be treated by CLASS 
* IL2      Upper limit of horizontal points to be treated by CLASS
* JL       Actual slice number  
* DT       Model timestep
* KOUNT    Actual timestep number
*
*IMPLICITES
#include "options.cdk"
#include "consphy.cdk"
#include "phybus.cdk"
*
*MODULES
      EXTERNAL CLASSA,CLASST,CLASSW,CLASSPAR,STKMEMW,UNSTAKW
*
**
*     ic   : Number of vegetation types considered in CLASS
*            {Needleleaf,Broadleaf,Crops,Grasslands}
*     icp1 : Number of vegetation types + urban area
*     ig   : Number of soil levels
*     is   : Number of soil textural indices
*            {Sand index, Clay index, % Organic matter)
*     ib   : Number of other soil properties
*            {Colour, Bottom drainage efficiency factor} 

      integer ic,icp1,ig,is,ib,igp1,igp2,idisp,ilw
      parameter (ic=4,icp1=5,ig=3,is=3,ib=2,igp1=4,igp2=5)

*     Energy budget solved with QLWIN taken as incoming longwave
*     radiation at the surface in TSOLVE/TSOLVC.
      parameter (ilw=1)

*     Control of the displacement height calculations in APREP.
      parameter (idisp=0)

*
      real qswv,qswi,pcpr,qswinv,qswini,ta,coszs,qswd
      real alvsbar,alirbar,cdmbar,qsens,qevap
      real su,sv,st,sq
      pointer (pata, ta(ilg))
      pointer (pacoszs,coszs(ilg)), (paqswd,qswd(ilg))
      pointer (paqwv  , qswv(ilg)), (paqwi, qswi(ilg))
      pointer (papcpr ,  pcpr(ilg))
      pointer (paqinv ,qswinv(ilg)), (paqini ,qswini(ilg))

      pointer (paalvsbar,  alvsbar(ilg)), (paalirbar ,  alirbar(ilg))
      pointer (paqsens, qsens(ilg)), (paqevap, qevap(ilg))
      pointer (pacdmbar, cdmbar(ilg))
      pointer (pasq, sq(ilg)), (past, st(ilg))
      pointer (pasu, su(ilg)), (pasv, sv(ilg))

*     Declaration of internal working arrays and gathered diagnostics
*     arrays for CLASS

      INTEGER ILAND,ILSL
*
      REAL*8 ALVSG,ALIRG,ALVSCS,ALVSSN,TRVSCN,TRIRCN,ALIRCS,TRVSCS,
     +       ZSNOW,FFC,FG,FCS,FGS,FSVF,FSVFS,FRAINC,FSNOWC,RAICAN,
     +       SNOCAN,RAICNS,CWCAP,CWCAPS,DISP,DISPS,ZOMLNC,ZOELNC,ZOELNG,
     +       ZOMLCS,ZOELCS,ZOELNS,RCMIN,RCMINS,CMASSC,CMASCS,EVAPB,
     +       G12C,G12G,G12CS,G23G,G23CS,G23GS,QFREZC,QFREZG,QMELTC,
     +       QMELTG,EVAPC,EVAPCG,EVAPG,EVPCSG,EVAPGS,TCANO,ZPOND,
     +       TPONDC,TPONDG,TPNDCS,TSNOGS,WL,WF,TH,
     +       GZROCS,ALIRCN,TCANS,FROOT,TBARC,TBARG,TBARCS,TBARGS,
     +       THLIQC,THLIQG,THICEG,HCPC,HCPG,RMAT,AILCNS,AILCAN,CWCPAV,
     +       ZPLIMCS,ZPLIMGS,ZPLIMC,ZPLIMG,RRESID,
     +       CDMEFFCS,CDMEFFGS,CDMEFFC,CDMEFFG,
     +       CDHEFFCS,CDHEFFGS,CDHEFFC,CDHEFFG,
     +       THFC,Z0EFFGS,Z0EFFC,Z0EFFG

      REAL*8 TRSNOW,SNOCNS,ZOMLNS,G23C,EVAPCS,ALVSCN,THICEC,G12GS,
     +       GZROGS,ALIRSN,TRIRCS,ZOMLNG,CHCAP,CHCAPS,TSNOCS,
     +       GZEROC,GZEROG,TPNDGS,HH,HHS,AIL,AILS,FCAN,FCANS,FSNOW,
     +       FCLOUD,GROWA,GROWN,GROWB,SRESID,THLGAT,ULGAT,VLGAT,TSGAT,
     +       QSGAT,PREGAT,COLRGAT,ALSWGAT,ALLWGAT,FSVGAT,FSIGAT,FSFGAT,
     +       FDLGAT,FSVHGAT,FSIHGAT,CSZGAT,PRESGAT,GTGAT,QGGAT,
     +       SNOGAT,ALBSGAT,RHOSGAT,TSNOGAT,TTGAT,TCANGAT,WCANGAT,
     +       SCANGAT,HFSGAT,QFSGAT,QFGGAT,ROFGAT,FORGGAT,
     +       QEVPGAT,CDHGAT,CDMGAT,TFXGAT,QFXGAT,SFCTGAT,SFCUGAT,
     +       SFCVGAT,SFCQGAT,EFGAT,WLGAT,WFGAT,LAMXGAT,LAMNGAT,CMASGAT,
     +       ROOTGAT,FCANGAT,ALVCGAT,ALICGAT,LNZ0GAT,TBARGAT,THLQGAT,
     +       THICGAT,DLONGAT,DLATGAT,CMAIGAT,Z0TOPGAT,XDRNGAT

      real*8 tsol3,tsubreg,tsol1,txfer,tinf,tsolbnd
      integer itsol1

      REAL*8 FSGVGAT,FSGGGAT,FLGVGAT,FLGGGAT,HFSCGAT,HFSGGAT,
     +       HMFCGAT,HTCSGAT,HTCGAT, 
     +       PCFCGAT,PCLCGAT,PCPNGAT,PCPGGAT,QFCFGAT,QFCLGAT,
     +       QFNGAT, QFCGAT, HMFGGAT,HMFNGAT,
     +       WTRCGAT,WTRSGAT,WTRGGAT,ROFCGAT,ROFNGAT,OVERFGAT,ZREFGAT,
     +       HTCCGAT,FSGSGAT,FLGSGAT,HFSSGAT,HEVCGAT,HEVSGAT,HEVGGAT
      INTEGER ISNDGAT,ICLYGAT

*
*     Scattered variables for time series extraction
*
      real
     +        xxtcan,xxtbar,xxsnow,xxrhosno,xxgrowth,xxrcan,xxscan,
     +        xxtsnow,xxthliq,xxthice,xxalbsno,
     +        xxalirbar,xxalvsbar,xxcdh,xxcdm,xxgt,xxqg,xxsurfq,
     +        xxsurft,xxsurfu,xxsurfv,xxcmai,xxfsgv,xxfsgs,xxfsgg,
     +        xxflgv,xxflgs,xxflgg,xxhfsc,xxhfss,xxhfsg,
     +        xxhevc,xxhevs,xxhevg,xxevap,xxrunoff,xxovrflo,xxtransp,
     +        xxqfcf,xxqfcl,xxqfg,xxqfn,xxpcfc,xxpclc,xxpcpg,xxpcpn,
     +        xxrofc,xxrofn,xxwtrc,xxwtrs,xxwtrg,xxbetaf,xxfcs,
     +        xxfgs,xxfc,xxfg

*************** CLASS internal variables *******************
      POINTER (IA1,ILAND(ILG)),   (IA2,ILSL(ILG))

      POINTER(G1,ALVSG(ILG)),    (G2,ALIRG(ILG)),   (G3,ALVSCS(ILG)),
     +       (G4,ALVSSN(ILG)),   (G5,ALIRSN(ILG)),  (G6,TRVSCN(ILG)),
     +       (G7,TRIRCN(ILG)),   (G8,ALIRCS(ILG)),  (G9,TRVSCS(ILG)),
     +       (G10,TRIRCS(ILG)),  (G11,ZSNOW(ILG)),  (G12,TRSNOW(ILG)),
     +       (G13,FFC(ILG)),     (G14,FG(ILG)),     (G15,FCS(ILG)),
     +       (G16,FGS(ILG)),     (G17,FSVF(ILG)),   (G18,FSVFS(ILG)),
     +       (G19,FRAINC(ILG)),  (G20,FSNOWC(ILG)), (G21,RAICAN(ILG)),
     +       (G22,SNOCAN(ILG)),  (G23,RAICNS(ILG)), (G24,SNOCNS(ILG)),
     +       (G25,CWCAP(ILG)),   (G26,CWCAPS(ILG)), (G27,DISP(ILG)),
     +       (G28,DISPS(ILG)),   (G29,ZOMLNC(ILG)), (G30,ZOELNC(ILG)),
     +       (G31,ZOMLNG(ILG)),  (G32,ZOELNG(ILG)), (G33,ZOMLCS(ILG)),
     +       (G34,ZOELCS(ILG)),  (G35,ZOMLNS(ILG)), (G36,ZOELNS(ILG)),
     +       (G37,RCMIN(ILG)),   (G38,RCMINS(ILG)), (G39,CMASSC(ILG)),
     +       (G40,CMASCS(ILG)),  (G41,CHCAP(ILG)),  (G42,CHCAPS(ILG)), 
     +       (G43,EVAPB(ILG)),   (G44,G12C(ILG)),   (G45,G12G(ILG)),
     +       (G46,G12CS(ILG)),   (G47,G12GS(ILG)),  (G48,G23C(ILG)),
     +       (G49,G23G(ILG)),    (G50,G23CS(ILG)),  (G51,G23GS(ILG)),
     +       (G52,QFREZC(ILG)),  (G53,QFREZG(ILG)), (G54,QMELTC(ILG)),
     +       (G55,QMELTG(ILG)),  (G56,EVAPC(ILG)),  (G57,EVAPCG(ILG)),
     +       (G58,EVAPCS(ILG)),  (G59,EVAPG(ILG)),  (G60,EVPCSG(ILG)),
     +       (G61,EVAPGS(ILG)),  (G62,TCANO(ILG)),  (G63,ZPOND(ILG)),
     +       (G64,TPONDC(ILG)),  (G65,TPONDG(ILG)), (G66,TPNDCS(ILG)),
     +       (G67,TPNDGS(ILG)),  (G68,TSNOCS(ILG)), (G69,TSNOGS(ILG)),
     +       (G70,WL(ILG)),      (G71,WF(ILG)),     (G72,TH(ILG)), 
     +       (G73,GZEROC(ILG)),  (G74,GZEROG(ILG)), (G75,GZROCS(ILG)),
     +       (G76,GZROGS(ILG)),  (G77,ALVSCN(ILG)), (G78,ALIRCN(ILG)), 
     +       (G79,TCANS(ILG)),  (G80,CDMEFFCS(ILG)),(G81,CDMEFFGS(ILG)),
     +       (G82,CDMEFFC(ILG)),(G83,CDMEFFG(ILG)),(G84,CDHEFFCS(ILG)),
     +       (G85,CDHEFFGS(ILG)),(G86,CDHEFFC(ILG)),(G87,CDHEFFG(ILG)),
     +       (G88,THFC(ILG)), (G89,Z0EFFGS(ILG)),(G90,Z0EFFC(ILG)),
     +       (G91,Z0EFFG(ILG))

      POINTER (GG1,FROOT(ILG,IG)),   (GG2,TBARC(ILG,IG)),
     +        (GG3,TBARG(ILG,IG)),   (GG4,TBARCS(ILG,IG)),
     +        (GG5,TBARGS(ILG,IG)),  (GG6,THLIQC(ILG,IG)),
     +        (GG7,THLIQG(ILG,IG)),  (GG8,THICEC(ILG,IG)),
     +        (GG9,THICEG(ILG,IG)),  (GG10,HCPC(ILG,IG)),
     +        (GG11,HCPG(ILG,IG)),   (GG12,QFCGAT(ILG,IG)),
     +        (GG13,HMFGGAT(ILG,IG)),(GG14,HTCGAT(ILG,IG))

      POINTER (A1,SRESID(ILG)),  (A2,FSNOW(ILG)),   (A3,FCLOUD(ILG)),  
     +        (A4,GROWA(ILG)),   (A5,GROWN(ILG)),   (A6,GROWB(ILG)),
     +        (A7,CWCPAV(ILG)),  (A8,AILCAN(ILG)),  (A9,AILCNS(ILG)),
     +        (A10,RRESID(ILG)), (A11,ZPLIMCS(ILG)),(A12,ZPLIMGS(ILG)),
     +        (A13,ZPLIMC(ILG)), (A14,ZPLIMG(ILG))

      POINTER (AC1,HH(ILG,IC)),  (AC2,HHS(ILG,IC)), (AC3,AIL(ILG,IC)),
     +        (AC4,AILS(ILG,IC)),(AC5,FCAN(ILG,IC)),(AC6,FCANS(ILG,IC))

      POINTER (AX1,RMAT(ILG,IC,IG))

*************** End of CLASS internal variables *************
     
      POINTER (X1,ISNDGAT(ILG,IG))
      POINTER (X2,ICLYGAT(ILG,IG))
      POINTER (X3,FORGGAT(ILG,IG))

      POINTER (GAT1,THLGAT(ILG)),  (GAT2,ULGAT(ILG)), 
     +        (GAT3,VLGAT(ILG)),   (GAT4,TSGAT(ILG)),
     +        (GAT5,QSGAT(ILG)),   (GAT6,PREGAT(ILG)),
     +        (GAT7,COLRGAT(ILG)), (GAT8,ALSWGAT(ILG)),
     +        (GAT9,ALLWGAT(ILG)), (GAT10,FSVGAT(ILG)),
     +        (GAT11,FSIGAT(ILG)), (GAT12,FSFGAT(ILG)),
     +        (GAT13,FDLGAT(ILG)), (GAT14,FSVHGAT(ILG)),
     +        (GAT15,FSIHGAT(ILG)),(GAT16,CSZGAT(ILG)),
     +        (GAT17,PRESGAT(ILG)),(GAT18,GTGAT(ILG)),
     +        (GAT19,QGGAT(ILG)),
     +        (GAT20,SNOGAT(ILG)), (GAT21,ALBSGAT(ILG)),
     +        (GAT22,RHOSGAT(ILG)),(GAT23,TSNOGAT(ILG)),
     +        (GAT24,TTGAT(ILG)),  (GAT25,TCANGAT(ILG)),
     +        (GAT26,WCANGAT(ILG)),(GAT27,SCANGAT(ILG)),
     +        (GAT28,HFSGAT(ILG)), (GAT29,QFSGAT(ILG)),
     +        (GAT30,QFGGAT(ILG)), (GAT31,ROFGAT(ILG)),
     +        (GAT32,QEVPGAT(ILG)),(GAT33,CDHGAT(ILG)),
     +        (GAT34,CDMGAT(ILG)), (GAT35,TFXGAT(ILG)),
     +        (GAT36,QFXGAT(ILG)), (GAT37,SFCTGAT(ILG)),
     +        (GAT38,SFCUGAT(ILG)),(GAT39,SFCVGAT(ILG)),
     +        (GAT40,SFCQGAT(ILG)),(GAT41,EFGAT(ILG)),
     +        (GAT42,WLGAT(ILG)),  (GAT43,WFGAT(ILG)),
     +        (GAT44,FSGVGAT(ILG)),(GAT45,FSGGGAT(ILG)),
     +        (GAT46,FLGVGAT(ILG)),(GAT47,FLGGGAT(ILG)),
     +        (GAT48,HFSCGAT(ILG)),(GAT49,HFSGGAT(ILG)),
     +        (GAT50,HMFCGAT(ILG)),(GAT51,HTCSGAT(ILG)),
     +        (GAT52,XDRNGAT(ILG)),(GAT53,PCFCGAT(ILG)),
     +        (GAT54,PCLCGAT(ILG)),(GAT55,PCPNGAT(ILG)),
     +        (GAT56,PCPGGAT(ILG)),(GAT57,QFCFGAT(ILG)),
     +        (GAT58,QFCLGAT(ILG)),(GAT59,QFNGAT(ILG)),
     +        (GAT60,HMFNGAT(ILG)),(GAT61,HTCCGAT(ILG)),
     +        (GAT62,ZREFGAT(ILG)),(GAT63,FSGSGAT(ILG)),
     +        (GAT64,FLGSGAT(ILG)),(GAT65,HFSSGAT(ILG)),
     +        (GAT66,ROFNGAT(ILG)),(GAT67,ROFCGAT(ILG)),
     +        (GAT68,WTRCGAT(ILG)),(GAT69,WTRSGAT(ILG)),
     +        (GAT70,WTRGGAT(ILG)),(GAT71,OVERFGAT(ILG)),
     +        (GAT72,DLONGAT(ILG)),(GAT73,DLATGAT(ILG)),
     +        (GAT74,HEVCGAT(ILG)),(GAT75,HEVSGAT(ILG)),
     +        (GAT76,HEVGGAT(ILG)),(GAT77,CMAIGAT(ILG))

      POINTER (GC1,LAMXGAT(ILG,IC)),(GC2,LAMNGAT(ILG,IC)),
     +        (GC3,CMASGAT(ILG,IC)),(GC4,ROOTGAT(ILG,IC))

      POINTER (GCP1,FCANGAT(ILG,ICP1)),(GCP2,ALVCGAT(ILG,ICP1)),
     +        (GCP3,ALICGAT(ILG,ICP1)),(GCP4,LNZ0GAT(ILG,ICP1))

      POINTER (GDIR,Z0TOPGAT(ILG)) 

      POINTER (GIG1,TBARGAT(ILG,IG)),(GIG2,THLQGAT(ILG,IG)),
     +        (GIG3,THICGAT(ILG,IG))

*     Pointers for time series extraction of scattered fields.

      pointer (gx1,xxtcan(ilg)),   (gx2,xxtbar(ilg,ig)),
     +        (gx3,xxthliq(ilg,ig)),(gx4,xxthice(ilg,ig)),
     +        (gx5,xxsnow(ilg)),   (gx6,xxrhosno(ilg)),
     +        (gx7,xxtsnow(ilg)),  (gx8,xxalbsno(ilg)),
     +        (gx9,xxrcan(ilg)),   (gx10,xxscan(ilg)),   
     +        (gx11,xxgrowth(ilg)), (gx12,xxalirbar(ilg)),
     +        (gx13,xxalvsbar(ilg)),(gx14,xxcdh(ilg)),
     +        (gx15,xxcdm(ilg)),   (gx16,xxgt(ilg)),
     +        (gx17,xxqg(ilg)),    (gx18,xxsurfq(ilg)),
     +        (gx19,xxsurft(ilg)), (gx20,xxsurfu(ilg)),
     +        (gx21,xxsurfv(ilg)), (gx22,xxcmai(ilg)),
     +        (gx23,xxfsgv(ilg)),  (gx24,xxfsgs(ilg)),
     +        (gx25,xxfsgg(ilg)),  (gx26,xxflgv(ilg)),
     +        (gx27,xxflgs(ilg)),  (gx28,xxflgg(ilg)),
     +        (gx29,xxhfsc(ilg)),  (gx30,xxhfss(ilg)),
     +        (gx31,xxhfsg(ilg)),  (gx32,xxhevc(ilg)),
     +        (gx33,xxhevs(ilg)),  (gx34,xxhevg(ilg)),
     +        (gx35,xxevap(ilg)),  (gx36,xxrunoff(ilg)),
     +        (gx37,xxovrflo(ilg)),(gx38,xxtransp(ilg,ig)),
     +        (gx39,xxqfcf(ilg)),  (gx40,xxqfcl(ilg)),
     +        (gx41,xxqfg(ilg)),   (gx42,xxqfn(ilg)),
     +        (gx43,xxpcfc(ilg)),  (gx44,xxpclc(ilg)),
     +        (gx45,xxpcpg(ilg)),  (gx46,xxpcpn(ilg)),
     +        (gx47,xxrofc(ilg)),  (gx48,xxrofn(ilg)),
     +        (gx49,xxwtrc(ilg)),  (gx50,xxwtrs(ilg)),
     +        (gx51,xxwtrg(ilg)),  (gx52,xxbetaf(ilg)),
     +        (gx53,xxfcs(ilg)),   (gx54,xxfgs(ilg)),
     +        (gx55,xxfc(ilg)),    (gx56,xxfg(ilg))

*     Workspace pointers for 64 bits real variables
      POINTER (TRV1,tsol3  (ilg*ig,       *))
      POINTER (TRV2,tsubreg(ilg*4,        *))
      POINTER (TRV3,tsol1  (ilg,          *))
      POINTER (TRV4,txfer  (ilg*igp1*igp2,*))
      POINTER (TRV5,tinf   (ilg*igp2,     *))
      POINTER (TRV6,tsolbnd(ilg*igp1,     *))
*     Workspace pointers for integer variables
      POINTER (ITRV1,itsol1 (ilg,          *))

**************************************************************
      REAL  FRV, SC, HZ

      REAL*8 DELZ(IG), ZBOT(IG), ZORAT(IC)

      REAL*8 DDELT,TFREZ
*
C     * THE FOLLOWING COMMON BLOCKS ARE DEFINED SPECIFICALLY FOR USE 
C     * IN CLASS.

      COMMON /CLASS1/ DDELT,TFREZ
*
#include "classcom.cdk"
*
      INTEGER I,J,JYES,NLAND,IL,K,L
      INTEGER NLANDC,NLANDCS,NLANDG,NLANDGS
      INTEGER IDAY,LL,II
      REAL PSKI

      INTEGER TWO
      PARAMETER (TWO=2)

      integer msol1,msol3,msubreg,msolbnd,minf,mxfer

*******************************************************************
*     Data section

      DATA  DELZ    /0.10,0.25,3.75/ 
      DATA  ZBOT    /0.10,0.35,4.10/ 
*     
      DATA    TFREZ      / 273.15 /
      DATA ZORAT    /2.0,2.0,7.0,12.0/

      DATA FRV /0.5/
      SAVE FRV,ZORAT,DELZ,ZBOT

*     INITIALISATION OF PARAMETERS IN CLASS COMMONS
      CALL CLASSPAR

*     CHOICE OF EVAPORATION SCHEME FOR BARE SOIL AND UNDER THE CANOPY
*     IBSEVAP = 0  : NO EVAPORATION
*     IBSEVAP = 1  : ALPHA SCHEME USING FIELD CAPACITY (THFC)
*     IBSEVAP = 2  : BETA SCHEME USING FIELD CAPACITY (THFC)
*     IBSEVAP = 3  : ALPHA SCHEME USING ORIGINAL PHILIP'S FORMULA

      IBSEVAP = 2
*
      PPI=PI
*----------------------------------------------------------------------
*
      msol3=ilg*ig
      msubreg=ilg*4
      msolbnd=ilg*igp1
      minf=ilg*igp2
      mxfer=ilg*igp1*igp2
      msol1=ilg

      call stkmemw(ilg,pata)
      call stkmemw(ilg,paqwv)
      call stkmemw(ilg,paqwi)
      call stkmemw(ilg,papcpr)
      call stkmemw(ilg,paqinv)
      call stkmemw(ilg,paqini)
      call stkmemw(ilg,pacoszs)
      call stkmemw(ilg,paqswd)
      call stkmemw(ilg,paalvsbar)
      call stkmemw(ilg,paalirbar)
      call stkmemw(ilg,paqsens)
      call stkmemw(ilg,paqevap)
      call stkmemw(ilg,pacdmbar)

      pasu= loc(f(udiag)) 
      pasv= loc(f(vdiag)) 
      past= loc(f(tdiag)) 
      pasq= loc(f(qdiag)) 

      do j = 1, ilg
         alvsbar(j) =0.0
         alirbar(j) =0.0
         cdmbar(j)  =0.0
         qsens(j)   =0.0
         qevap(j)   =0.0
         qa(j)      =max(qa(j),1.e-7)
         qswv(j)    =1.0
         qswi(j)    =0.0
         f(fdsi+j-1)=max(160.,f(fdsi+j-1))
         qswinv(j)  =frv*f(fdss+j-1)/(1.-f(alvis+j-1))
         qswini(j)  =(1.-frv)*f(fdss+j-1)/(1.-f(alvis+j-1))
         pcpr(j)    =v(rt+j-1)*rauw
         ta(j)      =tta(j)*sg(j)**(-cappa)
      end do
*
*     CALCUL DU COSINUS DE L'ANGLE ZENITHAL
      hz = mod( date(5) +(float(kount)*delt )/3600. , 24.)
      call suncos( coszs,ilg,f(dlat),f(dlon),hz,0.,date )
*
*     CALCUL DE LA FRACTION DIFFUSE DU FLUX SOLAIRE AU SOL
      do j=1,ilg
         qswd(j)=1.
      end do
      do k=1,nk-1
         do j=1,ilg
            qswd(j) = qswd(j) * (1. - f(ccn+(k-1)*ilg+j-1))
         end do
      end do
      do i=1,ilg
         qswd(i)=1.-qswd(i)
      enddo
*
      IDAY=NINT(30.44*(DATE(2)-1)+DATE(3))
*
      CALL STKMEMW(2*ILG,IA1)
      IA2 = LOC(ILAND(ILG+1))

      CALL STKMEMW(TWO*14*ILG,A1)
      A2 = LOC(SRESID(ILG+1))
      A3 = LOC(FSNOW(ILG+1))
      A4 = LOC(FCLOUD(ILG+1))
      A5 = LOC(GROWA(ILG+1))
      A6 = LOC(GROWN(ILG+1))
      A7 = LOC(GROWB(ILG+1))
      A8 = LOC(CWCPAV(ILG+1))
      A9 = LOC(AILCAN(ILG+1))
      A10= LOC(AILCNS(ILG+1))
      A11= LOC(RRESID(ILG+1))
      A12= LOC(ZPLIMCS(ILG+1))
      A13= LOC(ZPLIMGS(ILG+1))
      A14= LOC(ZPLIMC(ILG+1))

      CALL STKMEMW(TWO*6*ILG*IC,AC1)
      AC2 = LOC(HH(ILG+1,IC))
      AC3 = LOC(HHS(ILG+1,IC))
      AC4 = LOC(AIL(ILG+1,IC))
      AC5 = LOC(AILS(ILG+1,IC))
      AC6 = LOC(FCAN(ILG+1,IC))
      
      CALL STKMEMW(TWO*ILG*IC*IG,AX1)

      CALL STKMEMW(ILG*IG,X1)
      CALL STKMEMW(ILG*IG,X2)
      CALL STKMEMW(TWO*ILG*IG,X3)

      CALL STKMEMW(TWO*77*ILG,GAT1)
      GAT2 = LOC(THLGAT(ILG+1))
      GAT3 = LOC(ULGAT(ILG+1))
      GAT4 = LOC(VLGAT(ILG+1))
      GAT5 = LOC(TSGAT(ILG+1))
      GAT6 = LOC(QSGAT(ILG+1))
      GAT7 = LOC(PREGAT(ILG+1))
      GAT8 = LOC(COLRGAT(ILG+1))
      GAT9 = LOC(ALSWGAT(ILG+1))
      GAT10= LOC(ALLWGAT(ILG+1))
      GAT11= LOC(FSVGAT(ILG+1))
      GAT12= LOC(FSIGAT(ILG+1))
      GAT13= LOC(FSFGAT(ILG+1))
      GAT14= LOC(FDLGAT(ILG+1))
      GAT15= LOC(FSVHGAT(ILG+1))
      GAT16= LOC(FSIHGAT(ILG+1))
      GAT17= LOC(CSZGAT(ILG+1))
      GAT18= LOC(PRESGAT(ILG+1))
      GAT19= LOC(GTGAT(ILG+1))
      GAT20= LOC(QGGAT(ILG+1))
      GAT21= LOC(SNOGAT(ILG+1))
      GAT22= LOC(ALBSGAT(ILG+1))
      GAT23= LOC(RHOSGAT(ILG+1))
      GAT24= LOC(TSNOGAT(ILG+1))
      GAT25= LOC(TTGAT(ILG+1))
      GAT26= LOC(TCANGAT(ILG+1))
      GAT27= LOC(WCANGAT(ILG+1))
      GAT28= LOC(SCANGAT(ILG+1))
      GAT29= LOC(HFSGAT(ILG+1))
      GAT30= LOC(QFSGAT(ILG+1))
      GAT31= LOC(QFGGAT(ILG+1))
      GAT32= LOC(ROFGAT(ILG+1))
      GAT33= LOC(QEVPGAT(ILG+1))
      GAT34= LOC(CDHGAT(ILG+1))
      GAT35= LOC(CDMGAT(ILG+1))
      GAT36= LOC(TFXGAT(ILG+1))
      GAT37= LOC(QFXGAT(ILG+1))
      GAT38= LOC(SFCTGAT(ILG+1))
      GAT39= LOC(SFCUGAT(ILG+1))
      GAT40= LOC(SFCVGAT(ILG+1))
      GAT41= LOC(SFCQGAT(ILG+1))
      GAT42= LOC(EFGAT(ILG+1))
      GAT43= LOC(WLGAT(ILG+1))
      GAT44= LOC(WFGAT(ILG+1))
      GAT45= LOC(FSGVGAT(ILG+1))
      GAT46= LOC(FSGGGAT(ILG+1))
      GAT47= LOC(FLGVGAT(ILG+1))
      GAT48= LOC(FLGGGAT(ILG+1))
      GAT49= LOC(HFSCGAT(ILG+1))
      GAT50= LOC(HFSGGAT(ILG+1))
      GAT51= LOC(HMFCGAT(ILG+1))
      GAT52= LOC(HTCSGAT(ILG+1))
      GAT53= LOC(XDRNGAT(ILG+1))
      GAT54= LOC(PCFCGAT(ILG+1))
      GAT55= LOC(PCLCGAT(ILG+1))
      GAT56= LOC(PCPNGAT(ILG+1))
      GAT57= LOC(PCPGGAT(ILG+1))
      GAT58= LOC(QFCFGAT(ILG+1))
      GAT59= LOC(QFCLGAT(ILG+1))
      GAT60= LOC(QFNGAT(ILG+1))
      GAT61= LOC(HMFNGAT(ILG+1))
      GAT62= LOC(HTCCGAT(ILG+1))
      GAT63= LOC(ZREFGAT(ILG+1))
      GAT64= LOC(FSGSGAT(ILG+1))
      GAT65= LOC(FLGSGAT(ILG+1))
      GAT66= LOC(HFSSGAT(ILG+1))
      GAT67= LOC(ROFNGAT(ILG+1))
      GAT68= LOC(ROFCGAT(ILG+1))
      GAT69= LOC(WTRCGAT(ILG+1))
      GAT70= LOC(WTRSGAT(ILG+1))
      GAT71= LOC(WTRGGAT(ILG+1))
      GAT72= LOC(OVERFGAT(ILG+1))
      GAT73= LOC(DLONGAT(ILG+1))
      GAT74= LOC(DLATGAT(ILG+1))
      GAT75= LOC(HEVCGAT(ILG+1))
      GAT76= LOC(HEVSGAT(ILG+1))
      GAT77= LOC(HEVGGAT(ILG+1))

      CALL STKMEMW(TWO*4*ILG*IC,GC1)
      GC2= LOC(LAMXGAT(ILG+1,IC))
      GC3= LOC(LAMNGAT(ILG+1,IC))
      GC4= LOC(CMASGAT(ILG+1,IC))

      CALL STKMEMW(TWO*4*ILG*ICP1,GCP1)
      GCP2= LOC (FCANGAT(ILG+1,ICP1))
      GCP3= LOC (ALVCGAT(ILG+1,ICP1))
      GCP4= LOC (ALICGAT(ILG+1,ICP1))

      CALL STKMEMW(TWO*1*ILG,GDIR)

      CALL STKMEMW(TWO*3*ILG*IG,GIG1)
      GIG2= LOC(TBARGAT(ILG+1,IG))
      GIG3= LOC(THLQGAT(ILG+1,IG))

      CALL STKMEMW(TWO*14*ILG*IG,GG1)
      GG2 = LOC (FROOT(ILG+1,IG))
      GG3 = LOC (TBARC(ILG+1,IG))
      GG4 = LOC (TBARG(ILG+1,IG))
      GG5 = LOC (TBARCS(ILG+1,IG))
      GG6 = LOC (TBARGS(ILG+1,IG))
      GG7 = LOC (THLIQC(ILG+1,IG))
      GG8 = LOC (THLIQG(ILG+1,IG))
      GG9 = LOC (THICEC(ILG+1,IG))
      GG10= LOC (THICEG(ILG+1,IG))
      GG11= LOC (HCPC(ILG+1,IG))
      GG12= LOC (HCPG(ILG+1,IG))
      GG13= LOC (QFCGAT(ILG+1,IG))
      GG14= LOC (HMFGGAT(ILG+1,IG))
 
      CALL STKMEMW(TWO*91*ILG,G1)
      G2  = LOC (ALVSG(ILG+1))
      G3  = LOC (ALIRG(ILG+1))
      G4  = LOC (ALVSCS(ILG+1))
      G5  = LOC (ALVSSN(ILG+1))
      G6  = LOC (ALIRSN(ILG+1))
      G7  = LOC (TRVSCN(ILG+1))
      G8  = LOC (TRIRCN(ILG+1))
      G9  = LOC (ALIRCS(ILG+1))
      G10 = LOC (TRVSCS(ILG+1))
      G11 = LOC (TRIRCS(ILG+1))
      G12 = LOC (ZSNOW(ILG+1))
      G13 = LOC (TRSNOW(ILG+1))
      G14 = LOC (FFC(ILG+1))
      G15 = LOC (FG(ILG+1))
      G16 = LOC (FCS(ILG+1))
      G17 = LOC (FGS(ILG+1))
      G18 = LOC (FSVF(ILG+1))
      G19 = LOC (FSVFS(ILG+1))
      G20 = LOC (FRAINC(ILG+1))
      G21 = LOC (FSNOWC(ILG+1))
      G22 = LOC (RAICAN(ILG+1))
      G23 = LOC (SNOCAN(ILG+1))
      G24 = LOC (RAICNS(ILG+1))
      G25 = LOC (SNOCNS(ILG+1))
      G26 = LOC (CWCAP(ILG+1))
      G27 = LOC (CWCAPS(ILG+1))
      G28 = LOC (DISP(ILG+1))
      G29 = LOC (DISPS(ILG+1))
      G30 = LOC (ZOMLNC(ILG+1))
      G31 = LOC (ZOELNC(ILG+1))
      G32 = LOC (ZOMLNG(ILG+1))
      G33 = LOC (ZOELNG(ILG+1))
      G34 = LOC (ZOMLCS(ILG+1))
      G35 = LOC (ZOELCS(ILG+1))
      G36 = LOC (ZOMLNS(ILG+1))
      G37 = LOC (ZOELNS(ILG+1))
      G38 = LOC (RCMIN(ILG+1))
      G39 = LOC (RCMINS(ILG+1))
      G40 = LOC (CMASSC(ILG+1))
      G41 = LOC (CMASCS(ILG+1))
      G42 = LOC (CHCAP(ILG+1))
      G43 = LOC (CHCAPS(ILG+1))
      G44 = LOC (EVAPB(ILG+1))
      G45 = LOC (G12C(ILG+1))
      G46 = LOC (G12G(ILG+1))
      G47 = LOC (G12CS(ILG+1))
      G48 = LOC (G12GS(ILG+1))
      G49 = LOC (G23C(ILG+1))
      G50 = LOC (G23G(ILG+1))
      G51 = LOC (G23CS(ILG+1))
      G52 = LOC (G23GS(ILG+1))
      G53 = LOC (QFREZC(ILG+1))
      G54 = LOC (QFREZG(ILG+1))
      G55 = LOC (QMELTC(ILG+1))
      G56 = LOC (QMELTG(ILG+1))
      G57 = LOC (EVAPC(ILG+1))
      G58 = LOC (EVAPCG(ILG+1))
      G59 = LOC (EVAPCS(ILG+1))
      G60 = LOC (EVAPG(ILG+1))
      G61 = LOC (EVPCSG(ILG+1))
      G62 = LOC (EVAPGS(ILG+1))
      G63 = LOC (TCANO(ILG+1))
      G64 = LOC (ZPOND(ILG+1))
      G65 = LOC (TPONDC(ILG+1))
      G66 = LOC (TPONDG(ILG+1))
      G67 = LOC (TPNDCS(ILG+1))
      G68 = LOC (TPNDGS(ILG+1))
      G69 = LOC (TSNOCS(ILG+1))
      G70 = LOC (TSNOGS(ILG+1))
      G71 = LOC (WL(ILG+1))
      G72 = LOC (WF(ILG+1))
      G73 = LOC (TH(ILG+1))
      G74 = LOC (GZEROC(ILG+1))
      G75 = LOC (GZEROG(ILG+1))
      G76 = LOC (GZROCS(ILG+1))
      G77 = LOC (GZROGS(ILG+1))
      G78 = LOC (ALVSCN(ILG+1))
      G79 = LOC (ALIRCN(ILG+1))
      G80 = LOC (TCANS(ILG+1))
      G81 = LOC (CDMEFFCS(ILG+1))
      G82 = LOC (CDMEFFGS(ILG+1))
      G83 = LOC (CDMEFFC(ILG+1))
      G84 = LOC (CDMEFFG(ILG+1))
      G85 = LOC (CDHEFFCS(ILG+1))
      G86 = LOC (CDHEFFGS(ILG+1))
      G87 = LOC (CDHEFFC(ILG+1))
      G88 = LOC (CDHEFFG(ILG+1))
      G89 = LOC (THFC(ILG+1))
      G90 = LOC (Z0EFFGS(ILG+1))
      G91 = LOC (Z0EFFC(ILG+1))

*     For time series extraction (32 bits)
      call stkmemw(64*ilg,gx1)
      gx2  = LOC (xxtcan(ILG+1))
      gx3  = LOC (xxtbar(ILG+1,IG))
      gx4  = LOC (xxthliq(ILG+1,IG))
      gx5  = LOC (xxthice(ILG+1,IG))
      gx6  = LOC (xxsnow(ILG+1))
      gx7  = LOC (xxrhosno(ILG+1))
      gx8  = LOC (xxtsnow(ILG+1))
      gx9  = LOC (xxalbsno(ILG+1))
      gx10 = LOC (xxrcan(ILG+1))
      gx11 = LOC (xxscan(ILG+1))
      gx12 = LOC (xxgrowth(ILG+1))
      gx13 = LOC (xxalirbar(ILG+1))
      gx14 = LOC (xxalvsbar(ILG+1))
      gx15 = LOC (xxcdh(ILG+1))
      gx16 = LOC (xxcdm(ILG+1))
      gx17 = LOC (xxgt(ILG+1))
      gx18 = LOC (xxqg(ILG+1))
      gx19 = LOC (xxsurfq(ILG+1))
      gx20 = LOC (xxsurft(ILG+1))
      gx21 = LOC (xxsurfu(ILG+1))
      gx22 = LOC (xxsurfv(ILG+1))
      gx23 = LOC (xxcmai(ILG+1))
      gx24 = LOC (xxfsgv(ILG+1))
      gx25 = LOC (xxfsgs(ILG+1))
      gx26 = LOC (xxfsgg(ILG+1))
      gx27 = LOC (xxflgv(ILG+1))
      gx28 = LOC (xxflgs(ILG+1))
      gx29 = LOC (xxflgg(ILG+1))
      gx30 = LOC (xxhfsc(ILG+1))
      gx31 = LOC (xxhfss(ILG+1))
      gx32 = LOC (xxhfsg(ILG+1))
      gx33 = LOC (xxhevc(ILG+1))
      gx34 = LOC (xxhevs(ILG+1))
      gx35 = LOC (xxhevg(ILG+1))
      gx36 = LOC (xxevap(ILG+1))
      gx37 = LOC (xxrunoff(ILG+1))
      gx38 = LOC (xxovrflo(ILG+1))
      gx39 = LOC (xxtransp(ILG+1,IG))
      gx40 = LOC (xxqfcf(ILG+1))
      gx41 = LOC (xxqfcl(ILG+1))
      gx42 = LOC (xxqfg(ILG+1))
      gx43 = LOC (xxqfn(ILG+1))
      gx44 = LOC (xxpcfc(ILG+1))
      gx45 = LOC (xxpclc(ILG+1))
      gx46 = LOC (xxpcpg(ILG+1))
      gx47 = LOC (xxpcpn(ILG+1))
      gx48 = LOC (xxrofc(ILG+1))
      gx49 = LOC (xxrofn(ILG+1))
      gx50 = LOC (xxwtrc(ILG+1))
      gx51 = LOC (xxwtrs(ILG+1))
      gx52 = LOC (xxwtrg(ILG+1))
      gx53 = LOC (xxbetaf(ILG+1))
      gx54 = LOC (xxfcs(ILG+1))
      gx55 = LOC (xxfgs(ILG+1))
      gx56 = LOC (xxfc(ILG+1))

***************************************************************
      RRGASD=RGASD
      RRGASV=RGASV
      GGRAV=GRAV
      DDELT=DT
      SPHAIR=CPD

      DO 20 I=IL1,IL2
        TH(I)=TA(I)
        fcs(i)=-1.0
        fgs(i)=-1.0
        ffc(i)=-1.0
        fg(i) =-1.0
        zrefgat(i)=-(rgasd/grav)*tta(i)*(1.0+0.61*qa(i))*alog(sg(i))
   20 CONTINUE

      CALL SERXST (ta,          'M1',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (qa,          'M2',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (ugcm,        'M3',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (vgcm,        'M4',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (pressg,      'M5',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (qswinv,      'M6',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (qswini,      'M7',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (f(fdsi),     'M8',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (pcpr,        'M9',JL,ILG,0.,     1.,-1   )      

*     Taking a copy of surface diagnostics for U,V,T,Q to
*     complete the ones computed by CLASS over land points. 

      do i=1,ilg
        f(udiag+i-1) = su(i)
        f(vdiag+i-1) = sv(i)
        f(tdiag+i-1) = st(i) 
        f(qdiag+i-1) = sq(i)
      end do

C*****************  GATHER REQUIRED FIELDS. ***********************

      JYES=0

      DO 440 IL=IL1,IL2
        ILSL(IL)=IL
        IF (f(gc+il-1).LE.-0.5) THEN
          JYES = JYES + 1
          ILAND(JYES) = IL
        ENDIF
 440  CONTINUE

      NLAND=JYES

      DO 445 K=1,NLAND
*     Model fields.
         THLGAT (K) = TA    (ILAND(K))
         PREGAT (K) = PCPR  (ILAND(K))  
         QSGAT  (K) = QA    (ILAND(K))
         ULGAT  (K) = UGCM  (ILAND(K))
         VLGAT  (K) = VGCM  (ILAND(K))
         TSGAT  (K) = TA    (ILAND(K))
         FSVGAT (K) = QSWV  (ILAND(K))
         FSIGAT (K) = QSWI  (ILAND(K))
         FSFGAT (K) = QSWD  (ILAND(K))
         FDLGAT (K) = f(fdsi+ILAND(K)-1)
         FSVHGAT(K) = QSWINV(ILAND(K))
         FSIHGAT(K) = QSWINI(ILAND(K))
         CSZGAT (K) = COSZS (ILAND(K))
         PRESGAT(K) = PRESSG(ILAND(K))
         dlongat(k) = f(dlon+iland(k)-1)
         dlatgat(k) = f(dlat+iland(k)-1)
*     Reference field. 
         z0topgat(k)= f(z0+iland(k)-1)
*     Prognostic fields.
         SNOGAT (K) = f(snoma+iland(k)-1)
         ALBSGAT(K) = f(snoal+iland(k)-1)
         RHOSGAT(K) = f(snoro+iland(k)-1)
         TSNOGAT(K) = f(tsno+iland(k)-1)
         TTGAT  (K) = f(vegro+iland(k)-1)
         TCANGAT(K) = f(tveg+ILAND(K)-1)
         WCANGAT(K) = f(wveg+iland(k)-1)
         SCANGAT(K) = f(iveg+iland(k)-1)
         CMAIGAT(K) = v(cmai+iland(k)-1)
 445  CONTINUE

*     New definition of soil properties since CLASSv2.4
*     Imposing vertical uniformity of soil properties.

      do k=1,ig
        do ll=1,nland
          ii=iland(ll)
          ISNDGAT(ll,k)=nint(f(sand+ii-1))
          ICLYGAT(ll,k)=nint(f(clay+ii-1))
          FORGGAT(ll,k)=0.0
        end do  
      end do

      do ll=1,nland
        ii=iland(ll)
        COLRGAT(ll)=f(color+ii-1)   
        XDRNGAT(ll)=f(drain+ii-1)   
      end do  


      DO 447 L=1,IC
         DO 447 K=1,NLAND
*       Reference fields.
            FCANGAT(K,L)=f(vegfrac+(l-1)*ilg+iland(k)-1)
            ALVCGAT(K,L)=f(alvis+(l-1)*ilg+iland(k)-1)
            ALICGAT(K,L)=f(alnir+(l-1)*ilg+iland(k)-1)
            LNZ0GAT(K,L)=f(z0+(l-1)*ilg+iland(k)-1)
            LAMXGAT(K,L)=f(laimax+(l-1)*ilg+iland(k)-1)
            LAMNGAT(K,L)=f(laimin+(l-1)*ilg+iland(k)-1)
            CMASGAT(K,L)=f(vegma+(l-1)*ilg+iland(k)-1)
            ROOTGAT(K,L)=f(rootdp+(l-1)*ilg+iland(k)-1)
 447  CONTINUE

      L=IC+1

      DO 450 K=1,NLAND
*       Reference fields.
         FCANGAT(K,L)=f(vegfrac+(l-1)*ilg+iland(k)-1)
         ALVCGAT(K,L)=f(alvis+(l-1)*ilg+iland(k)-1)
         ALICGAT(K,L)=f(alnir+(l-1)*ilg+iland(k)-1)
         LNZ0GAT(K,L)=f(z0+(l-1)*ilg+iland(k)-1)
         THFC(K)=THPOR(ISNDGAT(K,1))*FTHFC
 450  CONTINUE

      DO 452 L=1,IG
         DO 452 K=1,NLAND
*       Prognostic fields.
            TBARGAT(K,L) = f(tsoil+(l-1)*ilg+iland(k)-1)
            THLQGAT(K,L) = f(wsoil+(l-1)*ilg+iland(K)-1)
            THICGAT(K,L) = f(isoil+(l-1)*ilg+iland(k)-1)
 452  CONTINUE

c****************** END OF GATHERING ************************

      call stkmemw(two*3*msol3   ,trv1) 

      CALL   CLASSA    (ALSWGAT,ALLWGAT,WCANGAT,SCANGAT,FFC,     FG,
     1                  FCS,    FGS,    RAICAN, RAICNS, SNOCAN, SNOCNS,
     2                  DISP,   DISPS,  CHCAP,  CHCAPS, ZOMLNC, ZOMLCS,
     3                  ZOELNC, ZOELCS, ZOMLNG, ZOMLNS, ZOELNG, ZOELNS,
     4                  RCMIN,  RCMINS, CMASSC, CMASCS, FSVF,   FSVFS,
     5                  CWCAP,  CWCAPS, FRAINC, FSNOWC, ALVSCN, ALIRCN,
     6                  ALVSG,  ALIRG,  ALVSCS, ALIRCS, ALVSSN, ALIRSN,
     7                  TRVSCN, TRIRCN, TRVSCS, TRIRCS, TRSNOW, ZSNOW,
     8                  FROOT,  cmaigat,htccgat,htcsgat,htcgat, wtrcgat,
     9                  wtrsgat,wtrggat,
     8                  zplimc, zplimg, zplimcs, zplimgs,
     9                  FCANGAT,LNZ0GAT,ALVCGAT,ALICGAT,LAMXGAT,LAMNGAT,
     A                  CMASGAT,ROOTGAT,THLQGAT,THICGAT,CSZGAT, FSFGAT,
     B                  FSIGAT, FSVGAT, COLRGAT,SNOGAT,RHOSGAT,
     B                  ALBSGAT, TTGAT,tcangat,tsnogat,tbargat,tsgat,
     C                  dlatgat,dlongat, ILAND, ILSL, ILG,
     D                  ZORAT,  DELZ,   ZBOT,
     E                  IDAY,ILG,1,NLAND,JL,IC,ICP1,IG,is,idisp,
     F                  RMAT,   HH,      HHS,     AIL,    AILS,
     G                  FCAN,   FCANS,  CWCPAV, AILCAN, AILCNS,
     H                  FSNOW,  FCLOUD, GROWA,  GROWN,  GROWB,
     I                  rresid,SRESID, ISNDGAT, ICLYGAT,FORGGAT,
     J                  tsol3(1, 1),tsol3(1, 2),z0topgat)

      call unstakw(trv1) 

      NLANDC =0
      NLANDCS=0
      NLANDG =0
      NLANDGS=0

      DO 454 I=1,NLAND
         IF(FFC (I).NE.0.)           NLANDC =NLANDC +1
         IF(FCS(I).NE.0.)            NLANDCS=NLANDCS+1
         IF(FG (I).NE.0.)            NLANDG =NLANDG +1
         IF(FGS(I).NE.0.)            NLANDGS=NLANDGS+1
 454  CONTINUE

      call stkmemw(two*8*msol3   ,trv1) 
      call stkmemw(two*13*msubreg,trv2)
      call stkmemw(two*76*msol1  ,trv3)
      call stkmemw(4*msol1       ,itrv1)

      CALL  CLASST (TBARC, TBARG, TBARCS, TBARGS, THLIQC, THLIQG,
     1              THICEC, THICEG, HCPC, HCPG, FROOT, HFSGAT, TFXGAT,
     2              QEVPGAT,QFSGAT, QFXGAT, EFGAT, CDHGAT, CDMGAT, 
     3              GZEROC, GZEROG, GZROCS, GZROGS, G12C, G12G, G12CS,
     4              G12GS, G23C, G23G, G23CS, G23GS, QFREZC, QFREZG, 
     5              QMELTC, QMELTG, EVAPC, EVAPCG, EVAPG, EVAPCS,EVPCSG,
     6              EVAPGS, TCANO, TCANS, ZPOND, TPONDC, TPONDG, TPNDCS,
     7              TPNDGS, TSNOCS, TSNOGS, GTGAT, QGGAT, WLGAT,
     8              WFGAT, SFCTGAT, SFCUGAT, SFCVGAT, SFCQGAT, FSGVGAT,
     9              fsgsgat, FSGGGAT, FLGVGAT, flgsgat, FLGGGAT,
     A              HFSCGAT, hfssgat, HFSGGAT, hevcgat, hevsgat, 
     B              hevggat, HMFCGAT, HTCCGAT, HTCSGAT,htcgat,
     B              TBARGAT, THLQGAT, THICGAT, idisp,
     C              FSVHGAT, FSIHGAT, FDLGAT, ULGAT, VLGAT, TSGAT,
     D              QSGAT, PRESGAT, THLGAT, 
     E              FFC, FG, FCS, FGS, FSVF, FSVFS, ALVSCN, ALIRCN, 
     F              ALVSG, ALIRG, ALVSCS, ALIRCS, ALVSSN, ALIRSN, 
     G              TRVSCN, TRIRCN, TRVSCS, TRIRCS, RCMIN, RCMINS, 
     H              FRAINC, FSNOWC, RAICAN, SNOCAN, RAICNS, SNOCNS, 
     I              CHCAP, CHCAPS, CMASSC, CMASCS, DISP, DISPS, ZOMLNC,
     J              ZOELNC, ZOMLNG, ZOELNG, ZOMLCS, ZOELCS, ZOMLNS, 
     K              ZOELNS, TCANGAT, TSNOGAT, ZSNOW, TRSNOW, RHOSGAT,
     L              zrefgat,DELZ, ZBOT, ilw, ILG, IL1, NLAND, JL, IC,
     M              IG, is, NLANDCS,NLANDGS,NLANDC, NLANDG,
     1     tsol3(1, 1),tsol3(1, 2),FORGGAT,
     2     tsubreg(1, 1),tsubreg(1, 2),tsubreg(1, 3),tsubreg(1, 4),
     2     tsubreg(1, 5),tsubreg(1, 6),tsubreg(1, 7),tsubreg(1, 8),
     2     tsubreg(1, 9),tsubreg(1,10),tsubreg(1,11),tsubreg(1,12),
     2     tsubreg(1,13),
     3     tsol1(1, 1),tsol1(1, 2),tsol1(1, 3),tsol1(1, 4),tsol1(1, 5), 
     3     tsol1(1, 6),tsol1(1, 7),tsol1(1, 8),tsol1(1, 9),tsol1(1,10), 
     3                             tsol1(1,13),tsol1(1,14),tsol1(1,15), 
     3     tsol1(1,16),tsol1(1,17),tsol1(1,18),tsol1(1,19),tsol1(1,20), 
     3     tsol1(1,21),tsol1(1,22),tsol1(1,23),tsol1(1,24),tsol1(1,25), 
     3     tsol1(1,26),tsol1(1,27),tsol1(1,28),tsol1(1,29),tsol1(1,30), 
     3     tsol1(1,31),tsol1(1,32),tsol1(1,33),tsol1(1,34),tsol1(1,35), 
     3     tsol1(1,36),tsol1(1,37),tsol1(1,38),tsol1(1,39),tsol1(1,40),
     3     tsol1(1,41),ISNDGAT,ICLYGAT,itsol1(1, 1),
     3     itsol1(1, 2),tsol3(1, 4),tsol3(1, 5),tsol3(1,6),
     3     tsol3(1, 7),tsol3(1, 8),tsol1(1,42),
     3     tsol1(1,43),tsol1(1,44),tsol1(1,45),tsol1(1,46),tsol1(1,47),
     3     tsol1(1,48),tsol1(1,49),tsol1(1,50),tsol1(1,51),tsol1(1,52), 
     3     tsol1(1,53),tsol1(1,54),tsol1(1,55),tsol1(1,56),tsol1(1,57), 
     3     tsol1(1,58),tsol1(1,59),tsol1(1,60),tsol1(1,61),tsol1(1,62),
     3     tsol1(1,63),tsol1(1,64),tsol1(1,65),tsol1(1,66),tsol1(1,67),
     3     tsol1(1,68),tsol1(1,69),tsol1(1,70),tsol1(1,71),tsol1(1,72),
     3     tsol1(1,73),tsol1(1,74),tsol1(1,75),tsol1(1,76),itsol1(1, 3),
     3     itsol1(1, 4)   )

      call unstakw(trv1) 
      call unstakw(trv2)
      call unstakw(trv3)
      call unstakw(itrv1)


      call stkmemw(two*29*msol3  ,trv1)
      call stkmemw(two*12*msubreg,trv2)
      call stkmemw(two*46*msol1  ,trv3)
      call stkmemw(two*1*mxfer   ,trv4)
      call stkmemw(two*2*minf    ,trv5)
      call stkmemw(two*13*msolbnd,trv6)
      call stkmemw(12*msol1      ,itrv1)

      CALL CLASSW   (THLQGAT,THICGAT,TBARGAT,TCANGAT,WCANGAT,SCANGAT,
     1               ROFGAT, SNOGAT, TSNOGAT,RHOSGAT,ALBSGAT,TTGAT,
     2               PCFCGAT,PCLCGAT,PCPNGAT,PCPGGAT,QFCFGAT,QFCLGAT,
     3               QFNGAT, QFGGAT, QFCGAT, HMFCGAT,HMFGGAT,HMFNGAT,
     4               HTCCGAT,HTCSGAT,HTCGAT,rofcgat,rofngat,overfgat,
     +               wtrsgat,wtrggat,
     2               TBARC,  TBARG,  TBARCS, TBARGS, THLIQC, THLIQG,
     3               THICEC, THICEG, HCPC,   HCPG,   
     4               FFC,     FG,     FCS,    FGS,    TPONDC, TPONDG,
     5               TPNDCS, TPNDGS, EVAPC,  EVAPCG, EVAPG,  EVAPCS,
     6               EVPCSG, EVAPGS, QFREZC, QFREZG, QMELTC, QMELTG,
     7               RAICAN, SNOCAN, RAICNS, SNOCNS, qfsgat, FROOT,
     8               FSVF,   FSVFS,  CWCAP,  CWCAPS, TCANO,  TCANS,
     9               CHCAP,  CHCAPS, CMASSC, CMASCS, ZSNOW,  ZPOND,
     A               GZEROC, GZEROG, GZROCS, GZROGS, G12C,   G12G,
     B               G12CS,  G12GS,  G23C,   G23G,   G23CS,  G23GS,
     C               TSNOCS, TSNOGS, zplimc, zplimg, zplimcs, zplimgs,
     D               PREGAT, TSGAT, DELZ, ZBOT,
     E               ILG,1,NLAND,JL,IC,IG,IGP1,IGP2,is,
     F               NLANDCS,NLANDGS,NLANDC, NLANDG,
     1     tsol3(1, 1),tsol3(1, 2),tsol3(1, 3),tsol3(1, 4),tsol3(1, 5),
     1     tsol3(1, 6),tsol3(1, 7),tsol3(1, 7),tsol3(1, 9),tsol3(1,10),
     1     tsol3(1,11),tsol3(1,12),tsol3(1,13),tsol3(1,14),tsol3(1,15),
     1     tsol3(1,16),tsol3(1,17),tsol3(1,18),tsol3(1,19),tsol3(1,20),
     1     tsol3(1,21),tsol3(1,22),tsol3(1,23),FORGGAT,
     2     tsubreg(1, 1),tsubreg(1, 2),tsubreg(1, 3),tsubreg(1, 4),
     2     tsubreg(1, 5),tsubreg(1, 6),tsubreg(1, 7),tsubreg(1, 8),
     2     tsubreg(1, 9),tsubreg(1,10),tsubreg(1,11),tsubreg(1,12),
     3     tsol1(1, 1),tsol1(1, 2),tsol1(1, 3),tsol1(1, 4), 
     3     tsol1(1, 5),tsol1(1, 6),tsol1(1, 7),tsol1(1, 8),tsol1(1,9), 
     3     tsol1(1,10),tsol1(1,11), tsol1(1,12),XDRNGAT,
     3     tsol1(1,14),tsol1(1,15),tsol1(1,16),COLRGAT, 
     1     ISNDGAT,ICLYGAT,
     3     itsol1(1, 1),itsol1(1, 2), 
     4     txfer(1, 1),
     5     tinf(1, 1),tinf(1, 2),
     3     tsolbnd(1, 1),tsolbnd(1, 2),tsolbnd(1, 3),tsolbnd(1, 4),
     3     tsolbnd(1, 5),tsolbnd(1, 6),tsolbnd(1, 7),tsolbnd(1, 8),
     3     tsolbnd(1, 9),tsolbnd(1,10),tsolbnd(1,11),tsolbnd(1,12),
     3     tsolbnd(1,13),
     1     tsol3(1,25),tsol3(1,26),tsol3(1,27),tsol3(1,28),tsol3(1,29),
     3     tsol1(1,18),tsol1(1,19),tsol1(1,20),tsol1(1,21),tsol1(1,22), 
     3     tsol1(1,23),tsol1(1,24),tsol1(1,25),tsol1(1,26),tsol1(1,27), 
     3     tsol1(1,28),tsol1(1,29),tsol1(1,30),tsol1(1,31),tsol1(1,32), 
     3     tsol1(1,33),tsol1(1,34),tsol1(1,35),tsol1(1,36),tsol1(1,37), 
     3 itsol1(1, 3),itsol1(1, 4),itsol1(1, 5),itsol1(1, 6),itsol1(1, 7),
     3 itsol1(1, 8),itsol1(1, 9),itsol1(1,10),itsol1(1,11),tsol1(1,38),
     3     tsol1(1,39),tsol1(1,40),tsol1(1,41),tsol1(1,42),tsol1(1,43), 
     3     tsol1(1,44),tsol1(1,45),itsol1(1,12),tsol1(1,46)  ) 

*     Scattering operation for series extraction.

      do k=1,nland
        xxtcan(iland(k)) = tcangat(k)
        xxsnow(iland(k)) = snogat (k)
        xxrhosno(iland(k)) = rhosgat(k)
        xxtsnow(iland(k)) = tsnogat(k)
        xxalbsno(iland(k)) = albsgat(k)
        xxrcan(iland(k)) = wcangat(k)
        xxscan(iland(k)) = scangat(k)
        xxgrowth(iland(k)) = ttgat(k)
        xxalirbar(iland(k)) = allwgat(k)
        xxalvsbar(iland(k)) = alswgat(k)
        xxcdh(iland(k)) = cdhgat(k)
        xxcdm(iland(k)) = cdmgat(k)
        xxgt(iland(k)) = gtgat(k) 
        xxqg(iland(k)) = qggat(k)
        xxsurfq(iland(k)) = sfcqgat(k)
        xxsurft(iland(k)) = sfctgat(k)
        xxsurfu(iland(k)) = sfcugat(k)
        xxsurfv(iland(k)) = sfcvgat(k)
        xxcmai(iland(k)) = cmaigat(k)
        xxfsgv(iland(k)) = fsgvgat(k)
        xxfsgs(iland(k)) = fsgsgat(k)
        xxfsgg(iland(k)) = fsgggat(k)
        xxflgv(iland(k)) = flgvgat(k)
        xxflgs(iland(k)) = flgsgat(k)
        xxflgg(iland(k)) = flgggat(k)
        xxhfsc(iland(k)) = hfscgat(k)
        xxhfss(iland(k)) = hfssgat(k)
        xxhfsg(iland(k)) = hfsggat(k)
        xxhevc(iland(k)) = hevcgat(k)
        xxhevs(iland(k)) = hevsgat(k)
        xxhevg(iland(k)) = hevggat(k)
        xxevap(iland(k)) = qfsgat(k)
        xxrunoff(iland(k)) = rofgat(k)
        xxovrflo(iland(k)) = overfgat(k)
        xxqfcf(iland(k)) = qfcfgat(k)
        xxqfcl(iland(k)) = qfclgat(k)
        xxqfg(iland(k)) = qfggat(k)
        xxqfn(iland(k)) = qfngat(k)
        xxpcfc(iland(k)) = pcfcgat(k)
        xxpclc(iland(k)) = pclcgat(k)
        xxpcpg(iland(k)) = pcpggat(k)
        xxpcpn(iland(k)) = pcpngat(k)
        xxrofc(iland(k)) = rofcgat(k)
        xxrofn(iland(k)) = rofngat(k)
        xxwtrc(iland(k)) = wtrcgat(k)
        xxwtrs(iland(k)) = wtrsgat(k)
        xxwtrg(iland(k)) = wtrggat(k)
        xxbetaf(iland(k)) = efgat(k)
        xxfcs(iland(k)) = fcs(k)
        xxfgs(iland(k)) = fgs(k)
        xxfc(iland(k)) = ffc(k)
        xxfg(iland(k)) = fg(k)
      end do

      do l=1,ig
        do k=1,nland
          xxtbar(iland(k),l) = tbargat(k,l)
          xxthliq(iland(k),l) = thlqgat(k,l)
          xxthice(iland(k),l) = thicgat(k,l)
          xxtransp(iland(k),l) = qfcgat(k,l)         
        end do
      end do

      CALL SERXST (xxtbar(1,1),      '00',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxtbar(1,2),      '01',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxtbar(1,3),      '02',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxthliq(1,1),     '03',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxthliq(1,2),     '04',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxthliq(1,3),     '05',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxthice(1,1),     '06',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxthice(1,2),     '07',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxthice(1,3),     '08',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxtcan,           '09',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxsnow,           '10',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxrhosno,         '11',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxtsnow,          '12',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxalbsno,         '13',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxrcan,           '14',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxscan,           '15',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxgrowth,         '16',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxalirbar,        '17',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxalvsbar,        '18',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxcdh,            '19',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxcdm,            '20',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxgt,             '21',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxqg,             '22',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxsurfq,          '23',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxsurft,          '24',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxsurfu,          '25',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxsurfv,          '26',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxcmai,           '27',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxfsgv,           '28',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxfsgs,           '29',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxfsgg,           '30',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxflgv,           '31',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxflgs,           '32',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxflgg,           '33',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxhfsc,           '34',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxhfss,           '35',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxhfsg,           '36',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxhevc,           '37',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxhevs,           '38',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxhevg,           '39',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxevap,           '40',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxrunoff,         '41',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxovrflo,         '42',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxqfcf,           '43',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxqfcl,           '44',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxqfg,            '45',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxqfn,            '46',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxpcfc,           '47',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxpclc,           '48',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxpcpg,           '49',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxpcpn,           '50',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxtransp(1,1),    '51',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxtransp(1,2),    '52',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxtransp(1,3),    '53',JL,ILG,0.,     1.,-1   )
      CALL SERXST (xxrofc,           '54',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxrofn,           '55',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxwtrc,           '56',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxwtrs,           '57',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxwtrg,           '58',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxbetaf,          '59',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxfcs,            '60',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxfgs,            '61',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxfc,             '62',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (xxfg,             '63',JL,ILG,0.,     1.,-1   )      


*************** Debut de la recuperation *******************

      do 460 k=1,nland
        do 460 l=1,ig
          f(tsoil+(l-1)*ilg+iland(k)-1) = tbargat(k,l)
          f(wsoil+(l-1)*ilg+iland(k)-1) = thlqgat(k,l)
          f(isoil+(l-1)*ilg+iland(k)-1) = thicgat(k,l)
 460  continue

      do 465 k=1,nland
*     Permanent prognostic fields.
         f(tveg+iland(k)-1) = tcangat(k)
         f(snoma+iland(k)-1) = snogat (k)
         f(snoal+iland(k)-1) = albsgat(k)
         f(snoro+iland(k)-1) = rhosgat(k)
         f(tsno+iland(k)-1) = tsnogat(k)
         f(vegro+iland(k)-1) = ttgat(k)
         f(wveg+iland(k)-1) = wcangat(k)
         f(iveg+iland(k)-1) = scangat(k)
*     Output fields 
         alvsbar(iland(k)) = alswgat(k)
         alirbar(iland(k)) = allwgat(k)
         cdmbar(iland(k)) = cdmgat(k)
         qsens(iland(k)) = hfsgat(k)
         qevap(iland(k)) = qevpgat(k)
         st(iland(k)) = sfctgat(k)
         sq(iland(k)) = sfcqgat(k)
         su(iland(k)) = sfcugat(k)
         sv(iland(k)) = sfcvgat(k)

         v(cdm+iland(k)-1) = cdmgat(k)
         v(cdh+iland(k)-1) = cdhgat(k)
         f(tdiag+iland(k)-1) = sfctgat(k) 
         f(qdiag+iland(k)-1) = sfcqgat(k)
         f(udiag+iland(k)-1) = sfcugat(k)
         f(vdiag+iland(k)-1) = sfcvgat(k)
         v(alvs+iland(k)-1) = alswgat(k)
         v(alir+iland(k)-1) = allwgat(k)

         v(qg+iland(k)-1) = qggat(k)
         f(tsrad+iland(k)-1) = gtgat(k)
         v(cmai+iland(k)-1) = cmaigat(k)

         v(fsgv+iland(k)-1) = fsgvgat(k)
         v(fsgs+iland(k)-1) = fsgsgat(k)
         v(fsgg+iland(k)-1) = fsgggat(k)

         v(flgv+iland(k)-1) = flgvgat(k)
         v(flgs+iland(k)-1) = flgsgat(k)
         v(flgg+iland(k)-1) = flgggat(k)

         v(hfsc+iland(k)-1) = hfscgat(k)
         v(hfss+iland(k)-1) = hfssgat(k)
         v(hfsg+iland(k)-1) = hfsggat(k)

         v(hevc+iland(k)-1) = hevcgat(k)
         v(hevs+iland(k)-1) = hevsgat(k)
         v(hevg+iland(k)-1) = hevggat(k)

         v(evapo+iland(k)-1) = qfsgat(k)
         v(runoff+iland(k)-1) = rofgat(k)
         v(overfl+iland(k)-1) = overfgat(k)
         v(qfcf+iland(k)-1) = qfcfgat(k)
         v(qfcl+iland(k)-1) = qfclgat(k)
         v(qfg+iland(k)-1) = qfggat(k)
         v(qfn+iland(k)-1) = qfngat(k)
         v(pcfc+iland(k)-1) = pcfcgat(k)
         v(pclc+iland(k)-1) = pclcgat(k)
         v(pcpg+iland(k)-1) = pcpggat(k)
         v(pcfg+iland(k)-1) = pcpngat(k)
         v(rofc+iland(k)-1) = rofcgat(k)
         v(rofn+iland(k)-1) = rofngat(k)
         v(wtrc+iland(k)-1) = wtrcgat(k)
         v(wtrs+iland(k)-1) = wtrsgat(k)
         v(wtrg+iland(k)-1) = wtrggat(k)
         v(betaf+iland(k)-1) = efgat(k)
         v(fcovcs+iland(k)-1) = fcs(k)
         v(fcovgs+iland(k)-1) = fgs(k)
         v(fcovc+iland(k)-1) =  ffc(k)
         v(fcovg+iland(k)-1) = fg(k)
 465  CONTINUE

      do l=1,ig
        do k=1,nland
          v(transp+(l-1)*ilg+iland(k)-1) = qfcgat(k,l)         
        end do
      end do

*     Compute CLASS feedbacks on atmospheric model
  
      do j=1,ilg
         sc=1.0/(seloc(j,nk-1)-seloc(j,nk-2))
         if (f(gc+j-1).lt.-0.5) then
            v(bm+j-1)=-sqrt(ugcm(j)**2+vgcm(j)**2)*
     +                  cdmbar(j)*grav/(rgasd*ta(j))
            f(tsoil+j-1)=f(tsrad+j-1)
            f(alvis+j-1)=0.5*(alirbar(j)+alvsbar(j))
            v(fc+j-1)=qsens(j)
            v(fv+j-1)=qevap(j)         
            v(alfat+j-1)=grav*v(fc+j-1)/(cpd*pressg(j))
            v(bt+j-1)=0.0
            v(alfaq+j-1)=v(fv+j-1)*grav/(2.501e6*pressg(j))
         endif
      end do

      CALL SERXST (v(fc),            'FC',JL,ILG,0.,     1.,-1   )      
      CALL SERXST (v(fv),            'FV',JL,ILG,0.,     1.,-1   ) 
      CALL SERXST (f(alvis),         'A6',JL,ILG,0.,     1.,-1   ) 

*     Desallocation of all pointers.

      call unstakw(trv1)
      call unstakw(trv2)
      call unstakw(trv3)
      call unstakw(trv4)
      call unstakw(trv5)
      call unstakw(trv6)
      call unstakw(itrv1)

      call unstakw (pata)
      call unstakw (paqwv)
      call unstakw (paqwi)
      call unstakw (papcpr)
      call unstakw (paqinv)
      call unstakw (paqini)
      call unstakw (pacoszs)
      call unstakw (paqswd)
      call unstakw (paalvsbar)
      call unstakw (paalirbar)
      call unstakw (paqsens)
      call unstakw (paqevap)
      call unstakw (pacdmbar)

      CALL UNSTAKW(IA1)      
      CALL UNSTAKW(A1)
      CALL UNSTAKW(AC1)
      CALL UNSTAKW(AX1)
      CALL UNSTAKW(X1)
      CALL UNSTAKW(X2)
      CALL UNSTAKW(X3)
      CALL UNSTAKW(GAT1)
      CALL UNSTAKW(GC1)
      CALL UNSTAKW(GCP1)
      CALL UNSTAKW(GDIR)
      CALL UNSTAKW(GIG1)
      CALL UNSTAKW(GG1)
      CALL UNSTAKW(G1)
      call unstakw(gx1)

*----------------------------------------------------------------------

      RETURN
      END