49 REAL,
DIMENSION(klon),
INTENT(IN) :: restart_runoff
53 CHARACTER (len = 80) :: abort_message
54 CHARACTER (len = 20) :: modname =
'fonte_neige_init'
64 abort_message=
'Pb allocation run_off_lic'
75 abort_message=
'Pb allocation run_off_ter'
82 abort_message=
'Pb allocation run_off_lic'
89 abort_message=
'Pb allocation ffonte_global'
96 abort_message=
'Pb allocation fqfonte_global'
103 abort_message=
'Pb allocation fqcalving_global'
119 SUBROUTINE fonte_neige( knon, nisurf, knindex, dtime, &
120 tsurf, precip_rain, precip_snow, &
121 snow, qsol, tsurf_new, evap)
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
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
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
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
248 d_ts(i) = tsurf_new(i) - tsurf(i)
252 fqcalving(i) = max(0., snow(i) - snow_max)/dtime
253 snow(i)=min(snow(i),snow_max)
257 IF (nisurf ==
is_ter)
THEN
259 qsol(i) = qsol(i) + bil_eau_s(i)
261 qsol(i) = min(qsol(i), max_eau_sol)
263 ELSE IF (nisurf ==
is_lic)
THEN
293 REAL,
DIMENSION(klon),
INTENT(OUT) :: restart_runoff
315 fqfonte_out, ffonte_out)
327 REAL,
DIMENSION(klon,nbsrf),
INTENT(IN) :: pctsrf
329 REAL,
DIMENSION(klon),
INTENT(OUT) :: fqcalving_out
330 REAL,
DIMENSION(klon),
INTENT(OUT) :: fqfonte_out
331 REAL,
DIMENSION(klon),
INTENT(OUT) :: ffonte_out
338 fqcalving_out(:) = 0.0
341 ffonte_out(:) = ffonte_out(:) +
ffonte_global(:,nisurf)*pctsrf(:,nisurf)
342 fqfonte_out(:) = fqfonte_out(:) +
fqfonte_global(:,nisurf)*pctsrf(:,nisurf)
343 fqcalving_out(:) = fqcalving_out(:) +
fqcalving_global(:,nisurf)*pctsrf(:,nisurf)
real, dimension(:,:), allocatable, private fqfonte_global
subroutine fonte_neige_get_vars(pctsrf, fqcalving_out, fqfonte_out, ffonte_out)
integer, parameter is_ter
subroutine fonte_neige(knon, nisurf, knindex, dtime, tsurf, precip_rain, precip_snow, snow, qsol, tsurf_new, evap)
real, dimension(:), allocatable run_off_lic
subroutine fonte_neige_init(restart_runoff)
subroutine fonte_neige_final(restart_runoff)
real, dimension(:,:), allocatable, private ffonte_global
integer, parameter is_lic
real, dimension(:,:), allocatable, private fqcalving_global
integer, parameter is_sic
subroutine abort_physic(modname, message, ierr)
real, dimension(:), allocatable, private run_off_lic_0
real, dimension(:), allocatable, private run_off_ter
subroutine conf_interface(tau_calv)