/[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 300 - (show annotations)
Thu Aug 2 15:55:01 2018 UTC (5 years, 10 months ago) by guez
File size: 17827 byte(s)
The calls to calcul_fluxs were always done with an array argument
dif_grnd set to a scalar (and that is also the case in LMDZ). So just
use a scalar argument.

In procedure fonte_neige, the value of run_off_lic from previous call
was actually not used. So we can remove the save attribute and make it
an automatic array.

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 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(inout):: pctsrf(klon, nbsrf)
40 ! tableau des pourcentages de surface de chaque maille
41
42 REAL, INTENT(IN):: t(klon, klev) ! temperature (K)
43 REAL, INTENT(IN):: q(klon, klev) ! vapeur d'eau (kg / kg)
44 REAL, INTENT(IN):: u(klon, klev), v(klon, klev) ! vitesse
45 INTEGER, INTENT(IN):: julien ! jour de l'annee en cours
46 REAL, intent(in):: mu0(klon) ! cosinus de l'angle solaire zenithal
47 REAL, INTENT(IN):: ftsol(:, :) ! (klon, nbsrf) temp\'erature du sol (en K)
48 REAL, INTENT(IN):: cdmmax, cdhmax ! seuils cdrm, cdrh
49
50 REAL, INTENT(inout):: ftsoil(klon, nsoilmx, nbsrf)
51 ! soil temperature of surface fraction
52
53 REAL, INTENT(inout):: qsol(:) ! (klon)
54 ! column-density of water in soil, in kg m-2
55
56 REAL, INTENT(IN):: paprs(klon, klev + 1) ! pression a intercouche (Pa)
57 REAL, INTENT(IN):: pplay(klon, klev) ! pression au milieu de couche (Pa)
58 REAL, INTENT(inout):: fsnow(:, :) ! (klon, nbsrf) \'epaisseur neigeuse
59 REAL qsurf(klon, nbsrf)
60 REAL evap(klon, nbsrf)
61 REAL, intent(inout):: falbe(klon, nbsrf)
62 REAL, intent(out):: fluxlat(:, :) ! (klon, nbsrf)
63
64 REAL, intent(in):: rain_fall(klon)
65 ! liquid water mass flux (kg / m2 / s), positive down
66
67 REAL, intent(in):: snow_f(klon)
68 ! solid water mass flux (kg / m2 / s), positive down
69
70 REAL, INTENT(IN):: fsolsw(klon, nbsrf), fsollw(klon, nbsrf)
71 REAL, intent(inout):: frugs(klon, nbsrf) ! longueur de rugosit\'e (en m)
72 real agesno(klon, nbsrf)
73 REAL, INTENT(IN):: rugoro(klon)
74
75 REAL, intent(out):: d_t(:, :), d_q(:, :) ! (klon, klev)
76 ! changement pour t et q
77
78 REAL, intent(out):: d_u(klon, klev), d_v(klon, klev)
79 ! changement pour "u" et "v"
80
81 REAL, intent(out):: d_ts(:, :) ! (klon, nbsrf) variation of ftsol
82
83 REAL, intent(out):: flux_t(klon, nbsrf)
84 ! flux de chaleur sensible (Cp T) (W / m2) (orientation positive vers
85 ! le bas) à la surface
86
87 REAL, intent(out):: flux_q(klon, nbsrf)
88 ! flux de vapeur d'eau (kg / m2 / s) à la surface
89
90 REAL, intent(out):: flux_u(klon, nbsrf), flux_v(klon, nbsrf)
91 ! tension du vent (flux turbulent de vent) à la surface, en Pa
92
93 REAL, INTENT(out):: cdragh(klon), cdragm(klon)
94 real q2(klon, klev + 1, nbsrf)
95
96 REAL, INTENT(out):: dflux_t(klon), dflux_q(klon)
97 ! dflux_t derive du flux sensible
98 ! dflux_q derive du flux latent
99 ! IM "slab" ocean
100
101 REAL, intent(out):: coefh(:, 2:) ! (klon, 2:klev)
102 ! Pour pouvoir extraire les coefficients d'\'echange, le champ
103 ! "coefh" a \'et\'e cr\'e\'e. Nous avons moyenn\'e les valeurs de
104 ! ce champ sur les quatre sous-surfaces du mod\`ele.
105
106 REAL, INTENT(inout):: t2m(klon, nbsrf), q2m(klon, nbsrf)
107
108 REAL, INTENT(inout):: u10m_srf(:, :), v10m_srf(:, :) ! (klon, nbsrf)
109 ! composantes du vent \`a 10m sans spirale d'Ekman
110
111 ! Ionela Musat. Cf. Anne Mathieu : planetary boundary layer, hbtm.
112 ! Comme les autres diagnostics on cumule dans physiq ce qui permet
113 ! de sortir les grandeurs par sous-surface.
114 REAL pblh(klon, nbsrf) ! height of planetary boundary layer
115 REAL capcl(klon, nbsrf)
116 REAL oliqcl(klon, nbsrf)
117 REAL cteicl(klon, nbsrf)
118 REAL, INTENT(inout):: pblt(klon, nbsrf) ! T au nveau HCL
119 REAL therm(klon, nbsrf)
120 REAL plcl(klon, nbsrf)
121
122 REAL, intent(out):: fqcalving(klon, nbsrf)
123 ! flux d'eau "perdue" par la surface et necessaire pour limiter la
124 ! hauteur de neige, en kg / m2 / s
125
126 real ffonte(klon, nbsrf)
127 ! ffonte----Flux thermique utilise pour fondre la neige
128 REAL, intent(inout):: 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) ! longueur 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 yrugoro = 0.
215 d_ts = 0.
216 flux_t = 0.
217 flux_q = 0.
218 flux_u = 0.
219 flux_v = 0.
220 fluxlat = 0.
221 d_t = 0.
222 d_q = 0.
223 d_u = 0.
224 d_v = 0.
225 coefh = 0.
226 fqcalving = 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, firstcal, nsrf, ni(:knon), ytsoil(:knon, :), &
344 yqsol(:knon), mu0(ni(:knon)), yrugos(:knon), yrugoro(:knon), &
345 yu(:knon, 1), yv(:knon, 1), ycoefh(:knon, :), ycdragh(:knon), &
346 yt(:knon, :), yq(:knon, :), yts(:knon), ypaprs(:knon, :), &
347 ypplay(:knon, :), ydelp(:knon, :), yrads(:knon), yalb(:knon), &
348 snow(:knon), yqsurf(:knon), yrain_f(:knon), ysnow_f(:knon), &
349 yfluxlat(:knon), pctsrf_new_sic(ni(:knon)), yagesno(:knon), &
350 y_d_t(:knon, :), y_d_q(:knon, :), y_d_ts(:knon), &
351 yz0_new(:knon), y_flux_t(:knon), y_flux_q(:knon), &
352 y_dflux_t(:knon), y_dflux_q(:knon), y_fqcalving(:knon), &
353 y_ffonte(:knon), y_run_off_lic_0(: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 END DO
416 END IF
417
418 ftsoil(:, :, nsrf) = 0.
419 ftsoil(ni(:knon), :, nsrf) = ytsoil(:knon, :)
420
421 DO j = 1, knon
422 i = ni(j)
423 DO k = 1, klev
424 d_t(i, k) = d_t(i, k) + y_d_t(j, k)
425 d_q(i, k) = d_q(i, k) + y_d_q(j, k)
426 d_u(i, k) = d_u(i, k) + y_d_u(j, k)
427 d_v(i, k) = d_v(i, k) + y_d_v(j, k)
428 END DO
429 END DO
430
431 forall (k = 2:klev) coefh(ni(:knon), k) &
432 = coefh(ni(:knon), k) + ycoefh(:knon, k) * ypct(:knon)
433
434 ! diagnostic t, q a 2m et u, v a 10m
435
436 DO j = 1, knon
437 i = ni(j)
438 u1(j) = yu(j, 1) + y_d_u(j, 1)
439 v1(j) = yv(j, 1) + y_d_v(j, 1)
440 tair1(j) = yt(j, 1) + y_d_t(j, 1)
441 qair1(j) = yq(j, 1) + y_d_q(j, 1)
442 zgeo1(j) = rd * tair1(j) / (0.5 * (ypaprs(j, 1) + ypplay(j, &
443 1))) * (ypaprs(j, 1)-ypplay(j, 1))
444 tairsol(j) = yts(j) + y_d_ts(j)
445 rugo1(j) = yrugos(j)
446 IF (nsrf == is_oce) THEN
447 rugo1(j) = frugs(i, nsrf)
448 END IF
449 psfce(j) = ypaprs(j, 1)
450 patm(j) = ypplay(j, 1)
451
452 qairsol(j) = yqsurf(j)
453 END DO
454
455 CALL stdlevvar(nsrf, u1(:knon), v1(:knon), tair1(:knon), qair1, &
456 zgeo1, tairsol, qairsol, rugo1, psfce, patm, yt2m, yq2m, yt10m, &
457 yq10m, wind10m(:knon), ustar(:knon))
458
459 DO j = 1, knon
460 i = ni(j)
461 t2m(i, nsrf) = yt2m(j)
462 q2m(i, nsrf) = yq2m(j)
463
464 u10m_srf(i, nsrf) = (wind10m(j) * u1(j)) &
465 / sqrt(u1(j)**2 + v1(j)**2)
466 v10m_srf(i, nsrf) = (wind10m(j) * v1(j)) &
467 / sqrt(u1(j)**2 + v1(j)**2)
468 END DO
469
470 CALL hbtm(ypaprs, ypplay, yt2m, yq2m, ustar(:knon), y_flux_t(:knon), &
471 y_flux_q(:knon), yu(:knon, :), yv(:knon, :), yt(:knon, :), &
472 yq(:knon, :), ypblh(:knon), ycapcl, yoliqcl, ycteicl, ypblt, &
473 ytherm, ylcl)
474
475 DO j = 1, knon
476 i = ni(j)
477 pblh(i, nsrf) = ypblh(j)
478 plcl(i, nsrf) = ylcl(j)
479 capcl(i, nsrf) = ycapcl(j)
480 oliqcl(i, nsrf) = yoliqcl(j)
481 cteicl(i, nsrf) = ycteicl(j)
482 pblt(i, nsrf) = ypblt(j)
483 therm(i, nsrf) = ytherm(j)
484 END DO
485
486 DO j = 1, knon
487 DO k = 1, klev + 1
488 i = ni(j)
489 q2(i, k, nsrf) = yq2(j, k)
490 END DO
491 END DO
492 else
493 fsnow(:, nsrf) = 0.
494 end IF if_knon
495 END DO loop_surface
496
497 ! On utilise les nouvelles surfaces
498 frugs(:, is_oce) = rugmer
499 pctsrf(:, is_oce) = pctsrf_new_oce
500 pctsrf(:, is_sic) = pctsrf_new_sic
501
502 firstcal = .false.
503
504 END SUBROUTINE pbl_surface
505
506 end module pbl_surface_m

  ViewVC Help
Powered by ViewVC 1.1.21