SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/TOPD/routing.F90
Go to the documentation of this file.
00001 !-------------------------------------------------------------------------------
00002 !     ####################
00003       SUBROUTINE ROUTING(PRO,PDR,KSTEP)
00004 !     ####################
00005 !
00006 !!****  *ROUTING*  
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !     To route the runoff and the exfiltration discharge to the catchment outlet
00011 !         
00012 !     
00013 !!**  METHOD
00014 !!    ------
00015 !
00016 !!    EXTERNAL
00017 !!    --------
00018 !!
00019 !!    none
00020 !!
00021 !!    IMPLICIT ARGUMENTS
00022 !!    ------------------ 
00023 !!
00024 !!
00025 !!      
00026 !!    REFERENCE
00027 !!    ---------
00028 !!
00029 !!    
00030 !!     
00031 !!    AUTHOR
00032 !!    ------
00033 !!
00034 !!      K. Chancibault  * Meteo-France *
00035 !!      G-M. Saulnier  * LTHE *
00036 !!
00037 !!    MODIFICATIONS
00038 !!    -------------
00039 !!
00040 !!      Original   23/11/2005
00041 !!      M. Le Lay     02/2008 Compatibility with the RESTART option (to update the
00042 !!                            discharge between two runs)
00043 !!      Modif B Vincendon 11/2011 : stock managed in thre distinct variables
00044 !-------------------------------------------------------------------------------
00045 !
00046 !*       0.     DECLARATIONS
00047 !               ------------
00048 !
00049 USE MODD_SURF_PAR,        ONLY:XUNDEF
00050 !
00051 USE MODD_TOPODYN, ONLY : XTOPD_STEP, NNCAT, XQTOT, NNMC, &
00052                          XTIME_TOPD, XQB_RUN, XQB_DR, XTIME_TOPD_DRAIN, NNB_TOPD_STEP
00053 USE MODD_COUPLING_TOPD, ONLY: XRUN_TOROUT, XDR_TOROUT, NNB_STP_RESTART
00054 !
00055 USE MODI_GET_LUOUT
00056 USE MODI_OPEN_FILE
00057 USE MODI_CLOSE_FILE
00058 !
00059 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00060 USE PARKIND1  ,ONLY : JPRB
00061 !
00062 IMPLICIT NONE
00063 !
00064 !*      0.1    declarations of arguments
00065 !
00066 REAL, DIMENSION(:,:), INTENT(IN) :: PRO     ! Total water for runoff for each pixel (m3/s)
00067 !ludo
00068 REAL, DIMENSION(:,:), INTENT(IN) :: PDR     ! Total water for drainage for each pixel
00069 INTEGER, INTENT(IN)              :: KSTEP   ! current integration step
00070 !
00071 !
00072 !*      0.2    declarations of local variables
00073 !
00074 !
00075 INTEGER                            :: IUNIT ! unit of discharge files
00076 INTEGER                            :: JCAT, JJ, JI ! Loop variables
00077 INTEGER                            :: JSTEP ! current or future integration steps
00078 REAL, DIMENSION(NNCAT,NNB_TOPD_STEP+NNB_STP_RESTART) :: ZRUN_TOROUT ! stock d'eau dans rivière pas dans debit ! Kg/m2
00079 REAL, DIMENSION(NNCAT,NNB_TOPD_STEP+NNB_STP_RESTART) :: ZDR_TOROUT ! stock d'eau dans rivière pas dans debit ! Kg/m2
00080  CHARACTER(LEN=3)                   :: YSTEP
00081 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00082 !-------------------------------------------------------------------------------
00083 IF (LHOOK) CALL DR_HOOK('ROUTING',0,ZHOOK_HANDLE)
00084 !
00085 !*       1.0.     Initialization :
00086 !               --------------
00087 !
00088 ZRUN_TOROUT(:,:) = 0.
00089 ZDR_TOROUT (:,:) = 0.
00090 !
00091 DO JCAT=1,NNCAT
00092   !
00093   !*       2.0    Runoff by geomorpho transfer function
00094   !               -------------------------------------
00095   DO JJ=1,NNMC(JCAT)
00096   !
00097     IF ( PRO(JCAT,JJ) > 0.0 .AND. PRO(JCAT,JJ) < XUNDEF ) THEN
00098       !
00099       JSTEP = INT(XTIME_TOPD(JCAT,JJ) / XTOPD_STEP) + KSTEP 
00100       !
00101       IF ( JSTEP.LE.NNB_TOPD_STEP ) THEN
00102         !
00103         XQB_RUN(JCAT,JSTEP) = XQB_RUN(JCAT,JSTEP) + PRO(JCAT,JJ)
00104         XQTOT(JCAT,JSTEP) = XQTOT(JCAT,JSTEP) + PRO(JCAT,JJ)
00105         !
00106       ELSEIF (JSTEP.LE.NNB_TOPD_STEP+NNB_STP_RESTART) THEN
00107         !
00108         ZRUN_TOROUT(JCAT,JSTEP) = ZRUN_TOROUT(JCAT,JSTEP) + PRO(JCAT,JJ)  !m3
00109         !
00110       ENDIF
00111       !
00112     ENDIF
00113     !
00114   ENDDO
00115   !
00116   !*       3.0    Drainage by geomorpho transfer function
00117   !               -------------------------------------
00118   DO JJ=1,NNMC(JCAT)
00119     !
00120     IF ((PDR(JCAT,JJ) > 0.0).AND.(PDR(JCAT,JJ)<XUNDEF)) THEN
00121       !
00122       JSTEP = INT(XTIME_TOPD_DRAIN(JCAT,JJ) / XTOPD_STEP) + KSTEP
00123       !
00124       IF (JSTEP.LE.NNB_TOPD_STEP) THEN
00125         !
00126         XQB_DR(JCAT,JSTEP) = XQB_DR(JCAT,JSTEP) + PDR(JCAT,JJ)
00127         XQTOT(JCAT,JSTEP) = XQTOT(JCAT,JSTEP) + PDR(JCAT,JJ) 
00128         !
00129       ELSEIF (JSTEP.LE.NNB_TOPD_STEP+NNB_STP_RESTART) THEN
00130         !
00131         ZRUN_TOROUT(JCAT,JSTEP) = ZRUN_TOROUT(JCAT,JSTEP) + PDR(JCAT,JJ) !m3
00132         !
00133       ENDIF
00134     ENDIF
00135     !
00136   ENDDO
00137   ! 
00138   XQB_RUN(JCAT,KSTEP) = XQB_RUN(JCAT,KSTEP) + XRUN_TOROUT(JCAT,KSTEP)
00139   XQB_DR(JCAT,KSTEP)  = XQB_DR(JCAT,KSTEP)  + XDR_TOROUT(JCAT,KSTEP)
00140   XQTOT(JCAT,KSTEP)   = XQTOT(JCAT,KSTEP) + XRUN_TOROUT(JCAT,KSTEP) + XDR_TOROUT(JCAT,KSTEP)
00141   !
00142   XRUN_TOROUT(JCAT,:) = XRUN_TOROUT(JCAT,:) + ZRUN_TOROUT(JCAT,:)
00143   XDR_TOROUT(JCAT,:)  = XDR_TOROUT(JCAT,:)  + ZDR_TOROUT(JCAT,:)
00144   !
00145 ENDDO
00146 !
00147 IF (LHOOK) CALL DR_HOOK('ROUTING',1,ZHOOK_HANDLE)
00148 !
00149 END SUBROUTINE ROUTING