SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/isba_snow_agr.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE ISBA_SNOW_AGR( HSNOW_ISBA,                                    &
00003                          PEMIS, PALB,                                            &
00004                          PPSN, PPSNG, PPSNV,                                     &
00005                          PRN, PH, PLE, PLEI, PLEG, PLEGI, PLEV, PLES, PLER,      &
00006                          PLETR, PEVAP, PGFLUX, PLVTT, PLSTT,                     &
00007                          PUSTAR,                                                 &
00008                          PLES3L, PLEL3L, PEVAP3L,                                &
00009                          PRI3L, PALB3L,                                          &
00010                          PRNSNOW, PHSNOW,  PHPSNOW,                              &
00011                          PGFLUXSNOW, PUSTARSNOW,                                 &
00012                          PGRNDFLUX, PLESL,                                       &
00013                          PEMISNOW,                                               &
00014                          PSNOWTEMP, PTS_RAD, PTS, PRI, PSNOWHMASS,               &
00015                          PRN_ISBA, PH_ISBA, PLEG_ISBA, PLEGI_ISBA, PLEV_ISBA,    &
00016                          PLETR_ISBA, PUSTAR_ISBA, PLER_ISBA, PLE_ISBA,           &
00017                          PLEI_ISBA, PGFLUX_ISBA, PMELTADV, PTS_RAD_SNOWFREE,     &
00018                          PTG, PEMIST, PALBT, PLE_FLOOD, PLEI_FLOOD, PFFG,        &
00019                          PFFV, PFF                                               )  
00020 !     ##########################################################################
00021 !
00022 !
00023 !!****  *ISBA_SNOW_AGR* aggregates snow free and snow fluxes
00024 !!
00025 !!    PURPOSE
00026 !!    -------
00027 !     
00028 !!**  METHOD
00029 !!    ------
00030 !
00031 !!    EXTERNAL
00032 !!    --------
00033 !!
00034 !!    IMPLICIT ARGUMENTS
00035 !!    ------------------ 
00036 !!
00037 !!      
00038 !!    REFERENCE
00039 !!    ---------
00040 !!
00041 !!    Noilhan and Planton (1989)
00042 !!      
00043 !!    AUTHOR
00044 !!    ------
00045 !!      V. Masson           * Meteo-France *
00046 !!      (following A. Boone)
00047 !!
00048 !!    MODIFICATIONS
00049 !!    -------------
00050 !!      Original    10/03/95 
00051 !!      B. Decharme 01/2009  Floodplains 
00052 !!      B. Decharme 01/2010  Effective surface temperature (for diag)
00053 !!      B. Decharme 09/2012  Bug total sublimation flux: no PLESL
00054 
00055 !-------------------------------------------------------------------------------
00056 !
00057 !*       0.     DECLARATIONS
00058 !               ------------
00059 USE MODD_SURF_PAR,   ONLY : XUNDEF
00060 !
00061 !
00062 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00063 USE PARKIND1  ,ONLY : JPRB
00064 !
00065 IMPLICIT NONE
00066 !
00067 !*      0.1    declarations of arguments
00068 !              -------------------------
00069 !
00070 !
00071 !* general variables
00072 !  -----------------
00073 !
00074  CHARACTER(LEN=*),     INTENT(IN)  :: HSNOW_ISBA ! 'DEF' = Default F-R snow scheme
00075 !                                               !         (Douville et al. 1995)
00076 !                                               ! '3-L' = 3-L snow scheme (option)
00077 !                                               !         (Boone and Etchevers 2000)
00078 !
00079 !* surface parameters
00080 !  ------------------
00081 !
00082 REAL, DIMENSION(:), INTENT(IN)  :: PALB       ! albedo 
00083 REAL, DIMENSION(:), INTENT(IN)  :: PEMIS      ! emissivity
00084 !  'D95' : they represent aggregated (snow + flood + snow-flood-free) albedo and emissivity
00085 !  '3-L' : they represent                    flood + snow-flood-free  albedo and emissivity
00086 !
00087 !
00088 !* snow fractions
00089 !  --------------
00090 !
00091 REAL, DIMENSION(:), INTENT(IN)  :: PPSN       ! fraction of the grid covered
00092 !                                             ! by snow
00093 REAL, DIMENSION(:), INTENT(IN)  :: PPSNG      ! fraction of the the bare
00094 !                                             ! ground covered by snow
00095 REAL, DIMENSION(:), INTENT(IN)  :: PPSNV      ! fraction of the the veg.
00096 !                                             ! covered by snow
00097 !
00098 !
00099 !* ISBA-SNOW3L variables/parameters:
00100 !  ---------------------------------
00101 !
00102 ! Prognostic variables:
00103 !
00104 REAL, DIMENSION(:),   INTENT(IN) :: PALB3L      ! Snow albedo
00105 REAL, DIMENSION(:),   INTENT(IN) :: PRI3L       ! Snow Ridcharson number
00106 ! 
00107 ! Diagnostics:
00108 !
00109 REAL, DIMENSION(:), INTENT(INOUT) :: PGRNDFLUX  ! snow/soil-biomass interface flux (W/m2)
00110 !
00111 REAL, DIMENSION(:), INTENT(INOUT) :: PHPSNOW    ! heat release from rainfall (W/m2)
00112 REAL, DIMENSION(:), INTENT(INOUT) :: PSNOWHMASS ! snow heat content change from mass changes (J/m2)
00113 REAL, DIMENSION(:), INTENT(INOUT) :: PRNSNOW    ! net radiative flux from snow (W/m2)
00114 REAL, DIMENSION(:), INTENT(INOUT) :: PHSNOW     ! sensible heat flux from snow (W/m2)
00115 REAL, DIMENSION(:), INTENT(INOUT) :: PGFLUXSNOW ! net heat flux from snow (W/m2)
00116 REAL, DIMENSION(:), INTENT(IN)    :: PUSTARSNOW ! friction velocity
00117 REAL, DIMENSION(:), INTENT(OUT)   :: PLESL      ! Evaporation (liquid) from wet snow (W/m2)
00118 REAL, DIMENSION(:), INTENT(IN)    :: PEMISNOW   ! snow surface emissivity
00119 REAL, DIMENSION(:), INTENT(OUT)   :: PTS_RAD    ! effective radiative temperature 
00120 !                                                 of the natural surface (K)
00121 REAL, DIMENSION(:), INTENT(OUT)   :: PTS        ! effective surface temperature 
00122 REAL, DIMENSION(:,:), INTENT(IN)  :: PSNOWTEMP  ! snow layer temperatures (K)
00123 REAL, DIMENSION(:), INTENT(IN)    :: PLES3L   ! sublimation from ISBA-ES(3L)
00124 REAL, DIMENSION(:), INTENT(IN)    :: PLEL3L   ! evaporation heat flux of water in the snow (W/m2)
00125 REAL, DIMENSION(:), INTENT(IN)    :: PEVAP3L  ! evaporation flux over snow from ISBA-ES (kg/m2/s)
00126 REAL, DIMENSION(:), INTENT(IN)    :: PLVTT, PLSTT    
00127 !
00128 !
00129 ! Prognostic variables:
00130 !
00131 REAL, DIMENSION(:), INTENT(IN)   :: PTS_RAD_SNOWFREE    ! soil layer average temperatures        (K)
00132 REAL, DIMENSION(:,:), INTENT(IN) :: PTG                 ! soil layer average temperatures        (K)
00133 
00134 !
00135 !
00136 !* diagnostic variables
00137 !  --------------------
00138 !
00139 REAL, DIMENSION(:), INTENT(INOUT) :: PEMIST   ! total surface emissivity
00140 REAL, DIMENSION(:), INTENT(INOUT) :: PALBT    ! total surface albedo
00141 !
00142 !* surface fluxes
00143 !  --------------
00144 !
00145 REAL, DIMENSION(:), INTENT(INOUT) :: PRN      ! net radiation
00146 REAL, DIMENSION(:), INTENT(INOUT) :: PH       ! sensible heat flux
00147 REAL, DIMENSION(:), INTENT(INOUT) :: PLE      ! total latent heat flux
00148 REAL, DIMENSION(:), INTENT(OUT)   :: PLEI     ! sublimation latent heat flux
00149 REAL, DIMENSION(:), INTENT(INOUT) :: PLEGI    ! latent heat of sublimation over frozen soil
00150 REAL, DIMENSION(:), INTENT(INOUT) :: PLEG     ! latent heat of evaporation
00151 !                                             ! over the ground
00152 REAL, DIMENSION(:), INTENT(INOUT) :: PLEV     ! latent heat of evaporation
00153 !                                             ! over the vegetation
00154 REAL, DIMENSION(:), INTENT(INOUT) :: PLES     ! latent heat of sublimation
00155 !                                             ! over the snow
00156 REAL, DIMENSION(:), INTENT(INOUT) :: PLER     ! latent heat of the fraction
00157 !                                             ! delta of water retained on the
00158 !                                             ! foliage of the vegetation
00159 REAL, DIMENSION(:), INTENT(INOUT) :: PLETR    ! evapotranspiration of the rest
00160 !                                             ! of the vegetation
00161 REAL, DIMENSION(:), INTENT(INOUT) :: PEVAP    ! total evaporative flux (kg/m2/s)
00162 REAL, DIMENSION(:), INTENT(INOUT) :: PGFLUX   ! flux through the ground
00163 REAL, DIMENSION(:), INTENT(INOUT) :: PUSTAR   ! friction velocity
00164 REAL, DIMENSION(:), INTENT(INOUT) :: PMELTADV ! advection heat flux from snowmelt (W/m2)
00165 !
00166 ! The following surface fluxes are from snow-free portion of grid
00167 ! box when the ISBA-ES option is ON. Otherwise, they are equal
00168 ! to the same variables without the _ISBA extension.
00169 !
00170 REAL, DIMENSION(:), INTENT(OUT) :: PRN_ISBA   ! net radiation
00171 REAL, DIMENSION(:), INTENT(OUT) :: PH_ISBA    ! sensible heat flux
00172 REAL, DIMENSION(:), INTENT(OUT) :: PLEG_ISBA  ! latent heat of evaporation (ground)
00173 REAL, DIMENSION(:), INTENT(OUT) :: PLEGI_ISBA ! latent heat of sublimation (ground)
00174 REAL, DIMENSION(:), INTENT(OUT) :: PLEV_ISBA  ! latent heat of evaporation (vegetation)
00175 REAL, DIMENSION(:), INTENT(OUT) :: PLETR_ISBA ! latent heat of evaporation (transpiration)
00176 REAL, DIMENSION(:), INTENT(OUT) :: PUSTAR_ISBA! friction velocity
00177 REAL, DIMENSION(:), INTENT(OUT) :: PLER_ISBA  ! latent heat of evaporation (plant interception)
00178 REAL, DIMENSION(:), INTENT(OUT) :: PLE_ISBA   ! total latent heat flux 
00179 REAL, DIMENSION(:), INTENT(OUT) :: PLEI_ISBA  ! sublimation latent heat flux 
00180 REAL, DIMENSION(:), INTENT(OUT) :: PGFLUX_ISBA! flux through the ground
00181 !
00182 REAL, DIMENSION(:), INTENT(IN)    :: PFFG,PFFV,PFF
00183 REAL, DIMENSION(:), INTENT(INOUT) :: PLE_FLOOD, PLEI_FLOOD ! Flood evaporation
00184 !
00185 REAL, DIMENSION(:),   INTENT(OUT) :: PRI       ! Total Ridcharson number
00186 !
00187 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00188 !
00189 !*      0.2    declarations of local variables
00190 !
00191 !-------------------------------------------------------------------------------
00192 !
00193 IF (LHOOK) CALL DR_HOOK('ISBA_SNOW_AGR',0,ZHOOK_HANDLE)
00194 IF(HSNOW_ISBA == '3-L' .OR. HSNOW_ISBA == 'CRO')THEN
00195 !
00196 ! Save fluxes from Force-Restore snow/explicit snow-free
00197 ! portion of grid box (vegetation/soil):
00198 !
00199   PRN_ISBA(:)    = PRN(:)
00200   PH_ISBA(:)     = PH(:)
00201   PLEG_ISBA(:)   = PLEG(:)
00202   PLEGI_ISBA(:)  = PLEGI(:)
00203   PLEV_ISBA(:)   = PLEV(:)
00204   PLETR_ISBA(:)  = PLETR(:)
00205   PUSTAR_ISBA(:) = PUSTAR(:)
00206   PLER_ISBA(:)   = PLER(:) 
00207   PLE_ISBA(:)    = PLE(:)
00208   PGFLUX_ISBA(:) = PGFLUX(:)
00209 !  
00210   PLEI_ISBA(:)   = PLEGI(:)+PLEI_FLOOD(:)+PLES(:)
00211 !
00212 ! Effective surface temperature (for diag):
00213 !
00214   PTS(:)       = (1.-PPSN(:))*PTG(:,1)+PPSN(:)*PSNOWTEMP(:,1)
00215 !
00216 ! Effective surface radiating temperature:
00217 !
00218   PALBT(:)     = PALB(:)*(1.-PPSN(:)) + PPSN(:)*PALB3L(:)
00219   PEMIST(:)    = PEMIS(:)*(1.-PPSN(:)) + PPSN(:)*PEMISNOW(:)
00220   PTS_RAD(:)   = ( ((1.-PPSN(:))*PEMIS(:)   *PTS_RAD_SNOWFREE(:)**4 +             &
00221                           PPSN(:) *PEMISNOW(:)*PSNOWTEMP(:,1)**4  )/     &
00222                      PEMIST(:) )**(0.25)  
00223 !
00224 !
00225 ! Calculate actual fluxes from snow-free natural
00226 ! portion of surface: NET flux from surface is the sum of
00227 ! fluxes from snow free and snow covered portions
00228 ! of natural portion of grid box when *ISBA-ES* in force.
00229 ! when NOT in use, then these fluxes equal those above.
00230 !
00231   PRN(:)       = (1.-PPSN(:))  * PRN(:)   + PPSN(:) * PRNSNOW(:)
00232   PH(:)        = (1.-PPSN(:))  * PH(:)    + PPSN(:) * PHSNOW(:)
00233 !  
00234   PLEG(:)      = (1.-PPSNG(:)-PFFG(:)) * PLEG(:)  
00235   PLEGI(:)     = (1.-PPSNG(:)-PFFG(:)) * PLEGI(:)  
00236   PLEV(:)      = (1.-PPSNV(:)-PFFV(:)) * PLEV(:)   
00237   PLETR(:)     = (1.-PPSNV(:)-PFFV(:)) * PLETR(:)  
00238   PLER(:)      = (1.-PPSNV(:)-PFFV(:)) * PLER(:)  
00239 !
00240 ! Total evapotranspiration flux (kg/m2/s):
00241 !
00242   PEVAP(:)     = (PLEV(:) + PLEG(:))/PLVTT(:) + PLEGI(:)/PLSTT(:) + PLE_FLOOD(:)/PLVTT(:) + &
00243                     PLEI_FLOOD(:)/PLSTT(:) + PPSN(:) * PEVAP3L(:)  
00244 !
00245 ! Momentum fluxes:
00246 !
00247   PUSTAR(:)    = SQRT( (1.-PPSN(:))  * PUSTAR(:)**2  + PPSN(:) * PUSTARSNOW(:)**2 )
00248 !
00249 ! ISBA-ES/SNOW3L fluxes:
00250 !
00251   PLES(:)      =                            PPSN(:) * PLES3L(:)
00252   PLESL(:)     =                            PPSN(:) * PLEL3L(:)
00253   PRNSNOW(:)   =                            PPSN(:) * PRNSNOW(:)
00254   PHSNOW(:)    =                            PPSN(:) * PHSNOW(:)
00255   PGFLUXSNOW(:)=                            PPSN(:) * PGFLUXSNOW(:)
00256   PSNOWHMASS(:)=                            PPSN(:) * PSNOWHMASS(:)  ! (J m-2)
00257   PHPSNOW(:)   =                            PPSN(:) * PHPSNOW(:)
00258 
00259 ! Total heat flux between snow and soil
00260 !
00261   PGRNDFLUX(:) =                            PPSN(:) * PGRNDFLUX(:) 
00262   PMELTADV(:)  =                            PPSN(:) * PMELTADV(:)
00263 !
00264 ! Total evaporative flux:
00265 !
00266   PLE(:)       = PLEG(:) + PLEV(:) + PLES(:) + PLESL(:) + PLEGI(:) + PLE_FLOOD(:) + PLEI_FLOOD(:)
00267 !
00268 ! Total sublimation flux:
00269 !
00270   PLEI(:)      = PLES(:) + PLEGI(:) + PLEI_FLOOD(:)
00271 !
00272 ! Total FLUX into snow/soil/vegetation surface:
00273 !
00274   PGFLUX(:)    = PRN(:) - PH(:) - PLE(:) + PHPSNOW(:) 
00275 !
00276 ! Ridcharson number:
00277 !
00278   PRI(:)       = (1.-PPSN(:))  * PRI(:)   + PPSN(:) * PRI3L(:)  
00279 !
00280 ELSE
00281 !
00282   PTS    (:)  = PTG  (:,1)
00283   PTS_RAD(:)  = PTS_RAD_SNOWFREE(:)
00284   PALBT  (:)  = PALB (:)
00285   PEMIST (:)  = PEMIS(:)
00286 !  
00287 ! Total sublimation flux:
00288   PLEI   (:)  = PLES(:) + PLEGI(:) + PLEI_FLOOD(:)
00289 !
00290 ENDIF
00291 IF (LHOOK) CALL DR_HOOK('ISBA_SNOW_AGR',1,ZHOOK_HANDLE)
00292 !
00293 !
00294 !
00295 !-------------------------------------------------------------------------------
00296 !
00297 END SUBROUTINE ISBA_SNOW_AGR