SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/unpack_diag_patchn.F90
Go to the documentation of this file.
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