3 KLON,KLAT,PTSTEP,PREAD,PSRCFLD,PRESIDU)
58 TYPE(
trip_t),
INTENT(INOUT) :: TP
61 INTEGER,
INTENT(IN) :: KLON
62 INTEGER,
INTENT(IN) :: KLAT
64 REAL,
INTENT(IN) :: PTSTEP
66 REAL,
DIMENSION(:,:),
INTENT(IN ) :: PREAD
67 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSRCFLD
68 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PRESIDU
73 REAL,
PARAMETER :: ZNEG = -1.0
74 REAL,
PARAMETER :: ZLIM = -0.95
75 REAL,
PARAMETER :: ZSTO = 0.1
77 LOGICAL,
DIMENSION(0:TPG%NBASMAX) :: LBAS_FLD
79 REAL,
DIMENSION(TPG%NBASMAX) :: ZBAS_REMAIN
80 REAL,
DIMENSION(TPG%NBASMAX) :: ZBAS_AREA
81 REAL,
DIMENSION(TPG%NBASMAX) :: ZBAS_STO
83 REAL,
DIMENSION(KLON,KLAT) :: ZFLDBUDGET
84 REAL,
DIMENSION(KLON,KLAT) :: ZRATIO
85 REAL,
DIMENSION(KLON,KLAT) :: ZREMAIN
93 INTEGER :: JBAS, JLON, JLAT, ICOUNT
95 REAL(KIND=JPRB) :: ZHOOK_HANDLE
99 IF (
lhook)
CALL dr_hook(
'FLOOD_REDISTRIB',0,zhook_handle)
110 IF(all(pread(:,:)==0.0))
THEN 112 IF (
lhook)
CALL dr_hook(
'FLOOD_REDISTRIB',1,zhook_handle)
120 WHERE(tpg%GMASK_FLD(:,:).AND.pread(:,:)/=0.0)
121 zfldbudget(:,:) = tp%XFLOOD_STO(:,:)+pread(:,:)*tpg%XAREA(:,:)*ptstep
124 WHERE(tp%XFLOOD_STO(:,:)>0.0.AND.zfldbudget(:,:)>=0.0.AND.zfldbudget(:,:
129 WHERE(tp%XFLOOD_STO(:,:)>0.0.AND.zfldbudget(:,:)<0.0.AND.zfldbudget(:,:)
131 presidu(:,:) = max(zlim*tp%XSURF_STO(:,:),zfldbudget(:,:))/(tpg%XAREA(
134 zremain(:,:) = pread(:,:) - psrcfld(:,:) - presidu(:,:)
140 lbas_fld(:) = .false.
147 jbas = tpg%NBASID(jlon,jlat)
148 IF(tpg%GMASK_FLD(jlon,jlat).AND.(.NOT.lbas_fld(jbas)))
THEN 149 lbas_fld(jbas)=(tp%XFLOOD_STO(jlon,jlat)>0.0)
151 IF(tpg%GMASK_FLD(jlon,jlat))
THEN 152 zfluxe_in = zfluxe_in + tpg%XAREA(jlon,jlat) * zremain(jlon,jlat
153 ztot_sto = ztot_sto + tp%XSURF_STO(jlon,jlat)
163 jbas=tpg%NBASID(jlon,jlat)
164 IF(tpg%GMASK_FLD(jlon,jlat).AND.lbas_fld(jbas).AND.tp%XFLOOD_STO(jlon
THEN 173 DO jbas=tpg%NBASMIN,tpg%NBASMAX
174 IF(lbas_fld(jbas))
THEN 175 IF((zbas_sto(jbas)/zbas_area(jbas))<=zsto)
THEN 180 lbas_fld(jbas)=.false.
187 IF(zfluxe_in/=0.0.AND.icount==0)
THEN 195 IF(tpg%GMASK_FLD(jlon,jlat))
THEN 196 zratio(jlon,jlat) = tp%XSURF_STO(jlon,jlat)/tpg%XAREA(jlon,jlat
216 jbas=tpg%NBASID(jlon,jlat)
217 IF(tpg%GMASK_FLD(jlon,jlat).AND.lbas_fld(jbas).AND.tp%XFLOOD_STO
THEN 218 ztot_sto = ztot_sto + tp%XFLOOD_STO(jlon,jlat)
219 zbas_sto(jbas)=zbas_sto(jbas) + tp%XFLOOD_STO(jlon,jlat)
221 IF(tpg%GMASK_FLD(jlon,jlat).AND.lbas_fld(jbas))
THEN 222 zbas_remain(jbas)=zbas_remain(jbas)+tpg%XAREA(jlon,jlat)*zremain
224 IF(tpg%GMASK_FLD(jlon,jlat).AND.(.NOT.lbas_fld(jbas)))
THEN 225 zfluxe_in = zfluxe_in + tpg%XAREA(jlon,jlat) * zremain(jlon,jlat
232 jbas = tpg%NBASID(jlon,jlat)
233 IF(tpg%GMASK_FLD(jlon,jlat).AND.lbas_fld(jbas).AND.tp%XFLOOD_STO
THEN 234 zratio(jlon,jlat) = tp%XFLOOD_STO(jlon,jlat)/tpg%XAREA(jlon,jlat
253 IF(tpg%GMASK_FLD(jlon,jlat))
THEN 254 zarea_tot = zarea_tot + tpg%XAREA(jlon,jlat)
255 zfluxe_in = zfluxe_in + tpg%XAREA(jlon,jlat) * pread(jlon,jlat
261 zbilan=(zfluxe_in-zfluxe_out)/zarea_tot
263 IF(abs(zbilan)>1.e-12)
THEN 264 WRITE(
nlisting,*)
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' 265 WRITE(
nlisting,*)
'Redistribution of flood sources has a problem' 266 WRITE(
nlisting,*)
'BILAN = ', zbilan, zfluxe_in/zarea_tot, zfluxe_out/zarea_tot
267 WRITE(
nlisting,*)
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' 268 CALL abort_trip(
'FLOOD_REDISTRIB: Redistribution of flood sources has a problem' 273 IF (
lhook)
CALL dr_hook(
'FLOOD_REDISTRIB',1,zhook_handle)
subroutine flood_redistrib(TP, TPG,
subroutine abort_trip(YTEXT)