/[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 303 - (show annotations)
Thu Sep 6 14:25:07 2018 UTC (5 years, 8 months ago) by guez
File size: 17766 byte(s)
In procedure coef_diff_turb, zlev(:, klev + 1) was defined and then
overwritten inside yamada4. Replaced the definition of zlev(:, klev +
1) in coef_diff_turb by the definition in yamada4. So zlev is now
"intent in" in yamada4.

Bug fix in pbl_surface. yq2 is only defined if iflag_pbl >= 6.

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)
16 ! Date: Aug. 18th, 1993
17 ! Objet : interface de couche limite (diffusion verticale)
18
19 ! Tout ce qui a trait aux traceurs est dans "phytrac". Le calcul
20 ! de la couche limite pour les traceurs se fait avec "cltrac" et
21 ! ne tient pas compte de la diff\'erentiation des sous-fractions
22 ! de sol.
23
24 use cdrag_m, only: cdrag
25 use clqh_m, only: clqh
26 use clvent_m, only: clvent
27 use coef_diff_turb_m, only: coef_diff_turb
28 USE conf_gcm_m, ONLY: lmt_pas
29 USE conf_phys_m, ONLY: iflag_pbl
30 USE dimphy, ONLY: klev, klon
31 USE dimsoil, ONLY: nsoilmx
32 use hbtm_m, only: hbtm
33 USE histwrite_phy_m, ONLY: histwrite_phy
34 USE indicesol, ONLY: epsfra, is_lic, is_oce, is_sic, is_ter, nbsrf
35 USE interfoce_lim_m, ONLY: interfoce_lim
36 use phyetat0_m, only: zmasq
37 use stdlevvar_m, only: stdlevvar
38 USE suphec_m, ONLY: rd, rg
39 use time_phylmdz, only: itap
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, intent(out):: d_t(:, :), d_q(:, :) ! (klon, klev)
78 ! changement pour t et q
79
80 REAL, intent(out):: d_u(klon, klev), d_v(klon, klev)
81 ! changement pour "u" et "v"
82
83 REAL, intent(out):: d_ts(:, :) ! (klon, nbsrf) variation of ftsol
84
85 REAL, intent(out):: flux_t(klon, nbsrf)
86 ! flux de chaleur sensible (c_p T) (W / m2) (orientation positive
87 ! vers le bas) à la surface
88
89 REAL, intent(out):: flux_q(klon, nbsrf)
90 ! flux de vapeur d'eau (kg / m2 / s) à la surface
91
92 REAL, intent(out):: flux_u(klon, nbsrf), flux_v(klon, nbsrf)
93 ! tension du vent (flux turbulent de vent) à la surface, en Pa
94
95 REAL, INTENT(out):: cdragh(klon), cdragm(klon)
96 real q2(klon, klev + 1, nbsrf)
97
98 ! Ocean slab:
99 REAL, INTENT(out):: dflux_t(klon) ! derive du flux sensible
100 REAL, INTENT(out):: dflux_q(klon) ! derive du flux latent
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 ! Define ni and knon:
246
247 ni = 0
248 knon = 0
249
250 DO i = 1, klon
251 ! Pour d\'eterminer le domaine \`a traiter, on utilise les surfaces
252 ! "potentielles"
253 IF (pctsrf_pot(i, nsrf) > epsfra) THEN
254 knon = knon + 1
255 ni(knon) = i
256 END IF
257 END DO
258
259 if_knon: IF (knon /= 0) then
260 DO j = 1, knon
261 i = ni(j)
262 ypct(j) = pctsrf(i, nsrf)
263 yts(j) = ftsol(i, nsrf)
264 snow(j) = fsnow(i, nsrf)
265 yqsurf(j) = qsurf(i, nsrf)
266 yalb(j) = falbe(i, nsrf)
267 yrain_f(j) = rain_fall(i)
268 ysnow_f(j) = snow_f(i)
269 yagesno(j) = agesno(i, nsrf)
270 yrugos(j) = frugs(i, nsrf)
271 yrugoro(j) = rugoro(i)
272 yrads(j) = fsolsw(i, nsrf) + fsollw(i, nsrf)
273 ypaprs(j, klev + 1) = paprs(i, klev + 1)
274 y_run_off_lic_0(j) = run_off_lic_0(i)
275 END DO
276
277 ! For continent, copy soil water content
278 IF (nsrf == is_ter) yqsol(:knon) = qsol(ni(:knon))
279
280 ytsoil(:knon, :) = ftsoil(ni(:knon), :, nsrf)
281
282 DO k = 1, klev
283 DO j = 1, knon
284 i = ni(j)
285 ypaprs(j, k) = paprs(i, k)
286 ypplay(j, k) = pplay(i, k)
287 ydelp(j, k) = delp(i, k)
288 yu(j, k) = u(i, k)
289 yv(j, k) = v(i, k)
290 yt(j, k) = t(i, k)
291 yq(j, k) = q(i, k)
292 END DO
293 END DO
294
295 ! Calculer les géopotentiels de chaque couche:
296
297 zgeop(:knon, 1) = RD * yt(:knon, 1) / (0.5 * (ypaprs(:knon, 1) &
298 + ypplay(:knon, 1))) * (ypaprs(:knon, 1) - ypplay(:knon, 1))
299
300 DO k = 2, klev
301 zgeop(:knon, k) = zgeop(:knon, k - 1) + RD * 0.5 &
302 * (yt(:knon, k - 1) + yt(:knon, k)) / ypaprs(:knon, k) &
303 * (ypplay(:knon, k - 1) - ypplay(:knon, k))
304 ENDDO
305
306 CALL cdrag(nsrf, sqrt(yu(:knon, 1)**2 + yv(:knon, 1)**2), &
307 yt(:knon, 1), yq(:knon, 1), zgeop(:knon, 1), ypaprs(:knon, 1), &
308 yts(:knon), yqsurf(:knon), yrugos(:knon), ycdragm(:knon), &
309 ycdragh(:knon))
310
311 IF (iflag_pbl == 1) THEN
312 ycdragm(:knon) = max(ycdragm(:knon), 0.)
313 ycdragh(:knon) = max(ycdragh(:knon), 0.)
314 end IF
315
316 ! on met un seuil pour ycdragm et ycdragh
317 IF (nsrf == is_oce) THEN
318 ycdragm(:knon) = min(ycdragm(:knon), cdmmax)
319 ycdragh(:knon) = min(ycdragh(:knon), cdhmax)
320 END IF
321
322 IF (iflag_pbl >= 6) yq2(:knon, :) = q2(ni(:knon), :, nsrf)
323 call coef_diff_turb(nsrf, ni(:knon), ypaprs(:knon, :), &
324 ypplay(:knon, :), yu(:knon, :), yv(:knon, :), yq(:knon, :), &
325 yt(:knon, :), yts(:knon), ycdragm(:knon), zgeop(:knon, :), &
326 ycoefm(:knon, :), ycoefh(:knon, :), yq2(:knon, :))
327
328 CALL clvent(yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
329 ycdragm(:knon), yt(:knon, :), yu(:knon, :), ypaprs(:knon, :), &
330 ypplay(:knon, :), ydelp(:knon, :), y_d_u(:knon, :), &
331 y_flux_u(:knon))
332 CALL clvent(yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
333 ycdragm(:knon), yt(:knon, :), yv(:knon, :), ypaprs(:knon, :), &
334 ypplay(:knon, :), ydelp(:knon, :), y_d_v(:knon, :), &
335 y_flux_v(:knon))
336
337 CALL clqh(julien, nsrf, ni(:knon), ytsoil(:knon, :), yqsol(:knon), &
338 mu0(ni(:knon)), yrugos(:knon), yrugoro(:knon), yu(:knon, 1), &
339 yv(:knon, 1), ycoefh(:knon, :), ycdragh(:knon), yt(:knon, :), &
340 yq(:knon, :), yts(:knon), ypaprs(:knon, :), ypplay(:knon, :), &
341 ydelp(:knon, :), yrads(:knon), yalb(:knon), snow(:knon), &
342 yqsurf(:knon), yrain_f(:knon), ysnow_f(:knon), yfluxlat(:knon), &
343 pctsrf_new_sic(ni(:knon)), yagesno(:knon), y_d_t(:knon, :), &
344 y_d_q(:knon, :), y_d_ts(:knon), yz0_new(:knon), &
345 y_flux_t(:knon), y_flux_q(:knon), y_dflux_t(:knon), &
346 y_dflux_q(:knon), y_fqcalving(:knon), y_ffonte(:knon), &
347 y_run_off_lic_0(:knon), y_run_off_lic(:knon))
348
349 ! calculer la longueur de rugosite sur ocean
350
351 yrugm = 0.
352
353 IF (nsrf == is_oce) THEN
354 DO j = 1, knon
355 yrugm(j) = 0.018 * ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2) &
356 / rg + 0.11 * 14E-6 &
357 / sqrt(ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2))
358 yrugm(j) = max(1.5E-05, yrugm(j))
359 END DO
360 END IF
361
362 DO k = 1, klev
363 DO j = 1, knon
364 i = ni(j)
365 y_d_t(j, k) = y_d_t(j, k) * ypct(j)
366 y_d_q(j, k) = y_d_q(j, k) * ypct(j)
367 y_d_u(j, k) = y_d_u(j, k) * ypct(j)
368 y_d_v(j, k) = y_d_v(j, k) * ypct(j)
369 END DO
370 END DO
371
372 flux_t(ni(:knon), nsrf) = y_flux_t(:knon)
373 flux_q(ni(:knon), nsrf) = y_flux_q(:knon)
374 flux_u(ni(:knon), nsrf) = y_flux_u(:knon)
375 flux_v(ni(:knon), nsrf) = y_flux_v(:knon)
376
377 evap(:, nsrf) = -flux_q(:, nsrf)
378
379 falbe(:, nsrf) = 0.
380 fsnow(:, nsrf) = 0.
381 qsurf(:, nsrf) = 0.
382 frugs(:, nsrf) = 0.
383 DO j = 1, knon
384 i = ni(j)
385 d_ts(i, nsrf) = y_d_ts(j)
386 falbe(i, nsrf) = yalb(j)
387 fsnow(i, nsrf) = snow(j)
388 qsurf(i, nsrf) = yqsurf(j)
389 frugs(i, nsrf) = yz0_new(j)
390 fluxlat(i, nsrf) = yfluxlat(j)
391 IF (nsrf == is_oce) THEN
392 rugmer(i) = yrugm(j)
393 frugs(i, nsrf) = yrugm(j)
394 END IF
395 agesno(i, nsrf) = yagesno(j)
396 fqcalving(i, nsrf) = y_fqcalving(j)
397 ffonte(i, nsrf) = y_ffonte(j)
398 cdragh(i) = cdragh(i) + ycdragh(j) * ypct(j)
399 cdragm(i) = cdragm(i) + ycdragm(j) * ypct(j)
400 dflux_t(i) = dflux_t(i) + y_dflux_t(j) * ypct(j)
401 dflux_q(i) = dflux_q(i) + y_dflux_q(j) * ypct(j)
402 END DO
403 IF (nsrf == is_ter) THEN
404 qsol(ni(:knon)) = yqsol(:knon)
405 else IF (nsrf == is_lic) THEN
406 DO j = 1, knon
407 i = ni(j)
408 run_off_lic_0(i) = y_run_off_lic_0(j)
409 run_off_lic(i) = y_run_off_lic(j)
410 END DO
411 END IF
412
413 ftsoil(:, :, nsrf) = 0.
414 ftsoil(ni(:knon), :, nsrf) = ytsoil(:knon, :)
415
416 DO j = 1, knon
417 i = ni(j)
418 DO k = 1, klev
419 d_t(i, k) = d_t(i, k) + y_d_t(j, k)
420 d_q(i, k) = d_q(i, k) + y_d_q(j, k)
421 d_u(i, k) = d_u(i, k) + y_d_u(j, k)
422 d_v(i, k) = d_v(i, k) + y_d_v(j, k)
423 END DO
424 END DO
425
426 forall (k = 2:klev) coefh(ni(:knon), k) &
427 = coefh(ni(:knon), k) + ycoefh(:knon, k) * ypct(:knon)
428
429 ! diagnostic t, q a 2m et u, v a 10m
430
431 DO j = 1, knon
432 i = ni(j)
433 u1(j) = yu(j, 1) + y_d_u(j, 1)
434 v1(j) = yv(j, 1) + y_d_v(j, 1)
435 tair1(j) = yt(j, 1) + y_d_t(j, 1)
436 qair1(j) = yq(j, 1) + y_d_q(j, 1)
437 zgeo1(j) = rd * tair1(j) / (0.5 * (ypaprs(j, 1) + ypplay(j, &
438 1))) * (ypaprs(j, 1)-ypplay(j, 1))
439 tairsol(j) = yts(j) + y_d_ts(j)
440 rugo1(j) = yrugos(j)
441 IF (nsrf == is_oce) THEN
442 rugo1(j) = frugs(i, nsrf)
443 END IF
444 psfce(j) = ypaprs(j, 1)
445 patm(j) = ypplay(j, 1)
446
447 qairsol(j) = yqsurf(j)
448 END DO
449
450 CALL stdlevvar(nsrf, u1(:knon), v1(:knon), tair1(:knon), qair1, &
451 zgeo1, tairsol, qairsol, rugo1, psfce, patm, yt2m, yq2m, yt10m, &
452 yq10m, wind10m(:knon), ustar(:knon))
453
454 DO j = 1, knon
455 i = ni(j)
456 t2m(i, nsrf) = yt2m(j)
457 q2m(i, nsrf) = yq2m(j)
458
459 u10m_srf(i, nsrf) = (wind10m(j) * u1(j)) &
460 / sqrt(u1(j)**2 + v1(j)**2)
461 v10m_srf(i, nsrf) = (wind10m(j) * v1(j)) &
462 / sqrt(u1(j)**2 + v1(j)**2)
463 END DO
464
465 CALL hbtm(ypaprs, ypplay, yt2m, yq2m, ustar(:knon), y_flux_t(:knon), &
466 y_flux_q(:knon), yu(:knon, :), yv(:knon, :), yt(:knon, :), &
467 yq(:knon, :), ypblh(:knon), ycapcl, yoliqcl, ycteicl, ypblt, &
468 ytherm, ylcl)
469
470 DO j = 1, knon
471 i = ni(j)
472 pblh(i, nsrf) = ypblh(j)
473 plcl(i, nsrf) = ylcl(j)
474 capcl(i, nsrf) = ycapcl(j)
475 oliqcl(i, nsrf) = yoliqcl(j)
476 cteicl(i, nsrf) = ycteicl(j)
477 pblt(i, nsrf) = ypblt(j)
478 therm(i, nsrf) = ytherm(j)
479 END DO
480
481 IF (iflag_pbl >= 6) q2(ni(:knon), :, nsrf) = yq2(:knon, :)
482 else
483 fsnow(:, nsrf) = 0.
484 end IF if_knon
485 END DO loop_surface
486
487 ! On utilise les nouvelles surfaces
488 frugs(:, is_oce) = rugmer
489 pctsrf(:, is_oce) = pctsrf_new_oce
490 pctsrf(:, is_sic) = pctsrf_new_sic
491
492 CALL histwrite_phy("run_off_lic", run_off_lic)
493
494 END SUBROUTINE pbl_surface
495
496 end module pbl_surface_m

  ViewVC Help
Powered by ViewVC 1.1.21