SURFEX v8.1
General documentation of Surfex
trip_hs_vel.F90
Go to the documentation of this file.
1 ! #########
2 SUBROUTINE trip_hs_vel (PTSTEP,OMASK_VEL,PLEN,PWIDTH,PSLOPEBED,PN,PSURF_STO,PHS,PVEL)
3 ! ################################################################
4 !
5 !!**** *TRIP_HS_VEL*
6 !!
7 !! PURPOSE
8 !! -------
9 !
10 ! Calculate the river height and velocity
11 ! Where OMASK_VEL=true the Manning equation is used
12 !
13 !
14 !!** METHOD
15 !! ------
16 !
17 !! EXTERNAL
18 !! --------
19 !
20 ! None
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !! AUTHOR
30 !! ------
31 !! B. Decharme
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 01/02/09
36 !-------------------------------------------------------------------------------
37 !
38 !* 0. DECLARATIONS
39 ! ------------
40 !
41 USE modn_trip, ONLY : cvit, xcvel
42 USE modd_trip_par, ONLY : xundef, xm, xvelmin, &
43  xhsmin, xrholw
44 !
45 USE yomhook ,ONLY : lhook, dr_hook
46 USE parkind1 ,ONLY : jprb
47 !
48 USE modi_abort_trip
49 !
50 IMPLICIT NONE
51 !
52 !* 0.1 declarations of arguments
53 !
54 REAL, INTENT(IN) :: PTSTEP ! Trip timestep value (10800s)
55 !
56 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASK_VEL ! Variable velocity mask
57 REAL, DIMENSION(:,:), INTENT(IN) :: PLEN ! river length [m]
58 REAL, DIMENSION(:,:), INTENT(IN) :: PWIDTH ! river widths [m]
59 REAL, DIMENSION(:,:), INTENT(IN) :: PSLOPEBED ! river bed slopes [m/m]
60 REAL, DIMENSION(:,:), INTENT(IN) :: PN ! Manning roughness coeficient [-] (0.03 to 0.065)
61 REAL, DIMENSION(:,:), INTENT(IN) :: PSURF_STO ! river channel storage at t [kg]
62 REAL, DIMENSION(:,:), INTENT(OUT) :: PHS ! river channel height [m]
63 REAL, DIMENSION(:,:), INTENT(OUT) :: PVEL ! River channel velocity [m/s]
64 !
65 !* 0.2 declarations of local variables
66 !
67 REAL, PARAMETER :: ZLOG_MIN = 1.e-12
68 !
69 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZRADIUS
70 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZHS
71 REAL, DIMENSION(SIZE(PLEN,1),SIZE(PLEN,2)) :: ZVEL
72 !
73 REAL(KIND=JPRB) :: ZHOOK_HANDLE
74 !
75 !-------------------------------------------------------------------------------
76 ! * Init
77 !-------------------------------------------------------------------------------
78 !
79 IF (lhook) CALL dr_hook('TRIP_HS_VEL',0,zhook_handle)
80 !
81 zradius(:,:) = 0.0
82 zvel(:,:) = 0.0
83 zhs(:,:) = 0.0
84 !
85 !-------------------------------------------------------------------------------
86 ! * River channel velocity
87 !-------------------------------------------------------------------------------
88 !
89 !Constant streamflow velocity
90 phs(:,:)=xundef
91 pvel(:,:)=xcvel
92 !
93 IF(cvit == 'VAR')THEN
94  WHERE(omask_vel(:,:))
95  !Variable streamflow velocity
96  phs(:,:)=psurf_sto(:,:)/(xrholw*plen(:,:)*pwidth(:,:))
97  zhs(:,:)=max(phs(:,:),zlog_min)
98  zradius(:,:)=log(pwidth(:,:)*zhs(:,:)/(pwidth(:,:)+2.0*zhs(:,:)))
99  zvel(:,:)=exp(xm*zradius(:,:))*sqrt(pslopebed(:,:))/pn(:,:)
100  zvel(:,:)=max(xvelmin,zvel(:,:))
101  zvel(:,:)=min(zvel(:,:),plen(:,:)/ptstep)
102  !Velocity limitation if the river is very dry
103  pvel(:,:)=zvel(:,:)*min(1.0,max(0.0,(phs(:,:)-xhsmin))/xhsmin)
104  ENDWHERE
105 ENDIF
106 !
107 IF (lhook) CALL dr_hook('TRIP_HS_VEL',1,zhook_handle)
108 !
109 !-------------------------------------------------------------------------------
110 END SUBROUTINE trip_hs_vel
real, save xm
real xcvel
Definition: modn_trip.F90:45
subroutine trip_hs_vel(PTSTEP, OMASK_VEL, PLEN, PWIDTH, PSLOPEBED, PN, PSURF_STO, PHS, PVEL)
Definition: trip_hs_vel.F90:3
real, save xrholw
integer, parameter jprb
Definition: parkind1.F90:32
character(len=3) cvit
Definition: modn_trip.F90:41
logical lhook
Definition: yomhook.F90:15
real, save xvelmin
real, save xhsmin
real, save xundef