SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/TRIP/modd_tripn.F90
Go to the documentation of this file.
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