SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/average_diag_isban.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE AVERAGE_DIAG_ISBA_n(PHW,PHT,PSFCO2)
00003 !     #######################################
00004 !
00005 !
00006 !!****  *AVERAGE_DIAG_ISBA_n*  
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !      Average the diagnostics from all ISBA tiles
00011 !     
00012 !!**  METHOD
00013 !!    ------
00014 !
00015 !!    EXTERNAL
00016 !!    --------
00017 !!
00018 !!    IMPLICIT ARGUMENTS
00019 !!    ------------------ 
00020 !!
00021 !!      
00022 !!    REFERENCE
00023 !!    ---------
00024 !!      
00025 !!    AUTHOR
00026 !!    ------
00027 !!      S. Belair           * Meteo-France *
00028 !!
00029 !!    MODIFICATIONS
00030 !!    -------------
00031 !!      Original    10/03/95 
00032 !!      V.Masson    20/03/96  remove abnormal averages and average TS**4 instead
00033 !!                            of TS
00034 !!      (J.Stein)   27/03/96 use only H and LE in the soil scheme
00035 !!      A. Boone    27/11/02 revised to output ALMA variables, and general applications
00036 !!      B. Decharme 17/08/09 cumulative radiatif budget
00037 !-------------------------------------------------------------------------------
00038 !
00039 !*       0.     DECLARATIONS
00040 !               ------------
00041 !
00042 !
00043 USE MODD_SURF_PAR,    ONLY : XUNDEF
00044 USE MODD_ISBA_n,      ONLY : XPATCH, NPATCH, XLE
00045 USE MODD_DIAG_EVAP_ISBA_n, ONLY : LSURF_BUDGETC                            
00046 USE MODD_DIAG_ISBA_n, ONLY : N2M, LSURF_BUDGET, LCOEF, LSURF_VARS,            &
00047                                XAVG_RN, XAVG_H, XAVG_LE, XAVG_GFLUX, XAVG_RI, &
00048                                XAVG_CD, XAVG_CH, XAVG_CE, XAVG_T2M, XAVG_Q2M, &
00049                                XAVG_HU2M, XAVG_T2M_MIN, XAVG_T2M_MAX,         &
00050                                XAVG_ZON10M, XAVG_MER10M, XAVG_LEI,            &
00051                                XAVG_Z0, XAVG_Z0H, XAVG_Z0EFF, XAVG_QS,        &
00052                                XAVG_SWBD, XAVG_SWBU, XAVG_SWD, XAVG_SWU,      &
00053                                XAVG_LWD, XAVG_LWU, XAVG_FMU, XAVG_FMV,        &
00054                                XRN, XH, XGFLUX, XLEI, XRI, XCD, XCH, XCE,     &
00055                                XT2M, XQ2M, XHU2M, XZON10M, XMER10M,           &
00056                                XZ0_WITH_SNOW, XZ0H_WITH_SNOW, XZ0EFF, XQS,    &
00057                                XSWBD, XSWBU, XSWD, XSWU, XLWD, XLWU,          &
00058                                XFMU, XFMV, XSWDC, XSWUC, XLWDC, XLWUC,        &
00059                                XFMUC, XFMVC, XAVG_SWDC, XAVG_SWUC, XAVG_LWDC, &
00060                                XAVG_LWUC, XAVG_FMUC, XAVG_FMVC, XTS, XAVG_TS, &
00061                                XTSRAD, XAVG_TSRAD,                            &
00062                                XAVG_HU2M_MIN, XAVG_HU2M_MAX, XAVG_WIND10M,    &
00063                                XAVG_WIND10M_MAX, XWIND10M, XAVG_SFCO2  
00064 !
00065 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00066 USE PARKIND1  ,ONLY : JPRB
00067 !
00068 IMPLICIT NONE
00069 !
00070 !*      0.1    declarations of arguments
00071 !
00072 !
00073 REAL, DIMENSION(:), INTENT(IN)       :: PHW    ! atmospheric level height for wind
00074 REAL, DIMENSION(:), INTENT(IN)       :: PHT    ! atmospheric level height
00075 REAL, DIMENSION(:), INTENT(IN)       :: PSFCO2 ! CO2 flux
00076 !
00077 !*      0.2    declarations of local variables
00078 !
00079 INTEGER                              :: JPATCH ! tile loop counter
00080 INTEGER                              :: JSWB   ! band loop counter
00081 REAL, DIMENSION(SIZE(XPATCH,1))      :: ZSUMPATCH
00082 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00083 !
00084 !-------------------------------------------------------------------------------
00085 !
00086 !       0.     Initialization
00087 !              --------------
00088 !
00089 IF (LHOOK) CALL DR_HOOK('AVERAGE_DIAG_ISBA_N',0,ZHOOK_HANDLE)
00090 ZSUMPATCH(:) = 0.
00091 DO JPATCH=1,SIZE(XPATCH,2)
00092   ZSUMPATCH(:) = ZSUMPATCH(:) + XPATCH(:,JPATCH)
00093 END DO
00094 !
00095 !       1.     Energy fluxes
00096 !              -------------
00097 !
00098 IF (LSURF_BUDGET) THEN
00099   XAVG_RN(:)     = 0.
00100   XAVG_H (:)     = 0.
00101   XAVG_LE(:)     = 0.
00102   XAVG_LEI(:)    = 0.
00103   XAVG_GFLUX(:)  = 0.
00104   XAVG_SWD(:)    = 0.
00105   XAVG_SWU(:)    = 0.
00106   XAVG_LWD(:)    = 0.
00107   XAVG_LWU(:)    = 0.
00108   XAVG_FMU(:)    = 0.
00109   XAVG_FMV(:)    = 0.
00110   XAVG_SWBD(:,:) = 0.
00111   XAVG_SWBU(:,:) = 0.
00112   !
00113   DO JPATCH=1,SIZE(XPATCH,2)
00114     WHERE (ZSUMPATCH(:) > 0.)
00115 !
00116 ! Net radiation
00117 !
00118       XAVG_RN(:)  = XAVG_RN(:) +XPATCH(:,JPATCH) * XRN(:,JPATCH)
00119 !
00120 ! Sensible heat flux
00121 !
00122       XAVG_H (:)  = XAVG_H (:) +XPATCH(:,JPATCH) * XH (:,JPATCH)
00123 !
00124 ! Total latent heat flux
00125 !
00126       XAVG_LE(:)  = XAVG_LE(:) +XPATCH(:,JPATCH) * XLE(:,JPATCH)
00127 !
00128 ! Sublimation latent heat flux
00129 !
00130       XAVG_LEI(:) = XAVG_LEI(:) +XPATCH(:,JPATCH) * XLEI(:,JPATCH)
00131 !
00132 ! Storage flux
00133 !
00134       XAVG_GFLUX(:)  = XAVG_GFLUX(:) +XPATCH(:,JPATCH) * XGFLUX(:,JPATCH)
00135 !
00136 ! Downwards SW radiation
00137 !
00138       XAVG_SWD(:)  = XAVG_SWD(:) +XPATCH(:,JPATCH) * XSWD(:,JPATCH)
00139 !
00140 ! Upwards SW radiation
00141 !
00142       XAVG_SWU(:)  = XAVG_SWU(:) +XPATCH(:,JPATCH) * XSWU(:,JPATCH)
00143 !
00144 ! Downwards LW radiation
00145 !
00146       XAVG_LWD(:)  = XAVG_LWD(:) +XPATCH(:,JPATCH) * XLWD(:,JPATCH)
00147 !
00148 ! Upwards LW radiation
00149 !
00150       XAVG_LWU(:)  = XAVG_LWU(:) +XPATCH(:,JPATCH) * XLWU(:,JPATCH)
00151 !
00152 ! Zonal wind stress
00153 !
00154       XAVG_FMU(:)  = XAVG_FMU(:) +XPATCH(:,JPATCH) * XFMU(:,JPATCH)
00155 !
00156 ! Meridian wind stress
00157 !
00158       XAVG_FMV(:)  = XAVG_FMV(:) +XPATCH(:,JPATCH) * XFMV(:,JPATCH)
00159 !
00160     END WHERE
00161   END DO
00162 !
00163   DO JPATCH=1,SIZE(XPATCH,2)
00164     DO JSWB=1,SIZE(XSWBD,2)
00165       WHERE (ZSUMPATCH(:) > 0.)
00166 !
00167 ! Downwards SW radiation for each spectral band
00168 !
00169         XAVG_SWBD(:,JSWB)  = XAVG_SWBD(:,JSWB) +XPATCH(:,JPATCH) * XSWBD(:,JSWB,JPATCH)
00170 !
00171 ! Upwards SW radiation for each spectral band
00172 !
00173         XAVG_SWBU(:,JSWB)  = XAVG_SWBU(:,JSWB) +XPATCH(:,JPATCH) * XSWBU(:,JSWB,JPATCH)
00174 !
00175       END WHERE
00176     END DO
00177   END DO
00178 END IF
00179 !
00180 IF (LSURF_BUDGETC) THEN
00181    XAVG_SWDC(:) = 0.
00182    XAVG_SWUC(:) = 0.
00183    XAVG_LWDC(:) = 0.
00184    XAVG_LWUC(:) = 0.
00185    XAVG_FMUC(:) = 0.
00186    XAVG_FMVC(:) = 0.
00187    DO JPATCH=1,SIZE(XPATCH,2)
00188       WHERE (ZSUMPATCH(:) > 0.)
00189 !
00190 !        Downwards SW radiation
00191 !
00192          XAVG_SWDC(:) = XAVG_SWDC(:) + XPATCH(:,JPATCH) * XSWDC(:,JPATCH)
00193 !
00194 !        Upwards SW radiation
00195 !
00196          XAVG_SWUC(:) = XAVG_SWUC(:) + XPATCH(:,JPATCH) * XSWUC(:,JPATCH)
00197 !
00198 !        Downwards LW radiation
00199 !
00200          XAVG_LWDC(:) = XAVG_LWDC(:) + XPATCH(:,JPATCH) * XLWDC(:,JPATCH)
00201 !
00202 !        Upwards LW radiation
00203 !
00204          XAVG_LWUC(:) = XAVG_LWUC(:) + XPATCH(:,JPATCH) * XLWUC(:,JPATCH)
00205 !
00206 !        Zonal wind stress
00207 !
00208          XAVG_FMUC(:) = XAVG_FMUC(:) + XPATCH(:,JPATCH) * XFMUC(:,JPATCH)
00209 !
00210 !        Meridian wind stress
00211 !
00212          XAVG_FMVC(:) = XAVG_FMVC(:) + XPATCH(:,JPATCH) * XFMVC(:,JPATCH)
00213 !
00214     END WHERE
00215   END DO
00216 ENDIF    
00217 !
00218 !
00219 !       2.     surface temperature and 2 meters parameters
00220 !              -------------------------------------------
00221 !
00222 XAVG_TS(:) = 0.0
00223 DO JPATCH=1,SIZE(XPATCH,2)
00224     WHERE (ZSUMPATCH(:) > 0.)
00225        XAVG_TS(:)  = XAVG_TS(:) + XPATCH(:,JPATCH) * XTS(:,JPATCH)
00226     END WHERE
00227 END DO
00228 XAVG_TSRAD(:) = 0.0
00229 DO JPATCH=1,SIZE(XPATCH,2)
00230     WHERE (ZSUMPATCH(:) > 0.)
00231        XAVG_TSRAD(:)  = XAVG_TSRAD(:) + XPATCH(:,JPATCH) * XTSRAD(:,JPATCH)
00232     END WHERE
00233 END DO
00234 
00235 !
00236 IF (N2M>=1) THEN
00237 
00238   XAVG_T2M(:)  = 0.
00239   XAVG_Q2M(:)  = 0.
00240   XAVG_HU2M(:)  = 0.
00241   XAVG_RI(:)  = 0.
00242   !
00243   XAVG_SFCO2(:)  = PSFCO2(:)
00244   !
00245   DO JPATCH=1,SIZE(XPATCH,2)
00246     WHERE (ZSUMPATCH(:) > 0.)
00247 !
00248 ! 2 meters temperature
00249 !
00250       XAVG_T2M(:)  = XAVG_T2M(:) + XPATCH(:,JPATCH) * XT2M(:,JPATCH)
00251 !
00252 ! 2 meters humidity
00253 !
00254       XAVG_Q2M(:)  = XAVG_Q2M(:) + XPATCH(:,JPATCH) * XQ2M(:,JPATCH)
00255 !
00256 ! 2 meters relative humidity
00257 !
00258       XAVG_HU2M(:)  = XAVG_HU2M(:) + XPATCH(:,JPATCH) * XHU2M(:,JPATCH)
00259 !
00260 ! Richardson number
00261 !
00262       XAVG_RI(:)  = XAVG_RI(:) + XPATCH(:,JPATCH) * XRI(:,JPATCH)
00263 !
00264     END WHERE
00265   END DO
00266 !
00267 ! 10 meters wind
00268 !
00269   WHERE(PHW(:)>=10.) 
00270     XAVG_ZON10M (:)  = 0.
00271     XAVG_MER10M (:)  = 0.
00272     XAVG_WIND10M(:)  = 0.
00273   ELSEWHERE
00274     XAVG_ZON10M (:)  = XUNDEF
00275     XAVG_MER10M (:)  = XUNDEF
00276     XAVG_WIND10M(:)  = XUNDEF
00277   END WHERE
00278   DO JPATCH=1,SIZE(XPATCH,2)
00279     WHERE (ZSUMPATCH(:) > 0. .AND. PHW(:)>=10.)
00280       XAVG_ZON10M(:)  = XAVG_ZON10M (:) + XPATCH(:,JPATCH) * XZON10M (:,JPATCH)
00281       XAVG_MER10M(:)  = XAVG_MER10M (:) + XPATCH(:,JPATCH) * XMER10M (:,JPATCH)
00282       XAVG_WIND10M(:) = XAVG_WIND10M(:) + XPATCH(:,JPATCH) * XWIND10M(:,JPATCH)
00283     END WHERE
00284   ENDDO
00285 !
00286   XAVG_T2M_MIN(:) = MIN(XAVG_T2M_MIN(:),XAVG_T2M(:))
00287   XAVG_T2M_MAX(:) = MAX(XAVG_T2M_MAX(:),XAVG_T2M(:))
00288 !
00289   XAVG_HU2M_MIN(:) = MIN(XAVG_HU2M_MIN(:),XAVG_HU2M(:))
00290   XAVG_HU2M_MAX(:) = MAX(XAVG_HU2M_MAX(:),XAVG_HU2M(:))
00291 !
00292   XAVG_WIND10M_MAX(:) = MAX(XAVG_WIND10M_MAX(:),XAVG_WIND10M(:))
00293 !
00294 END IF
00295 !
00296 !
00297 !       3.     Transfer coefficients
00298 !              ---------------------
00299 !
00300 IF (LCOEF) THEN
00301   !
00302   XAVG_CD   (:) = 0.
00303   XAVG_CH   (:) = 0.
00304   XAVG_CE   (:) = 0.
00305   XAVG_Z0   (:) = 0.
00306   XAVG_Z0H  (:) = 0.
00307   XAVG_Z0EFF(:) = 0.
00308   !
00309   DO JPATCH=1,SIZE(XPATCH,2)
00310     WHERE (ZSUMPATCH(:) > 0.)
00311       !
00312       XAVG_CD(:)  = XAVG_CD(:) + XPATCH(:,JPATCH) * XCD(:,JPATCH)
00313       !
00314       XAVG_CH(:)  = XAVG_CH(:) + XPATCH(:,JPATCH) * XCH(:,JPATCH)
00315       !
00316       XAVG_CE(:)  = XAVG_CE(:) + XPATCH(:,JPATCH) * XCE(:,JPATCH)
00317       !
00318       !             
00319       XAVG_Z0(:)    = XAVG_Z0(:)    + XPATCH(:,JPATCH) * 1./(LOG(PHW(:)/XZ0_WITH_SNOW (:,JPATCH)))**2
00320       !      
00321       XAVG_Z0H(:)   = XAVG_Z0H(:)   + XPATCH(:,JPATCH) * 1./(LOG(PHT(:)/XZ0H_WITH_SNOW(:,JPATCH)))**2
00322       !      
00323       XAVG_Z0EFF(:) = XAVG_Z0EFF(:) + XPATCH(:,JPATCH) * 1./(LOG(PHW(:)/XZ0EFF        (:,JPATCH)))**2
00324       !      
00325     END WHERE
00326   END DO
00327   !
00328   XAVG_Z0(:)    = PHW(:) *  EXP( - SQRT(1./XAVG_Z0(:)) )
00329   !
00330   XAVG_Z0H(:)   = PHT(:) *  EXP( - SQRT(1./XAVG_Z0H(:)) )
00331   !
00332   XAVG_Z0EFF(:) = PHW(:) *  EXP( - SQRT(1./XAVG_Z0EFF(:)) )
00333   !
00334 END IF
00335 !
00336 IF (LSURF_VARS) THEN
00337   XAVG_QS(:)  = 0.
00338   !
00339   DO JPATCH=1,SIZE(XPATCH,2)
00340     WHERE (ZSUMPATCH(:) > 0.)
00341 !
00342 ! specific humidity at surface
00343 !
00344       XAVG_QS(:)  = XAVG_QS(:) + XPATCH(:,JPATCH) * XQS(:,JPATCH)
00345 !
00346     END WHERE
00347   END DO
00348 END IF
00349 !
00350 IF (LHOOK) CALL DR_HOOK('AVERAGE_DIAG_ISBA_N',1,ZHOOK_HANDLE)
00351 !-------------------------------------------------------------------------------
00352 !
00353 END SUBROUTINE AVERAGE_DIAG_ISBA_n