/[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 301 - (show annotations)
Thu Aug 2 17:23:07 2018 UTC (5 years, 8 months ago) by guez
File size: 18007 byte(s)
Move the call to conf_interface up to physiq, so there is no need to
test first call inside pbl_surface for this.

run_off_lic in fonte_neige was computed but not used. Pass it up to
pbl_surface so we can output it (following LMDZ).

Simplify the logic in interfsur_lim so we do not need debut.

Remove the tests on the order of surface types in interfsurf_hq. Just
add comments in indicesol.

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

  ViewVC Help
Powered by ViewVC 1.1.21