/[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 310 - (show annotations)
Thu Sep 27 16:29:06 2018 UTC (5 years, 7 months ago) by guez
File size: 18537 byte(s)
Read and write the whole pctsrf array in (re)startphy.nc, instead of
splitting it into FTER, FLIC, FOCE, FSIC.

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

  ViewVC Help
Powered by ViewVC 1.1.21