2 PTAB_F,PTAB_H,PTAB_VF,PAREA, PVEL, &
3 PLEN,PWIDTH,PN_FLOOD,PHC, &
4 PHS,PSURF_STO,PFLOOD_STO,PSOURCE, &
5 PFLOOD_STO2,PHFLOOD,PFFLOOD,PFLOOD_LEN, &
6 PWFLOOD,PQFR,PQRF,PVFIN,PVFOUT,PHSF, &
7 PFSTO_ALL,PFSTO2_ALL,PSOURCE_ALL, &
8 PFIN_ALL,PFOUT_ALL,PHF_ALL,PFF_ALL )
61 INTEGER,
INTENT(IN) :: KLISTING
62 REAL,
INTENT(IN) :: PTSTEP
63 LOGICAL,
INTENT(IN) :: OPRINT
65 LOGICAL,
DIMENSION(:,:),
INTENT(IN) :: OMASK_FLD
67 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: PTAB_F
68 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: PTAB_H
69 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: PTAB_VF
71 REAL,
DIMENSION(:,:),
INTENT(IN) :: PAREA
72 REAL,
DIMENSION(:,:),
INTENT(IN) :: PVEL
73 REAL,
DIMENSION(:,:),
INTENT(IN) :: PLEN
74 REAL,
DIMENSION(:,:),
INTENT(IN) :: PWIDTH
75 REAL,
DIMENSION(:,:),
INTENT(IN) :: PN_FLOOD
76 REAL,
DIMENSION(:,:),
INTENT(IN) :: PHC
77 REAL,
DIMENSION(:,:),
INTENT(IN) :: PHS
78 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSURF_STO
79 REAL,
DIMENSION(:,:),
INTENT(IN) :: PFLOOD_STO
80 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSOURCE
82 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PFLOOD_STO2
84 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PHFLOOD
85 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PFFLOOD
86 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PFLOOD_LEN
87 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PWFLOOD
89 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PQFR
90 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PQRF
91 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PVFIN
92 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PVFOUT
93 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PHSF
95 REAL,
INTENT(OUT) :: PFSTO_ALL,PFSTO2_ALL,PSOURCE_ALL, &
96 PFIN_ALL,PFOUT_ALL,PHF_ALL,PFF_ALL
101 REAL,
PARAMETER :: ZLEN_MIN = 1.e-6
103 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZMF
104 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZSLOPE
105 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZRADIUS
106 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZDIST
107 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZDELTA
108 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZMF_IN
109 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZMF_OUT
110 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZFLD_LEN
111 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZAREA_SG
112 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZVRIV
113 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZVFLD
114 REAL,
DIMENSION(SIZE(PAREA,1),SIZE(PAREA,2)) :: ZVINER
118 INTEGER :: ILON, ILAT, JLON, JLAT
120 REAL(KIND=JPRB) :: ZHOOK_HANDLE
126 IF (
lhook)
CALL dr_hook(
'TRIP_SURFACE_FLOOD',0,zhook_handle)
131 pflood_sto2(:,:) = 0.0
147 WHERE(omask_fld(:,:))
148 zarea_sg(:,:) = parea(:,:)-(plen(:,:)*pwidth(:,:))
150 zarea_sg(:,:) = parea(:,:)
157 WHERE(omask_fld(:,:))
158 pflood_sto2(:,:)=pflood_sto(:,:)+ptstep*psource(:,:)
165 CALL flood_update(ptab_f,ptab_h,ptab_vf,zarea_sg,pflood_sto2, &
166 plen,phflood,pfflood,pflood_len,pwflood )
168 zfld_len(:,:)=max(zlen_min,pflood_len(:,:))
177 IF(omask_fld(jlon,jlat))
THEN 182 phsf(jlon,jlat)=phs(jlon,jlat)-phc(jlon,jlat)-phflood(jlon,jlat)
184 zmf(jlon,jlat)=phsf(jlon,jlat)*zfld_len(jlon,jlat)*pwidth(jlon,jlat)*
xrholw 185 zdist(jlon,jlat)=0.5*(pwidth(jlon,jlat)+pwflood(jlon,jlat))
186 zslope(jlon,jlat)=phsf(jlon,jlat)/zdist(jlon,jlat)
193 IF(zmf(jlon,jlat)>0.0.AND.pfflood(jlon,jlat)<1.0)
THEN 195 zradius(jlon,jlat) = phs(jlon,jlat)-phc(jlon,jlat)
196 zradius(jlon,jlat) = exp(
xm*log(zradius(jlon,jlat)))
198 zvfld(jlon,jlat) = zradius(jlon,jlat)*sqrt(zslope(jlon,jlat))/pn_flood(jlon,jlat)
199 zvriv(jlon,jlat) = max(pvel(jlon,jlat),zvfld(jlon,jlat))
200 zviner(jlon,jlat) = sqrt(zvriv(jlon,jlat)*zvfld(jlon,jlat))
201 pvfin(jlon,jlat) = min(zviner(jlon,jlat),zdist(jlon,jlat)/ptstep)
202 pvfout(jlon,jlat) = 0.0
204 zmf_in(jlon,jlat) = zmf(jlon,jlat)
205 zmf_out(jlon,jlat) = 0.0
212 IF(zmf(jlon,jlat)<0.0.AND.pfflood(jlon,jlat)>0.0)
THEN 214 zradius(jlon,jlat) = phflood(jlon,jlat)
215 zradius(jlon,jlat) = exp(
xm*log(zradius(jlon,jlat)))
217 pvfin(jlon,jlat) = 0.0
218 zvfld(jlon,jlat) = zradius(jlon,jlat)*sqrt(-1.0*zslope(jlon,jlat))/pn_flood(jlon,jlat)
219 pvfout(jlon,jlat) = min(zvfld(jlon,jlat),zdist(jlon,jlat)/ptstep)
221 zmf_in(jlon,jlat) = 0.0
222 zmf_out(jlon,jlat) = abs(zmf(jlon,jlat))
224 zdelta(jlon,jlat) = merge(1.0,0.0,pflood_sto2(jlon,jlat)<zmf_out(jlon,jlat))
231 IF(omask_fld(jlon,jlat).AND.zmf(jlon,jlat)/=0.0)
THEN 233 pqrf(jlon,jlat) = zmf_in(jlon,jlat)*pvfin(jlon,jlat)/zdist(jlon,jlat)
235 pqfr(jlon,jlat) = (1.0-zdelta(jlon,jlat)) * zmf_out(jlon,jlat)*pvfout(jlon,jlat)/zdist(jlon,jlat) &
236 + zdelta(jlon,jlat) * pflood_sto2(jlon,jlat)/ptstep
238 pflood_sto2(jlon,jlat) = pflood_sto2(jlon,jlat)+ptstep*(pqrf(jlon,jlat)-pqfr(jlon,jlat))
249 CALL flood_update(ptab_f,ptab_h,ptab_vf,zarea_sg,pflood_sto2, &
250 plen,phflood,pfflood,pflood_len,pwflood )
269 IF(omask_fld(jlon,jlat))
THEN 270 pfsto_all = pfsto_all + pflood_sto(jlon,jlat) / parea(jlon,jlat)
271 pfsto2_all = pfsto2_all + pflood_sto2(jlon,jlat) / parea(jlon,jlat)
272 pfin_all = pfin_all + pqrf(jlon,jlat) / parea(jlon,jlat)
273 pfout_all = pfout_all + pqfr(jlon,jlat) / parea(jlon,jlat)
274 psource_all= psource_all+ psource(jlon,jlat) / parea(jlon,jlat)
275 phf_all = phf_all + phflood(jlon,jlat) * parea(jlon,jlat)
276 pff_all = pff_all + pfflood(jlon,jlat) * parea(jlon,jlat)
277 zarea = zarea + parea(jlon,jlat)
283 phf_all = phf_all / zarea
284 pff_all = pff_all / zarea
290 IF (
lhook)
CALL dr_hook(
'TRIP_SURFACE_FLOOD',1,zhook_handle)
subroutine flood_update(PTAB_F, PTAB_H, PTAB_VF, PAREA, PFLOOD_STO, PLEN, PHFLOOD, PFFLOOD, PFLOOD_LEN, PWFLOOD)
subroutine trip_surface_flood(KLISTING, PTSTEP, OPRINT, OMASK_FLD, PTAB_F, PTAB_H, PTAB_VF, PAREA, PVEL, PLEN, PWIDTH, PN_FLOOD, PHC, PHS, PSURF_STO, PFLOOD_STO, PSOURCE, PFLOOD_STO2, PHFLOOD, PFFLOOD, PFLOOD_LEN, PWFLOOD, PQFR, PQRF, PVFIN, PVFOUT, PHSF, PFSTO_ALL, PFSTO2_ALL, PSOURCE_ALL, PFIN_ALL, PFOUT_ALL, PHF_ALL, PFF_ALL)