/[lmdze]/trunk/phylmd/Interface_surf/pbl_surface.f
ViewVC logotype

Contents of /trunk/phylmd/Interface_surf/pbl_surface.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 308 - (show annotations)
Tue Sep 18 15:14:40 2018 UTC (5 years, 7 months ago) by guez
File size: 18411 byte(s)
In procedure calcul_fluxs, rename coef1lay to cdragh (following
LMDZ). Use named constant min_wind_speed (following LMDZ).

Change name of NetCDF variable soll to CF standard rls.

1 module pbl_surface_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE pbl_surface(pctsrf, t, q, u, v, julien, mu0, ftsol, cdmmax, &
8 cdhmax, ftsoil, qsol, paprs, pplay, fsnow, qsurf, falbe, fluxlat, &
9 rain_fall, snow_fall, frugs, agesno, rugoro, d_t, d_q, d_u, d_v, d_ts, &
10 flux_t, flux_q, flux_u, flux_v, cdragh, cdragm, q2, dflux_t, dflux_q, &
11 coefh, t2m, q2m, u10m_srf, v10m_srf, pblh, capcl, oliqcl, cteicl, pblt, &
12 therm, plcl, fqcalving, ffonte, run_off_lic_0, albsol, sollw, solsw, &
13 tsol)
14
15 ! From phylmd/clmain.F, version 1.6, 2005/11/16 14:47:19
16 ! Author: Z. X. Li (LMD/CNRS)
17 ! Date: Aug. 18th, 1993
18 ! Objet : interface de couche limite (diffusion verticale)
19
20 ! Tout ce qui a trait aux traceurs est dans "phytrac". Le calcul
21 ! de la couche limite pour les traceurs se fait avec "cltrac" et
22 ! ne tient pas compte de la diff\'erentiation des sous-fractions
23 ! de sol.
24
25 use cdrag_m, only: cdrag
26 use clqh_m, only: clqh
27 use clvent_m, only: clvent
28 use coef_diff_turb_m, only: coef_diff_turb
29 USE conf_gcm_m, ONLY: lmt_pas
30 USE conf_phys_m, ONLY: iflag_pbl
31 USE dimphy, ONLY: klev, klon
32 USE dimsoil, ONLY: nsoilmx
33 use hbtm_m, only: hbtm
34 USE histwrite_phy_m, ONLY: histwrite_phy
35 USE indicesol, ONLY: epsfra, is_lic, is_oce, is_sic, is_ter, nbsrf
36 USE interfoce_lim_m, ONLY: interfoce_lim
37 use phyetat0_m, only: zmasq
38 use stdlevvar_m, only: stdlevvar
39 USE suphec_m, ONLY: rd, rg, rsigma
40 use time_phylmdz, only: itap
41
42 REAL, INTENT(inout):: pctsrf(klon, nbsrf)
43 ! tableau des pourcentages de surface de chaque maille
44
45 REAL, INTENT(IN):: t(klon, klev) ! temperature (K)
46 REAL, INTENT(IN):: q(klon, klev) ! vapeur d'eau (kg / kg)
47 REAL, INTENT(IN):: u(klon, klev), v(klon, klev) ! vitesse
48 INTEGER, INTENT(IN):: julien ! jour de l'annee en cours
49 REAL, intent(in):: mu0(klon) ! cosinus de l'angle solaire zenithal
50 REAL, INTENT(IN):: ftsol(:, :) ! (klon, nbsrf) temp\'erature du sol (en K)
51 REAL, INTENT(IN):: cdmmax, cdhmax ! seuils cdrm, cdrh
52
53 REAL, INTENT(inout):: ftsoil(klon, nsoilmx, nbsrf)
54 ! soil temperature of surface fraction
55
56 REAL, INTENT(inout):: qsol(:) ! (klon)
57 ! column-density of water in soil, in kg m-2
58
59 REAL, INTENT(IN):: paprs(klon, klev + 1) ! pression a intercouche (Pa)
60 REAL, INTENT(IN):: pplay(klon, klev) ! pression au milieu de couche (Pa)
61 REAL, INTENT(inout):: fsnow(:, :) ! (klon, nbsrf) \'epaisseur neigeuse
62 REAL, INTENT(inout):: qsurf(klon, nbsrf)
63 REAL, intent(inout):: falbe(klon, nbsrf)
64 REAL, intent(out):: fluxlat(:, :) ! (klon, nbsrf)
65
66 REAL, intent(in):: rain_fall(klon)
67 ! liquid water mass flux (kg / m2 / s), positive down
68
69 REAL, intent(in):: snow_fall(klon)
70 ! solid water mass flux (kg / m2 / s), positive down
71
72 REAL, intent(inout):: frugs(klon, nbsrf) ! longueur de rugosit\'e (en m)
73 real agesno(klon, nbsrf)
74 REAL, INTENT(IN):: rugoro(klon)
75
76 REAL, intent(out):: d_t(:, :), d_q(:, :) ! (klon, klev)
77 ! changement pour t et q
78
79 REAL, intent(out):: d_u(klon, klev), d_v(klon, klev)
80 ! changement pour "u" et "v"
81
82 REAL, intent(out):: d_ts(:, :) ! (klon, nbsrf) variation of ftsol
83
84 REAL, intent(out):: flux_t(klon, nbsrf)
85 ! flux de chaleur sensible (c_p T) (W / m2) (orientation positive
86 ! vers le bas) à la surface
87
88 REAL, intent(out):: flux_q(klon, nbsrf)
89 ! flux de vapeur d'eau (kg / m2 / s) à la surface
90
91 REAL, intent(out):: flux_u(klon, nbsrf), flux_v(klon, nbsrf)
92 ! tension du vent (flux turbulent de vent) à la surface, en Pa
93
94 REAL, INTENT(out):: cdragh(klon), cdragm(klon)
95 real q2(klon, klev + 1, nbsrf)
96
97 ! Ocean slab:
98 REAL, INTENT(out):: dflux_t(klon) ! derive du flux sensible
99 REAL, INTENT(out):: dflux_q(klon) ! derive du flux latent
100
101 REAL, intent(out):: coefh(:, 2:) ! (klon, 2:klev)
102 ! Pour pouvoir extraire les coefficients d'\'echange, le champ
103 ! "coefh" a \'et\'e cr\'e\'e. Nous avons moyenn\'e les valeurs de
104 ! ce champ sur les quatre sous-surfaces du mod\`ele.
105
106 REAL, INTENT(inout):: t2m(klon, nbsrf), q2m(klon, nbsrf)
107
108 REAL, INTENT(inout):: u10m_srf(:, :), v10m_srf(:, :) ! (klon, nbsrf)
109 ! composantes du vent \`a 10m sans spirale d'Ekman
110
111 ! Ionela Musat. Cf. Anne Mathieu : planetary boundary layer, hbtm.
112 ! Comme les autres diagnostics on cumule dans physiq ce qui permet
113 ! de sortir les grandeurs par sous-surface.
114 REAL pblh(klon, nbsrf) ! height of planetary boundary layer
115 REAL capcl(klon, nbsrf)
116 REAL oliqcl(klon, nbsrf)
117 REAL cteicl(klon, nbsrf)
118 REAL, INTENT(inout):: pblt(klon, nbsrf) ! T au nveau HCL
119 REAL therm(klon, nbsrf)
120 REAL plcl(klon, nbsrf)
121
122 REAL, intent(out):: fqcalving(klon, nbsrf)
123 ! flux d'eau "perdue" par la surface et necessaire pour limiter la
124 ! hauteur de neige, en kg / m2 / s
125
126 real ffonte(klon, nbsrf) ! flux thermique utilise pour fondre la neige
127 REAL, intent(inout):: run_off_lic_0(:) ! (klon)
128
129 REAL, intent(out):: albsol(:) ! (klon)
130 ! albedo du sol total, visible, moyen par maille
131
132 REAL, intent(in):: sollw(:) ! (klon)
133 ! surface net downward longwave flux, in W m-2
134
135 REAL, intent(in):: solsw(:) ! (klon)
136 REAL, intent(in):: tsol(:) ! (klon)
137
138 ! Local:
139
140 REAL fsollw(klon, nbsrf) ! bilan flux IR pour chaque sous-surface
141 REAL fsolsw(klon, nbsrf) ! flux solaire absorb\'e pour chaque sous-surface
142
143 ! la nouvelle repartition des surfaces sortie de l'interface
144 REAL, save:: pctsrf_new_oce(klon)
145 REAL, save:: pctsrf_new_sic(klon)
146
147 REAL y_fqcalving(klon), y_ffonte(klon)
148 real y_run_off_lic_0(klon), y_run_off_lic(klon)
149 REAL run_off_lic(klon) ! ruissellement total
150 REAL rugmer(klon)
151 REAL ytsoil(klon, nsoilmx)
152 REAL yts(klon), ypct(klon), yz0_new(klon)
153 real yrugos(klon) ! longueur de rugosite (en m)
154 REAL yalb(klon)
155 REAL snow(klon), yqsurf(klon), yagesno(klon)
156 real yqsol(klon) ! column-density of water in soil, in kg m-2
157 REAL yrain_fall(klon) ! liquid water mass flux (kg / m2 / s), positive down
158 REAL ysnow_fall(klon) ! solid water mass flux (kg / m2 / s), positive down
159 REAL yrugm(klon), radsol(klon), yrugoro(klon)
160 REAL yfluxlat(klon)
161 REAL y_d_ts(klon)
162 REAL y_d_t(klon, klev), y_d_q(klon, klev)
163 REAL y_d_u(klon, klev), y_d_v(klon, klev)
164 REAL y_flux_t(klon), y_flux_q(klon)
165 REAL y_flux_u(klon), y_flux_v(klon)
166 REAL y_dflux_t(klon), y_dflux_q(klon)
167 REAL ycoefh(klon, 2:klev), ycoefm(klon, 2:klev)
168 real ycdragh(klon), ycdragm(klon)
169 REAL yu(klon, klev), yv(klon, klev)
170 REAL yt(klon, klev), yq(klon, klev)
171 REAL ypaprs(klon, klev + 1), ypplay(klon, klev), ydelp(klon, klev)
172 REAL yq2(klon, klev + 1)
173 REAL delp(klon, klev)
174 INTEGER i, k, nsrf
175 INTEGER ni(klon), knon, j
176
177 REAL pctsrf_pot(klon, nbsrf)
178 ! "pourcentage potentiel" pour tenir compte des \'eventuelles
179 ! apparitions ou disparitions de la glace de mer
180
181 REAL yt2m(klon), yq2m(klon), wind10m(klon)
182 REAL ustar(klon)
183
184 REAL yt10m(klon), yq10m(klon)
185 REAL ypblh(klon)
186 REAL ylcl(klon)
187 REAL ycapcl(klon)
188 REAL yoliqcl(klon)
189 REAL ycteicl(klon)
190 REAL ypblt(klon)
191 REAL ytherm(klon)
192 REAL u1(klon), v1(klon)
193 REAL tair1(klon), qair1(klon), tairsol(klon)
194 REAL psfce(klon), patm(klon)
195 REAL zgeo1(klon)
196 REAL rugo1(klon)
197 REAL zgeop(klon, klev)
198
199 !------------------------------------------------------------
200
201 albsol = sum(falbe * pctsrf, dim = 2)
202
203 ! R\'epartition sous maille des flux longwave et shortwave
204 ! R\'epartition du longwave par sous-surface lin\'earis\'ee
205
206 forall (nsrf = 1:nbsrf)
207 fsollw(:, nsrf) = sollw + 4. * RSIGMA * tsol**3 &
208 * (tsol - ftsol(:, nsrf))
209 fsolsw(:, nsrf) = solsw * (1. - falbe(:, nsrf)) / (1. - albsol)
210 END forall
211
212 ytherm = 0.
213
214 DO k = 1, klev ! epaisseur de couche
215 DO i = 1, klon
216 delp(i, k) = paprs(i, k) - paprs(i, k + 1)
217 END DO
218 END DO
219
220 ! Initialization:
221 rugmer = 0.
222 cdragh = 0.
223 cdragm = 0.
224 dflux_t = 0.
225 dflux_q = 0.
226 ypct = 0.
227 yrugos = 0.
228 ypaprs = 0.
229 ypplay = 0.
230 ydelp = 0.
231 yrugoro = 0.
232 d_ts = 0.
233 flux_t = 0.
234 flux_q = 0.
235 flux_u = 0.
236 flux_v = 0.
237 fluxlat = 0.
238 d_t = 0.
239 d_q = 0.
240 d_u = 0.
241 d_v = 0.
242 coefh = 0.
243 fqcalving = 0.
244 run_off_lic = 0.
245
246 ! Initialisation des "pourcentages potentiels". On consid\`ere ici qu'on
247 ! peut avoir potentiellement de la glace sur tout le domaine oc\'eanique
248 ! (\`a affiner).
249
250 pctsrf_pot(:, is_ter) = pctsrf(:, is_ter)
251 pctsrf_pot(:, is_lic) = pctsrf(:, is_lic)
252 pctsrf_pot(:, is_oce) = 1. - zmasq
253 pctsrf_pot(:, is_sic) = 1. - zmasq
254
255 ! Tester si c'est le moment de lire le fichier:
256 if (mod(itap - 1, lmt_pas) == 0) then
257 CALL interfoce_lim(julien, pctsrf_new_oce, pctsrf_new_sic)
258 endif
259
260 ! Boucler sur toutes les sous-fractions du sol:
261
262 loop_surface: DO nsrf = 1, nbsrf
263 ! Define ni and knon:
264
265 ni = 0
266 knon = 0
267
268 DO i = 1, klon
269 ! Pour d\'eterminer le domaine \`a traiter, on utilise les surfaces
270 ! "potentielles"
271 IF (pctsrf_pot(i, nsrf) > epsfra) THEN
272 knon = knon + 1
273 ni(knon) = i
274 END IF
275 END DO
276
277 if_knon: IF (knon /= 0) then
278 DO j = 1, knon
279 i = ni(j)
280 ypct(j) = pctsrf(i, nsrf)
281 yts(j) = ftsol(i, nsrf)
282 snow(j) = fsnow(i, nsrf)
283 yqsurf(j) = qsurf(i, nsrf)
284 yalb(j) = falbe(i, nsrf)
285 yrain_fall(j) = rain_fall(i)
286 ysnow_fall(j) = snow_fall(i)
287 yagesno(j) = agesno(i, nsrf)
288 yrugos(j) = frugs(i, nsrf)
289 yrugoro(j) = rugoro(i)
290 radsol(j) = fsolsw(i, nsrf) + fsollw(i, nsrf)
291 ypaprs(j, klev + 1) = paprs(i, klev + 1)
292 y_run_off_lic_0(j) = run_off_lic_0(i)
293 END DO
294
295 ! For continent, copy soil water content
296 IF (nsrf == is_ter) yqsol(:knon) = qsol(ni(:knon))
297
298 ytsoil(:knon, :) = ftsoil(ni(:knon), :, nsrf)
299
300 DO k = 1, klev
301 DO j = 1, knon
302 i = ni(j)
303 ypaprs(j, k) = paprs(i, k)
304 ypplay(j, k) = pplay(i, k)
305 ydelp(j, k) = delp(i, k)
306 yu(j, k) = u(i, k)
307 yv(j, k) = v(i, k)
308 yt(j, k) = t(i, k)
309 yq(j, k) = q(i, k)
310 END DO
311 END DO
312
313 ! Calculer les géopotentiels de chaque couche:
314
315 zgeop(:knon, 1) = RD * yt(:knon, 1) / (0.5 * (ypaprs(:knon, 1) &
316 + ypplay(:knon, 1))) * (ypaprs(:knon, 1) - ypplay(:knon, 1))
317
318 DO k = 2, klev
319 zgeop(:knon, k) = zgeop(:knon, k - 1) + RD * 0.5 &
320 * (yt(:knon, k - 1) + yt(:knon, k)) / ypaprs(:knon, k) &
321 * (ypplay(:knon, k - 1) - ypplay(:knon, k))
322 ENDDO
323
324 CALL cdrag(nsrf, sqrt(yu(:knon, 1)**2 + yv(:knon, 1)**2), &
325 yt(:knon, 1), yq(:knon, 1), zgeop(:knon, 1), ypaprs(:knon, 1), &
326 yts(:knon), yqsurf(:knon), yrugos(:knon), ycdragm(:knon), &
327 ycdragh(:knon))
328
329 IF (iflag_pbl == 1) THEN
330 ycdragm(:knon) = max(ycdragm(:knon), 0.)
331 ycdragh(:knon) = max(ycdragh(:knon), 0.)
332 end IF
333
334 ! on met un seuil pour ycdragm et ycdragh
335 IF (nsrf == is_oce) THEN
336 ycdragm(:knon) = min(ycdragm(:knon), cdmmax)
337 ycdragh(:knon) = min(ycdragh(:knon), cdhmax)
338 END IF
339
340 IF (iflag_pbl >= 6) yq2(:knon, :) = q2(ni(:knon), :, nsrf)
341 call coef_diff_turb(nsrf, ni(:knon), ypaprs(:knon, :), &
342 ypplay(:knon, :), yu(:knon, :), yv(:knon, :), yq(:knon, :), &
343 yt(:knon, :), yts(:knon), ycdragm(:knon), zgeop(:knon, :), &
344 ycoefm(:knon, :), ycoefh(:knon, :), yq2(:knon, :))
345
346 CALL clvent(yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
347 ycdragm(:knon), yt(:knon, :), yu(:knon, :), ypaprs(:knon, :), &
348 ypplay(:knon, :), ydelp(:knon, :), y_d_u(:knon, :), &
349 y_flux_u(:knon))
350 CALL clvent(yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
351 ycdragm(:knon), yt(:knon, :), yv(:knon, :), ypaprs(:knon, :), &
352 ypplay(:knon, :), ydelp(:knon, :), y_d_v(:knon, :), &
353 y_flux_v(:knon))
354
355 CALL clqh(julien, nsrf, ni(:knon), ytsoil(:knon, :), yqsol(:knon), &
356 mu0(ni(:knon)), yrugos(:knon), yrugoro(:knon), yu(:knon, 1), &
357 yv(:knon, 1), ycoefh(:knon, :), ycdragh(:knon), yt(:knon, :), &
358 yq(:knon, :), yts(:knon), ypaprs(:knon, :), ypplay(:knon, :), &
359 ydelp(:knon, :), radsol(:knon), yalb(:knon), snow(:knon), &
360 yqsurf(:knon), yrain_fall(:knon), ysnow_fall(:knon), &
361 yfluxlat(:knon), pctsrf_new_sic(ni(:knon)), yagesno(:knon), &
362 y_d_t(:knon, :), y_d_q(:knon, :), y_d_ts(:knon), &
363 yz0_new(:knon), y_flux_t(:knon), y_flux_q(:knon), &
364 y_dflux_t(:knon), y_dflux_q(:knon), y_fqcalving(:knon), &
365 y_ffonte(:knon), y_run_off_lic_0(:knon), y_run_off_lic(:knon))
366
367 ! calculer la longueur de rugosite sur ocean
368
369 yrugm = 0.
370
371 IF (nsrf == is_oce) THEN
372 DO j = 1, knon
373 yrugm(j) = 0.018 * ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2) &
374 / rg + 0.11 * 14E-6 &
375 / sqrt(ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2))
376 yrugm(j) = max(1.5E-05, yrugm(j))
377 END DO
378 END IF
379
380 DO k = 1, klev
381 DO j = 1, knon
382 i = ni(j)
383 y_d_t(j, k) = y_d_t(j, k) * ypct(j)
384 y_d_q(j, k) = y_d_q(j, k) * ypct(j)
385 y_d_u(j, k) = y_d_u(j, k) * ypct(j)
386 y_d_v(j, k) = y_d_v(j, k) * ypct(j)
387 END DO
388 END DO
389
390 flux_t(ni(:knon), nsrf) = y_flux_t(:knon)
391 flux_q(ni(:knon), nsrf) = y_flux_q(:knon)
392 flux_u(ni(:knon), nsrf) = y_flux_u(:knon)
393 flux_v(ni(:knon), nsrf) = y_flux_v(:knon)
394
395 falbe(:, nsrf) = 0.
396 fsnow(:, nsrf) = 0.
397 qsurf(:, nsrf) = 0.
398 frugs(:, nsrf) = 0.
399 DO j = 1, knon
400 i = ni(j)
401 d_ts(i, nsrf) = y_d_ts(j)
402 falbe(i, nsrf) = yalb(j)
403 fsnow(i, nsrf) = snow(j)
404 qsurf(i, nsrf) = yqsurf(j)
405 frugs(i, nsrf) = yz0_new(j)
406 fluxlat(i, nsrf) = yfluxlat(j)
407 IF (nsrf == is_oce) THEN
408 rugmer(i) = yrugm(j)
409 frugs(i, nsrf) = yrugm(j)
410 END IF
411 agesno(i, nsrf) = yagesno(j)
412 fqcalving(i, nsrf) = y_fqcalving(j)
413 ffonte(i, nsrf) = y_ffonte(j)
414 cdragh(i) = cdragh(i) + ycdragh(j) * ypct(j)
415 cdragm(i) = cdragm(i) + ycdragm(j) * ypct(j)
416 dflux_t(i) = dflux_t(i) + y_dflux_t(j) * ypct(j)
417 dflux_q(i) = dflux_q(i) + y_dflux_q(j) * ypct(j)
418 END DO
419 IF (nsrf == is_ter) THEN
420 qsol(ni(:knon)) = yqsol(:knon)
421 else IF (nsrf == is_lic) THEN
422 DO j = 1, knon
423 i = ni(j)
424 run_off_lic_0(i) = y_run_off_lic_0(j)
425 run_off_lic(i) = y_run_off_lic(j)
426 END DO
427 END IF
428
429 ftsoil(:, :, nsrf) = 0.
430 ftsoil(ni(:knon), :, nsrf) = ytsoil(:knon, :)
431
432 DO j = 1, knon
433 i = ni(j)
434 DO k = 1, klev
435 d_t(i, k) = d_t(i, k) + y_d_t(j, k)
436 d_q(i, k) = d_q(i, k) + y_d_q(j, k)
437 d_u(i, k) = d_u(i, k) + y_d_u(j, k)
438 d_v(i, k) = d_v(i, k) + y_d_v(j, k)
439 END DO
440 END DO
441
442 forall (k = 2:klev) coefh(ni(:knon), k) &
443 = coefh(ni(:knon), k) + ycoefh(:knon, k) * ypct(:knon)
444
445 ! diagnostic t, q a 2m et u, v a 10m
446
447 DO j = 1, knon
448 i = ni(j)
449 u1(j) = yu(j, 1) + y_d_u(j, 1)
450 v1(j) = yv(j, 1) + y_d_v(j, 1)
451 tair1(j) = yt(j, 1) + y_d_t(j, 1)
452 qair1(j) = yq(j, 1) + y_d_q(j, 1)
453 zgeo1(j) = rd * tair1(j) / (0.5 * (ypaprs(j, 1) + ypplay(j, &
454 1))) * (ypaprs(j, 1)-ypplay(j, 1))
455 tairsol(j) = yts(j) + y_d_ts(j)
456 rugo1(j) = yrugos(j)
457 IF (nsrf == is_oce) THEN
458 rugo1(j) = frugs(i, nsrf)
459 END IF
460 psfce(j) = ypaprs(j, 1)
461 patm(j) = ypplay(j, 1)
462 END DO
463
464 CALL stdlevvar(nsrf, u1(:knon), v1(:knon), tair1(:knon), qair1, &
465 zgeo1, tairsol, yqsurf(:knon), rugo1, psfce, patm, yt2m, yq2m, &
466 yt10m, yq10m, wind10m(:knon), ustar(:knon))
467
468 DO j = 1, knon
469 i = ni(j)
470 t2m(i, nsrf) = yt2m(j)
471 q2m(i, nsrf) = yq2m(j)
472
473 u10m_srf(i, nsrf) = (wind10m(j) * u1(j)) &
474 / sqrt(u1(j)**2 + v1(j)**2)
475 v10m_srf(i, nsrf) = (wind10m(j) * v1(j)) &
476 / sqrt(u1(j)**2 + v1(j)**2)
477 END DO
478
479 CALL hbtm(ypaprs, ypplay, yt2m, yq2m, ustar(:knon), y_flux_t(:knon), &
480 y_flux_q(:knon), yu(:knon, :), yv(:knon, :), yt(:knon, :), &
481 yq(:knon, :), ypblh(:knon), ycapcl, yoliqcl, ycteicl, ypblt, &
482 ytherm, ylcl)
483
484 DO j = 1, knon
485 i = ni(j)
486 pblh(i, nsrf) = ypblh(j)
487 plcl(i, nsrf) = ylcl(j)
488 capcl(i, nsrf) = ycapcl(j)
489 oliqcl(i, nsrf) = yoliqcl(j)
490 cteicl(i, nsrf) = ycteicl(j)
491 pblt(i, nsrf) = ypblt(j)
492 therm(i, nsrf) = ytherm(j)
493 END DO
494
495 IF (iflag_pbl >= 6) q2(ni(:knon), :, nsrf) = yq2(:knon, :)
496 else
497 fsnow(:, nsrf) = 0.
498 end IF if_knon
499 END DO loop_surface
500
501 ! On utilise les nouvelles surfaces
502 frugs(:, is_oce) = rugmer
503 pctsrf(:, is_oce) = pctsrf_new_oce
504 pctsrf(:, is_sic) = pctsrf_new_sic
505
506 CALL histwrite_phy("run_off_lic", run_off_lic)
507
508 END SUBROUTINE pbl_surface
509
510 end module pbl_surface_m

  ViewVC Help
Powered by ViewVC 1.1.21