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

Contents of /trunk/phylmd/pbl_surface.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 276 - (show annotations)
Thu Jul 12 14:49:20 2018 UTC (5 years, 10 months ago) by guez
File size: 17933 byte(s)
Move procedure read_serre from module read_serre_m to module
dynetat0_m, to avoid side effet on variables of module dynetat0_m.

Create procedure set_unit_nml to avoid side effect on variable of
module unit_nml_m.

Downgrade pctsrf from variable of module etat0_m to argument of etat0
and limit to avoid side effect on pctsrf.

Move variable zmasq from module dimphy to module phyetat0_m to avoid
side effect on zmasq.

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

  ViewVC Help
Powered by ViewVC 1.1.21