SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/TRIP/trip.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE TRIP (KLUOUT,HGROUNDW,HVIT,OFLOOD,OPRINT,PTSTEP,         &
00003                          KGRCN,KSEQ,KNEXTX,KNEXTY,KSEQMAX,PTAUG,PAREA,    &
00004                          PLEN,PFLOOD_LEN,PSLOPEBED,PWIDTH,PN,PN_FLOOD,    &
00005                          PHC_BED,PWFLOOD,PTAB_F,PTAB_H,PTAB_VF,PDRAIN,    &
00006                          PRUNOFF,PSOURCE,PGROUND_STO,PSURF_STO,           &
00007                          PFLOOD_STO,PSOUT,PGOUT,PHS,PHFLOOD,PVEL,         &
00008                          PFFLOOD,PQFR,PQRF,PVFIN,PVFOUT,                  &
00009                          PHSF,PSIN,KTRIP,KTSEPT,KTSTEP_END,KTABMAX        )  
00010 !     ###################################################################
00011 !
00012 !!****  *TRIP*  
00013 !!
00014 !!    PURPOSE
00015 !!    -------
00016 !
00017 !     TRIP river routing and Floodplains schemes.
00018 !     
00019 !!      
00020 !!    REFERENCE
00021 !!    ---------
00022 !!      
00023 !!    AUTHOR
00024 !!    ------
00025 !!      B. Decharme     
00026 !!
00027 !!    MODIFICATIONS
00028 !!    -------------
00029 !!      Original    01/02/05 
00030 !!      Modif.      28/05/08 
00031 !-------------------------------------------------------------------------------
00032 !
00033 !*       0.     DECLARATIONS
00034 !               ------------
00035 !
00036 USE MODD_TRIP_PAR, ONLY : XRHOLW_T,XSEA_T,XYEAR_T
00037 !
00038 USE MODI_TRIP_GROUND_WATER
00039 !
00040 USE MODI_TRIP_SURFACE_WATER
00041 USE MODI_TRIP_SURFACE_WATER_VELVAR
00042 USE MODI_TRIP_SURFACE_WATER_FLOOD
00043 !
00044 !
00045 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00046 USE PARKIND1  ,ONLY : JPRB
00047 !
00048 IMPLICIT NONE
00049 !
00050 !*      0.1    declarations of arguments
00051 !
00052 INTEGER, INTENT(IN)                  :: KLUOUT
00053 INTEGER, INTENT(IN)                  :: KTRIP
00054 INTEGER, INTENT(IN)                  :: KTSEPT
00055 INTEGER, INTENT(IN)                  :: KTSTEP_END
00056 !
00057  CHARACTER(LEN=3), INTENT(IN)         :: HGROUNDW !Groundwater scheme key
00058  CHARACTER(LEN=3), INTENT(IN)         :: HVIT     !Variable velocity scheme key
00059 !
00060 LOGICAL, INTENT(IN)                  :: OFLOOD   !Flood scheme key
00061 LOGICAL, INTENT(IN)                  :: OPRINT   !Printable budget key 
00062 !
00063 REAL, INTENT(IN)                     :: PTSTEP   !Trip timestep
00064 !
00065 INTEGER, INTENT(IN)                  :: KSEQMAX  !maximum down flow
00066 INTEGER, DIMENSION(:,:),INTENT(IN)   :: KGRCN    !Flow direction (1->8)
00067 INTEGER, DIMENSION(:,:),INTENT(IN)   :: KSEQ     !River sequence
00068 INTEGER, DIMENSION(:,:),INTENT(IN)   :: KNEXTX   !returns x and y point
00069 INTEGER, DIMENSION(:,:),INTENT(IN)   :: KNEXTY   !of destination grid
00070 !
00071 REAL, DIMENSION(:,:), INTENT(IN)     :: PTAUG    !ground water transfer time  [s]
00072 !
00073 REAL,DIMENSION(:,:), INTENT(IN)      :: PLEN       ! river length       [m] 
00074 REAL,DIMENSION(:,:), INTENT(IN)      :: PSLOPEBED  ! river bed slopes             [m/m]
00075 REAL,DIMENSION(:,:), INTENT(IN)      :: PWIDTH     ! river widths                 [m]
00076 REAL,DIMENSION(:,:), INTENT(IN)      :: PN         ! Manning roughness coeficient [-] (0.03 to 0.065)
00077 REAL,DIMENSION(:,:), INTENT(IN)      :: PN_FLOOD   ! Manning coeficient over floodplains   [-] (0.1)
00078 REAL,DIMENSION(:,:), INTENT(IN)      :: PHC_BED    ! River bed depth              [m]
00079 REAL,DIMENSION(:,:), INTENT(IN)      :: PSOURCE    ! precip-infiltration-evaporation [kg/s]
00080 REAL,DIMENSION(:,:), INTENT(IN)      :: PAREA      ! Grid-cell area    [mē]
00081 REAL,DIMENSION(:,:), INTENT(IN)      :: PDRAIN     ! Subsurface runoff from ISBA [kg/s]
00082 REAL,DIMENSION(:,:), INTENT(INOUT)   :: PRUNOFF    ! Surface runoff from ISBA    [kg/s]
00083 !
00084 REAL,DIMENSION(:,:), INTENT(INOUT)   :: PHFLOOD    ! Floodplain water depth       [m]
00085 REAL,DIMENSION(:,:), INTENT(INOUT)   :: PWFLOOD    ! Floodplain width             [m]
00086 REAL,DIMENSION(:,:), INTENT(INOUT)   :: PFLOOD_LEN ! Floodplain length along the river [m]
00087 REAL,DIMENSION(:,:), INTENT(INOUT)   :: PFFLOOD    ! Fraction of flood [-]
00088 REAL,DIMENSION(:,:), INTENT(INOUT)   :: PSURF_STO  ! river channel storage at t    [kg]
00089 REAL,DIMENSION(:,:), INTENT(INOUT)   :: PGROUND_STO! groundwater storage at t    [kg]
00090 REAL,DIMENSION(:,:), INTENT(INOUT)   :: PFLOOD_STO ! Floodplain water storage at t [kg]
00091 !
00092 REAL,DIMENSION(:,:), INTENT(OUT)     :: PSOUT ! Outflow from the surface river reservoir [kg/s]
00093 REAL,DIMENSION(:,:), INTENT(OUT)     :: PSIN  ! Inflow to the surface river reservoir [kg/s]
00094 REAL,DIMENSION(:,:), INTENT(OUT)     :: PGOUT      ! ground water outflow        [kg/s]
00095 REAL,DIMENSION(:,:), INTENT(OUT)     :: PHS   ! River height [m]
00096 REAL,DIMENSION(:,:), INTENT(OUT)     :: PVEL  ! River channel velocity  [m/s]
00097 REAL,DIMENSION(:,:), INTENT(OUT)     :: PQFR  ! Flood flow to river
00098 REAL,DIMENSION(:,:), INTENT(OUT)     :: PQRF  ! River flow to floodplain
00099 !
00100 REAL,DIMENSION(:,:), INTENT(OUT)     :: PVFIN ! River flow to flood velocity [m/s]
00101 REAL,DIMENSION(:,:), INTENT(OUT)     :: PVFOUT! Flood flow to river velocity [m/s]
00102 REAL,DIMENSION(:,:), INTENT(OUT)     :: PHSF  ! River-Floodplain depth comparison [m]
00103 !
00104 REAL,DIMENSION(:,:,:), INTENT(IN)    :: PTAB_F  ! Flood fraction array
00105 REAL,DIMENSION(:,:,:), INTENT(IN)    :: PTAB_H  ! Topo height array
00106 REAL,DIMENSION(:,:,:), INTENT(IN)    :: PTAB_VF ! Flood volume array
00107 INTEGER, DIMENSION(:,:),INTENT(IN)   :: KTABMAX
00108 !
00109 !*      0.2    declarations of local variables
00110 !
00111 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZSURF_STO2  ! river channel storage at t+1     [kg]    
00112 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZGROUND_STO2! Groundwater storage at t+1     [kg] 
00113 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZFLOOD_STO2 ! Floodplain water storage at t+1  [kg]   
00114 !
00115 REAL    :: ZGSTO_ALL, ZGSTO2_ALL, ZGIN_ALL, ZGOUT_ALL, ZFSTO_ALL,   
00116              ZFSTO2_ALL, ZSOURCE_ALL, ZSSTO_ALL, ZSSTO2_ALL, ZSIN_ALL,
00117              ZDRUN_ALL, ZSOUT_ALL, ZVEL_ALL, ZFIN_ALL, ZFOUT_ALL,     
00118              ZSFLOOD_ALL,ZHS_ALL,ZHF_ALL,ZFF_ALL  
00119 !
00120 INTEGER :: ILON, ILAT
00121 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00122 !
00123 !-------------------------------------------------------------------------------
00124 !-------------------------------------------------------------------------------!  
00125 !
00126 IF (LHOOK) CALL DR_HOOK('TRIP',0,ZHOOK_HANDLE)
00127 ILON = SIZE(PLEN,1)
00128 ILAT = SIZE(PLEN,2)
00129 !
00130 ZGSTO_ALL   = 0.0
00131 ZGSTO2_ALL  = 0.0
00132 ZGIN_ALL    = 0.0
00133 ZGOUT_ALL   = 0.0
00134 ZFSTO_ALL   = 0.0
00135 ZFSTO2_ALL  = 0.0
00136 ZSOURCE_ALL = 0.0
00137 ZSSTO_ALL   = 0.0
00138 ZSSTO2_ALL  = 0.0
00139 ZSIN_ALL    = 0.0
00140 ZDRUN_ALL   = 0.0
00141 ZSOUT_ALL   = 0.0
00142 ZVEL_ALL    = 0.0
00143 ZFIN_ALL    = 0.0
00144 ZFOUT_ALL   = 0.0
00145 ZSFLOOD_ALL = 0.0
00146 ZHS_ALL     = 0.0
00147 ZHF_ALL     = 0.0
00148 ZFF_ALL     = 0.0
00149 !
00150 ZSURF_STO2 = 0.0
00151 ZGROUND_STO2 = 0.0
00152 ZFLOOD_STO2 = 0.0
00153 !
00154 ! * Ground water storage
00155 !
00156 IF(HGROUNDW/='DEF')THEN
00157 !        
00158   CALL TRIP_GROUND_WATER(PTSTEP,PGROUND_STO,ZGROUND_STO2,PDRAIN,PTAUG, &
00159                            PGOUT,ZGSTO_ALL,ZGSTO2_ALL,ZGIN_ALL,ZGOUT_ALL )  
00160 !            
00161   PGROUND_STO = ZGROUND_STO2  
00162 !
00163 ELSE
00164 !
00165    PGOUT=PDRAIN
00166 !
00167 ENDIF
00168 !
00169 ! * Surface water storage with or without Floodplains
00170 !
00171 IF(OFLOOD)THEN
00172 !        
00173    CALL TRIP_SURFACE_WATER_FLOOD(KLUOUT,PTSTEP,KGRCN,KSEQ,KNEXTX,KNEXTY,         &
00174                                    KSEQMAX,PLEN,PFLOOD_LEN,PSLOPEBED,PWIDTH,     &
00175                                    PN,PN_FLOOD,PHC_BED,PHFLOOD,PRUNOFF,          &
00176                                    PSURF_STO,ZSURF_STO2,PGOUT,PSOURCE,           &
00177                                    PFLOOD_STO,ZFLOOD_STO2,PSOUT,PVEL,PHS,        &
00178                                    PFFLOOD,PAREA,PQFR,PQRF,                      &
00179                                    PVFIN,PVFOUT,PHSF,PSIN,                       &
00180                                    ZSSTO_ALL,ZSSTO2_ALL,ZSIN_ALL,ZDRUN_ALL,      &
00181                                    ZSOUT_ALL,ZVEL_ALL,ZFSTO_ALL,ZFSTO2_ALL,      &
00182                                    ZSOURCE_ALL,ZFIN_ALL,ZFOUT_ALL,PWFLOOD,       &
00183                                    ZSFLOOD_ALL,ZHS_ALL,PTAB_F,PTAB_H,PTAB_VF,    &
00184                                    KTABMAX                                       )  
00185 !  
00186    PFLOOD_STO(:,:) = ZFLOOD_STO2(:,:)
00187 !      
00188    IF(OPRINT)THEN
00189      ZHF_ALL = SUM(PHFLOOD(:,:)*PAREA(:,:),PWIDTH(:,:)>0.0)/SUM(PAREA(:,:),PWIDTH(:,:)>0.0)
00190      ZFF_ALL = SUM(PFFLOOD(:,:)*PAREA(:,:),PWIDTH(:,:)>0.0)/SUM(PAREA(:,:),PWIDTH(:,:)>0.0)
00191    ENDIF
00192 !                                
00193 ELSEIF(HVIT=='VAR')THEN
00194 !        
00195    CALL TRIP_SURFACE_WATER_VELVAR(PTSTEP,KGRCN,KSEQ,KNEXTX,KNEXTY,KSEQMAX,      &
00196                                     PLEN,PSLOPEBED,PWIDTH,PN,PRUNOFF,PSURF_STO,   &
00197                                     ZSURF_STO2,PGOUT,PSIN,PSOUT,PVEL,PHS,PAREA,   &
00198                                     ZSSTO_ALL,ZSSTO2_ALL,ZSIN_ALL,ZDRUN_ALL,      &
00199                                     ZSOUT_ALL,ZVEL_ALL,ZHS_ALL                    )  
00200 !
00201 ELSE
00202 !        
00203    CALL TRIP_SURFACE_WATER(PTSTEP,KGRCN,KSEQ,KNEXTX,KNEXTY,KSEQMAX, &
00204                              PLEN,PRUNOFF,PGOUT,PSURF_STO,ZSURF_STO2, &
00205                              PSIN,PSOUT,ZSSTO_ALL,ZSSTO2_ALL,ZSIN_ALL,&
00206                              ZDRUN_ALL,ZSOUT_ALL)  
00207 !
00208 ENDIF
00209 !
00210 PSURF_STO(:,:) = ZSURF_STO2(:,:)
00211 !   
00212 ! * Writting the budget
00213 !
00214 IF(OPRINT.AND.KTRIP==1.AND.KTSEPT==1)THEN
00215 !
00216   WRITE(KLUOUT,*)''
00217   WRITE(KLUOUT,*)'        START RUN ISBA-TRIP-FP     '
00218   WRITE(KLUOUT,*)'          Budget en 10^12 kg       '
00219   WRITE(KLUOUT,*)''
00220   WRITE(KLUOUT,'(a81)')'RUN TSTEP   S_err    F_err     G_err    MR(mm/y) Vel(m/s)  Hs      Hf         Ff'
00221   WRITE(KLUOUT,*)''
00222 !  
00223 ENDIF
00224 !
00225 IF(OPRINT) &
00226     WRITE(KLUOUT,'(i3,1x,i3,3(2x,g8.2),f8.2,f8.2,7(2x,g8.2))')                 &
00227     KTRIP,KTSEPT,                                                              &
00228 ! surface budget S_err
00229     (ZSSTO_ALL-ZSSTO2_ALL)+PTSTEP*(ZSIN_ALL-ZSOUT_ALL+ZSFLOOD_ALL),        &
00230 ! floodplains budget F_err
00231     (ZFSTO_ALL-ZFSTO2_ALL)+PTSTEP*(ZSOURCE_ALL+ZFIN_ALL-ZFOUT_ALL),        &
00232 ! ground budget G_err
00233     (ZGSTO_ALL-ZGSTO2_ALL)+PTSTEP*(ZGIN_ALL-ZGOUT_ALL),                    &
00234 ! output flow to the sea, MR(mm/y) 
00235     (ZSSTO_ALL-ZSSTO2_ALL +PTSTEP*ZDRUN_ALL)/XSEA_T*XYEAR_T*REAL(KTSTEP_END),
00236 ! mean flow velocity, Vel(m/s), and mean stream depth, Hs (m) 
00237 ! mean floddplains depth, Hf (m), and mean flood fraction, Ff (%) 
00238     ZVEL_ALL,ZHS_ALL,ZHF_ALL,100.*ZFF_ALL  
00239 IF (LHOOK) CALL DR_HOOK('TRIP',1,ZHOOK_HANDLE)
00240 !
00241 !-------------------------------------------------------------------------------
00242 !-------------------------------------------------------------------------------
00243 END SUBROUTINE TRIP