SURFEX v7.3
General documentation of Surfex
|
00001 !############### 00002 MODULE MODD_TRIP_n 00003 !############### 00004 ! 00005 !!**** *MODD_TRIP_n - declaration of surface variable for TRIP RRM 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 !! 00011 !!** IMPLICIT ARGUMENTS 00012 !! ------------------ 00013 !! None 00014 !! 00015 !! REFERENCE 00016 !! --------- 00017 !! 00018 !! AUTHOR 00019 !! ------ 00020 !! B. Decharme *Meteo France* 00021 !! 00022 !! MODIFICATIONS 00023 !! ------------- 00024 !! Original 21/05/08 00025 ! 00026 !* 0. DECLARATIONS 00027 ! ------------ 00028 ! 00029 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00030 USE PARKIND1 ,ONLY : JPRB 00031 ! 00032 IMPLICIT NONE 00033 00034 TYPE TRIP_t 00035 !------------------------------------------------------------------------------- 00036 ! 00037 ! TRIP Options: 00038 ! 00039 CHARACTER(LEN=3) :: CGROUNDW !Use groundwater scheme 00040 !'DEF' = No groundwater scheme 00041 !'CST' = Constant transfert time 00042 !'VAR' = Textural dependence of transfert time 00043 ! 00044 CHARACTER(LEN=3) :: CVIT !Type of stream flow velocity 00045 !'DEF' = Constant velocit = 0.5m/s 00046 !'VAR' = variable velocity 00047 ! 00048 LOGICAL :: LDIAG_CPL !if true, dailly output diag 00049 LOGICAL :: LTRIP_DIAG_MISC !if true, more diag for model testing 00050 LOGICAL :: LFLOODT !if true, use TRIP-FLOOD 00051 LOGICAL :: LNCPRINT !Netcdf read/write messages 00052 LOGICAL :: LPRINT_TRIP !Print water budget message 00053 ! 00054 REAL :: XDATA_TAUG ! Constant transfert time value 00055 REAL :: XCVEL ! Constant velocity value 00056 REAL :: XRATMED ! Meandering ratio 00057 REAL :: XTRIP_TSTEP 00058 REAL :: XTSTEP_COUPLING 00059 ! 00060 !------------------------------------------------------------------------------- 00061 ! 00062 INTEGER, POINTER, DIMENSION(:,:) :: IGRCN ! Flow direction (1->8) 00063 INTEGER, POINTER, DIMENSION(:,:) :: ISEQ ! River sequence 00064 INTEGER :: ISEQMAX ! maximum down flow 00065 INTEGER, POINTER, DIMENSION(:,:) :: INEXTX ! returns x and y point 00066 INTEGER, POINTER, DIMENSION(:,:) :: INEXTY ! of destination grid: 00067 ! 8 1 2 00068 ! 7 3 00069 ! 6 5 4 00070 !------------------------------------------------------------------------------- 00071 ! 00072 INTEGER :: NRUN ! Number of coupling during a run 00073 ! 00074 !------------------------------------------------------------------------------- 00075 ! 00076 ! Input river geometry Parameters : 00077 ! 00078 REAL, POINTER, DIMENSION(:,:) :: XLEN ! distance between grids [m] 00079 REAL, POINTER, DIMENSION(:,:) :: XTAUG ! ground water transfer time [s] 00080 REAL, POINTER, DIMENSION(:,:) :: XSLOPEBED ! river bed slopes [m/m] 00081 REAL, POINTER, DIMENSION(:,:) :: XWIDTH ! river widths [m] 00082 REAL, POINTER, DIMENSION(:,:) :: XN ! Manning roughness coeficient [-] (0.03 to 0.065) 00083 REAL, POINTER, DIMENSION(:,:) :: XN_FLOOD ! Manning coeficient over floodplains [-] (currently 0.1) 00084 REAL, POINTER, DIMENSION(:,:) :: XHC_BED ! River bed depth [m] 00085 ! 00086 !------------------------------------------------------------------------------- 00087 ! 00088 ! Time varing variables : 00089 ! 00090 REAL, POINTER, DIMENSION(:,:) :: XSURF_STO ! river channel storage [kg] 00091 REAL, POINTER, DIMENSION(:,:) :: XGROUND_STO ! ground water storage [kg] 00092 REAL, POINTER, DIMENSION(:,:) :: XFLOOD_STO ! Floodplain water storage [kg] 00093 REAL, POINTER, DIMENSION(:,:) :: XHFLOOD ! Floodplain water depth [m] 00094 REAL, POINTER, DIMENSION(:,:) :: XFFLOOD ! Floodplain grid-cell fraction [-] 00095 REAL, POINTER, DIMENSION(:,:) :: XPIFLOOD ! Floodplain potential infiltration for coupling with isba [kg/m2/s] 00096 REAL, POINTER, DIMENSION(:,:) :: XWFLOOD ! Floodplain width [m] 00097 REAL, POINTER, DIMENSION(:,:) :: XFLOOD_LEN ! Floodplain lenght [m] 00098 ! 00099 !------------------------------------------------------------------------------- 00100 ! 00101 ! Floodplain fonctions : 00102 ! 00103 INTEGER, POINTER, DIMENSION(:,:) :: ITABMAX ! Maximum array 00104 ! 00105 REAL, POINTER, DIMENSION(:,:,:) :: XTAB_F ! Flood fraction array 00106 REAL, POINTER, DIMENSION(:,:,:) :: XTAB_H ! Topo height array 00107 REAL, POINTER, DIMENSION(:,:,:) :: XTAB_VF ! Flood volume array 00108 ! 00109 !------------------------------------------------------------------------------- 00110 ! 00111 END TYPE TRIP_t 00112 ! 00113 TYPE(TRIP_t), ALLOCATABLE, TARGET, SAVE :: TRIP_MODEL(:) 00114 ! 00115 CHARACTER(LEN=3), POINTER :: CGROUNDW=>NULL() 00116 !$OMP THREADPRIVATE(CGROUNDW) 00117 CHARACTER(LEN=3), POINTER :: CVIT=>NULL() 00118 !$OMP THREADPRIVATE(CVIT) 00119 ! 00120 LOGICAL, POINTER :: LFLOODT=>NULL() 00121 !$OMP THREADPRIVATE(LFLOODT) 00122 LOGICAL, POINTER :: LDIAG_CPL=>NULL() 00123 !$OMP THREADPRIVATE(LDIAG_CPL) 00124 LOGICAL, POINTER :: LNCPRINT=>NULL() 00125 !$OMP THREADPRIVATE(LNCPRINT) 00126 LOGICAL, POINTER :: LPRINT_TRIP=>NULL() 00127 !$OMP THREADPRIVATE(LPRINT_TRIP) 00128 LOGICAL, POINTER :: LTRIP_DIAG_MISC=>NULL() 00129 !$OMP THREADPRIVATE(LTRIP_DIAG_MISC) 00130 REAL, POINTER :: XTSTEP_COUPLING=>NULL() 00131 !$OMP THREADPRIVATE(XTSTEP_COUPLING) 00132 REAL, POINTER :: XTRIP_TSTEP=>NULL() 00133 !$OMP THREADPRIVATE(XTRIP_TSTEP) 00134 REAL, POINTER :: XDATA_TAUG=>NULL() 00135 !$OMP THREADPRIVATE(XDATA_TAUG) 00136 REAL, POINTER :: XCVEL=>NULL() 00137 !$OMP THREADPRIVATE(XCVEL) 00138 REAL, POINTER :: XRATMED=>NULL() 00139 !$OMP THREADPRIVATE(XRATMED) 00140 ! 00141 INTEGER, POINTER, DIMENSION(:,:) :: IGRCN=>NULL() 00142 !$OMP THREADPRIVATE(IGRCN) 00143 INTEGER, POINTER, DIMENSION(:,:) :: ISEQ=>NULL() 00144 !$OMP THREADPRIVATE(ISEQ) 00145 INTEGER, POINTER :: ISEQMAX=>NULL() 00146 !$OMP THREADPRIVATE(ISEQMAX) 00147 INTEGER, POINTER, DIMENSION(:,:) :: INEXTX=>NULL() 00148 !$OMP THREADPRIVATE(INEXTX) 00149 INTEGER, POINTER, DIMENSION(:,:) :: INEXTY=>NULL() 00150 !$OMP THREADPRIVATE(INEXTY) 00151 INTEGER, POINTER :: NRUN=>NULL() 00152 !$OMP THREADPRIVATE(NRUN) 00153 ! 00154 REAL, POINTER, DIMENSION(:,:) :: XLEN=>NULL() 00155 !$OMP THREADPRIVATE(XLEN) 00156 REAL, POINTER, DIMENSION(:,:) :: XTAUG=>NULL() 00157 !$OMP THREADPRIVATE(XTAUG) 00158 REAL, POINTER, DIMENSION(:,:) :: XSLOPEBED=>NULL() 00159 !$OMP THREADPRIVATE(XSLOPEBED) 00160 REAL, POINTER, DIMENSION(:,:) :: XWIDTH=>NULL() 00161 !$OMP THREADPRIVATE(XWIDTH) 00162 REAL, POINTER, DIMENSION(:,:) :: XN=>NULL() 00163 !$OMP THREADPRIVATE(XN) 00164 REAL, POINTER, DIMENSION(:,:) :: XN_FLOOD=>NULL() 00165 !$OMP THREADPRIVATE(XN_FLOOD) 00166 REAL, POINTER, DIMENSION(:,:) :: XHC_BED=>NULL() 00167 !$OMP THREADPRIVATE(XHC_BED) 00168 REAL, POINTER, DIMENSION(:,:) :: XSURF_STO=>NULL() 00169 !$OMP THREADPRIVATE(XSURF_STO) 00170 REAL, POINTER, DIMENSION(:,:) :: XGROUND_STO=>NULL() 00171 !$OMP THREADPRIVATE(XGROUND_STO) 00172 REAL, POINTER, DIMENSION(:,:) :: XFLOOD_STO=>NULL() 00173 !$OMP THREADPRIVATE(XFLOOD_STO) 00174 REAL, POINTER, DIMENSION(:,:) :: XHFLOOD=>NULL() 00175 !$OMP THREADPRIVATE(XHFLOOD) 00176 REAL, POINTER, DIMENSION(:,:) :: XFFLOOD=>NULL() 00177 !$OMP THREADPRIVATE(XFFLOOD) 00178 REAL, POINTER, DIMENSION(:,:) :: XPIFLOOD=>NULL() 00179 !$OMP THREADPRIVATE(XPIFLOOD) 00180 REAL, POINTER, DIMENSION(:,:) :: XWFLOOD=>NULL() 00181 !$OMP THREADPRIVATE(XWFLOOD) 00182 REAL, POINTER, DIMENSION(:,:) :: XFLOOD_LEN=>NULL() 00183 !$OMP THREADPRIVATE(XFLOOD_LEN) 00184 ! 00185 INTEGER, POINTER, DIMENSION(:,:) :: ITABMAX=>NULL() 00186 !$OMP THREADPRIVATE(ITABMAX) 00187 REAL, POINTER, DIMENSION(:,:,:) :: XTAB_F=>NULL() 00188 !$OMP THREADPRIVATE(XTAB_F) 00189 REAL, POINTER, DIMENSION(:,:,:) :: XTAB_H=>NULL() 00190 !$OMP THREADPRIVATE(XTAB_H) 00191 REAL, POINTER, DIMENSION(:,:,:) :: XTAB_VF=>NULL() 00192 !$OMP THREADPRIVATE(XTAB_VF) 00193 ! 00194 CONTAINS 00195 ! 00196 SUBROUTINE TRIP_GOTO_MODEL(KFROM, KTO, LKFROM) 00197 LOGICAL, INTENT(IN) :: LKFROM 00198 INTEGER, INTENT(IN) :: KFROM, KTO 00199 ! 00200 ! Save current state for allocated arrays 00201 IF (LKFROM) THEN 00202 TRIP_MODEL(KFROM)%IGRCN=>IGRCN 00203 TRIP_MODEL(KFROM)%ISEQ=>ISEQ 00204 TRIP_MODEL(KFROM)%INEXTX=>INEXTX 00205 TRIP_MODEL(KFROM)%INEXTY=>INEXTY 00206 TRIP_MODEL(KFROM)%XLEN=>XLEN 00207 TRIP_MODEL(KFROM)%XTAUG=>XTAUG 00208 TRIP_MODEL(KFROM)%XSLOPEBED=>XSLOPEBED 00209 TRIP_MODEL(KFROM)%XWIDTH=>XWIDTH 00210 TRIP_MODEL(KFROM)%XN=>XN 00211 TRIP_MODEL(KFROM)%XN_FLOOD=>XN_FLOOD 00212 TRIP_MODEL(KFROM)%XHC_BED=>XHC_BED 00213 TRIP_MODEL(KFROM)%XSURF_STO=>XSURF_STO 00214 TRIP_MODEL(KFROM)%XGROUND_STO=>XGROUND_STO 00215 TRIP_MODEL(KFROM)%XFLOOD_STO=>XFLOOD_STO 00216 TRIP_MODEL(KFROM)%XHFLOOD=>XHFLOOD 00217 TRIP_MODEL(KFROM)%XFFLOOD=>XFFLOOD 00218 TRIP_MODEL(KFROM)%XPIFLOOD=>XPIFLOOD 00219 TRIP_MODEL(KFROM)%XWFLOOD=>XWFLOOD 00220 TRIP_MODEL(KFROM)%XFLOOD_LEN=>XFLOOD_LEN 00221 TRIP_MODEL(KFROM)%XTAB_F=>XTAB_F 00222 TRIP_MODEL(KFROM)%XTAB_H=>XTAB_H 00223 TRIP_MODEL(KFROM)%XTAB_VF=>XTAB_VF 00224 TRIP_MODEL(KFROM)%ITABMAX=>ITABMAX 00225 ENDIF 00226 ! Current model is set to model KTO 00227 CGROUNDW=>TRIP_MODEL(KTO)%CGROUNDW 00228 CVIT=>TRIP_MODEL(KTO)%CVIT 00229 LFLOODT=>TRIP_MODEL(KTO)%LFLOODT 00230 LTRIP_DIAG_MISC=>TRIP_MODEL(KTO)%LTRIP_DIAG_MISC 00231 LDIAG_CPL=>TRIP_MODEL(KTO)%LDIAG_CPL 00232 LNCPRINT=>TRIP_MODEL(KTO)%LNCPRINT 00233 LPRINT_TRIP=>TRIP_MODEL(KTO)%LPRINT_TRIP 00234 XTSTEP_COUPLING=>TRIP_MODEL(KTO)%XTSTEP_COUPLING 00235 XTRIP_TSTEP=>TRIP_MODEL(KTO)%XTRIP_TSTEP 00236 XDATA_TAUG=>TRIP_MODEL(KTO)%XDATA_TAUG 00237 XCVEL=>TRIP_MODEL(KTO)%XCVEL 00238 XRATMED=>TRIP_MODEL(KTO)%XRATMED 00239 NRUN=>TRIP_MODEL(KTO)%NRUN 00240 IGRCN=>TRIP_MODEL(KTO)%IGRCN 00241 ISEQ=>TRIP_MODEL(KTO)%ISEQ 00242 ISEQMAX=>TRIP_MODEL(KTO)%ISEQMAX 00243 INEXTX=>TRIP_MODEL(KTO)%INEXTX 00244 INEXTY=>TRIP_MODEL(KTO)%INEXTY 00245 XLEN=>TRIP_MODEL(KTO)%XLEN 00246 XTAUG=>TRIP_MODEL(KTO)%XTAUG 00247 XSLOPEBED=>TRIP_MODEL(KTO)%XSLOPEBED 00248 XWIDTH=>TRIP_MODEL(KTO)%XWIDTH 00249 XN=>TRIP_MODEL(KTO)%XN 00250 XN_FLOOD=>TRIP_MODEL(KTO)%XN_FLOOD 00251 XHC_BED=>TRIP_MODEL(KTO)%XHC_BED 00252 XSURF_STO=>TRIP_MODEL(KTO)%XSURF_STO 00253 XGROUND_STO=>TRIP_MODEL(KTO)%XGROUND_STO 00254 XFLOOD_STO=>TRIP_MODEL(KTO)%XFLOOD_STO 00255 XHFLOOD=>TRIP_MODEL(KTO)%XHFLOOD 00256 XFFLOOD=>TRIP_MODEL(KTO)%XFFLOOD 00257 XPIFLOOD=>TRIP_MODEL(KTO)%XPIFLOOD 00258 XWFLOOD=>TRIP_MODEL(KTO)%XWFLOOD 00259 XFLOOD_LEN=>TRIP_MODEL(KTO)%XFLOOD_LEN 00260 XTAB_F=>TRIP_MODEL(KTO)%XTAB_F 00261 XTAB_H=>TRIP_MODEL(KTO)%XTAB_H 00262 XTAB_VF=>TRIP_MODEL(KTO)%XTAB_VF 00263 ITABMAX=>TRIP_MODEL(KTO)%ITABMAX 00264 END SUBROUTINE TRIP_GOTO_MODEL 00265 00266 SUBROUTINE TRIP_ALLOC(KMODEL) 00267 INTEGER, INTENT(IN) :: KMODEL 00268 INTEGER :: J 00269 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00270 IF (LHOOK) CALL DR_HOOK("MODD_TRIP_N:TRIP_ALLOC",0,ZHOOK_HANDLE) 00271 ALLOCATE(TRIP_MODEL(KMODEL)) 00272 DO J=1,KMODEL 00273 NULLIFY(TRIP_MODEL(J)%IGRCN) 00274 NULLIFY(TRIP_MODEL(J)%ISEQ) 00275 NULLIFY(TRIP_MODEL(J)%INEXTX) 00276 NULLIFY(TRIP_MODEL(J)%INEXTY) 00277 NULLIFY(TRIP_MODEL(J)%XLEN) 00278 NULLIFY(TRIP_MODEL(J)%XTAUG) 00279 NULLIFY(TRIP_MODEL(J)%XSLOPEBED) 00280 NULLIFY(TRIP_MODEL(J)%XWIDTH) 00281 NULLIFY(TRIP_MODEL(J)%XN) 00282 NULLIFY(TRIP_MODEL(J)%XN_FLOOD) 00283 NULLIFY(TRIP_MODEL(J)%XHC_BED) 00284 NULLIFY(TRIP_MODEL(J)%XSURF_STO) 00285 NULLIFY(TRIP_MODEL(J)%XGROUND_STO) 00286 NULLIFY(TRIP_MODEL(J)%XFLOOD_STO) 00287 NULLIFY(TRIP_MODEL(J)%XHFLOOD) 00288 NULLIFY(TRIP_MODEL(J)%XFFLOOD) 00289 NULLIFY(TRIP_MODEL(J)%XPIFLOOD) 00290 NULLIFY(TRIP_MODEL(J)%XWFLOOD) 00291 NULLIFY(TRIP_MODEL(J)%XFLOOD_LEN) 00292 NULLIFY(TRIP_MODEL(J)%XTAB_F) 00293 NULLIFY(TRIP_MODEL(J)%XTAB_H) 00294 NULLIFY(TRIP_MODEL(J)%XTAB_VF) 00295 NULLIFY(TRIP_MODEL(J)%ITABMAX) 00296 ENDDO 00297 TRIP_MODEL(:)%CGROUNDW=' ' 00298 TRIP_MODEL(:)%CVIT=' ' 00299 TRIP_MODEL(:)%LDIAG_CPL=.FALSE. 00300 TRIP_MODEL(:)%LTRIP_DIAG_MISC=.FALSE. 00301 TRIP_MODEL(:)%LFLOODT=.FALSE. 00302 TRIP_MODEL(:)%LNCPRINT=.FALSE. 00303 TRIP_MODEL(:)%LPRINT_TRIP=.FALSE. 00304 TRIP_MODEL(:)%XDATA_TAUG=0. 00305 TRIP_MODEL(:)%XCVEL=0. 00306 TRIP_MODEL(:)%XRATMED=0. 00307 TRIP_MODEL(:)%XTRIP_TSTEP=0. 00308 TRIP_MODEL(:)%XTSTEP_COUPLING=0. 00309 TRIP_MODEL(:)%ISEQMAX=0 00310 TRIP_MODEL(:)%NRUN=0 00311 IF (LHOOK) CALL DR_HOOK("MODD_TRIP_N:TRIP_ALLOC",1,ZHOOK_HANDLE) 00312 END SUBROUTINE TRIP_ALLOC 00313 00314 SUBROUTINE TRIP_DEALLO 00315 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00316 IF (LHOOK) CALL DR_HOOK("MODD_TRIP_N:TRIP_DEALLO",0,ZHOOK_HANDLE) 00317 IF (ALLOCATED(TRIP_MODEL)) DEALLOCATE(TRIP_MODEL) 00318 IF (LHOOK) CALL DR_HOOK("MODD_TRIP_N:TRIP_DEALLO",1,ZHOOK_HANDLE) 00319 END SUBROUTINE TRIP_DEALLO 00320 ! 00321 END MODULE MODD_TRIP_n