SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/diag_cpl_esm_isba.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE DIAG_CPL_ESM_ISBA(PTSTEP,PCPL_DRAIN,PCPL_RUNOFF,PCPL_EFLOOD, &
00003                                      PCPL_PFLOOD,PCPL_IFLOOD,PCPL_ICEFLUX         )  
00004 !     #####################################################################
00005 !
00006 !!****  *DIAG_CPL_ESM_ISBA*  
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !         
00011 !     
00012 !!**  METHOD
00013 !!    ------
00014 !
00015 !!    EXTERNAL
00016 !!    --------
00017 !!
00018 !!    none
00019 !!
00020 !!    IMPLICIT ARGUMENTS
00021 !!    ------------------ 
00022 !!
00023 !!      
00024 !!    REFERENCE
00025 !!    ---------
00026 !!
00027 !!      
00028 !!    AUTHOR
00029 !!    ------
00030 !!
00031 !!      B. Decharme           * Meteo-France *
00032 !!
00033 !!    MODIFICATIONS
00034 !!    -------------
00035 !!
00036 !-------------------------------------------------------------------------------
00037 !
00038 !*       0.     DECLARATIONS
00039 !               ------------
00040 !
00041 USE MODD_CSTS,        ONLY : XLVTT, XRHOLW
00042 USE MODD_ISBA_GRID_n, ONLY : XMESH_SIZE
00043 USE MODD_ISBA_n,      ONLY : XPATCH, XCPL_EFLOOD, XCPL_PFLOOD,     &
00044                                XCPL_IFLOOD, XCPL_DRAIN, XCPL_RUNOFF, &
00045                                XFFLOOD, XPIFLOOD, XTSTEP_COUPLING,   &
00046                                XCPL_ICEFLUX, LFLOOD, LGLACIER  
00047 !
00048 !
00049 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00050 USE PARKIND1  ,ONLY : JPRB
00051 !
00052 IMPLICIT NONE
00053 !
00054 !*      0.1    declarations of arguments
00055 !
00056 REAL, INTENT(IN)                   :: PTSTEP
00057 REAL, DIMENSION(:,:), INTENT(IN)   :: PCPL_DRAIN
00058 REAL, DIMENSION(:,:), INTENT(IN)   :: PCPL_RUNOFF
00059 REAL, DIMENSION(:,:), INTENT(IN)   :: PCPL_EFLOOD
00060 REAL, DIMENSION(:,:), INTENT(IN)   :: PCPL_PFLOOD
00061 REAL, DIMENSION(:,:), INTENT(IN)   :: PCPL_IFLOOD
00062 REAL, DIMENSION(:,:), INTENT(IN)   :: PCPL_ICEFLUX
00063 !
00064 !*      0.2    declarations of local variables
00065 !
00066 INTEGER :: JPATCH ! tile loop counter
00067 REAL, DIMENSION(SIZE(XPATCH,1)) :: ZSUMPATCH
00068 REAL, DIMENSION(SIZE(XPATCH,1)) :: ZBUDGET
00069 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00070 !
00071 !-------------------------------------------------------------------------------
00072 ! Initialize and allocate local variable
00073 !-------------------------------------------------------------------------------
00074 !
00075 IF (LHOOK) CALL DR_HOOK('DIAG_CPL_ESM_ISBA',0,ZHOOK_HANDLE)
00076 ZSUMPATCH(:) = 0.
00077 DO JPATCH=1,SIZE(XPATCH,2)
00078   ZSUMPATCH(:) = ZSUMPATCH(:) + XPATCH(:,JPATCH)
00079 END DO
00080 !
00081 !* update ISBA - TRIP or NEMO coupling variable
00082 !  ------------------------------------
00083 !
00084 !kg/mē
00085 DO JPATCH=1,SIZE(XPATCH,2)
00086    WHERE (ZSUMPATCH(:) > 0.)
00087          XCPL_DRAIN (:) = XCPL_DRAIN (:) + PTSTEP * MAX(PCPL_DRAIN (:,JPATCH),0.0) * XPATCH(:,JPATCH)/ZSUMPATCH(:) 
00088          XCPL_RUNOFF(:) = XCPL_RUNOFF(:) + PTSTEP * MAX(PCPL_RUNOFF(:,JPATCH),0.0) * XPATCH(:,JPATCH)/ZSUMPATCH(:) 
00089    END WHERE
00090 END DO
00091 !
00092 !kg/mē
00093 IF(LGLACIER)THEN
00094   DO JPATCH=1,SIZE(XPATCH,2)
00095      WHERE (ZSUMPATCH(:) > 0.)
00096            XCPL_ICEFLUX(:) = XCPL_ICEFLUX(:) + PTSTEP * MAX(PCPL_ICEFLUX(:,JPATCH),0.0) * XPATCH(:,JPATCH)/ZSUMPATCH(:)
00097      END WHERE
00098   END DO
00099 ENDIF
00100 !
00101 IF(LFLOOD)THEN
00102 !        
00103 !* update the Floodplains diagnostics for the coupling with TRIP !
00104 !  ---------------------------------------------------------------
00105 !
00106 ! kg/mē
00107   DO JPATCH=1,SIZE(XPATCH,2)
00108      WHERE (ZSUMPATCH(:) > 0.)
00109            XCPL_EFLOOD  (:)  = XCPL_EFLOOD  (:) + PTSTEP * PCPL_EFLOOD  (:,JPATCH)*XPATCH(:,JPATCH)/ZSUMPATCH(:)
00110            XCPL_PFLOOD  (:)  = XCPL_PFLOOD  (:) + PTSTEP * PCPL_PFLOOD  (:,JPATCH)*XPATCH(:,JPATCH)/ZSUMPATCH(:)
00111            XCPL_IFLOOD  (:)  = XCPL_IFLOOD  (:) + PTSTEP * PCPL_IFLOOD  (:,JPATCH)*XPATCH(:,JPATCH)/ZSUMPATCH(:)
00112      END WHERE
00113   END DO
00114 !
00115   ZBUDGET(:)=XPIFLOOD*XTSTEP_COUPLING+(XCPL_PFLOOD(:)-XCPL_IFLOOD(:)-XCPL_EFLOOD(:))
00116   WHERE(ZBUDGET(:)<=0.0)
00117         XPIFLOOD(:)=0.0
00118         XFFLOOD (:)=0.0
00119   ENDWHERE
00120 !
00121 ENDIF
00122 !
00123 IF (LHOOK) CALL DR_HOOK('DIAG_CPL_ESM_ISBA',1,ZHOOK_HANDLE)
00124 !
00125 END SUBROUTINE DIAG_CPL_ESM_ISBA