SURFEX v7.3
General documentation of Surfex
|
00001 !#################################################################### 00002 SUBROUTINE TRIP_INTERFACE (KLUOUT,KLON,KLAT,ORESTART,KYEAR,KMONTH, & 00003 KTRIP,PDURATION,PRUNOFF,PDRAIN,PSRC_FLOOD) 00004 !#################################################################### 00005 ! 00006 !!**** *TRIP* 00007 !! 00008 !! PURPOSE 00009 !! ------- 00010 ! 00011 ! Driver for the TRIP river routing. 00012 ! Here, we call the physical and the diag routines 00013 ! 00014 !! 00015 !! REFERENCE 00016 !! --------- 00017 !! 00018 !! AUTHOR 00019 !! ------ 00020 !! B. Decharme 00021 !! 00022 !! MODIFICATIONS 00023 !! ------------- 00024 !! Original 01/02/05 00025 !! Modif. 28/05/08 00026 !------------------------------------------------------------------------------- 00027 ! 00028 !* 0. DECLARATIONS 00029 ! ------------ 00030 ! 00031 USE MODD_TRIP_PAR, ONLY : XRHOLW_T 00032 USE MODD_TRIP_GRID_n, ONLY : XAREA 00033 USE MODD_DIAG_TRIP_n 00034 USE MODD_TRIP_n 00035 ! 00036 ! 00037 USE MODI_TRIP 00038 USE MODI_DIAG_TRIP_n 00039 USE MODI_RESTART_TRIP_n 00040 ! 00041 IMPLICIT NONE 00042 ! 00043 !* 0.1 declarations of arguments 00044 ! 00045 LOGICAL, INTENT(IN) :: ORESTART 00046 ! 00047 INTEGER, INTENT(IN) :: KLON 00048 INTEGER, INTENT(IN) :: KLAT 00049 INTEGER, INTENT(IN) :: KLUOUT 00050 INTEGER, INTENT(IN) :: KYEAR 00051 INTEGER, INTENT(IN) :: KMONTH 00052 INTEGER, INTENT(IN) :: KTRIP 00053 ! 00054 REAL, INTENT(IN) :: PDURATION 00055 ! 00056 REAL, DIMENSION(KLON,KLAT), INTENT(INOUT) :: PRUNOFF 00057 REAL, DIMENSION(KLON,KLAT), INTENT(INOUT) :: PDRAIN 00058 ! 00059 REAL, DIMENSION(KLON,KLAT), INTENT(INOUT),OPTIONAL :: PSRC_FLOOD 00060 ! 00061 !* 0.2 declarations of local variables 00062 ! 00063 INTEGER, DIMENSION(5,2) :: ISIZE 00064 INTEGER :: JTSTEP, ITRIP_TSTEP 00065 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00066 ! 00067 !------------------------------------------------------------------------------- 00068 ! Allocate local variables 00069 !------------------------------------------------------------------------------- 00070 ! 00071 IF (LHOOK) CALL DR_HOOK('TRIP_INTERFACE',0,ZHOOK_HANDLE) 00072 ! 00073 ISIZE(:,:) = 0 00074 ! 00075 IF (LTRIP_DIAG_MISC) THEN 00076 ISIZE(1,1) = KLON 00077 ISIZE(1,2) = KLAT 00078 ENDIF 00079 ! 00080 IF (CGROUNDW/='DEF') THEN 00081 ISIZE(2,1) = KLON 00082 ISIZE(2,2) = KLAT 00083 ENDIF 00084 ! 00085 IF (CVIT=='VAR') THEN 00086 ISIZE(3,1) = KLON 00087 ISIZE(3,2) = KLAT 00088 ENDIF 00089 ! 00090 IF (LFLOODT) THEN 00091 ! 00092 IF (.NOT.PRESENT(PSRC_FLOOD)) THEN 00093 WRITE(KLUOUT,*)'!Probleme when you call the coupling_trip_n.f90 routine!!!!' 00094 STOP 00095 ENDIF 00096 ! 00097 ISIZE(4,1) = KLON 00098 ISIZE(4,2) = KLAT 00099 ! 00100 IF(LTRIP_DIAG_MISC)THEN 00101 ISIZE(5,1) = KLON 00102 ISIZE(5,2) = KLAT 00103 ENDIF 00104 ENDIF 00105 ! 00106 CALL TRIP_INTERFACE_DIM(ISIZE) 00107 ! 00108 !------------------------------------------------------------------------------- 00109 !Write restart 00110 !------------------------------------------------------------------------------- 00111 ! 00112 IF(ORESTART.AND.KTRIP==INT(PDURATION/XTSTEP_COUPLING))THEN 00113 CALL RESTART_TRIP_n(KLUOUT) 00114 ENDIF 00115 ! 00116 IF (LHOOK) CALL DR_HOOK('TRIP_INTERFACE',1,ZHOOK_HANDLE) 00117 ! 00118 !------------------------------------------------------------------------------- 00119 ! 00120 CONTAINS 00121 ! 00122 SUBROUTINE TRIP_INTERFACE_DIM(KSIZE) 00123 ! 00124 IMPLICIT NONE 00125 ! 00126 INTEGER, DIMENSION(:,:), INTENT(IN) :: KSIZE 00127 ! 00128 REAL, DIMENSION(KLON,KLAT) :: ZGOUT 00129 REAL, DIMENSION(KLON,KLAT) :: ZSOUT 00130 REAL, DIMENSION(KLON,KLAT) :: ZSIN 00131 REAL, DIMENSION(KLON,KLAT) :: ZSURF_STO_OLD 00132 REAL, DIMENSION(KLON,KLAT) :: ZQDIS_OLD 00133 ! 00134 REAL, DIMENSION(KSIZE(1,1),KSIZE(1,2)) :: ZQIN_OLD 00135 ! 00136 REAL, DIMENSION(KSIZE(2,1),KSIZE(2,2)) :: ZGROUND_STO_OLD 00137 REAL, DIMENSION(KSIZE(2,1),KSIZE(2,2)) :: ZQGF_OLD 00138 ! 00139 REAL, DIMENSION(KSIZE(3,1),KSIZE(3,2)) :: ZVEL 00140 REAL, DIMENSION(KSIZE(3,1),KSIZE(3,2)) :: ZHS 00141 REAL, DIMENSION(KSIZE(3,1),KSIZE(3,2)) :: ZVEL_OLD 00142 REAL, DIMENSION(KSIZE(3,1),KSIZE(3,2)) :: ZHS_OLD 00143 ! 00144 REAL, DIMENSION(KSIZE(4,1),KSIZE(4,2)) :: ZSOURCE 00145 REAL, DIMENSION(KSIZE(4,1),KSIZE(4,2)) :: ZQFR 00146 REAL, DIMENSION(KSIZE(4,1),KSIZE(4,2)) :: ZQRF 00147 REAL, DIMENSION(KSIZE(4,1),KSIZE(4,2)) :: ZVFIN 00148 REAL, DIMENSION(KSIZE(4,1),KSIZE(4,2)) :: ZVFOUT 00149 REAL, DIMENSION(KSIZE(4,1),KSIZE(4,2)) :: ZHSF 00150 REAL, DIMENSION(KSIZE(4,1),KSIZE(4,2)) :: ZFLOOD_STO_OLD 00151 REAL, DIMENSION(KSIZE(4,1),KSIZE(4,2)) :: ZFF_OLD 00152 REAL, DIMENSION(KSIZE(4,1),KSIZE(4,2)) :: ZHF_OLD 00153 ! 00154 REAL, DIMENSION(KSIZE(5,1),KSIZE(5,2)) :: ZQFR_OLD 00155 REAL, DIMENSION(KSIZE(5,1),KSIZE(5,2)) :: ZQRF_OLD 00156 REAL, DIMENSION(KSIZE(5,1),KSIZE(5,2)) :: ZVFIN_OLD 00157 REAL, DIMENSION(KSIZE(5,1),KSIZE(5,2)) :: ZVFOUT_OLD 00158 REAL, DIMENSION(KSIZE(5,1),KSIZE(5,2)) :: ZWF_OLD 00159 REAL, DIMENSION(KSIZE(5,1),KSIZE(5,2)) :: ZLF_OLD 00160 REAL, DIMENSION(KSIZE(5,1),KSIZE(5,2)) :: ZHSF_OLD 00161 REAL, DIMENSION(KSIZE(5,1),KSIZE(5,2)) :: ZSOURCE_OLD 00162 ! 00163 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00164 ! 00165 IF (LHOOK) CALL DR_HOOK('TRIP_INTERFACE:TRIP_INTERFACE_DIM',0,ZHOOK_HANDLE) 00166 !------------------------------------------------------------------------------- 00167 !Put ISBA variables in TRIP dimension (kg --> kg/s) 00168 !------------------------------------------------------------------------------- 00169 ! 00170 PRUNOFF(:,:) = PRUNOFF(:,:) / XTSTEP_COUPLING 00171 PDRAIN (:,:) = PDRAIN (:,:) / XTSTEP_COUPLING 00172 ! 00173 !------------------------------------------------------------- 00174 ! 00175 ZGOUT (:,:) = 0.0 00176 ZSIN (:,:) = 0.0 00177 ZSOUT (:,:) = 0.0 00178 ZSURF_STO_OLD(:,:) = XDIAG_SURF_STO 00179 ZQDIS_OLD (:,:) = XDIAG_QDIS 00180 ! 00181 IF(LTRIP_DIAG_MISC) ZQIN_OLD(:,:) = XDIAG_QIN 00182 ! 00183 ! No groundwater treatement (e.g. permafrost) 00184 ! 00185 IF(CGROUNDW/='DEF')THEN 00186 ! 00187 ZGROUND_STO_OLD(:,:) = XDIAG_GROUND_STO 00188 ZQGF_OLD (:,:) = XDIAG_QGF 00189 ! 00190 WHERE(XTAUG(:,:)==0.0) 00191 PRUNOFF(:,:) = PRUNOFF(:,:)+PDRAIN(:,:) 00192 PDRAIN(:,:) = 0.0 00193 ENDWHERE 00194 ! 00195 ENDIF 00196 ! 00197 IF(CVIT=='VAR')THEN 00198 ZVEL (:,:) = 0.0 00199 ZHS (:,:) = 0.0 00200 ZVEL_OLD(:,:) = XDIAG_VEL 00201 ZHS_OLD (:,:) = XDIAG_HS 00202 ENDIF 00203 ! 00204 IF(LFLOODT)THEN 00205 ! 00206 ZSOURCE(:,:) = PSRC_FLOOD(:,:) / XTSTEP_COUPLING 00207 WHERE(XFFLOOD(:,:)==1.0.AND.ZSOURCE(:,:)>0.0) 00208 PRUNOFF(:,:) = PRUNOFF(:,:) + ZSOURCE(:,:) 00209 ZSOURCE(:,:) = 0.0 00210 ENDWHERE 00211 ! 00212 ZQFR (:,:) = 0.0 00213 ZQRF (:,:) = 0.0 00214 ZVFIN (:,:) = 0.0 00215 ZVFOUT (:,:) = 0.0 00216 ZHSF (:,:) = 0.0 00217 ZFLOOD_STO_OLD(:,:) = XDIAG_FLOOD_STO 00218 ZFF_OLD (:,:) = XDIAG_FF 00219 ZHF_OLD (:,:) = XDIAG_HF 00220 ! 00221 00222 IF(LTRIP_DIAG_MISC)THEN 00223 ZQFR_OLD (:,:) = XDIAG_QFR 00224 ZQRF_OLD (:,:) = XDIAG_QRF 00225 ZVFIN_OLD (:,:) = XDIAG_VFIN 00226 ZVFOUT_OLD (:,:) = XDIAG_VFOUT 00227 ZWF_OLD (:,:) = XDIAG_WF 00228 ZLF_OLD (:,:) = XDIAG_LF 00229 ZHSF_OLD (:,:) = XDIAG_HSF 00230 ZSOURCE_OLD (:,:) = XDIAG_SOURCE 00231 ENDIF 00232 ! 00233 ENDIF 00234 ! 00235 !------------------------------------------------------------------------------- 00236 !Call physical routines 00237 !------------------------------------------------------------------------------- 00238 ! 00239 ITRIP_TSTEP = INT(XTSTEP_COUPLING/XTRIP_TSTEP) 00240 ! 00241 DO JTSTEP=1,ITRIP_TSTEP 00242 ! 00243 ! * TRIP time step loop 00244 ! 00245 CALL TRIP(KLUOUT,CGROUNDW,CVIT,LFLOODT,LPRINT_TRIP, & 00246 XTRIP_TSTEP,IGRCN,ISEQ,INEXTX,INEXTY,ISEQMAX, & 00247 XTAUG,XAREA,XLEN,XFLOOD_LEN,XSLOPEBED,XWIDTH,XN, & 00248 XN_FLOOD,XHC_BED,XWFLOOD,XTAB_F,XTAB_H,XTAB_VF, & 00249 PDRAIN,PRUNOFF,ZSOURCE,XGROUND_STO,XSURF_STO, & 00250 XFLOOD_STO,ZSOUT,ZGOUT,ZHS,XHFLOOD,ZVEL, & 00251 XFFLOOD,ZQFR,ZQRF,ZVFIN,ZVFOUT, & 00252 ZHSF,ZSIN,KTRIP,JTSTEP,ITRIP_TSTEP,ITABMAX ) 00253 ! 00254 ! * Actualisation of diagnostic variables 00255 ! 00256 XDIAG_QDIS(:,:) = XDIAG_QDIS(:,:) + ZSOUT(:,:) * XTRIP_TSTEP / XRHOLW_T 00257 ! 00258 IF(CGROUNDW/='DEF')THEN 00259 XDIAG_QGF(:,:) = XDIAG_QGF(:,:) + ZGOUT(:,:) * XTRIP_TSTEP / XRHOLW_T 00260 ENDIF 00261 ! 00262 IF(LTRIP_DIAG_MISC)THEN 00263 XDIAG_QIN (:,:) = XDIAG_QIN (:,:) + ZSIN (:,:) * XTRIP_TSTEP / XRHOLW_T 00264 IF(LFLOODT)THEN 00265 XDIAG_QFR(:,:) = XDIAG_QFR(:,:) + ZQFR(:,:) * XTRIP_TSTEP / XRHOLW_T 00266 XDIAG_QRF(:,:) = XDIAG_QRF(:,:) + ZQRF(:,:) * XTRIP_TSTEP / XRHOLW_T 00267 ENDIF 00268 ENDIF 00269 ! 00270 ENDDO ! * End TRIP time step loop 00271 ! 00272 XDIAG_SURF_STO(:,:) = XDIAG_SURF_STO(:,:) + XSURF_STO(:,:) / XAREA(:,:) 00273 ! 00274 IF(CGROUNDW/='DEF')THEN 00275 XDIAG_GROUND_STO(:,:) = XDIAG_GROUND_STO(:,:) + XGROUND_STO(:,:) / XAREA(:,:) 00276 ENDIF 00277 ! 00278 IF(CVIT=='VAR')THEN 00279 XDIAG_VEL(:,:) = XDIAG_VEL(:,:) + ZVEL(:,:) 00280 XDIAG_HS (:,:) = XDIAG_HS (:,:) + ZHS (:,:) 00281 ENDIF 00282 00283 IF(LFLOODT)THEN 00284 ! 00285 XDIAG_FLOOD_STO(:,:) = XDIAG_FLOOD_STO(:,:) + XFLOOD_STO(:,:) / XAREA(:,:) 00286 XDIAG_FF (:,:) = XDIAG_FF (:,:) + XFFLOOD (:,:) 00287 XDIAG_HF (:,:) = XDIAG_HF (:,:) + XHFLOOD (:,:) 00288 ! 00289 IF(LTRIP_DIAG_MISC)THEN 00290 XDIAG_VFIN (:,:) = XDIAG_VFIN (:,:) + ZVFIN (:,:) 00291 XDIAG_VFOUT (:,:) = XDIAG_VFOUT (:,:) + ZVFOUT (:,:) 00292 XDIAG_WF (:,:) = XDIAG_WF (:,:) + XWFLOOD (:,:) 00293 XDIAG_LF (:,:) = XDIAG_LF (:,:) + XFLOOD_LEN(:,:) 00294 XDIAG_HSF (:,:) = XDIAG_HSF (:,:) + ZHSF (:,:) 00295 XDIAG_SOURCE(:,:) = XDIAG_SOURCE(:,:) + ZSOURCE (:,:) * XTSTEP_COUPLING / XAREA(:,:) 00296 ENDIF 00297 ! 00298 ! Coupling variables 00299 ! 00300 XPIFLOOD(:,:)=XFLOOD_STO(:,:) 00301 ! 00302 ENDIF 00303 ! 00304 !------------------------------------------------------------------------------- 00305 !Store result 00306 !------------------------------------------------------------------------------- 00307 ! 00308 IF(LPRINT_TRIP)WRITE(KLUOUT,*)'' 00309 ! 00310 CALL DIAG_TRIP_n(KLUOUT,KYEAR,KMONTH,KTRIP,PDURATION, & 00311 ZSURF_STO_OLD,ZQDIS_OLD,ZGROUND_STO_OLD, & 00312 ZQGF_OLD,ZVEL_OLD,ZHS_OLD,ZFLOOD_STO_OLD,& 00313 ZFF_OLD,ZHF_OLD,ZQFR_OLD,ZQRF_OLD, & 00314 ZVFIN_OLD,ZVFOUT_OLD,ZWF_OLD,ZLF_OLD, & 00315 ZHSF_OLD,ZQIN_OLD,ZSOURCE_OLD ) 00316 ! 00317 IF (LHOOK) CALL DR_HOOK('TRIP_INTERFACE:TRIP_INTERFACE_DIM',1,ZHOOK_HANDLE) 00318 ! 00319 END SUBROUTINE TRIP_INTERFACE_DIM 00320 ! 00321 END SUBROUTINE TRIP_INTERFACE