18 REAL,
ALLOCATABLE,
DIMENSION(:),
PRIVATE :: run_off_ter
20 REAL,
ALLOCATABLE,
DIMENSION(:) :: run_off_lic
24 REAL,
ALLOCATABLE,
DIMENSION(:),
PRIVATE :: run_off_lic_0
27 REAL,
PRIVATE :: tau_calv
29 REAL,
ALLOCATABLE,
DIMENSION(:,:),
PRIVATE :: ffonte_global
31 REAL,
ALLOCATABLE,
DIMENSION(:,:),
PRIVATE :: fqfonte_global
33 REAL,
ALLOCATABLE,
DIMENSION(:,:),
PRIVATE :: fqcalving_global
53 CHARACTER (len = 80) :: abort_message
54 CHARACTER (len = 20) :: modname =
'fonte_neige_init'
62 ALLOCATE(run_off_lic_0(klon), stat = error)
64 abort_message=
'Pb allocation run_off_lic'
73 ALLOCATE(run_off_ter(klon), stat = error)
75 abort_message=
'Pb allocation run_off_ter'
80 ALLOCATE(run_off_lic(klon), stat = error)
82 abort_message=
'Pb allocation run_off_lic'
87 ALLOCATE(ffonte_global(klon,nbsrf))
89 abort_message=
'Pb allocation ffonte_global'
92 ffonte_global(:,:) = 0.0
94 ALLOCATE(fqfonte_global(klon,nbsrf))
96 abort_message=
'Pb allocation fqfonte_global'
99 fqfonte_global(:,:) = 0.0
101 ALLOCATE(fqcalving_global(klon,nbsrf))
103 abort_message=
'Pb allocation fqcalving_global'
106 fqcalving_global(:,:) = 0.0
120 tsurf, precip_rain, precip_snow, &
121 snow,
qsol, tsurf_new, evap)
141 include
"indicesol.h"
142 include
"dimensions.h"
150 INTEGER,
INTENT(IN) :: knon
151 INTEGER,
INTENT(IN) :: nisurf
152 INTEGER,
DIMENSION(klon),
INTENT(IN) :: knindex
153 REAL ,
INTENT(IN) ::
dtime
154 REAL,
DIMENSION(klon),
INTENT(IN) ::
tsurf
155 REAL,
DIMENSION(klon),
INTENT(IN) :: precip_rain
156 REAL,
DIMENSION(klon),
INTENT(IN) :: precip_snow
161 REAL,
DIMENSION(klon),
INTENT(INOUT) :: snow
162 REAL,
DIMENSION(klon),
INTENT(INOUT) ::
qsol
163 REAL,
DIMENSION(klon),
INTENT(INOUT) :: tsurf_new
164 REAL,
DIMENSION(klon),
INTENT(INOUT) :: evap
172 REAL,
PARAMETER :: snow_max=3000.
173 REAL,
PARAMETER :: max_eau_sol = 150.0
176 REAL,
PARAMETER :: chasno = 3.334e+05/(2.3867e+06*0.15)
178 REAL,
PARAMETER :: chaice = 3.334e+05/(2.3867e+06*0.15)
180 REAL,
DIMENSION(klon) :: ffonte
181 REAL,
DIMENSION(klon) :: fqcalving, fqfonte
182 REAL,
DIMENSION(klon) :: d_ts
183 REAL,
DIMENSION(klon) :: bil_eau_s, snow_evap
185 LOGICAL :: neige_fond
192 coeff_rel =
dtime/(tau_calv * rday)
201 WHERE (precip_snow > 0.)
202 snow = snow + (precip_snow *
dtime)
207 snow_evap = min(snow /
dtime, evap)
208 snow = snow - snow_evap *
dtime
209 snow = max(0.0, snow)
212 bil_eau_s(:) = (precip_rain(:) *
dtime) - (evap(:) - snow_evap(:)) *
dtime
227 neige_fond = ((snow(
i) > epsfra .OR. nisurf == is_sic .OR. nisurf == is_lic) &
228 .AND. tsurf_new(
i) >= rtt)
230 fq_fonte = min( max((tsurf_new(
i)-rtt )/chasno,0.0),snow(
i))
231 ffonte(
i) = fq_fonte * rlmlt/
dtime
232 fqfonte(
i) = fq_fonte/
dtime
233 snow(
i) = max(0., snow(
i) - fq_fonte)
234 bil_eau_s(
i) = bil_eau_s(
i) + fq_fonte
235 tsurf_new(
i) = tsurf_new(
i) - fq_fonte * chasno
239 IF (nisurf == is_sic .OR. nisurf == is_lic )
THEN
240 fq_fonte = max((tsurf_new(
i)-rtt )/chaice,0.0)
241 ffonte(
i) = ffonte(
i) + fq_fonte * rlmlt/
dtime
242 IF ( ok_lic_melt )
THEN
243 fqfonte(
i) = fqfonte(
i) + fq_fonte/
dtime
244 bil_eau_s(
i) = bil_eau_s(
i) + fq_fonte
252 fqcalving(
i) = max(0., snow(
i) - snow_max)/
dtime
253 snow(
i)=min(snow(
i),snow_max)
257 IF (nisurf == is_ter)
THEN
260 run_off_ter(
i) = run_off_ter(
i) + max(
qsol(
i) - max_eau_sol, 0.0)
263 ELSE IF (nisurf == is_lic)
THEN
266 run_off_lic(
i) = (coeff_rel * fqcalving(
i)) + &
267 (1. - coeff_rel) * run_off_lic_0(
j)
268 run_off_lic_0(
j) = run_off_lic(
i)
269 run_off_lic(
i) = run_off_lic(
i) + fqfonte(
i) + precip_rain(
i)
279 ffonte_global(knindex(
i),nisurf) = ffonte(
i)
280 fqfonte_global(knindex(
i),nisurf) = fqfonte(
i)
281 fqcalving_global(knindex(
i),nisurf) = fqcalving(
i)
303 IF (
ALLOCATED(run_off_lic_0))
DEALLOCATE(run_off_lic_0)
304 IF (
ALLOCATED(run_off_ter))
DEALLOCATE(run_off_ter)
305 IF (
ALLOCATED(run_off_lic))
DEALLOCATE(run_off_lic)
306 IF (
ALLOCATED(ffonte_global))
DEALLOCATE(ffonte_global)
307 IF (
ALLOCATED(fqfonte_global))
DEALLOCATE(fqfonte_global)
308 IF (
ALLOCATED(fqcalving_global))
DEALLOCATE(fqcalving_global)
315 fqfonte_out, ffonte_out)
322 include
"indicesol.h"
324 REAL,
DIMENSION(klon,nbsrf),
INTENT(IN) :: pctsrf
326 REAL,
DIMENSION(klon),
INTENT(OUT) :: fqcalving_out
327 REAL,
DIMENSION(klon),
INTENT(OUT) :: fqfonte_out
328 REAL,
DIMENSION(klon),
INTENT(OUT) :: ffonte_out
335 fqcalving_out(:) = 0.0
338 ffonte_out(:) = ffonte_out(:) + ffonte_global(:,nisurf)*pctsrf(:,nisurf)
339 fqfonte_out(:) = fqfonte_out(:) + fqfonte_global(:,nisurf)*pctsrf(:,nisurf)
340 fqcalving_out(:) = fqcalving_out(:) + fqcalving_global(:,nisurf)*pctsrf(:,nisurf)