SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE UNPACK_DIAG_PATCH_n(KMASK,KSIZE,KNPATCH,KPATCH, & 00003 PCPL_DRAIN,PCPL_RUNOFF, & 00004 PCPL_EFLOOD,PCPL_PFLOOD, & 00005 PCPL_IFLOOD,PCPL_ICEFLUX ) 00006 !############################################## 00007 ! 00008 !!**** *UNPACK_DIAG_PATCH_n* - unpacks ISBA diagnostics 00009 !! 00010 !! PURPOSE 00011 !! ------- 00012 ! 00013 !!** METHOD 00014 !! ------ 00015 !! 00016 !! REFERENCE 00017 !! --------- 00018 !! 00019 !! 00020 !! AUTHOR 00021 !! ------ 00022 !! V. Masson 00023 !! 00024 !! MODIFICATIONS 00025 !! ------------- 00026 !! Original 01/2004 00027 !! Modified 10/2004 by P. Le Moigne: Halstead coefficient 00028 !! Modified 10/2005 by P. Le Moigne: Deallocation (EBA) 00029 !! Modified 05/2008 by B. Decharme : Flooding scheme 00030 !! Modified 01/2010 by B. Decharme : new diag 00031 !! Modified 04-09 by A.L. Gibelin : Add carbon diagnostics 00032 !! Modified 05-09 by A.L. Gibelin : Add carbon spinup 00033 !! Modified 08/2012 by B. Decharme : optimization 00034 !! 00035 !!------------------------------------------------------------------ 00036 ! 00037 USE MODD_PACK_ISBA, ONLY : XP_LVTT, XP_LSTT 00038 USE MODD_PACK_DIAG_ISBA, ONLY : XP_RNSNOW, XP_HSNOW, XP_HPSNOW, XP_SMELTFLUX, & 00039 XP_GFLUXSNOW, XP_USTARSNOW, & 00040 XP_GRNDFLUX, XP_SRSFC, XP_RRSFC, XP_LESL, & 00041 XP_CDSNOW, XP_CHSNOW, XP_SNOWTEMP, & 00042 XP_SNOWLIQ, XP_SNOWDZ, XP_SNOWHMASS, & 00043 XP_RN_ISBA, XP_H_ISBA, XP_LEG_ISBA, & 00044 XP_LEGI_ISBA, XP_LEV_ISBA, XP_LETR_ISBA, & 00045 XP_USTAR_ISBA, XP_LER_ISBA, & 00046 XP_LE_ISBA, XP_GFLUX_ISBA, XP_MELTADV, & 00047 XP_LEI_ISBA, XP_IACAN, XP_LEI, & 00048 XP_CH, XP_CD, XP_CDN, XP_RI, XP_HU, XP_HUG, & 00049 XP_RN, XP_H, XP_LEG, XP_LEGI, XP_LEV, & 00050 XP_LES, XP_LER, XP_LETR, XP_EVAP, XP_GFLUX, & 00051 XP_RESTORE, XP_DRAIN, XP_RUNOFF, XP_MELT, & 00052 XP_SNOWFREE_ALB, XP_Z0_WITH_SNOW, & 00053 XP_Z0H_WITH_SNOW, XP_Z0EFF, & 00054 XP_CG, XP_C1, XP_C2, XP_WGEQ, XP_CT, XP_RS, & 00055 XP_T2M, XP_Q2M, XP_HU2M, XP_TS, XP_TSRAD, & 00056 XP_ZON10M, XP_MER10M, XP_HV, & 00057 XP_SNOWFREE_ALB_VEG, XP_SNOWFREE_ALB_SOIL, & 00058 XP_SWI, XP_TSWI, XP_QS, XP_CE, & 00059 XP_TWSNOW, XP_TDSNOW, & 00060 XP_SWD, XP_SWU, XP_SWBD, XP_SWBU, & 00061 XP_LWD, XP_LWU, XP_FMU, XP_FMV, XP_HORT, & 00062 XP_DRIP, XP_ALBT, XP_IFLOOD, XP_PFLOOD, & 00063 XP_LE_FLOOD, XP_LEI_FLOOD, XP_ICEFLUX, & 00064 XP_RRVEG, XP_GPP, XP_RESP_AUTO, XP_RESP_ECO, & 00065 XP_FAPAR, XP_FAPIR, XP_FAPAR_BS, XP_FAPIR_BS, & 00066 XP_IRRIG_FLUX,XP_DWG,XP_DWGI,XP_DSWE, & 00067 XP_WATBUD, & 00068 XBLOCK_SIMPLE, XBLOCK_GROUND, XBLOCK_SNOW, & 00069 XBLOCK_KSW, XBLOCK_ABC, XBLOCK_0, XBLOCK_00 00070 ! 00071 USE MODD_DIAG_ISBA_n, ONLY : N2M, LSURF_BUDGET, LCOEF, LSURF_VARS, & 00072 XRN, XH, XLEI, XGFLUX, XRI, XCD, XCH, XCE, & 00073 XT2M, XQ2M, XHU2M, XZON10M, XMER10M, & 00074 XZ0_WITH_SNOW, XZ0H_WITH_SNOW, XZ0EFF, XQS, & 00075 XSWD, XSWU, XSWBD, XSWBU, XLWD, XLWU, & 00076 XFMU, XFMV, XTS, XTSRAD, XWIND10M 00077 ! 00078 USE MODD_GR_BIOG_n, ONLY : XIACAN 00079 ! 00080 USE MODD_ISBA_n, ONLY : CPHOTO, LTRIP, LFLOOD, TSNOW, LGLACIER 00081 ! 00082 ! 00083 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00084 USE PARKIND1 ,ONLY : JPRB 00085 ! 00086 IMPLICIT NONE 00087 ! 00088 INTEGER, INTENT(IN) :: KSIZE, KPATCH, KNPATCH 00089 INTEGER, DIMENSION(:), INTENT(IN) :: KMASK 00090 ! 00091 !Coupling variable 00092 REAL, DIMENSION(:,:), INTENT(OUT) :: PCPL_DRAIN 00093 REAL, DIMENSION(:,:), INTENT(OUT) :: PCPL_RUNOFF 00094 REAL, DIMENSION(:,:), INTENT(OUT) :: PCPL_EFLOOD 00095 REAL, DIMENSION(:,:), INTENT(OUT) :: PCPL_PFLOOD 00096 REAL, DIMENSION(:,:), INTENT(OUT) :: PCPL_IFLOOD 00097 REAL, DIMENSION(:,:), INTENT(OUT) :: PCPL_ICEFLUX 00098 ! 00099 INTEGER :: JJ, JI, JSW 00100 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00101 ! 00102 !------------------------------------------------------------------------ 00103 IF (LHOOK) CALL DR_HOOK('UNPACK_DIAG_PATCH_N',0,ZHOOK_HANDLE) 00104 ! 00105 IF (KNPATCH==1) THEN 00106 ! 00107 XTS(:, KPATCH) = XP_TS(:) 00108 XTSRAD(:, KPATCH) = XP_TSRAD(:) 00109 IF (N2M>=1) THEN 00110 XT2M (:, KPATCH) = XP_T2M (:) 00111 XQ2M (:, KPATCH) = XP_Q2M (:) 00112 XHU2M (:, KPATCH) = XP_HU2M (:) 00113 XZON10M (:, KPATCH) = XP_ZON10M (:) 00114 XMER10M (:, KPATCH) = XP_MER10M (:) 00115 XRI (:, KPATCH) = XP_RI (:) 00116 ! 00117 XWIND10M(:, KPATCH) = SQRT(XP_ZON10M(:)**2+XP_MER10M(:)**2) 00118 ! 00119 END IF 00120 ! 00121 IF (LSURF_BUDGET) THEN 00122 XRN (:, KPATCH) = XP_RN (:) 00123 XH (:, KPATCH) = XP_H (:) 00124 XGFLUX (:, KPATCH) = XP_GFLUX (:) 00125 XLEI (:, KPATCH) = XP_LEI (:) 00126 XSWD (:, KPATCH) = XP_SWD (:) 00127 XSWU (:, KPATCH) = XP_SWU (:) 00128 XLWD (:, KPATCH) = XP_LWD (:) 00129 XLWU (:, KPATCH) = XP_LWU (:) 00130 XFMU (:, KPATCH) = XP_FMU (:) 00131 XFMV (:, KPATCH) = XP_FMV (:) 00132 ! 00133 XSWBD (:, :, KPATCH) = XP_SWBD (:,:) 00134 XSWBU (:, :, KPATCH) = XP_SWBU (:,:) 00135 ! 00136 END IF 00137 ! 00138 IF (LCOEF) THEN 00139 XCD (:, KPATCH) = XP_CD (:) 00140 XCH (:, KPATCH) = XP_CH (:) 00141 XCE (:, KPATCH) = XP_CE (:) 00142 XZ0_WITH_SNOW (:, KPATCH) = XP_Z0_WITH_SNOW (:) 00143 XZ0H_WITH_SNOW (:, KPATCH) = XP_Z0H_WITH_SNOW (:) 00144 XZ0EFF (:, KPATCH) = XP_Z0EFF (:) 00145 END IF 00146 ! 00147 IF (LSURF_VARS) THEN 00148 XQS (:, KPATCH) = XP_QS (:) 00149 END IF 00150 ! 00151 IF (LTRIP) THEN 00152 PCPL_DRAIN (:, KPATCH) = XP_DRAIN (:) 00153 PCPL_RUNOFF (:, KPATCH) = XP_RUNOFF (:) 00154 END IF 00155 ! 00156 IF (LFLOOD) THEN 00157 PCPL_EFLOOD (:, KPATCH) = XP_LE_FLOOD(:) / XP_LVTT(:) + XP_LEI_FLOOD(:) / XP_LSTT(:) 00158 PCPL_PFLOOD (:, KPATCH) = XP_PFLOOD (:) 00159 PCPL_IFLOOD (:, KPATCH) = XP_IFLOOD (:) 00160 END IF 00161 ! 00162 IF(LGLACIER)THEN 00163 PCPL_ICEFLUX (:, KPATCH) = XP_ICEFLUX (:) 00164 ENDIF 00165 ! 00166 IF(TSNOW%SCHEME=='3-L' .OR. TSNOW%SCHEME=='CRO')THEN 00167 TSNOW%TEMP(:,:,KPATCH) = XP_SNOWTEMP(:,:) 00168 TSNOW%TS (:,KPATCH) = XP_SNOWTEMP(:,1) 00169 ENDIF 00170 ! 00171 IF (CPHOTO/='NON') THEN 00172 XIACAN(:,:,KPATCH) = XP_IACAN(:,:) 00173 ENDIF 00174 ! 00175 ELSE 00176 ! 00177 DO JJ=1,KSIZE 00178 JI = KMASK (JJ) 00179 XTS (JI, KPATCH) = XP_TS (JJ) 00180 XTSRAD (JI, KPATCH) = XP_TSRAD (JJ) 00181 END DO 00182 IF (N2M>=1) THEN 00183 DO JJ=1,KSIZE 00184 JI = KMASK (JJ) 00185 XT2M (JI, KPATCH) = XP_T2M (JJ) 00186 XQ2M (JI, KPATCH) = XP_Q2M (JJ) 00187 XHU2M (JI, KPATCH) = XP_HU2M (JJ) 00188 XZON10M (JI, KPATCH) = XP_ZON10M (JJ) 00189 XMER10M (JI, KPATCH) = XP_MER10M (JJ) 00190 XRI (JI, KPATCH) = XP_RI (JJ) 00191 ! 00192 XWIND10M(JI, KPATCH) = SQRT(XP_ZON10M(JJ)**2+XP_MER10M(JJ)**2) 00193 ! 00194 END DO 00195 END IF 00196 ! 00197 IF (LSURF_BUDGET) THEN 00198 DO JJ=1,KSIZE 00199 JI = KMASK (JJ) 00200 XRN (JI, KPATCH) = XP_RN (JJ) 00201 XH (JI, KPATCH) = XP_H (JJ) 00202 XGFLUX (JI, KPATCH) = XP_GFLUX (JJ) 00203 XLEI (JI, KPATCH) = XP_LEI (JJ) 00204 XSWD (JI, KPATCH) = XP_SWD (JJ) 00205 XSWU (JI, KPATCH) = XP_SWU (JJ) 00206 XLWD (JI, KPATCH) = XP_LWD (JJ) 00207 XLWU (JI, KPATCH) = XP_LWU (JJ) 00208 XFMU (JI, KPATCH) = XP_FMU (JJ) 00209 XFMV (JI, KPATCH) = XP_FMV (JJ) 00210 ! 00211 DO JSW=1,SIZE(XSWBD,2) 00212 XSWBD (JI, JSW, KPATCH) = XP_SWBD (JJ,JSW) 00213 XSWBU (JI, JSW, KPATCH) = XP_SWBU (JJ,JSW) 00214 END DO 00215 ! 00216 END DO 00217 END IF 00218 ! 00219 IF (LCOEF) THEN 00220 DO JJ=1,KSIZE 00221 JI = KMASK (JJ) 00222 XCD (JI, KPATCH) = XP_CD (JJ) 00223 XCH (JI, KPATCH) = XP_CH (JJ) 00224 XCE (JI, KPATCH) = XP_CE (JJ) 00225 XZ0_WITH_SNOW (JI, KPATCH) = XP_Z0_WITH_SNOW (JJ) 00226 XZ0H_WITH_SNOW (JI, KPATCH) = XP_Z0H_WITH_SNOW (JJ) 00227 XZ0EFF (JI, KPATCH) = XP_Z0EFF (JJ) 00228 END DO 00229 END IF 00230 ! 00231 IF (LSURF_VARS) THEN 00232 DO JJ=1,KSIZE 00233 JI = KMASK (JJ) 00234 XQS (JI, KPATCH) = XP_QS (JJ) 00235 END DO 00236 END IF 00237 ! 00238 IF (LTRIP) THEN 00239 DO JJ=1,KSIZE 00240 JI = KMASK (JJ) 00241 PCPL_DRAIN (JI, KPATCH) = XP_DRAIN (JJ) 00242 PCPL_RUNOFF (JI, KPATCH) = XP_RUNOFF (JJ) 00243 END DO 00244 END IF 00245 ! 00246 IF (LFLOOD) THEN 00247 DO JJ=1,KSIZE 00248 JI = KMASK (JJ) 00249 PCPL_EFLOOD (JI, KPATCH) = XP_LE_FLOOD(JJ) / XP_LVTT(JJ) + XP_LEI_FLOOD(JJ) / XP_LSTT(JJ) 00250 PCPL_PFLOOD (JI, KPATCH) = XP_PFLOOD (JJ) 00251 PCPL_IFLOOD (JI, KPATCH) = XP_IFLOOD (JJ) 00252 END DO 00253 END IF 00254 ! 00255 IF(LGLACIER)THEN 00256 DO JJ=1,KSIZE 00257 JI = KMASK (JJ) 00258 PCPL_ICEFLUX (JI, KPATCH) = XP_ICEFLUX (JJ) 00259 END DO 00260 ENDIF 00261 ! 00262 IF(TSNOW%SCHEME=='3-L' .OR. TSNOW%SCHEME=='CRO')THEN 00263 DO JJ=1,KSIZE 00264 JI = KMASK (JJ) 00265 TSNOW%TS (JI,KPATCH) = XP_SNOWTEMP(JJ,1) 00266 DO JSW=1,SIZE(TSNOW%TEMP,2) 00267 TSNOW%TEMP(JI,JSW,KPATCH) = XP_SNOWTEMP(JJ,JSW) 00268 ENDDO 00269 ENDDO 00270 ENDIF 00271 ! 00272 IF (CPHOTO/='NON') THEN 00273 DO JJ=1,KSIZE 00274 JI = KMASK (JJ) 00275 DO JSW=1,SIZE(XIACAN,2) 00276 XIACAN(JI,JSW,KPATCH) = XP_IACAN(JJ,JSW) 00277 ENDDO 00278 ENDDO 00279 ENDIF 00280 ! 00281 ENDIF 00282 ! 00283 !------------------------------------------------------------------------ 00284 ! 00285 XP_CH => NULL() 00286 XP_CE => NULL() 00287 XP_CD => NULL() 00288 XP_CDN => NULL() 00289 XP_RI => NULL() 00290 XP_HU => NULL() 00291 XP_HUG => NULL() 00292 XP_ALBT => NULL() 00293 XP_RN => NULL() 00294 XP_H => NULL() 00295 XP_LEI => NULL() 00296 XP_LEG => NULL() 00297 XP_LEGI => NULL() 00298 XP_LEV => NULL() 00299 XP_LES => NULL() 00300 XP_LER => NULL() 00301 XP_LETR => NULL() 00302 XP_GFLUX => NULL() 00303 XP_EVAP => NULL() 00304 XP_RESTORE => NULL() 00305 XP_DRAIN => NULL() 00306 XP_RUNOFF => NULL() 00307 XP_MELT => NULL() 00308 XP_MELTADV => NULL() 00309 XP_SRSFC => NULL() 00310 XP_RRSFC => NULL() 00311 XP_SNOWFREE_ALB => NULL() 00312 ! 00313 XP_HORT => NULL() 00314 XP_DRIP => NULL() 00315 XP_RRVEG => NULL() 00316 XP_IRRIG_FLUX => NULL() 00317 ! 00318 XP_SWBD => NULL() 00319 XP_SWBU => NULL() 00320 ! 00321 XP_SWD => NULL() 00322 XP_SWU => NULL() 00323 XP_LWD => NULL() 00324 XP_LWU => NULL() 00325 XP_FMU => NULL() 00326 XP_FMV => NULL() 00327 ! 00328 XP_Z0_WITH_SNOW => NULL() 00329 XP_Z0H_WITH_SNOW=> NULL() 00330 XP_Z0EFF => NULL() 00331 ! 00332 XP_CG => NULL() 00333 XP_C1 => NULL() 00334 XP_C2 => NULL() 00335 XP_WGEQ => NULL() 00336 XP_CT => NULL() 00337 XP_RS => NULL() 00338 XP_HV => NULL() 00339 XP_QS => NULL() 00340 ! 00341 XP_TS => NULL() 00342 XP_TSRAD => NULL() 00343 ! 00344 XP_RESP_AUTO => NULL() 00345 XP_RESP_ECO => NULL() 00346 XP_GPP => NULL() 00347 XP_FAPAR => NULL() 00348 XP_FAPIR => NULL() 00349 XP_FAPAR_BS => NULL() 00350 XP_FAPIR_BS => NULL() 00351 ! 00352 XP_IFLOOD => NULL() 00353 XP_PFLOOD => NULL() 00354 XP_LE_FLOOD => NULL() 00355 XP_LEI_FLOOD => NULL() 00356 ! 00357 XP_RNSNOW => NULL() 00358 XP_HSNOW => NULL() 00359 XP_HPSNOW => NULL() 00360 XP_SMELTFLUX => NULL() 00361 XP_GFLUXSNOW => NULL() 00362 XP_USTARSNOW => NULL() 00363 XP_GRNDFLUX => NULL() 00364 XP_LESL => NULL() 00365 XP_CDSNOW => NULL() 00366 XP_CHSNOW => NULL() 00367 XP_SNOWHMASS => NULL() 00368 XP_RN_ISBA => NULL() 00369 XP_H_ISBA => NULL() 00370 XP_LEG_ISBA => NULL() 00371 XP_LEGI_ISBA => NULL() 00372 XP_LEV_ISBA => NULL() 00373 XP_LETR_ISBA => NULL() 00374 XP_USTAR_ISBA => NULL() 00375 XP_LER_ISBA => NULL() 00376 XP_LE_ISBA => NULL() 00377 XP_LEI_ISBA => NULL() 00378 XP_GFLUX_ISBA => NULL() 00379 XP_SNOWLIQ => NULL() 00380 XP_SNOWDZ => NULL() 00381 ! 00382 XP_SNOWTEMP => NULL() 00383 ! 00384 XP_SNOWFREE_ALB_VEG=> NULL() 00385 XP_SNOWFREE_ALB_SOIL=> NULL() 00386 ! 00387 XP_IACAN => NULL() 00388 ! 00389 XP_T2M => NULL() 00390 XP_Q2M => NULL() 00391 XP_HU2M => NULL() 00392 XP_ZON10M => NULL() 00393 XP_MER10M => NULL() 00394 ! 00395 XP_SWI => NULL() 00396 XP_TSWI => NULL() 00397 XP_TWSNOW => NULL() 00398 XP_TDSNOW => NULL() 00399 ! 00400 XP_ICEFLUX => NULL() 00401 ! 00402 XP_DWG => NULL() 00403 XP_DWGI => NULL() 00404 XP_DSWE => NULL() 00405 XP_WATBUD => NULL() 00406 ! 00407 DEALLOCATE(XBLOCK_SIMPLE) 00408 DEALLOCATE(XBLOCK_GROUND) 00409 DEALLOCATE(XBLOCK_SNOW) 00410 DEALLOCATE(XBLOCK_KSW) 00411 DEALLOCATE(XBLOCK_ABC) 00412 DEALLOCATE(XBLOCK_0) 00413 DEALLOCATE(XBLOCK_00) 00414 ! 00415 IF (LHOOK) CALL DR_HOOK('UNPACK_DIAG_PATCH_N',1,ZHOOK_HANDLE) 00416 !------------------------------------------------------------------------ 00417 ! 00418 END SUBROUTINE UNPACK_DIAG_PATCH_n