/[lmdze]/trunk/Sources/phylmd/Interface_surf/calcul_fluxs.f
ViewVC logotype

Annotation of /trunk/Sources/phylmd/Interface_surf/calcul_fluxs.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 206 - (hide annotations)
Tue Aug 30 12:52:46 2016 UTC (7 years, 8 months ago) by guez
File size: 4669 byte(s)
Removed dimension klev of flux_[tquv] and y_flux_[tquv] in
clmain. Removed dimension klev of flux_[tquv] in physiq. Removed
dimension klev of flux_[tq] in hbtm. Removed dimension klev of
flux_[tq] in clqh and computations for layers other than the surface
layer. Removed dimension klev of flux_v in clvent and computations for
layers other than the surface layer. Values for layers other than the
surface layer were not used nor output (not even in LMDZ).

Removed argument dnwd0 of concvl. Simply write - mp in physiq
(following LMDZ).

Removed useless intermediary variables zxflux[tquv] in physiq.

1 guez 54 module calcul_fluxs_m
2    
3     implicit none
4    
5     contains
6    
7 guez 171 SUBROUTINE calcul_fluxs(dtime, tsurf, p1lay, cal, beta, coef1lay, ps, &
8     qsurf, radsol, dif_grnd, t1lay, q1lay, u1lay, v1lay, petAcoef, &
9 guez 206 peqAcoef, petBcoef, peqBcoef, tsurf_new, evap, fluxlat, flux_t, &
10 guez 104 dflux_s, dflux_l)
11 guez 54
12 guez 99 ! Cette routine calcule les fluxs en h et q à l'interface et une
13     ! température de surface.
14 guez 54
15 guez 104 ! L. Fairhead April 2000
16 guez 54
17 guez 171 USE fcttre, ONLY: dqsatl, dqsats, foede, foeew, qsatl, qsats, thermcep
18 guez 104 use nr_util, only: assert_eq
19 guez 178 USE suphec_m, ONLY: rcpd, rd, retv, rlstt, rlvtt, rtt
20 guez 104 USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2
21    
22     real, intent(IN):: dtime
23 guez 206 real, intent(IN):: tsurf(:) ! (knon) température de surface
24    
25     real, intent(IN):: p1lay(:) ! (knon)
26     ! pression première couche (milieu de couche)
27    
28 guez 104 real, intent(IN):: cal(:) ! (knon) capacité calorifique du sol
29 guez 206 real, intent(IN):: beta(:) ! (knon) évaporation réelle
30 guez 104 real, intent(IN):: coef1lay(:) ! (knon) coefficient d'échange
31     real, intent(IN):: ps(:) ! (knon) pression au sol
32 guez 206 real, intent(OUT):: qsurf(:) ! (knon) humidité de l'air au-dessus du sol
33 guez 104
34 guez 206 real, intent(IN):: radsol(:) ! (knon)
35     ! rayonnement net au sol (longwave + shortwave)
36    
37 guez 104 real, intent(IN):: dif_grnd(:) ! (knon)
38 guez 206 ! coefficient de diffusion vers le sol profond
39 guez 104
40     real, intent(IN):: t1lay(:), q1lay(:), u1lay(:), v1lay(:) ! (knon)
41    
42     real, intent(IN):: petAcoef(:), peqAcoef(:) ! (knon)
43 guez 206 ! coefficients A de la résolution de la couche limite pour T et q
44 guez 104
45     real, intent(IN):: petBcoef(:), peqBcoef(:) ! (knon)
46 guez 206 ! coefficients B de la résolution de la couche limite pour t et q
47 guez 54
48 guez 104 real, intent(OUT):: tsurf_new(:) ! (knon) température au sol
49 guez 171 real, intent(OUT):: evap(:) ! (knon)
50    
51 guez 206 real, intent(OUT):: fluxlat(:), flux_t(:) ! (knon)
52 guez 171 ! flux de chaleur latente et sensible
53    
54 guez 104 real, intent(OUT):: dflux_s(:), dflux_l(:) ! (knon)
55 guez 171 ! dérivées des flux de chaleurs sensible et latente par rapport à
56     ! Ts (W m-2 K-1)
57 guez 54
58 guez 104 ! Local:
59     integer i
60     integer knon ! nombre de points a traiter
61 guez 206 real, dimension(size(ps)):: mh, oh, mq, nq, oq, dq_s_dt, coef ! (knon)
62     real qsat(size(ps)) ! mass fraction
63     real sl(size(ps)) ! chaleur latente d'évaporation ou de sublimation
64 guez 105 logical delta
65     real zcor
66 guez 104 real, parameter:: t_grnd = 271.35, t_coup = 273.15
67 guez 54
68 guez 104 !---------------------------------------------------------------------
69 guez 54
70 guez 104 knon = assert_eq((/size(tsurf), size(p1lay), size(cal), size(beta), &
71     size(coef1lay), size(ps), size(qsurf), size(radsol), size(dif_grnd), &
72     size(t1lay), size(q1lay), size(u1lay), size(v1lay), size(petAcoef), &
73     size(peqAcoef), size(petBcoef), size(peqBcoef), size(tsurf_new), &
74 guez 206 size(evap), size(fluxlat), size(flux_t), size(dflux_s), &
75 guez 104 size(dflux_l)/), "calcul_fluxs knon")
76 guez 54
77 guez 206 ! Traitement de l'humidité du sol
78 guez 54
79 guez 105 IF (thermcep) THEN
80     DO i = 1, knon
81     delta = rtt >= tsurf(i)
82     qsat(i) = MIN(0.5, r2es * FOEEW(tsurf(i), delta) / ps(i))
83     zcor = 1. / (1. - retv * qsat(i))
84     qsat(i) = qsat(i) * zcor
85     dq_s_dt(i) = RCPD * FOEDE(tsurf(i), delta, merge(R5IES * RLSTT, &
86     R5LES * RLVTT, delta) / RCPD / (1. + RVTMP2 * q1lay(i)), &
87     qsat(i), zcor) / RLVTT
88     ENDDO
89     ELSE
90     DO i = 1, knon
91     IF (tsurf(i) < t_coup) THEN
92     qsat(i) = qsats(tsurf(i)) / ps(i)
93     dq_s_dt(i) = RCPD * dqsats(tsurf(i), qsat(i)) / RLVTT
94 guez 54 ELSE
95 guez 105 qsat(i) = qsatl(tsurf(i)) / ps(i)
96     dq_s_dt(i) = RCPD * dqsatl(tsurf(i), qsat(i)) / RLVTT
97 guez 54 ENDIF
98 guez 105 ENDDO
99     ENDIF
100 guez 54
101 guez 105 coef = coef1lay * (1. + SQRT(u1lay**2 + v1lay**2)) * p1lay / (RD * t1lay)
102     sl = merge(RLSTT, RLVTT, tsurf < RTT)
103 guez 54
104 guez 105 ! Q
105     oq = 1. - (beta * coef * peqBcoef * dtime)
106     mq = beta * coef * (peqAcoef - qsat + dq_s_dt * tsurf) / oq
107     nq = beta * coef * (- 1. * dq_s_dt) / oq
108 guez 54
109 guez 105 ! H
110     oh = 1. - (coef * petBcoef * dtime)
111     mh = coef * petAcoef / oh
112     dflux_s = - (coef * RCPD)/ oh
113 guez 54
114 guez 105 ! Tsurface
115     tsurf_new = (tsurf + cal / RCPD * dtime * (radsol + mh + sl * mq) &
116     + dif_grnd * t_grnd * dtime) / (1. - dtime * cal / RCPD * (dflux_s &
117     + sl * nq) + dtime * dif_grnd)
118 guez 54
119 guez 105 evap = - mq - nq * tsurf_new
120     fluxlat = - evap * sl
121 guez 206 flux_t = mh + dflux_s * tsurf_new
122 guez 105 dflux_l = sl * nq
123 guez 54
124 guez 105 ! Nouvelle valeur de l'humidité au dessus du sol :
125     qsurf = (peqAcoef - peqBcoef * evap * dtime) * (1. - beta) + beta * (qsat &
126     + dq_s_dt * (tsurf_new - tsurf))
127 guez 54
128     END SUBROUTINE calcul_fluxs
129    
130     end module calcul_fluxs_m

  ViewVC Help
Powered by ViewVC 1.1.21