12 |
! 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 |
13 |
! de sol simplifi\'e |
! de sol simplifi\'e |
14 |
|
|
15 |
! LF 03/2001 |
! Laurent Fairhead, March, 2001 |
16 |
|
|
17 |
USE fcttre, ONLY: foeew, qsatl, qsats, thermcep |
USE fcttre, ONLY: foeew, qsatl, qsats, thermcep |
18 |
USE indicesol, ONLY: epsfra, is_lic, is_sic, is_ter |
USE indicesol, ONLY: epsfra, is_lic, is_sic, is_ter |
19 |
USE interface_surf, ONLY: run_off, run_off_lic, tau_calv |
USE interface_surf, ONLY: run_off_lic, tau_calv |
20 |
use nr_util, only: assert_eq |
use nr_util, only: assert_eq |
21 |
USE suphec_m, ONLY: rcpd, rday, retv, rlmlt, rlstt, rlvtt, rtt |
USE suphec_m, ONLY: rcpd, rday, retv, rlmlt, rlstt, rlvtt, rtt |
22 |
USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2 |
USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2 |
23 |
|
|
24 |
integer, intent(IN):: nisurf ! surface \`a traiter |
integer, intent(IN):: nisurf ! surface \`a traiter |
25 |
real, intent(IN):: dtime ! pas de temps de la physique (en s) |
real, intent(IN):: dtime ! pas de temps de la physique (en s) |
26 |
real, dimension(:), intent(IN):: tsurf, p1lay, beta, coef1lay ! (knon) |
real, intent(IN):: tsurf(:) ! (knon) temperature de surface |
27 |
! tsurf temperature de surface |
real, intent(IN):: p1lay(:) ! (knon) pression 1er niveau (milieu de couche) |
28 |
! p1lay pression 1er niveau (milieu de couche) |
real, intent(IN):: beta(:) ! (knon) evap reelle |
29 |
! beta evap reelle |
real, intent(IN):: coef1lay(:) ! (knon) coefficient d'echange |
30 |
! coef1lay coefficient d'echange |
real, intent(IN):: ps(:) ! (knon) pression au sol |
|
real, dimension(:), intent(IN):: ps ! (knon) |
|
|
! ps pression au sol |
|
31 |
|
|
32 |
real, intent(IN):: precip_rain(:) ! (knon) |
real, intent(IN):: precip_rain(:) ! (knon) |
33 |
! precipitation, liquid water mass flux (kg/m2/s), positive down |
! precipitation, liquid water mass flux (kg/m2/s), positive down |
41 |
real, intent(INOUT):: qsol(:) ! (knon) |
real, intent(INOUT):: qsol(:) ! (knon) |
42 |
! column-density of water in soil, in kg m-2 |
! column-density of water in soil, in kg m-2 |
43 |
|
|
44 |
real, dimension(:), intent(IN):: t1lay ! (knon) |
real, intent(IN):: t1lay(:) ! (knon) |
45 |
real, dimension(:), intent(IN):: q1lay ! (knon) |
real, intent(IN):: q1lay(:) ! (knon) |
46 |
real, dimension(:), intent(IN):: u1lay, v1lay ! (knon) |
real, intent(IN):: u1lay(:), v1lay(:) ! (knon) |
47 |
real, dimension(:), intent(IN):: petAcoef, peqAcoef ! (knon) |
|
48 |
! petAcoef coeff. A de la resolution de la CL pour t |
real, intent(IN):: petAcoef(:), peqAcoef(:) ! (knon) |
49 |
! peqAcoef coeff. A de la resolution de la CL pour q |
! coefficients A de la r\'esolution de la couche limite pour t et q |
50 |
real, dimension(:), intent(IN):: petBcoef, peqBcoef ! (knon) |
|
51 |
! petBcoef coeff. B de la resolution de la CL pour t |
real, intent(IN):: petBcoef(:), peqBcoef(:) ! (knon) |
52 |
! peqBcoef coeff. B de la resolution de la CL pour q |
! coefficients B de la r\'esolution de la couche limite pour t et q |
53 |
|
|
54 |
real, intent(INOUT):: tsurf_new(:) |
real, intent(INOUT):: tsurf_new(:) |
55 |
! tsurf_new temperature au sol |
! tsurf_new temperature au sol |
56 |
|
|
57 |
real, intent(IN):: evap(:) ! (knon) |
real, intent(IN):: evap(:) ! (knon) |
58 |
|
|
|
! Flux d'eau "perdue" par la surface et necessaire pour que limiter la |
|
|
! hauteur de neige, en kg/m2/s |
|
59 |
real, intent(OUT):: fqcalving(:) ! (knon) |
real, intent(OUT):: fqcalving(:) ! (knon) |
60 |
|
! flux d'eau "perdue" par la surface et n\'ecessaire pour limiter la |
61 |
|
! hauteur de neige, en kg/m2/s |
62 |
|
|
|
! Flux thermique utiliser pour fondre la neige |
|
63 |
real, intent(OUT):: ffonte(:) ! (knon) |
real, intent(OUT):: ffonte(:) ! (knon) |
64 |
|
! flux thermique utilis\'é pour fondre la neige |
65 |
|
|
66 |
real, dimension(:), intent(INOUT):: run_off_lic_0 ! (knon) |
real, intent(INOUT):: run_off_lic_0(:) ! (knon) |
67 |
! run_off_lic_0 run off glacier du pas de temps pr\'ecedent |
! run off glacier du pas de temps pr\'ecedent |
68 |
|
|
69 |
! Local: |
! Local: |
70 |
|
|
129 |
|
|
130 |
bil_eau_s = precip_rain * dtime - (evap(:knon) - snow_evap(:knon)) * dtime |
bil_eau_s = precip_rain * dtime - (evap(:knon) - snow_evap(:knon)) * dtime |
131 |
|
|
132 |
! Y'a-t-il fonte de neige? |
! Y a-t-il fonte de neige ? |
133 |
|
|
134 |
ffonte=0. |
ffonte=0. |
135 |
do i = 1, knon |
do i = 1, knon |
155 |
|
|
156 |
IF (nisurf == is_ter) then |
IF (nisurf == is_ter) then |
157 |
qsol(i) = qsol(i) + bil_eau_s(i) |
qsol(i) = qsol(i) + bil_eau_s(i) |
|
run_off(i) = run_off(i) + MAX(qsol(i) - max_eau_sol, 0.) |
|
158 |
qsol(i) = MIN(qsol(i), max_eau_sol) |
qsol(i) = MIN(qsol(i), max_eau_sol) |
159 |
else if (nisurf == is_lic) then |
else if (nisurf == is_lic) then |
160 |
run_off_lic(i) = (coeff_rel * fqcalving(i)) + & |
run_off_lic(i) = (coeff_rel * fqcalving(i)) + & |