SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/isba_flood_properties.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE ISBA_FLOOD_PROPERTIES(KNI,PTA,PEXNA,PRHOA,PTG,PEXNS,PQA,PVMOD,  &
00003                                        PZREF,PUREF,PPS,PDIRCOSZW,PVEG,PLAI,      &
00004                                        PFFLOOD,PFFROZEN,PZ0_FLOOD,PFFG_NOSNOW,   &
00005                                        PFFV_NOSNOW)  
00006 !     ############################################################################
00007 !
00008 !
00009 !!****  *ISBA_FLOOD_PROPERTIES*  
00010 !!
00011 !!    PURPOSE
00012 !!    -------
00013 !      Calculate the Flood fractions, roughness length and albedo.  
00014 !     
00015 !!**  METHOD
00016 !!    ------
00017 !
00018 !!    EXTERNAL
00019 !!    --------
00020 !!
00021 !!    IMPLICIT ARGUMENTS
00022 !!    ------------------ 
00023 !!
00024 !!      
00025 !!    REFERENCE
00026 !!    ---------
00027 !!      
00028 !!    AUTHOR
00029 !!    ------
00030 !!      B. Decharme           * Meteo-France *
00031 !!
00032 !!    MODIFICATIONS
00033 !!    -------------
00034 !!      Original      25/05/08 
00035 !!      Modified      09/2009  B. Decharme: limitation of Ri in surface_ri.F90
00036 !-------------------------------------------------------------------------------
00037 !
00038 !*       0.     DECLARATIONS
00039 !               ------------
00040 !
00041 USE MODD_CSTS,       ONLY : XTT, XG, XCPD
00042 USE MODD_SNOW_PAR,   ONLY : XZ0SN, XZ0HSN
00043 USE MODD_WATER_PAR,  ONLY : XALBSCA_WAT, XEMISWAT, XALBWATICE, XEMISWATICE 
00044 !
00045 USE MODI_SURFACE_RI
00046 USE MODI_SURFACE_CD
00047 USE MODI_SURFACE_CDCH_1DARP
00048 USE MODI_WIND_THRESHOLD
00049 !
00050 USE MODE_SURF_FLOOD_FRAC
00051 USE MODE_THERMOS
00052 !
00053 USE MODD_SURF_ATM,    ONLY : LDRAG_COEF_ARP, XVCHRNK, XVZ0CM
00054 !
00055 USE MODI_PACK_SAME_RANK
00056 USE MODI_UNPACK_SAME_RANK
00057 !
00058 !
00059 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00060 USE PARKIND1  ,ONLY : JPRB
00061 !
00062 USE MODI_GET_1D_MASK
00063 !
00064 IMPLICIT NONE
00065 !
00066 !*      0.1    declarations of arguments
00067 !        
00068 INTEGER, INTENT(IN)                  :: KNI
00069 !
00070 REAL, DIMENSION(:), INTENT(IN)       :: PTA   ! air temperature at atm. level
00071 REAL, DIMENSION(:), INTENT(IN)       :: PQA   ! air humidity at atm. level (kg/kg)
00072 REAL, DIMENSION(:), INTENT(IN)       :: PEXNA ! Exner function at atm. level
00073 REAL, DIMENSION(:), INTENT(IN)       :: PRHOA ! air density at atm. level
00074 REAL, DIMENSION(:), INTENT(IN)       :: PVMOD ! module of wind at atm. wind level
00075 REAL, DIMENSION(:), INTENT(IN)       :: PZREF ! atm. level for temp. and humidity
00076 REAL, DIMENSION(:), INTENT(IN)       :: PUREF ! atm. level for wind
00077 REAL, DIMENSION(:), INTENT(IN)       :: PTG   ! Composite Temperature
00078 REAL, DIMENSION(:), INTENT(IN)       :: PEXNS ! Exner function at sea surface
00079 REAL, DIMENSION(:), INTENT(IN)       :: PPS   ! air pressure at sea surface
00080 REAL, DIMENSION(:), INTENT(IN)       :: PDIRCOSZW ! orography slope cosine
00081 REAL, DIMENSION(:), INTENT(IN)       :: PVEG  ! vegetation fraction
00082 REAL, DIMENSION(:), INTENT(IN)       :: PLAI  ! leaf area index
00083 REAL, DIMENSION(:), INTENT(IN)       :: PFFLOOD
00084 REAL, DIMENSION(:), INTENT(IN)       :: PFFROZEN
00085 !
00086 REAL, DIMENSION(:), INTENT(INOUT)    :: PZ0_FLOOD! roughness length over floodplains
00087 !
00088 REAL, DIMENSION(:), INTENT(OUT)      :: PFFG_NOSNOW
00089 REAL, DIMENSION(:), INTENT(OUT)      :: PFFV_NOSNOW
00090 !
00091 !*      0.2    declarations of local variables
00092 !
00093 REAL, PARAMETER :: ZMISS = 0.0
00094 !
00095 INTEGER, DIMENSION(KNI) :: IMASK  ! mask to pack/unpack each variable
00096 !
00097 REAL, DIMENSION(KNI) :: ZUSTAR2   ! square of friction velocity
00098 REAL, DIMENSION(KNI) :: ZAC       ! Aerodynamical conductance
00099 REAL, DIMENSION(KNI) :: ZRA       ! Aerodynamical resistance
00100 REAL, DIMENSION(KNI) :: ZZ0HF     ! heat roughness length over floodplains
00101 REAL, DIMENSION(KNI) :: ZRI       ! Richardson number
00102 REAL, DIMENSION(KNI) :: ZQSAT     ! humidity at saturation
00103 REAL, DIMENSION(KNI) :: ZCD       ! heat drag coefficient
00104 REAL, DIMENSION(KNI) :: ZCDN      ! momentum drag coefficient
00105 REAL, DIMENSION(KNI) :: ZCH       ! neutral momentum drag coefficient
00106 !
00107 !*      0.3    declarations of local pack/unpack variables
00108 !
00109 REAL, DIMENSION(KNI) :: ZZ0_FLOOD
00110 REAL, DIMENSION(KNI) :: ZFFG_NOSNOW
00111 REAL, DIMENSION(KNI) :: ZFFV_NOSNOW
00112 !
00113 !*      0.4    declarations of local packing variables
00114 !
00115 REAL, DIMENSION(KNI) :: ZPSNG
00116 REAL, DIMENSION(KNI) :: ZPSNV
00117 !
00118 REAL, DIMENSION(KNI) :: ZFFLOOD
00119 REAL, DIMENSION(KNI) :: ZFFROZEN
00120 REAL, DIMENSION(KNI) :: ZVEG
00121 REAL, DIMENSION(KNI) :: ZLAI
00122 REAL, DIMENSION(KNI) :: ZVMOD     ! wind modulus
00123 REAL, DIMENSION(KNI) :: ZTG
00124 REAL, DIMENSION(KNI) :: ZPS
00125 REAL, DIMENSION(KNI) :: ZEXNS
00126 REAL, DIMENSION(KNI) :: ZEXNA
00127 REAL, DIMENSION(KNI) :: ZTA
00128 REAL, DIMENSION(KNI) :: ZQA
00129 REAL, DIMENSION(KNI) :: ZZREF
00130 REAL, DIMENSION(KNI) :: ZUREF
00131 REAL, DIMENSION(KNI) :: ZDIRCOSZW
00132 !
00133 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00134 !
00135 !-------------------------------------------------------------------------------
00136 !
00137 !       0.     Initializations
00138 !              ---------------
00139 !
00140 IF (LHOOK) CALL DR_HOOK('ISBA_FLOOD_PROPERTIES',0,ZHOOK_HANDLE)
00141 !        
00142  CALL GET_1D_MASK(KNI,SIZE(PFFLOOD(:)),PFFLOOD(:),IMASK(:))
00143 !
00144  CALL PACK_SAME_RANK(IMASK(:),PZ0_FLOOD(:),ZZ0_FLOOD(:))
00145  CALL PACK_SAME_RANK(IMASK(:),PFFLOOD  (:),ZFFLOOD  (:))
00146  CALL PACK_SAME_RANK(IMASK(:),PFFROZEN (:),ZFFROZEN (:))
00147  CALL PACK_SAME_RANK(IMASK(:),PVEG     (:),ZVEG     (:))
00148  CALL PACK_SAME_RANK(IMASK(:),PLAI     (:),ZLAI     (:))
00149  CALL PACK_SAME_RANK(IMASK(:),PVMOD    (:),ZVMOD    (:))
00150  CALL PACK_SAME_RANK(IMASK(:),PTG      (:),ZTG      (:))
00151  CALL PACK_SAME_RANK(IMASK(:),PPS      (:),ZPS      (:))
00152  CALL PACK_SAME_RANK(IMASK(:),PEXNS    (:),ZEXNS    (:))
00153  CALL PACK_SAME_RANK(IMASK(:),PEXNA    (:),ZEXNA    (:))
00154  CALL PACK_SAME_RANK(IMASK(:),PTA      (:),ZTA      (:))
00155  CALL PACK_SAME_RANK(IMASK(:),PQA      (:),ZQA      (:))
00156  CALL PACK_SAME_RANK(IMASK(:),PZREF    (:),ZZREF    (:))
00157  CALL PACK_SAME_RANK(IMASK(:),PUREF    (:),ZUREF    (:))
00158  CALL PACK_SAME_RANK(IMASK(:),PDIRCOSZW(:),ZDIRCOSZW(:)) 
00159 !
00160 !-------------------------------------------------------------------------------
00161 !
00162 !       1.     Flood fractions without snow
00163 !              ----------------------------
00164 !
00165 ZPSNG(:)=0.0
00166 ZPSNV(:)=0.0
00167 ZFFG_NOSNOW(:) = FLOOD_FRAC_GROUND(ZPSNG,ZFFLOOD)
00168 ZFFV_NOSNOW(:) = FLOOD_FRAC_VEG(ZLAI,ZPSNV,ZFFLOOD)
00169 !
00170 !-------------------------------------------------------------------------------
00171 !
00172 !       2.     roughness length
00173 !              ----------------
00174 !
00175 ! * Richardson number (and possible limitation)
00176 !
00177  CALL SURFACE_RI(ZTG,ZQSAT,ZEXNS,ZEXNA,ZTA,ZQA,  &
00178                   ZZREF,ZUREF,ZDIRCOSZW,ZVMOD,ZRI)  
00179 !
00180 ! * Wind threshold
00181 !
00182 ZVMOD(:)=WIND_THRESHOLD(ZVMOD(:),ZUREF(:))
00183 !
00184 ! * Saturated specified humidity near the water surface
00185 !
00186 ZQSAT(:) = QSAT(ZTG(:),ZPS(:))
00187 !
00188 ! * Detection of flood ice
00189 !
00190 WHERE(ZFFROZEN(:)==0.0)
00191   ZZ0HF(:) = ZZ0_FLOOD(:)
00192 ELSEWHERE
00193   ZZ0HF(:) = XZ0HSN
00194 END WHERE
00195 !
00196 ! * Drag coefficient
00197 !
00198 IF (LDRAG_COEF_ARP) THEN
00199  
00200   CALL SURFACE_CDCH_1DARP(ZZREF, ZZ0_FLOOD, ZZ0HF, ZVMOD, ZTA, ZTG, &
00201                           ZQA, ZQSAT, ZCD, ZCDN, ZCH                )  
00202   !
00203   ! * Calculate the roughness length over floodplains according to Charnock's expression.
00204   !
00205   ZUSTAR2(:) = ZCD(:)*ZVMOD(:)*ZVMOD(:)
00206   WHERE(ZFFROZEN(:)==0.0)
00207     ZZ0_FLOOD(:) = XVCHRNK * ZUSTAR2(:) / XG + XVZ0CM * ZCD(:) / ZCDN(:)
00208   ELSEWHERE
00209     ZZ0_FLOOD(:) = XZ0SN
00210   END WHERE
00211 
00212 ELSE
00213   !
00214   CALL SURFACE_CD(ZRI, ZZREF, ZUREF, ZZ0_FLOOD, ZZ0HF, ZCD, ZCDN)
00215   !
00216   ! * Calculate the roughness length over floodplains according to Charnock's expression.
00217   !
00218   ZUSTAR2(:) = ZCD(:)*ZVMOD(:)*ZVMOD(:)
00219   !
00220   WHERE(ZFFROZEN(:)==0.0)
00221     ZZ0_FLOOD(:) = XVCHRNK * ZUSTAR2(:) / XG + XVZ0CM * ZCD(:) / ZCDN(:)
00222   ELSEWHERE
00223     ZZ0_FLOOD(:) = XZ0SN
00224   END WHERE
00225   !
00226 ENDIF
00227 !
00228  CALL UNPACK_SAME_RANK(IMASK(:),ZZ0_FLOOD(:),PZ0_FLOOD(:),XZ0SN)
00229 !
00230  CALL UNPACK_SAME_RANK(IMASK(:),ZFFG_NOSNOW(:),PFFG_NOSNOW(:),ZMISS)
00231  CALL UNPACK_SAME_RANK(IMASK(:),ZFFV_NOSNOW(:),PFFV_NOSNOW(:),ZMISS)
00232 !
00233 IF (LHOOK) CALL DR_HOOK('ISBA_FLOOD_PROPERTIES',1,ZHOOK_HANDLE)
00234 !-------------------------------------------------------------------------------
00235 !
00236 END SUBROUTINE ISBA_FLOOD_PROPERTIES