7 tsurf, p1lay, cal,
beta, cdragh, cdragq, ps, &
8 precip_rain, precip_snow, snow, qsurf, &
9 radsol, dif_grnd, t1lay, q1lay, u1lay, v1lay, gustiness, &
10 fqsat, petacoef, peqacoef, petbcoef, peqbcoef, &
11 tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)
59 INTEGER,
INTENT(IN) :: knon, nisurf
60 REAL ,
INTENT(IN) :: dtime
61 REAL,
DIMENSION(klon),
INTENT(IN) :: petAcoef, peqAcoef
62 REAL,
DIMENSION(klon),
INTENT(IN) :: petBcoef, peqBcoef
63 REAL,
DIMENSION(klon),
INTENT(IN) :: ps, q1lay
64 REAL,
DIMENSION(klon),
INTENT(IN) :: tsurf, p1lay, cal, beta, cdragh,cdragq
65 REAL,
DIMENSION(klon),
INTENT(IN) :: precip_rain, precip_snow
66 REAL,
DIMENSION(klon),
INTENT(IN) :: radsol, dif_grnd
67 REAL,
DIMENSION(klon),
INTENT(IN) :: t1lay, u1lay, v1lay,gustiness
68 REAL,
INTENT(IN) :: fqsat
72 REAL,
DIMENSION(klon),
INTENT(INOUT) :: snow
76 REAL,
DIMENSION(klon),
INTENT(OUT) :: qsurf
77 REAL,
DIMENSION(klon),
INTENT(OUT) :: tsurf_new, evap, fluxsens, fluxlat
78 REAL,
DIMENSION(klon),
INTENT(OUT) :: dflux_s, dflux_l
83 REAL,
DIMENSION(klon) :: zx_mh, zx_nh, zx_oh
84 REAL,
DIMENSION(klon) :: zx_mq, zx_nq, zx_oq
85 REAL,
DIMENSION(klon) :: zx_pkh, zx_dq_s_dt, zx_qsat
86 REAL,
DIMENSION(klon) :: zx_sl, zx_coefh, zx_coefq, zx_wind
87 REAL,
DIMENSION(klon) :: d_ts
88 REAL :: zdelta, zcvm5, zx_qs, zcor, zx_dq_s_dh
89 REAL :: qsat_new, q1_new
90 REAL,
PARAMETER :: t_grnd = 271.35, t_coup = 273.15
91 REAL,
PARAMETER :: max_eau_sol = 150.0
92 CHARACTER (len = 20) :: modname =
'calcul_fluxs'
93 LOGICAL :: fonte_neige
94 LOGICAL,
SAVE :: check = .
false.
100 IF (check)
WRITE(*,*)
'Entree ', modname,
' surface = ',nisurf
103 WRITE(*,*)
' radsol (min, max)', &
104 minval(radsol(1:knon)), maxval(radsol(1:knon))
136 zx_pkh(i) = (ps(i)/ps(i))**rkappa
138 zdelta=max(0.,sign(1.,rtt-tsurf(i)))
139 zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
140 zcvm5 = zcvm5 / rcpd / (1.0+rvtmp2*q1lay(i))
141 zx_qs= r2es * foeew(tsurf(i),zdelta)/ps(i)
143 zcor=1./(1.-retv*zx_qs)
145 zx_dq_s_dh = foede(tsurf(i),zdelta,zcvm5,zx_qs,zcor) &
148 IF (tsurf(i).LT.t_coup)
THEN
149 zx_qs = qsats(tsurf(i)) / ps(i)
150 zx_dq_s_dh = dqsats(tsurf(i),zx_qs)/rlvtt &
153 zx_qs = qsatl(tsurf(i)) / ps(i)
154 zx_dq_s_dh = dqsatl(tsurf(i),zx_qs)/rlvtt &
158 zx_dq_s_dt(i) = rcpd * zx_pkh(i) * zx_dq_s_dh
160 zx_wind(i)=
min_wind_speed+sqrt(gustiness(i)+u1lay(i)**2+v1lay(i)**2)
161 zx_coefh(i) = cdragh(i) * zx_wind(i) * p1lay(i)/(rd*t1lay(i))
162 zx_coefq(i) = cdragq(i) * zx_wind(i) * p1lay(i)/(rd*t1lay(i))
176 IF (tsurf(i) .LT. rtt) zx_sl(i) = rlstt
182 zx_oq(i) = 1. - (beta(i) * zx_coefq(i) * peqbcoef(i) * dtime)
183 zx_mq(i) = beta(i) * zx_coefq(i) * &
186 fqsat * zx_qsat(i) + fqsat * zx_dq_s_dt(i) * tsurf(i)) &
189 zx_nq(i) = beta(i) * zx_coefq(i) * (- fqsat * zx_dq_s_dt(i)) &
193 zx_oh(i) = 1. - (zx_coefh(i) * petbcoef(i) * dtime)
194 zx_mh(i) = zx_coefh(i) * petacoef(i) / zx_oh(i)
195 zx_nh(i) = - (zx_coefh(i) * rcpd * zx_pkh(i))/ zx_oh(i)
198 tsurf_new(i) = (tsurf(i) + cal(i)/(rcpd * zx_pkh(i)) * dtime * &
199 (radsol(i) + zx_mh(i) + zx_sl(i) * zx_mq(i)) &
200 + dif_grnd(i) * t_grnd * dtime)/ &
201 ( 1. - dtime * cal(i)/(rcpd * zx_pkh(i)) * ( &
202 zx_nh(i) + zx_sl(i) * zx_nq(i)) &
203 + dtime * dif_grnd(i))
212 d_ts(i) = tsurf_new(i) - tsurf(i)
218 evap(i) = - zx_mq(i) - zx_nq(i) * tsurf_new(i)
219 fluxlat(i) = - evap(i) * zx_sl(i)
220 fluxsens(i) = zx_mh(i) + zx_nh(i) * tsurf_new(i)
223 dflux_s(i) = zx_nh(i)
224 dflux_l(i) = (zx_sl(i) * zx_nq(i))
227 qsat_new=zx_qsat(i) + zx_dq_s_dt(i) * d_ts(i)
228 q1_new = peqacoef(i) - peqbcoef(i)*evap(i)*dtime
229 qsurf(i)=q1_new*(1.-beta(i)) + beta(i)*qsat_new
254 u0, v0, u1, v1, gustiness, cdrag_m, &
255 acoefu, acoefv, bcoefu, bcoefv, &
265 INTEGER,
INTENT(IN) :: knon
266 REAL,
INTENT(IN) :: dtime
267 REAL,
DIMENSION(klon),
INTENT(IN) :: u0, v0
268 REAL,
DIMENSION(klon),
INTENT(IN) :: u1, v1, gustiness
269 REAL,
DIMENSION(klon),
INTENT(IN) :: cdrag_m
270 REAL,
DIMENSION(klon),
INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV
271 REAL,
DIMENSION(klon),
INTENT(IN) :: p1lay
272 REAL,
DIMENSION(klon),
INTENT(IN) :: t1lay
275 REAL,
DIMENSION(klon),
INTENT(OUT) :: flux_u1
276 REAL,
DIMENSION(klon),
INTENT(OUT) :: flux_v1
281 REAL :: mod_wind, buf
288 mod_wind =
min_wind_speed + sqrt(gustiness(i)+(u1(i) - u0(i))**2 + (v1(i)-v0(i))**2)
289 buf = cdrag_m(i) * mod_wind * p1lay(i)/(rd*t1lay(i))
290 flux_u1(i) = (acoefu(i) - u0(i)) / (1/buf - bcoefu(i)*dtime )
291 flux_v1(i) = (acoefv(i) - v0(i)) / (1/buf - bcoefv(i)*dtime )
subroutine calcul_flux_wind(knon, dtime, u0, v0, u1, v1, gustiness, cdrag_m, AcoefU, AcoefV, BcoefU, BcoefV, p1lay, t1lay, flux_u1, flux_v1)
!$Id!Parameters for nlm real spfac!IM cf epmax real ptcrit real omtrain real dttrig real beta
!$Id ok_orolf LOGICAL ok_limitvrai LOGICAL ok_all_xml INTEGER iflag_ener_conserv REAL solaire RCFC12 RCFC12_act CFC12_ppt!IM ajout CFMIP2 CMIP5 LOGICAL ok_4xCO2atm RCFC12_per CFC12_ppt_per!OM correction du bilan d eau global!OM Correction sur precip KE REAL cvl_corr!OM Fonte calotte dans bilan eau LOGICAL ok_lic_melt!IM simulateur ISCCP INTEGER overlap!IM seuils cdrh REAL cdhmax!IM param stabilite s terres et en dehors REAL f_ri_cd_min!IM MAFo pmagic evap0!Frottement au f_cdrag_oce REAL min_wind_speed
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
subroutine calcul_fluxs(knon, nisurf, dtime, tsurf, p1lay, cal, beta, cdragh, cdragq, ps, precip_rain, precip_snow, snow, qsurf, radsol, dif_grnd, t1lay, q1lay, u1lay, v1lay, gustiness, fqsat, petAcoef, peqAcoef, petBcoef, peqBcoef, tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)