SURFEX v8.1
General documentation of Surfex
flood_update.F90
Go to the documentation of this file.
1 ! #########
2  SUBROUTINE flood_update (PTAB_F,PTAB_H,PTAB_VF,PAREA,PFLOOD_STO, &
3  PLEN,PHFLOOD,PFFLOOD,PFLOOD_LEN,PWFLOOD )
4 ! ##########################################################################
5 !
6 !!**** *FLOOD_UPDATE*
7 !!
8 !! PURPOSE
9 !! -------
10 !
11 ! Compute HFLOOD, FFLOOD, LFLOOD, WFLOOD.
12 !
13 !!** METHOD
14 !! ------
15 !
16 ! Direct calculation
17 !
18 !! EXTERNAL
19 !! --------
20 !
21 ! None
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !!
27 !! REFERENCE
28 !! ---------
29 !!
30 !! AUTHOR
31 !! ------
32 !! B. Decharme
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 01/11/06
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
42 USE modn_trip, ONLY : xratmed
43 !
44 USE modd_trip_par, ONLY : xundef, xrholw
45 !
46 USE yomhook ,ONLY : lhook, dr_hook
47 USE parkind1 ,ONLY : jprb
48 !
49 IMPLICIT NONE
50 !
51 !* 0.1 declarations of arguments
52 !
53 REAL,DIMENSION(:,:,:), INTENT(IN) :: PTAB_F ! Flood fraction array
54 REAL,DIMENSION(:,:,:), INTENT(IN) :: PTAB_H ! Topo height array
55 REAL,DIMENSION(:,:,:), INTENT(IN) :: PTAB_VF ! Flood volume array
56 REAL,DIMENSION(:,:), INTENT(IN) :: PAREA ! grid area [mē]
57 REAL,DIMENSION(:,:), INTENT(IN) :: PFLOOD_STO ! Floodplain water mass [kg]
58 REAL,DIMENSION(:,:), INTENT(IN) :: PLEN ! River lenght [m]
59 !
60 REAL,DIMENSION(:,:), INTENT(OUT) :: PHFLOOD ! Floodplain fraction [-]
61 REAL,DIMENSION(:,:), INTENT(OUT) :: PFFLOOD ! Floodplain water depth [m]
62 REAL,DIMENSION(:,:), INTENT(OUT) :: PFLOOD_LEN ! Floodplain lenght [m]
63 REAL,DIMENSION(:,:), INTENT(OUT) :: PWFLOOD ! Floodplain width [m]
64 !
65 !* 0.2 declarations of local variables
66 !
67 REAL, DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZFLOOD_STO !kg/m2
68 !
69 INTEGER, DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: IUP, IDOWN
70 !
71 INTEGER :: ILON, ILAT, JLON, JLAT, JPAS, IPAS
72 !
73 REAL(KIND=JPRB) :: ZHOOK_HANDLE
74 !
75 !-------------------------------------------------------------------------------
76 ! * Initialize local variable
77 !-------------------------------------------------------------------------------
78 !
79 IF (lhook) CALL dr_hook('FLOOD_UPDATE',0,zhook_handle)
80 !
81 ilon = SIZE(ptab_f,1)
82 ilat = SIZE(ptab_f,2)
83 ipas = SIZE(ptab_f,3)
84 !
85 phflood(:,:) = 0.0
86 pfflood(:,:) = 0.0
87 pwflood(:,:) = 0.0
88 pflood_len(:,:) = 0.0
89 !
90 zflood_sto(:,:) = pflood_sto(:,:)/parea(:,:)
91 !
92 DO jlat=1,ilat
93  DO jlon=1,ilon
94  IF(zflood_sto(jlon,jlat)>0.0)THEN
95  DO jpas=1,ipas-1
96  IF(zflood_sto(jlon,jlat)>=ptab_vf(jlon,jlat,jpas))THEN
97  iup(jlon,jlat) = jpas+1
98  idown(jlon,jlat) = jpas
99  ENDIF
100  ENDDO
101  ENDIF
102  ENDDO
103 ENDDO
104 !
105 !-------------------------------------------------------------------------------
106 ! * Calculate new Fflood and Hflood
107 !-------------------------------------------------------------------------------
108 !
109 DO jlat=1,ilat
110  DO jlon=1,ilon
111  IF(zflood_sto(jlon,jlat)>0.0)THEN
112  pfflood(jlon,jlat) = ptab_f(jlon,jlat,idown(jlon,jlat)) &
113  + (zflood_sto(jlon,jlat) -ptab_vf(jlon,jlat,idown(jlon,jlat))) &
114  * (ptab_f(jlon,jlat,iup(jlon,jlat))-ptab_f(jlon,jlat,idown(jlon,jlat))) &
115  / (ptab_vf(jlon,jlat,iup(jlon,jlat))-ptab_vf(jlon,jlat,idown(jlon,jlat)))
116  phflood(jlon,jlat) = ptab_h(jlon,jlat,idown(jlon,jlat)) &
117  + (zflood_sto(jlon,jlat) -ptab_vf(jlon,jlat,idown(jlon,jlat))) &
118  * (ptab_h(jlon,jlat,iup(jlon,jlat))-ptab_h(jlon,jlat,idown(jlon,jlat))) &
119  / (ptab_vf(jlon,jlat,iup(jlon,jlat))-ptab_vf(jlon,jlat,idown(jlon,jlat)))
120  ENDIF
121  IF(pfflood(jlon,jlat)>=1.0)THEN
122  pfflood(jlon,jlat) = 1.0
123  phflood(jlon,jlat) = ptab_h(jlon,jlat,iup(jlon,jlat)) &
124  + (zflood_sto(jlon,jlat)-ptab_vf(jlon,jlat,iup(jlon,jlat))) / xrholw
125  ENDIF
126  ENDDO
127 ENDDO
128 !
129 !-------------------------------------------------------------------------------
130 ! * Calculate new Wflood, Lflood
131 !-------------------------------------------------------------------------------
132 !
133 WHERE(zflood_sto(:,:)>0.0)
134  pflood_len(:,:) = min(plen(:,:),xratmed*sqrt(pfflood(:,:)*parea(:,:)))
135  pwflood(:,:) = parea(:,:)*pfflood(:,:)/pflood_len(:,:)
136 ENDWHERE
137 !
138 IF (lhook) CALL dr_hook('FLOOD_UPDATE',1,zhook_handle)
139 !
140 !-------------------------------------------------------------------------------
141 END SUBROUTINE flood_update
subroutine flood_update(PTAB_F, PTAB_H, PTAB_VF, PAREA, PFLOOD_STO, PLEN, PHFLOOD, PFFLOOD, PFLOOD_LEN, PWFLOOD)
Definition: flood_update.F90:4
real, save xrholw
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
real xratmed
Definition: modn_trip.F90:66
real, save xundef