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

Contents of /trunk/phylmd/pbl_surface.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 282 - (show annotations)
Fri Jul 20 16:46:48 2018 UTC (5 years, 10 months ago) by guez
File size: 18032 byte(s)
Polish
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 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 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, intent(out):: d_t(klon, klev), 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 (Cp T) (W / m2) (orientation positive vers
87 ! 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 REAL, INTENT(out):: dflux_t(klon), dflux_q(klon)
99 ! dflux_t derive du flux sensible
100 ! dflux_q derive du flux latent
101 ! IM "slab" ocean
102
103 REAL, intent(out):: coefh(:, 2:) ! (klon, 2:klev)
104 ! Pour pouvoir extraire les coefficients d'\'echange, le champ
105 ! "coefh" a \'et\'e cr\'e\'e. Nous avons moyenn\'e les valeurs de
106 ! ce champ sur les quatre sous-surfaces du mod\`ele.
107
108 REAL, INTENT(inout):: t2m(klon, nbsrf), q2m(klon, nbsrf)
109
110 REAL, INTENT(inout):: u10m_srf(:, :), v10m_srf(:, :) ! (klon, nbsrf)
111 ! composantes du vent \`a 10m sans spirale d'Ekman
112
113 ! Ionela Musat. Cf. Anne Mathieu : planetary boundary layer, hbtm.
114 ! Comme les autres diagnostics on cumule dans physiq ce qui permet
115 ! de sortir les grandeurs par sous-surface.
116 REAL pblh(klon, nbsrf) ! height of planetary boundary layer
117 REAL capcl(klon, nbsrf)
118 REAL oliqcl(klon, nbsrf)
119 REAL cteicl(klon, nbsrf)
120 REAL, INTENT(inout):: pblt(klon, nbsrf) ! T au nveau HCL
121 REAL therm(klon, nbsrf)
122 REAL plcl(klon, nbsrf)
123
124 REAL, intent(out):: fqcalving(klon, nbsrf)
125 ! flux d'eau "perdue" par la surface et necessaire pour limiter la
126 ! hauteur de neige, en kg / m2 / s
127
128 real ffonte(klon, nbsrf)
129 ! ffonte----Flux thermique utilise pour fondre la neige
130 REAL run_off_lic_0(klon)
131
132 ! Local:
133
134 LOGICAL:: firstcal = .true.
135
136 ! la nouvelle repartition des surfaces sortie de l'interface
137 REAL, save:: pctsrf_new_oce(klon)
138 REAL, save:: pctsrf_new_sic(klon)
139
140 REAL y_fqcalving(klon), y_ffonte(klon)
141 real y_run_off_lic_0(klon)
142 REAL rugmer(klon)
143 REAL ytsoil(klon, nsoilmx)
144 REAL yts(klon), ypct(klon), yz0_new(klon)
145 real yrugos(klon) ! longueur de rugosite (en m)
146 REAL yalb(klon)
147 REAL snow(klon), yqsurf(klon), yagesno(klon)
148 real yqsol(klon) ! column-density of water in soil, in kg m-2
149 REAL yrain_f(klon) ! liquid water mass flux (kg / m2 / s), positive down
150 REAL ysnow_f(klon) ! solid water mass flux (kg / m2 / s), positive down
151 REAL yrugm(klon), yrads(klon), yrugoro(klon)
152 REAL yfluxlat(klon)
153 REAL y_d_ts(klon)
154 REAL y_d_t(klon, klev), y_d_q(klon, klev)
155 REAL y_d_u(klon, klev), y_d_v(klon, klev)
156 REAL y_flux_t(klon), y_flux_q(klon)
157 REAL y_flux_u(klon), y_flux_v(klon)
158 REAL y_dflux_t(klon), y_dflux_q(klon)
159 REAL ycoefh(klon, 2:klev), ycoefm(klon, 2:klev)
160 real ycdragh(klon), ycdragm(klon)
161 REAL yu(klon, klev), yv(klon, klev)
162 REAL yt(klon, klev), yq(klon, klev)
163 REAL ypaprs(klon, klev + 1), ypplay(klon, klev), ydelp(klon, klev)
164 REAL yq2(klon, klev + 1)
165 REAL delp(klon, klev)
166 INTEGER i, k, nsrf
167 INTEGER ni(klon), knon, j
168
169 REAL pctsrf_pot(klon, nbsrf)
170 ! "pourcentage potentiel" pour tenir compte des \'eventuelles
171 ! apparitions ou disparitions de la glace de mer
172
173 REAL yt2m(klon), yq2m(klon), wind10m(klon)
174 REAL ustar(klon)
175
176 REAL yt10m(klon), yq10m(klon)
177 REAL ypblh(klon)
178 REAL ylcl(klon)
179 REAL ycapcl(klon)
180 REAL yoliqcl(klon)
181 REAL ycteicl(klon)
182 REAL ypblt(klon)
183 REAL ytherm(klon)
184 REAL u1(klon), v1(klon)
185 REAL tair1(klon), qair1(klon), tairsol(klon)
186 REAL psfce(klon), patm(klon)
187
188 REAL qairsol(klon), zgeo1(klon)
189 REAL rugo1(klon)
190 REAL zgeop(klon, klev)
191
192 !------------------------------------------------------------
193
194 ytherm = 0.
195
196 DO k = 1, klev ! epaisseur de couche
197 DO i = 1, klon
198 delp(i, k) = paprs(i, k) - paprs(i, k + 1)
199 END DO
200 END DO
201
202 ! Initialization:
203 rugmer = 0.
204 cdragh = 0.
205 cdragm = 0.
206 dflux_t = 0.
207 dflux_q = 0.
208 ypct = 0.
209 yqsurf = 0.
210 yrain_f = 0.
211 ysnow_f = 0.
212 yrugos = 0.
213 ypaprs = 0.
214 ypplay = 0.
215 ydelp = 0.
216 yu = 0.
217 yv = 0.
218 yt = 0.
219 yq = 0.
220 y_dflux_t = 0.
221 y_dflux_q = 0.
222 yrugoro = 0.
223 d_ts = 0.
224 flux_t = 0.
225 flux_q = 0.
226 flux_u = 0.
227 flux_v = 0.
228 fluxlat = 0.
229 d_t = 0.
230 d_q = 0.
231 d_u = 0.
232 d_v = 0.
233 coefh = 0.
234 fqcalving = 0.
235
236 ! Initialisation des "pourcentages potentiels". On consid\`ere ici qu'on
237 ! peut avoir potentiellement de la glace sur tout le domaine oc\'eanique
238 ! (\`a affiner)
239
240 pctsrf_pot(:, is_ter) = pctsrf(:, is_ter)
241 pctsrf_pot(:, is_lic) = pctsrf(:, is_lic)
242 pctsrf_pot(:, is_oce) = 1. - zmasq
243 pctsrf_pot(:, is_sic) = 1. - zmasq
244
245 ! Tester si c'est le moment de lire le fichier:
246 if (mod(itap - 1, lmt_pas) == 0) then
247 CALL interfoce_lim(julien, pctsrf_new_oce, pctsrf_new_sic)
248 endif
249
250 ! Boucler sur toutes les sous-fractions du sol:
251
252 loop_surface: DO nsrf = 1, nbsrf
253 ! Chercher les indices :
254 ni = 0
255 knon = 0
256 DO i = 1, klon
257 ! Pour d\'eterminer le domaine \`a traiter, on utilise les surfaces
258 ! "potentielles"
259 IF (pctsrf_pot(i, nsrf) > epsfra) THEN
260 knon = knon + 1
261 ni(knon) = i
262 END IF
263 END DO
264
265 if_knon: IF (knon /= 0) then
266 DO j = 1, knon
267 i = ni(j)
268 ypct(j) = pctsrf(i, nsrf)
269 yts(j) = ftsol(i, nsrf)
270 snow(j) = fsnow(i, nsrf)
271 yqsurf(j) = qsurf(i, nsrf)
272 yalb(j) = falbe(i, nsrf)
273 yrain_f(j) = rain_fall(i)
274 ysnow_f(j) = snow_f(i)
275 yagesno(j) = agesno(i, nsrf)
276 yrugos(j) = frugs(i, nsrf)
277 yrugoro(j) = rugoro(i)
278 yrads(j) = fsolsw(i, nsrf) + fsollw(i, nsrf)
279 ypaprs(j, klev + 1) = paprs(i, klev + 1)
280 y_run_off_lic_0(j) = run_off_lic_0(i)
281 END DO
282
283 ! For continent, copy soil water content
284 IF (nsrf == is_ter) yqsol(:knon) = qsol(ni(:knon))
285
286 ytsoil(:knon, :) = ftsoil(ni(:knon), :, nsrf)
287
288 DO k = 1, klev
289 DO j = 1, knon
290 i = ni(j)
291 ypaprs(j, k) = paprs(i, k)
292 ypplay(j, k) = pplay(i, k)
293 ydelp(j, k) = delp(i, k)
294 yu(j, k) = u(i, k)
295 yv(j, k) = v(i, k)
296 yt(j, k) = t(i, k)
297 yq(j, k) = q(i, k)
298 END DO
299 END DO
300
301 ! Calculer les géopotentiels de chaque couche:
302
303 zgeop(:knon, 1) = RD * yt(:knon, 1) / (0.5 * (ypaprs(:knon, 1) &
304 + ypplay(:knon, 1))) * (ypaprs(:knon, 1) - ypplay(:knon, 1))
305
306 DO k = 2, klev
307 zgeop(:knon, k) = zgeop(:knon, k - 1) + RD * 0.5 &
308 * (yt(:knon, k - 1) + yt(:knon, k)) / ypaprs(:knon, k) &
309 * (ypplay(:knon, k - 1) - ypplay(:knon, k))
310 ENDDO
311
312 CALL cdrag(nsrf, sqrt(yu(:knon, 1)**2 + yv(:knon, 1)**2), &
313 yt(:knon, 1), yq(:knon, 1), zgeop(:knon, 1), ypaprs(:knon, 1), &
314 yts(:knon), yqsurf(:knon), yrugos(:knon), ycdragm(:knon), &
315 ycdragh(:knon))
316
317 IF (iflag_pbl == 1) THEN
318 ycdragm(:knon) = max(ycdragm(:knon), 0.)
319 ycdragh(:knon) = max(ycdragh(:knon), 0.)
320 end IF
321
322 ! on met un seuil pour ycdragm et ycdragh
323 IF (nsrf == is_oce) THEN
324 ycdragm(:knon) = min(ycdragm(:knon), cdmmax)
325 ycdragh(:knon) = min(ycdragh(:knon), cdhmax)
326 END IF
327
328 IF (iflag_pbl >= 6) then
329 DO k = 1, klev + 1
330 DO j = 1, knon
331 i = ni(j)
332 yq2(j, k) = q2(i, k, nsrf)
333 END DO
334 END DO
335 end IF
336
337 call coef_diff_turb(dtime, nsrf, ni(:knon), ypaprs(:knon, :), &
338 ypplay(:knon, :), yu(:knon, :), yv(:knon, :), yq(:knon, :), &
339 yt(:knon, :), yts(:knon), ycdragm(:knon), zgeop(:knon, :), &
340 ycoefm(:knon, :), ycoefh(:knon, :), yq2(:knon, :))
341
342 CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
343 ycdragm(:knon), yt(:knon, :), yu(:knon, :), ypaprs(:knon, :), &
344 ypplay(:knon, :), ydelp(:knon, :), y_d_u(:knon, :), &
345 y_flux_u(:knon))
346 CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
347 ycdragm(:knon), yt(:knon, :), yv(:knon, :), ypaprs(:knon, :), &
348 ypplay(:knon, :), ydelp(:knon, :), y_d_v(:knon, :), &
349 y_flux_v(:knon))
350
351 ! calculer la diffusion de "q" et de "h"
352 CALL clqh(dtime, julien, firstcal, nsrf, ni(:knon), &
353 ytsoil(:knon, :), yqsol(:knon), mu0, yrugos(:knon), &
354 yrugoro(:knon), yu(:knon, 1), yv(:knon, 1), ycoefh(:knon, :), &
355 ycdragh(:knon), yt(:knon, :), yq(:knon, :), yts(:knon), &
356 ypaprs(:knon, :), ypplay(:knon, :), ydelp, yrads(:knon), &
357 yalb(:knon), snow(:knon), yqsurf, yrain_f, ysnow_f, &
358 yfluxlat(:knon), pctsrf_new_sic, yagesno(:knon), &
359 y_d_t(:knon, :), y_d_q(:knon, :), y_d_ts(:knon), &
360 yz0_new(:knon), y_flux_t(:knon), y_flux_q(:knon), &
361 y_dflux_t(:knon), y_dflux_q(:knon), y_fqcalving(:knon), &
362 y_ffonte, y_run_off_lic_0)
363
364 ! calculer la longueur de rugosite sur ocean
365 yrugm = 0.
366 IF (nsrf == is_oce) THEN
367 DO j = 1, knon
368 yrugm(j) = 0.018 * ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2) &
369 / rg + 0.11 * 14E-6 &
370 / sqrt(ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2))
371 yrugm(j) = max(1.5E-05, yrugm(j))
372 END DO
373 END IF
374 DO j = 1, knon
375 y_dflux_t(j) = y_dflux_t(j) * ypct(j)
376 y_dflux_q(j) = y_dflux_q(j) * ypct(j)
377 END DO
378
379 DO k = 1, klev
380 DO j = 1, knon
381 i = ni(j)
382 y_d_t(j, k) = y_d_t(j, k) * ypct(j)
383 y_d_q(j, k) = y_d_q(j, k) * ypct(j)
384 y_d_u(j, k) = y_d_u(j, k) * ypct(j)
385 y_d_v(j, k) = y_d_v(j, k) * ypct(j)
386 END DO
387 END DO
388
389 flux_t(ni(:knon), nsrf) = y_flux_t(:knon)
390 flux_q(ni(:knon), nsrf) = y_flux_q(:knon)
391 flux_u(ni(:knon), nsrf) = y_flux_u(:knon)
392 flux_v(ni(:knon), nsrf) = y_flux_v(:knon)
393
394 evap(:, nsrf) = -flux_q(:, nsrf)
395
396 falbe(:, nsrf) = 0.
397 fsnow(:, nsrf) = 0.
398 qsurf(:, 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 qsurf(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) * ypct(j)
416 cdragm(i) = cdragm(i) + ycdragm(j) * ypct(j)
417 dflux_t(i) = dflux_t(i) + y_dflux_t(j)
418 dflux_q(i) = dflux_q(i) + y_dflux_q(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 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
463 qairsol(j) = yqsurf(j)
464 END DO
465
466 CALL stdlevvar(nsrf, u1(:knon), v1(:knon), tair1(:knon), qair1, &
467 zgeo1, tairsol, qairsol, rugo1, psfce, patm, yt2m, yq2m, yt10m, &
468 yq10m, wind10m(:knon), ustar(:knon))
469
470 DO j = 1, knon
471 i = ni(j)
472 t2m(i, nsrf) = yt2m(j)
473 q2m(i, nsrf) = yq2m(j)
474
475 u10m_srf(i, nsrf) = (wind10m(j) * u1(j)) &
476 / sqrt(u1(j)**2 + v1(j)**2)
477 v10m_srf(i, nsrf) = (wind10m(j) * v1(j)) &
478 / sqrt(u1(j)**2 + v1(j)**2)
479 END DO
480
481 CALL hbtm(ypaprs, ypplay, yt2m, yq2m, ustar(:knon), y_flux_t(:knon), &
482 y_flux_q(:knon), yu, yv, yt, yq, ypblh(:knon), ycapcl, &
483 yoliqcl, ycteicl, ypblt, 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 DO j = 1, knon
497 DO k = 1, klev + 1
498 i = ni(j)
499 q2(i, k, nsrf) = yq2(j, k)
500 END DO
501 END DO
502 else
503 fsnow(:, nsrf) = 0.
504 end IF if_knon
505 END DO loop_surface
506
507 ! On utilise les nouvelles surfaces
508 frugs(:, is_oce) = rugmer
509 pctsrf(:, is_oce) = pctsrf_new_oce
510 pctsrf(:, is_sic) = pctsrf_new_sic
511
512 firstcal = .false.
513
514 END SUBROUTINE pbl_surface
515
516 end module pbl_surface_m

  ViewVC Help
Powered by ViewVC 1.1.21