SURFEX v7.3
General documentation of Surfex
|
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