4 |
|
|
5 |
contains |
contains |
6 |
|
|
7 |
SUBROUTINE fonte_neige(nisurf, precip_rain, precip_snow, snow, qsol, & |
SUBROUTINE fonte_neige(nisurf, rain_fall, snow_fall, snow, qsol, & |
8 |
tsurf_new, evap, fqcalving, ffonte, run_off_lic_0, run_off_lic) |
tsurf_new, evap, fqcalving, ffonte, run_off_lic_0, run_off_lic) |
9 |
|
|
10 |
! Routine de traitement de la fonte de la neige dans le cas du traitement |
! Routine de traitement de la fonte de la neige dans le cas du traitement |
12 |
|
|
13 |
! Laurent Fairhead, March, 2001 |
! Laurent Fairhead, March, 2001 |
14 |
|
|
15 |
|
! Library: |
16 |
|
use nr_util, only: assert_eq |
17 |
|
|
18 |
use comconst, only: dtphys |
use comconst, only: dtphys |
19 |
USE indicesol, ONLY: epsfra, is_lic, is_sic, is_ter |
USE indicesol, ONLY: epsfra, is_lic, is_sic, is_ter |
20 |
USE conf_interface_m, ONLY: tau_calv |
USE conf_interface_m, ONLY: tau_calv |
|
use nr_util, only: assert_eq |
|
21 |
USE suphec_m, ONLY: rday, rlmlt, rtt |
USE suphec_m, ONLY: rday, rlmlt, rtt |
22 |
|
|
23 |
integer, intent(IN):: nisurf ! surface \`a traiter |
integer, intent(IN):: nisurf ! surface \`a traiter |
24 |
|
|
25 |
real, intent(IN):: precip_rain(:) ! (knon) |
real, intent(IN):: rain_fall(:) ! (knon) |
26 |
! precipitation, liquid water mass flux (kg / m2 / s), positive down |
! precipitation, liquid water mass flux (kg / m2 / s), positive down |
27 |
|
|
28 |
real, intent(IN):: precip_snow(:) ! (knon) |
real, intent(IN):: snow_fall(:) ! (knon) |
29 |
! precipitation, solid water mass flux (kg / m2 / s), positive down |
! precipitation, solid water mass flux (kg / m2 / s), positive down |
30 |
|
|
31 |
real, intent(INOUT):: snow(:) ! (knon) |
real, intent(INOUT):: snow(:) ! (knon) |
52 |
! Local: |
! Local: |
53 |
|
|
54 |
integer knon ! nombre de points \`a traiter |
integer knon ! nombre de points \`a traiter |
55 |
real, parameter:: snow_max=3000. |
|
56 |
|
real, parameter:: snow_max = 3000. |
57 |
! Masse maximum de neige (kg / m2). Au dessus de ce seuil, la neige |
! Masse maximum de neige (kg / m2). Au dessus de ce seuil, la neige |
58 |
! en exces "s'\'ecoule" (calving). |
! en exces "s'\'ecoule" (calving). |
59 |
|
|
60 |
integer i |
integer i |
61 |
real fq_fonte |
real fq_fonte |
62 |
REAL bil_eau_s(size(precip_rain)) ! (knon) in kg m-2 |
REAL bil_eau_s(size(rain_fall)) ! (knon) in kg m-2 |
63 |
real snow_evap(size(precip_rain)) ! (knon) in kg m-2 s-1 |
real snow_evap(size(rain_fall)) ! (knon) in kg m-2 s-1 |
64 |
REAL, parameter:: chasno = 3.334E5 / (2.3867E6 * 0.15) |
REAL, parameter:: chasno = 3.334E5 / (2.3867E6 * 0.15) |
65 |
REAL, parameter:: chaice = 3.334E5 / (2.3867E6 * 0.15) |
REAL, parameter:: chaice = 3.334E5 / (2.3867E6 * 0.15) |
66 |
real, parameter:: max_eau_sol = 150. ! in kg m-2 |
real, parameter:: max_eau_sol = 150. ! in kg m-2 |
68 |
|
|
69 |
!-------------------------------------------------------------------- |
!-------------------------------------------------------------------- |
70 |
|
|
71 |
knon = assert_eq((/size(precip_rain), size(precip_snow), size(snow), & |
knon = assert_eq((/size(rain_fall), size(snow_fall), size(snow), & |
72 |
size(qsol), size(tsurf_new), size(evap), size(fqcalving), & |
size(qsol), size(tsurf_new), size(evap), size(fqcalving), & |
73 |
size(ffonte), size(run_off_lic_0)/), "fonte_neige knon") |
size(ffonte), size(run_off_lic_0)/), "fonte_neige knon") |
74 |
|
|
75 |
coeff_rel = dtphys / (tau_calv * rday) |
coeff_rel = dtphys / (tau_calv * rday) |
76 |
WHERE (precip_snow > 0.) snow = snow + precip_snow * dtphys |
WHERE (snow_fall > 0.) snow = snow + snow_fall * dtphys |
77 |
|
|
78 |
WHERE (evap > 0.) |
WHERE (evap > 0.) |
79 |
snow_evap = MIN(snow / dtphys, evap) |
snow_evap = MIN(snow / dtphys, evap) |
83 |
snow_evap = 0. |
snow_evap = 0. |
84 |
end where |
end where |
85 |
|
|
86 |
bil_eau_s = (precip_rain - evap + snow_evap) * dtphys |
bil_eau_s = (rain_fall - evap + snow_evap) * dtphys |
87 |
|
|
88 |
! Y a-t-il fonte de neige ? |
! Y a-t-il fonte de neige ? |
89 |
|
|