SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/TRIP/trip_surface_water.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE TRIP_SURFACE_WATER (PTSTEP,KGRCN,KSEQ,KNEXTX,KNEXTY,KSEQMAX, &
00003                                        PLEN,PRUNOFF,PGOUT,PSURF_STO,PSURF_STO2, &
00004                                        PSIN,PSOUT,PSSTO_ALL,PSSTO2_ALL,PSIN_ALL,&
00005                                        PDRUN_ALL,PSOUT_ALL)  
00006 !     ################################################################
00007 !
00008 !!****  *TRIP_SURFACE_WATER*  
00009 !!
00010 !!    PURPOSE
00011 !!    -------
00012 !
00013 !     Calculate the river storage in the next time step based on the storage
00014 !     of current time step using fixed 0.5m/s stream flow velocity.
00015 !
00016 !     
00017 !!**  METHOD
00018 !!    ------
00019 !
00020 !     Direct calculation
00021 !
00022 !!    EXTERNAL
00023 !!    --------
00024 !
00025 !     None
00026 !!
00027 !!    IMPLICIT ARGUMENTS
00028 !!    ------------------
00029 !!
00030 !!      
00031 !!    REFERENCE
00032 !!    ---------
00033 !!      
00034 !!    AUTHOR
00035 !!    ------
00036 !!      B. Decharme     
00037 !!
00038 !!    MODIFICATIONS
00039 !!    -------------
00040 !!      Original    01/02/05 
00041 !-------------------------------------------------------------------------------
00042 !
00043 !*       0.     DECLARATIONS
00044 !               ------------
00045 !
00046 USE MODD_TRIP_n,   ONLY : XCVEL
00047 USE MODD_TRIP_PAR, ONLY : XRHOLW_T
00048 !
00049 !
00050 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00051 USE PARKIND1  ,ONLY : JPRB
00052 !
00053 IMPLICIT NONE
00054 !
00055 !*      0.1    declarations of arguments
00056 !
00057 REAL, INTENT(IN)                     :: PTSTEP ! Trip timestep value (10800s)
00058 !
00059 INTEGER, DIMENSION(:,:),INTENT(IN)   :: KGRCN  ! Flow direction (1->8)
00060 INTEGER, DIMENSION(:,:),INTENT(IN)   :: KSEQ   ! River sequence
00061 INTEGER, DIMENSION(:,:),INTENT(IN)   :: KNEXTX ! returns x and y point
00062 INTEGER, DIMENSION(:,:),INTENT(IN)   :: KNEXTY ! of destination grid:
00063 !                                                                    8 1 2
00064 !                                                                    7   3
00065 !                                                                    6 5 4
00066 !
00067 INTEGER, INTENT(IN)                  :: KSEQMAX ! maximum down flow
00068 !
00069 REAL,DIMENSION(:,:), INTENT(IN)      :: PLEN       ! river length       [m] 
00070 REAL,DIMENSION(:,:), INTENT(IN)      :: PRUNOFF    ! Surface runoff from ISBA    [kg/s]
00071 REAL,DIMENSION(:,:), INTENT(IN)      :: PGOUT      ! ground water outflow        [kg/s]
00072 REAL,DIMENSION(:,:), INTENT(IN)      :: PSURF_STO  ! river channel storage at t    [kg]
00073 !
00074 REAL,DIMENSION(:,:), INTENT(INOUT)   :: PSURF_STO2 ! river channel storage at t+1     [kg]
00075 !
00076 REAL,DIMENSION(:,:), INTENT(OUT)     :: PSIN  ! Inflow to the surface river reservoir [kg/s]
00077 REAL,DIMENSION(:,:), INTENT(OUT)     :: PSOUT ! Outflow from the surface river reservoir [kg/s]
00078 !
00079 REAL,                INTENT(OUT)     :: PSSTO_ALL,PSSTO2_ALL,PSIN_ALL,    
00080                                           PDRUN_ALL,PSOUT_ALL  
00081 !                                       Final budget variable
00082 !
00083 !*      0.2    declarations of local variables
00084 !
00085 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZQIN
00086 !
00087 REAL    :: ZRC,ZQOUT,ZSTOMAX
00088 !
00089 INTEGER :: ILON, ILAT, I, J, ISEQ
00090 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00091 !
00092 !-------------------------------------------------------------------------------
00093 !-------------------------------------------------------------------------------
00094 !
00095 IF (LHOOK) CALL DR_HOOK('TRIP_SURFACE_WATER',0,ZHOOK_HANDLE)
00096 ILON = SIZE(PLEN,1)
00097 ILAT = SIZE(PLEN,2)
00098 !
00099 !-------------------------------------------------------------------------------
00100 !-------------------------------------------------------------------------------
00101 !
00102 PSURF_STO2 (:,:) = 0.0
00103 PSIN       (:,:) = 0.0
00104 PSOUT      (:,:) = 0.0
00105 !
00106 ZQIN  (:,:) = 0.0
00107 !
00108 PSSTO_ALL   = 0.0
00109 PSSTO2_ALL  = 0.0
00110 PSIN_ALL    = 0.0
00111 PDRUN_ALL   = 0.0
00112 PSOUT_ALL   = 0.0
00113 !
00114 !-------------------------------------------------------------------------------
00115 !Sequence loop
00116 !
00117 DO ISEQ=1,KSEQMAX
00118    DO J=1,ILAT
00119       DO I=1,ILON
00120 !      
00121          IF(KSEQ(I,J)/=ISEQ.OR.KSEQ(I,J)==0)CYCLE      
00122 !
00123 !        ---------------------------------------------------------------------
00124 !        inflow calculation
00125 !
00126          ZQIN(I,J)=ZQIN(I,J)+PRUNOFF(I,J)+PGOUT(I,J)
00127          PDRUN_ALL=PDRUN_ALL+PRUNOFF(I,J)+PGOUT(I,J)
00128 !
00129          PSIN(I,J)=ZQIN(I,J)
00130 !
00131 !        ------------------------------------------------------------------
00132 !        Fixed river channel velocity             
00133          ZRC = XCVEL / PLEN(I,J)
00134 !              
00135 !        ------------------------------------------------------------------
00136 !        river channel storage calculation
00137          PSURF_STO2(I,J) = PSURF_STO(I,J)*EXP(-(ZRC*PTSTEP))+(1.0-EXP(-(ZRC*PTSTEP)))*ZQIN(I,J)/ZRC 
00138 !
00139 !        -------------------------------------------------------------------
00140 !        supress numerical artifacs
00141          ZSTOMAX=ZQIN(I,J)*PTSTEP+PSURF_STO(I,J)
00142 !      
00143          PSURF_STO2(I,J)=MIN(ZSTOMAX, PSURF_STO2(I,J))
00144 !
00145 !        ------------------------------------------------------------------
00146 !        river channel outflow calculation and supress numerical artifacs
00147 !
00148          ZQOUT      = (PSURF_STO(I,J)-PSURF_STO2(I,J))/PTSTEP+ZQIN(I,J)
00149          PSOUT(I,J) = MAX(ZQOUT,0.0)
00150 !             
00151          PSURF_STO2(I,J) = PSURF_STO2(I,J) + (PSOUT(I,J)-ZQOUT)             
00152 !            
00153 !        ------------------------------------------------------------------
00154 !        budget calculation
00155          PSSTO_ALL  = PSSTO_ALL  + PSURF_STO(I,J)  
00156          PSSTO2_ALL = PSSTO2_ALL + PSURF_STO2(I,J)
00157          PSIN_ALL   = PSIN_ALL   + ZQIN(I,J)
00158          PSOUT_ALL  = PSOUT_ALL  + PSOUT(I,J)
00159 !              
00160 !        ------------------------------------------------------------------
00161          IF(KGRCN(I,J)>=1.AND.KGRCN(I,J)<=8)THEN
00162            ZQIN(KNEXTX(I,J),KNEXTY(I,J))=ZQIN(KNEXTX(I,J),KNEXTY(I,J))+PSOUT(I,J)
00163          ENDIF
00164 !
00165       ENDDO
00166    ENDDO
00167 ENDDO
00168 !
00169 IF (LHOOK) CALL DR_HOOK('TRIP_SURFACE_WATER',1,ZHOOK_HANDLE)
00170 !
00171 !-------------------------------------------------------------------------------
00172 !-------------------------------------------------------------------------------
00173 END SUBROUTINE TRIP_SURFACE_WATER