SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/e_budget.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE E_BUDGET(HISBA, HSNOW_ISBA, OFLOOD, OTEMP_ARP, HIMPLICIT_WIND,  &
00003                             PSODELX, PUREF, PPEW_A_COEF, PPEW_B_COEF,            &
00004                             PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF,  &
00005                             PVMOD, PCD,                                          &
00006                             PTG, PTSTEP, PSNOWALBM,                              &
00007                             PSW_RAD, PLW_RAD, PTA, PQA, PPS, PRHOA,              &
00008                             PEXNS, PEXNA, PCPS, PLVTT, PLSTT,                    &
00009                             PVEG, PHUG, PHUI, PHV,                               &
00010                             PLEG_DELTA, PLEGI_DELTA,                             &
00011                             PEMIS, PALB, PRA,                                    &
00012                             PCT, PPSN, PPSNV, PPSNG,                             &
00013                             PGRNDFLUX, PSMELTFLUX, PSNOW_THRUFAL,                &
00014                             PD_G, PDZG, PDZDIF, PSOILCONDZ, PSOILHCAPZ,          &
00015                             PALBT, PEMIST, PQSAT, PDQSAT,                        &
00016                             PFROZEN1, PTDEEP_A, PTDEEP_B, PGAMMAT,               &
00017                             PTA_IC, PQA_IC, PUSTAR2_IC,                          &
00018                             PSNOWFREE_ALB_VEG, PPSNV_A,PSNOWFREE_ALB_SOIL,       &
00019                             PFFG, PFFV, PFF, PFFROZEN, PFALB, PFEMIS, PDELTAT,   &
00020                             PDEEP_FLUX                                           )  
00021 !     ##########################################################################
00022 !
00023 !!****  *E_BUDGET*  
00024 !!
00025 !!    PURPOSE
00026 !!    -------
00027 !
00028 !     Calculates the evolution of the surface and deep-soil temperature
00029 !     (i.e., Ts and T2), as well as all the surface fluxes.
00030 !         
00031 !     
00032 !!**  METHOD
00033 !!    ------
00034 !
00035 !     1- find the grid-averaged albedo, emissivity, and roughness length
00036 !     2- compute the za, zb, and zc terms involved in the numerical
00037 !        resolution of the equations for Ts and T2.
00038 !     3- find Ts(t) and T2(t).
00039 !     4- derive the surface fluxes.
00040 !
00041 !!    EXTERNAL
00042 !!    --------
00043 !!
00044 !!    none
00045 !!
00046 !!    IMPLICIT ARGUMENTS
00047 !!    ------------------ 
00048 !!
00049 !!
00050 !!      
00051 !!    REFERENCE
00052 !!    ---------
00053 !!
00054 !!    Noilhan and Planton (1989)
00055 !!    Belair (1995)
00056 !!      
00057 !!    AUTHOR
00058 !!    ------
00059 !!
00060 !!      S. Belair           * Meteo-France *
00061 !!
00062 !!    MODIFICATIONS
00063 !!    -------------
00064 !!      Original    14/03/95 
00065 !!      (J.Stein)   15/11/95 use the wind components in the flux computation
00066 !!      (J.Noilhan) 15/03/96 use the potential temperature instead of the
00067 !!                           temperature for the heat flux computation 
00068 !!      (J.Stein)   27/03/96 use only H and LE in the soil scheme
00069 !!      (A.Boone, V.Masson)  28/08/98 splits the routine in two for C02 computations
00070 !!      (A.Boone)   15/03/99 Soil ice tendencies calculated here: heating/cooling
00071 !!                           affects surface and deep soil temperatures.
00072 !!      (A. Boone, V. Masson) 01/2003 Externalization
00073 !!      (E. Martin)          07/05 implicit coupling (coeff ZA,ZB,ZC)
00074 !!      (P. Le Moigne)       07/05 dependence on qs for cp
00075 !!      (B. Decharme)        05/08 Add floodplains dependencies
00076 !!      (B. Decharme)        01/09 optional deep soil temperature as in Arpege
00077 !!      (R. Hamdi)           01/09 Cp and L are not constants (As in ALADIN)
00078 !!      (B. Decharme)        09/09 When LCPL_ARP, do not calculate x2 each coef
00079 !!      (A.Boone)            03/10 Add delta fnctions to force LEG ans LEGI=0
00080 !!                                 when hug(i)Qsat < Qa and Qsat > Qa
00081 !!      (B. Decharme)        09/12 new wind implicitation
00082 !!      (V. Masson)          01/13 Deep soil flux implicitation
00083 !-------------------------------------------------------------------------------
00084 !
00085 !*       0.     DECLARATIONS
00086 !               ------------
00087 !
00088 USE MODD_CSTS,       ONLY : XLVTT, XLSTT, XSTEFAN, XCPD, XPI, XDAY, &
00089                               XTT, XCL, XCPV, XCI  
00090 USE MODD_SURF_PAR,   ONLY : XUNDEF
00091 USE MODD_SNOW_PAR,   ONLY : XEMISSN, XEMCRIN
00092 !
00093 USE MODD_SURF_ATM,   ONLY : LCPL_ARP, LQVNPLUS
00094 !
00095 USE MODE_THERMOS
00096 !
00097 USE MODI_SOIL_HEATDIF 
00098 USE MODI_SOIL_TEMP_ARP
00099 !
00100 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00101 USE PARKIND1  ,ONLY : JPRB
00102 !
00103 IMPLICIT NONE
00104 !
00105 !*      0.1    declarations of arguments
00106 !
00107 !
00108 !
00109  CHARACTER(LEN=*),   INTENT(IN)   :: HISBA   ! type of soil (Force-Restore OR Diffusion)
00110 !                                           ! '2-L'
00111 !                                           ! '3-L'
00112 !                                           ! 'DIF'   ISBA-DF
00113 !
00114  CHARACTER(LEN=*),    INTENT(IN)  :: HSNOW_ISBA ! 'DEF' = Default F-R snow scheme
00115 !                                              !         (Douville et al. 1995)
00116 !                                              ! '3-L' = 3-L snow scheme (option)
00117 !                                              !         (Boone and Etchevers 2000)
00118 LOGICAL, INTENT(IN)               :: OFLOOD    ! Activation of the flooding scheme
00119 LOGICAL, INTENT(IN)               :: OTEMP_ARP ! True  = time-varying force-restore soil temperature (as in ARPEGE)
00120                                                ! False = No time-varying force-restore soil temperature (Default)
00121 !
00122  CHARACTER(LEN=*),     INTENT(IN)  :: HIMPLICIT_WIND   ! wind implicitation option
00123 !                                                     ! 'OLD' = direct
00124 !                                                     ! 'NEW' = Taylor serie, order 1
00125 !                                               
00126 REAL, DIMENSION(:), INTENT (IN)   ::  PSODELX  ! Pulsation for each layer (Only used if LTEMP_ARP=True)
00127                                                
00128 !
00129 REAL, DIMENSION(:), INTENT(IN)   :: PUREF       ! reference height of the wind
00130 REAL, DIMENSION(:), INTENT(IN)   :: PSNOWALBM
00131 !                                     prognostic variables at time 't-dt'
00132 !                                     PSNOWALBM = albedo of the snow
00133 !
00134 !
00135 REAL, INTENT(IN)                 :: PTSTEP
00136 !                                   timestep of the integration
00137 !
00138 REAL, DIMENSION(:), INTENT (IN)  :: PSW_RAD, PLW_RAD, PPS, PRHOA, PTA, PQA, PCD, PVMOD
00139 !                                     PSW_RAD = incoming solar radiation
00140 !                                     PLW_RAD = atmospheric infrared radiation
00141 !                                     PRHOA = near-ground air density
00142 !                                     PPS = surface pressure
00143 !                                     PTA = near-ground air temperature
00144 !                                     PQA = near-ground air specific humidity
00145 !                                     PCD = drag coefficient
00146 !                                     PVMOD = wind speed
00147 !
00148 ! implicit atmospheric coupling coefficients:
00149 !
00150 REAL, DIMENSION(:), INTENT(IN)  :: PPEW_A_COEF, PPEW_B_COEF,                   
00151                                      PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF,      
00152                                      PPEQ_B_COEF  
00153 !                                  PPEW_A_COEF = A-wind coefficient (m2s/kg)
00154 !                                  PPEW_B_COEF = B-wind coefficient (m/s)
00155 !                                  PPET_A_COEF = A-air temperature coefficient
00156 !                                  PPET_B_COEF = B-air temperature coefficient
00157 !                                  PPEQ_A_COEF = A-air specific humidity coefficient
00158 !                                  PPEQ_B_COEF = B-air specific humidity coefficient
00159 !
00160 REAL, DIMENSION(:), INTENT(IN)   :: PEXNS, PEXNA
00161 REAL, DIMENSION(:), INTENT(IN)   :: PVEG, PHUG, PHUI, PHV
00162 REAL, DIMENSION(:), INTENT(IN)   :: PEMIS, PALB, PCT, PPSN
00163 REAL, DIMENSION(:), INTENT(IN)   :: PPSNV, PPSNG
00164 !                                     PVEG = fraction of vegetation
00165 !                                     PHUG = relative humidity of the soil
00166 !                                     PHV = Halstead coefficient
00167 !                                     PEMIS = emissivity
00168 !                                     PALB = albedo
00169 !                                     PCT = area-averaged heat capacity
00170 !                                     PPSN = grid fraction covered by snow
00171 !                                     PPSNV = fraction of the vegetation covered by snow
00172 !                                     PPSNG = fraction of the ground covered by snow 
00173 !
00174 REAL, DIMENSION(:), INTENT(IN)     :: PFROZEN1
00175 !                                     PFROZEN1 = ice fraction in supurficial soil
00176 !
00177 REAL, DIMENSION(:), INTENT(IN)     :: PTDEEP_A, PTDEEP_B, PGAMMAT
00178 !                                      PTDEEP_A = Deep soil temperature
00179 !                                                 coefficient depending on flux
00180 !                                      PTDEEP_B = Deep soil temperature (prescribed)
00181 !                                               which models heating/cooling from
00182 !                                               below the diurnal wave penetration
00183 !                                               (surface temperature) depth. If it
00184 !                                               is FLAGGED as undefined, then the zero
00185 !                                               flux lower BC is applied.
00186 !                                      Tdeep = PTDEEP_B + PTDEEP_A * PDEEP_FLUX
00187 !                                              (with PDEEP_FLUX in W/m2)
00188 !                                     PGAMMAT  = Deep soil heat transfer coefficient:
00189 !                                                assuming homogeneous soil so that
00190 !                                                this can be prescribed in units of 
00191 !                                                (1/days): associated time scale with
00192 !                                                PTDEEP.
00193 !
00194 REAL, DIMENSION(:), INTENT(IN)      :: PGRNDFLUX, PSMELTFLUX, PSNOW_THRUFAL 
00195 !                                      PGRNDFLUX = soil/snow interface flux (W/m2) using
00196 !                                                  ISBA-SNOW3L option
00197 !                                      PSMELTFLUX= soil/snow interface flux (W/m2) using
00198 !                                                  ISBA-SNOW3L option: when last traces of snow melt
00199 !                                      PSNOW_THRUFAL  = snow runoff/melt leaving pack and available
00200 !                                                  at the surface for runoff or infiltration
00201 !                                                  [kg/(m2 s)]
00202 !
00203 REAL, DIMENSION(:,:), INTENT(IN)    :: PD_G,  PSOILCONDZ, PSOILHCAPZ
00204 !                                      PD_G      = Depth of bottom of Soil layers (m)
00205 !                                      PSOILCONDZ= ISBA-DF Soil conductivity profile  [W/(m K)]
00206 !                                      PSOILHCAPZ=ISBA-DF Soil heat capacity profile [J/(m3 K)]
00207 REAL, DIMENSION(:,:), INTENT(IN)    :: PDZG       ! soil layers thicknesses (DIF option) (m)
00208 REAL, DIMENSION(:,:), INTENT(IN)    :: PDZDIF     ! distance between consecuative layer mid-points (DIF option) (m)
00209 !
00210 !
00211 REAL, DIMENSION(:), INTENT(IN)      :: PSNOWFREE_ALB_VEG  !snow free albedo of vegetation for EBA
00212 REAL, DIMENSION(:), INTENT(IN)      :: PSNOWFREE_ALB_SOIL !snow free albedo of soil for EBA option
00213 REAL, DIMENSION(:), INTENT(IN)      :: PPSNV_A !fraction of the the vegetation covered by snow for EBA scheme
00214 !
00215 REAL, DIMENSION(:), INTENT(INOUT)   :: PLEG_DELTA, PLEGI_DELTA
00216 !                                      PLEG_DELTA = soil evaporation delta fn
00217 !                                      PLEGI_DELTA = soil evaporation delta fn
00218 !
00219 REAL, DIMENSION(:), INTENT (OUT)   :: PQA_IC, PTA_IC, PUSTAR2_IC
00220 !                                     PTA_IC = near-ground air temperature
00221 !                                     PQA_IC = near-ground air specific humidity
00222 !                                     PUSTAR2_IC = near-ground wind friction (m2/s2)
00223 !                                           (modified if implicit coupling with
00224 !                                            atmosphere used)
00225 !
00226 REAL, DIMENSION(:), INTENT(IN)   :: PRA
00227 !                                     PRA = aerodynamic surface resistance for
00228 !                                           heat transfers
00229 !
00230 REAL, DIMENSION(:,:), INTENT(INOUT):: PTG
00231 !                                     PTG    = soil temperature profile (K)
00232 !
00233 REAL, DIMENSION(:), INTENT(INOUT)  :: PCPS
00234 !                                     PCPS   =  heat capacity at surface
00235 !
00236 REAL, DIMENSION(:), INTENT(OUT)  :: PALBT, PEMIST, PDQSAT
00237 !                                     PALBT  = averaged albedo
00238 !                                     PEMIST = averaged emissivity
00239 !                                     PDQSAT = saturation vapor humidity derivative
00240 REAL, DIMENSION(:), INTENT(IN)   :: PQSAT
00241 !                                     PQSAT  = saturation vapor humidity
00242 !
00243 REAL, DIMENSION(:), INTENT(IN)   :: PFFV, PFF, PFFG, PFALB, PFEMIS, PFFROZEN
00244 !                                   PFFG = Floodplain fraction over ground
00245 !                                   PFFV = Floodplain fraction over vegetation
00246 !                                   PFF  = Floodplain fraction at the surface
00247 !                                   PFALB = Floodplain albedo
00248 !                                   PFEMIS= Floodplain emis
00249 !
00250 REAL, DIMENSION(:), INTENT(INOUT)  :: PLSTT, PLVTT
00251 !
00252 REAL, DIMENSION(:,:), INTENT(OUT) :: PDELTAT
00253 !                                    PDELTAT = change in temperature over the time
00254 !                                              step before adjustment owing to phase 
00255 !                                              changes (K)
00256 REAL, DIMENSION(:), INTENT(OUT)   :: PDEEP_FLUX ! Heat flux at bottom of ISBA (W/m2)
00257 !
00258 !*      0.2    declarations of local variables
00259 !
00260 !
00261 REAL, DIMENSION(SIZE(PALB)) ::   ZRORA,                        
00262 !                                             rhoa / ra
00263 !
00264                                   ZA,ZB,ZC  
00265 !                                             terms for the calculation of Ts(t)
00266 !
00267 ! ISBA-DF:
00268 !
00269 REAL, DIMENSION(SIZE(PALB)) ::  ZCONDAVG, ZTERM2, ZTERM1
00270 !
00271 ! implicit atmospheric coupling coefficients: (modified-form)
00272 !
00273 REAL, DIMENSION(SIZE(PALB)) :: ZPET_A_COEF, ZPEQ_A_COEF, ZPET_B_COEF,      
00274                                ZPEQ_B_COEF, Z_CCOEF, ZHUMS, ZHUMA, ZLAVG,  
00275                                ZHUMSD, ZHUMAD 
00276 !                              ZPET_A_COEF = A-air temperature coefficient
00277 !                              ZPET_B_COEF = B-air temperature coefficient
00278 !                              ZPEQ_A_COEF = A-air specific humidity coefficient
00279 !                              ZPEQ_B_COEF = B-air specific humidity coefficient
00280 !                              Z_CCOEF     = C-working variable
00281 !
00282 REAL, DIMENSION(SIZE(PALB)) :: ZUSTAR2, ZVMOD
00283 !                              ZUSTAR2 = friction     (m2/s2)
00284 !                              ZVMOD   = wind modulus (m/s)
00285 REAL, DIMENSION(SIZE(PALB)) :: ZXCPV_XCL_AVG, ZPTG_OLD
00286 REAL, DIMENSION(SIZE(PALB)) :: ZCNHUMA, ZPEQA2, ZDPQB, ZCDQSAT, ZINCR, ZTRAD, 
00287                                 ZCHUMS, ZCHUMA, ZPETA2, ZPETB2,ZTEMP, ZFGNFRZ, 
00288                                 ZFGFRZ, ZFV, ZFG, ZFNFRZ, ZFFRZ, ZFNSNOW, ZCPS,
00289                                 ZLVTT, ZLSTT  
00290 REAL                        :: ZSNOW
00291 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00292 !
00293 !-------------------------------------------------------------------------------
00294 !
00295 !*       0.     Initialization:
00296 !               ---------------
00297 !
00298 !
00299 IF (LHOOK) CALL DR_HOOK('E_BUDGET',0,ZHOOK_HANDLE)
00300 ZCONDAVG(:)  = 0.0
00301 ZTERM2(:)    = 0.0
00302 ZTERM1(:)    = 0.0
00303 ZPTG_OLD(:)  = PTG(:,1)
00304 PDELTAT(:,:) = 0.0
00305 ZHUMSD(:)    = 0.0
00306 ZHUMAD(:)    = 0.0
00307 !
00308 !-------------------------------------------------------------------------------
00309 !
00310 !*       1.     COEFFICIENTS FOR THE TIME INTEGRATION OF  TS 
00311 !               --------------------------------------------
00312 !
00313 !
00314 !                                              function dqsat(Ts,ps)
00315 !
00316 PDQSAT(:) = DQSAT(PTG(:,1),PPS(:),PQSAT(:))
00317 !                                              function zrsra
00318 !
00319 ! Modify flux-form implicit coupling coefficients:
00320 ! - wind components:
00321 !
00322 ZTEMP  (:) = PCD(:)*PVMOD(:)
00323 !
00324 IF(HIMPLICIT_WIND=='OLD')THEN
00325 ! old implicitation (m2/s2)
00326   ZUSTAR2(:) = ZTEMP(:) * PPEW_B_COEF(:) / (1.0- ZTEMP(:)*PRHOA(:)*PPEW_A_COEF(:)) 
00327 ELSE
00328 ! new implicitation (m2/s2)
00329   ZUSTAR2(:) = ZTEMP(:) * (2.*PPEW_B_COEF(:)-PVMOD(:)) / (1.0-2.0*ZTEMP(:)*PRHOA(:)*PPEW_A_COEF(:)) 
00330 ENDIF
00331 !
00332 !wind modulus at t+1 (m/s)
00333 ZVMOD(:) = PRHOA(:)*PPEW_A_COEF(:)*ZUSTAR2(:) + PPEW_B_COEF(:)
00334 ZVMOD(:) = MAX(ZVMOD(:),0.)
00335 !
00336 WHERE(PPEW_A_COEF(:)/= 0.)
00337       ZUSTAR2(:) = MAX( ( ZVMOD(:) - PPEW_B_COEF(:) ) / (PRHOA(:)*PPEW_A_COEF(:)), 0.)
00338 ENDWHERE
00339 !
00340 ZUSTAR2(:) = MAX(ZUSTAR2(:),0.)
00341 !
00342 ZRORA(:)    = PRHOA(:) / PRA(:)
00343 !
00344 !                                              terms za, zb, and zc for the
00345 !                                              calculation of ts(t)
00346 !
00347 ! Modify flux-form implicit coupling coefficients:
00348 ! - air temperature:
00349 !
00350 ZTEMP(:) = PPET_A_COEF(:)*ZRORA(:)
00351 Z_CCOEF(:)     = (1.0 - ZTEMP(:))/PEXNA(:)
00352 !
00353 ZPET_A_COEF(:) = - ZTEMP(:)/PEXNS(:)/Z_CCOEF(:)
00354 !
00355 ZPET_B_COEF(:) = PPET_B_COEF(:)/Z_CCOEF(:) 
00356 !
00357 !-------------------------------------------------------------------------------
00358 !
00359 !*       2.     AIR AND SOIL SPECIFIC HUMIDITIES 
00360 !               --------------------------------
00361 !
00362 ! - air specific humidity:
00363 !
00364 ZFV(:) = PVEG(:) * (1-PPSNV(:)-PFFV(:))
00365 ZFG(:) = (1.-PVEG(:))*(1.-PPSNG(:)-PFFG(:))
00366 ZFNFRZ(:) = (1.-PFFROZEN(:))*PFF(:) + ZFV + ZFG(:)*(1.-PFROZEN1(:))
00367 ZFFRZ(:) = PFFROZEN(:)*PFF(:) + ZFG(:)*PFROZEN1(:) + PPSN(:)
00368 !
00369 ZSNOW=1.
00370 ZFNSNOW(:)=1.
00371 ZCPS(:)=PCPS(:)
00372 !
00373 IF (LCPL_ARP) THEN
00374 
00375   ! currently this correction not applied for this option, but can be
00376   ! added later after testing...so delta fns set to 1 (turns OFF this correction)
00377 
00378   PLEG_DELTA(:)  = 1.0
00379   PLEGI_DELTA(:) = 1.0
00380 
00381   ZLAVG(:)     = PLVTT(:)*ZFNFRZ(:) + PLSTT(:)*ZFFRZ(:)
00382   ZXCPV_XCL_AVG(:)= (XCPV-XCL)*ZFNFRZ(:) + (XCPV-XCI)*ZFFRZ(:) 
00383 
00384   ZLVTT(:) = ZLAVG(:)
00385   ZLSTT(:) = ZLAVG(:)
00386 
00387 ELSE
00388 
00389   IF(HSNOW_ISBA == '3-L' .OR. HSNOW_ISBA == 'CRO' .OR. HISBA == 'DIF')THEN
00390     ZSNOW = 0.
00391     ZFNSNOW(:) = 1. - PPSN(:)
00392     ZCPS(:)=XCPD
00393   ENDIF
00394 
00395   ZLAVG(:)     = XLVTT*ZFNFRZ(:) + XLSTT*ZFFRZ(:)
00396 
00397   ZLVTT(:) = XLVTT
00398   ZLSTT(:) = XLSTT
00399 
00400 ENDIF
00401 !
00402 ZFGNFRZ(:) = ZFG(:)*(1.-PFROZEN1(:))*PLEG_DELTA(:)
00403 ZFGFRZ(:) = ZFG(:)*PFROZEN1(:)*PLEGI_DELTA(:)
00404 !
00405 ZHUMA(:)     = ZLVTT(:)/ZLAVG(:) * ((1.-PFFROZEN(:))*PFF(:) + ZFV(:)*PHV(:) + ZFGNFRZ(:))   +         &
00406                 ZLSTT(:)/ZLAVG(:) * (PFFROZEN(:)*PFF(:) + ZFGFRZ(:) + ZSNOW*PPSN(:) ) 
00407 !
00408 ZHUMS(:)     = ZLVTT(:)/ZLAVG(:) * ((1.-PFFROZEN(:))*PFF(:) + ZFV(:)*PHV(:) + ZFGNFRZ(:)*PHUG(:)) +   &
00409                 ZLSTT(:)/ZLAVG(:) * (PFFROZEN(:)*PFF(:) + ZFGFRZ(:)*PHUI(:) + ZSNOW*PPSN(:) )  
00410 !
00411 IF(HSNOW_ISBA == '3-L' .OR. HSNOW_ISBA == 'CRO' .OR. HISBA == 'DIF')THEN
00412 !
00413 ! humidity considering no snow (done elsewhere) and flooded zones:
00414 !
00415   ZHUMAD(:) = PFF(:) + ZFV(:)*PHV(:) + ZFGNFRZ(:) + ZFGFRZ(:)  
00416   ZHUMSD(:) = PFF(:) + ZFV(:)*PHV(:) + ZFGNFRZ(:)*PHUG(:) + ZFGFRZ(:)*PHUI(:)          
00417 ELSE
00418   ZHUMAD(:) = ZHUMA(:)
00419   ZHUMSD(:) = ZHUMS(:)
00420 ENDIF
00421 !
00422 !-------------------------------------------------------------------------------
00423 !
00424 !*       3.     COEFFICIENTS FOR THE TIME INTEGRATION OF Q 
00425 !               -------------------------------------------
00426 !
00427 ! implicit q coefficients:
00428 !
00429 ZTEMP(:) = PPEQ_A_COEF(:)*ZRORA(:)
00430 Z_CCOEF(:)     = 1.0 - ZTEMP(:)*ZHUMAD(:)
00431 !
00432 ZPEQ_A_COEF(:) = - ZTEMP(:)*PDQSAT(:)*ZHUMSD(:)/Z_CCOEF(:)
00433 !
00434 ZPEQ_B_COEF(:) = ( PPEQ_B_COEF(:) - ZTEMP(:)*ZHUMSD(:)* &
00435                   (PQSAT(:) - PDQSAT(:)*PTG(:,1)) )/Z_CCOEF(:)  
00436 !
00437 !-------------------------------------------------------------------------------
00438 !
00439 !*       4.     TOTAL ALBEDO AND EMISSIVITY 
00440 !               ---------------------------
00441 !
00442 !
00443 IF(HSNOW_ISBA == '3-L' .OR. HSNOW_ISBA == 'CRO' .OR. HISBA == 'DIF')THEN
00444 !
00445 ! NON-SNOW covered Grid averaged albedo and emissivity for explicit
00446 ! snow scheme 
00447 !
00448   IF(.NOT.OFLOOD)THEN
00449 !          
00450      PALBT (:) = PALB (:)
00451      PEMIST(:) = PEMIS(:)
00452 !     
00453   ELSE
00454 !
00455 ! Taking into account the floodplains with snow grid fractions :
00456 !     PFF    1.-PFF-PPSN   PPSN
00457 ! |------------|----|---------------|
00458 !
00459   WHERE(PPSN(:)<1.0)          
00460      PALBT (:) = ((1.-PFF(:)-PPSN(:))*PALB(:)  + PFF(:)*PFALB (:))/(1.-PPSN(:))
00461      PEMIST(:) = ((1.-PFF(:)-PPSN(:))*PEMIS(:) + PFF(:)*PFEMIS(:))/(1.-PPSN(:))
00462   ELSEWHERE
00463      PALBT (:) = PALB (:)
00464      PEMIST(:) = PEMIS(:)
00465   ENDWHERE
00466 !
00467   ENDIF
00468 !
00469 !
00470 ELSE
00471 !
00472 ! Grid averaged albedo and emissivity for composite snow scheme:
00473 !
00474    IF(HSNOW_ISBA=='EBA') THEN
00475 !
00476       PALBT(:)  = (1-PVEG(:))*(PSNOWFREE_ALB_SOIL(:)*(1-PPSNG(:))+PSNOWALBM(:)*PPSNG(:)) + &
00477                     PVEG(:)*(PSNOWFREE_ALB_VEG(:)*(1-PPSNV_A(:)) +             &
00478                     PSNOWALBM(:)*PPSNV_A(:))  
00479 !
00480       PEMIST(:) = PEMIS(:)-PPSN(:)*(PEMIS(:)-XEMCRIN)
00481 !      
00482    ELSE
00483 !
00484       PALBT (:) = ( 1.-PPSN(:)-PFF(:))*PALB(:) + PPSN(:)*PSNOWALBM(:) + PFF(:)*PFALB(:)     
00485 !
00486       PEMIST(:) = ( 1.-PPSN(:)-PFF(:))*PEMIS(:) + PPSN(:)*XEMISSN + PFF(:)*PFEMIS(:)
00487 !
00488    ENDIF
00489 
00490 ENDIF
00491 !
00492 !-------------------------------------------------------------------------------
00493 !
00494 !*       5. CALCULATION OF ZA, ZB, ZC
00495 !       -----------------------------
00496 !
00497 !       5.1. Default
00498 !       ------------
00499 !
00500 ZTRAD(:) =  PEMIST(:) * XSTEFAN * (PTG(:,1)**3)
00501 ZCHUMS(:) = ZRORA(:)*ZLAVG(:)*ZHUMS(:)
00502 ZCHUMA(:) = ZRORA(:)*ZLAVG(:)*ZHUMA(:)
00503 !
00504 ZPETA2(:) = 1./PEXNS(:) - ZPET_A_COEF(:)/PEXNA(:)
00505 ZPETB2(:) = ZPET_B_COEF(:)/PEXNA(:)
00506 !
00507 ! Surface Energy Budget linearization coefficients for an explicit
00508 ! soil-flood-vegetation energy budget with an insulating fractional overlying
00509 ! layer of snow: fluxes partitioned between surface "felt" by atmosphere
00510 ! and surface in contact with base of snowpack (flux exchange between
00511 ! atmosphere and snow surface calculated in explicit snow routine)
00512 ! (Boone and Etchevers, 2001, J Hydromet.)
00513 ! NOTE for now, the meltwater advection term (heat source/sink)
00514 ! is OFF because the corresponding energy should be compensated for
00515 ! (but code is retained for possible future activation).
00516 !
00517 ZA(:) = 1. / PTSTEP + PCT(:) *                            &
00518          ((ZFNSNOW(:) *                                    &
00519            ( 4.*ZTRAD(:) + ZRORA(:)*ZCPS(:)*ZPETA2(:) ))   &
00520          + ZCHUMS(:)*PDQSAT(:) - ZCHUMA(:)*ZPEQ_A_COEF(:)) &
00521          + 2. * XPI / XDAY        
00522 !
00523 ZB(:) = 1. / PTSTEP + PCT(:) * ( ZFNSNOW(:)* 3.*ZTRAD(:) + ZCHUMS(:)*PDQSAT(:) ) 
00524 !
00525 ZC(:) = 2. * XPI * PTG(:,2) / XDAY + PCT(:) *              &
00526        ( ZFNSNOW(:) *                                       &
00527        ( ZRORA(:)*ZCPS(:)*ZPETB2(:)                         &
00528        + PSW_RAD(:)*(1.-PALBT(:)) + PLW_RAD(:)*PEMIST(:))   &
00529        - (ZCHUMS(:)*PQSAT(:) - ZCHUMA(:)*ZPEQ_B_COEF(:)))           
00530 !
00531 IF(HSNOW_ISBA == '3-L' .OR. HSNOW_ISBA == 'CRO' .OR. HISBA == 'DIF')THEN                                 
00532 !
00533 !       5.2. With CSNOW=SNOW3L or CSNOW=CRO or HISBA=DIF
00534 !       -------------------------------------------------
00535 !
00536 !OFF  ZA(:) = ZA(:) + PPSN(:) * PCT(:) * XCL * PSNOW_THRUFAL(:) 
00537 !
00538    ZC(:) = ZC(:) + PCT(:)*PPSN(:)*(PGRNDFLUX(:) + PSMELTFLUX(:))
00539 !OFF        + PCT(:)*( PPSN(:)*XTT*XCL*PSNOW_THRUFAL(:)) 
00540 !
00541 
00542 ELSEIF (LCPL_ARP) THEN
00543 !
00544 !       5.3. With Arpege
00545 !       ----------------
00546 !
00547 ZCDQSAT(:) = (XCPV-XCPD)*ZHUMS(:)*PDQSAT(:)
00548 ZINCR(:)= PCT(:) * ZRORA(:) * &
00549             (ZCDQSAT(:) * ( ZPETA2(:)*PTG(:,1) - ZPETB2(:)) + &
00550             ZXCPV_XCL_AVG(:) * &
00551             (ZHUMS(:)*PQSAT(:) - ZHUMA(:) * (ZPEQ_B_COEF(:) + ZPEQ_A_COEF(:) * PTG(:,1)))) 
00552 
00553 ! Surface Energy Budget linearization coefficients for a composite 
00554 ! (soil-vegetation-flood-snow) energy budget: composite fluxes "felt" by
00555 ! atmosphere from a mixed soil,snow and vegetation surface:
00556 ! (Douville et al. 1995, J. Clim. Dyn.)
00557 !
00558 
00559   ZA(:) = ZA(:) + ZINCR(:)
00560 
00561   ZB(:) = ZB(:) + ZINCR(:)            
00562            
00563   IF (LQVNPLUS) THEN
00564 !
00565 !       5.4. With  LQVNPLUS=TRUE
00566 !       ------------------------
00567 !
00568     ZCNHUMA(:)=(XCPV-XCPD)*(1.-ZHUMA(:))
00569     ZPEQA2(:)=ZCNHUMA(:)*ZPEQ_A_COEF(:)*ZPETA2(:)*PTG(:,1)
00570     ZDPQB(:)=ZPEQ_B_COEF(:)-PQA(:)
00571 
00572     ZA(:) = ZA(:) + PCT(:) * ZRORA(:) * &
00573              (2.* ZPEQA2(:) + &
00574              ZCNHUMA(:) * (ZDPQB(:)*ZPETA2(:) - ZPEQ_A_COEF(:)*ZPETB2(:) )) 
00575 
00576     ZB(:) = ZB(:) + PCT(:) * ZRORA(:) * ZPEQA2(:)         
00577   
00578     ZC(:) = ZC(:) + PCT(:)*ZRORA(:)*ZCNHUMA(:) *ZDPQB(:)*ZPETB2(:) 
00579            
00580   ENDIF
00581 ENDIF
00582 !
00583 
00584 !-------------------------------------------------------------------------------
00585 !
00586 !*       6.     T AT TIME 'T+DT' (before snowmelt or soil ice evolution)
00587 !               -----------------
00588 !
00589 IF(HISBA == 'DIF')THEN                                                          
00590 !
00591 ! First determine terms needed for implicit linearization of surface:
00592 !
00593 
00594    ZCONDAVG(:) = (PDZG(:,1)*PSOILCONDZ(:,1) + PDZG(:,2)*PSOILCONDZ(:,2))/PD_G(:,2)  
00595    ZA(:)       = ZA(:) - (2. * XPI / XDAY) + 2.*ZCONDAVG(:)*PCT(:)/PD_G(:,2)  
00596    ZTERM2(:)   = 2.*ZCONDAVG(:)*PCT(:)/(ZA(:)*PD_G(:,2))
00597    ZTERM1(:)   = (PTG(:,1)*ZB(:) + (ZC(:) - (2. * XPI * PTG(:,2) / XDAY)) )/ZA(:)  
00598 !
00599 ! Save initial temperature profile (K):
00600 !
00601    PDELTAT(:,:) = PTG(:,:)
00602 !
00603 ! Determine the soil temperatures:
00604 !
00605    CALL SOIL_HEATDIF(PTSTEP,PDZG,PDZDIF,PSOILCONDZ,      &
00606                      PSOILHCAPZ,PCT,ZTERM1,ZTERM2,PTDEEP_A,PTDEEP_B,PTG,PDEEP_FLUX  )  
00607 !
00608 ! Compute the change in temperature over the time
00609 ! step before adjustment owing to phase changes (K)
00610 ! (Used in the diffusion soil phase change computations)
00611 !                                              
00612    PDELTAT(:,:) = PTG(:,:) - PDELTAT(:,:) ! K
00613 !
00614 !
00615 ELSE
00616 !
00617    IF(OTEMP_ARP)THEN
00618 !
00619       CALL SOIL_TEMP_ARP(PTSTEP,ZA,ZB,ZC,PGAMMAT,PTDEEP_B,PSODELX,PTG)
00620 !
00621    ELSE
00622 !
00623       PTG(:,1) = ( PTG(:,1)*ZB(:) + ZC(:) ) / ZA(:)
00624 !
00625       WHERE(PTDEEP_B(:) /= XUNDEF .AND. PGAMMAT(:) /= XUNDEF)
00626             PTG(:,2) = (PTG(:,2) + (PTSTEP/XDAY)*(PTG(:,1) + PGAMMAT(:)*PTDEEP_B(:)))/ &
00627                          (1.+(PTSTEP/XDAY)*(1.0+PGAMMAT(:)))  
00628       ELSEWHERE
00629             PTG(:,2) = (PTG(:,2) + (PTSTEP/XDAY)*PTG(:,1))/                          &
00630                          (1.+(PTSTEP/XDAY) )  
00631       END WHERE
00632 !
00633    ENDIF
00634 !
00635 ENDIF
00636 !
00637 !-------------------------------------------------------------------------------
00638 !*       7.     TA and QA AT TIME 'T+DT' 
00639 !               ------------------------
00640 !               (QA and TA are only modified by these expressions
00641 !                if the implicit atmospheric coupling is used)
00642 !
00643 PQA_IC(:) =  ZPEQ_A_COEF(:)*PTG(:,1)   + ZPEQ_B_COEF(:)
00644 !
00645 PTA_IC(:) =  ZPET_A_COEF(:)*PTG(:,1)   + ZPET_B_COEF(:)
00646 !
00647 PUSTAR2_IC(:) =  ZUSTAR2(:)
00648 !
00649 !--------------------------------------------------------------------------------------
00650 !*       8.     Update of LSTT and LVTT for Arpege
00651 !               ----------------------------------
00652 !
00653 IF (LCPL_ARP) THEN
00654 
00655   IF (.NOT.LQVNPLUS) THEN
00656     PCPS(:) =  PCPS(:) + (XCPV-XCPD) *ZHUMS(:)*PDQSAT(:)*(PTG(:,1)-ZPTG_OLD(:))
00657   ENDIF
00658 
00659 
00660   IF (LQVNPLUS) THEN
00661     PCPS(:) =  PCPS(:) + (XCPV-XCPD) *ZHUMS(:)*PDQSAT(:)*(PTG(:,1)-ZPTG_OLD(:))  &
00662                        + (XCPV-XCPD) *(1-ZHUMA(:))*(PQA_IC(:)-PQA(:))  
00663   ENDIF
00664 
00665   PLSTT(:) = PLSTT(:) + (XCPV-XCI)*(PTG(:,1)-ZPTG_OLD(:))
00666 
00667   PLVTT(:) = PLVTT(:) + (XCPV-XCL)*(PTG(:,1)-ZPTG_OLD(:))
00668 
00669 
00670 ENDIF
00671 IF (LHOOK) CALL DR_HOOK('E_BUDGET',1,ZHOOK_HANDLE)
00672 !
00673 !-------------------------------------------------------------------------------
00674 !
00675 END SUBROUTINE E_BUDGET