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