/[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 293 - (show annotations)
Wed Jul 25 16:16:53 2018 UTC (5 years, 9 months ago) by guez
File size: 17887 byte(s)
Rename procedure read_sst to limit_read_sst, to be closer to LMDZ.

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 yq = 0.
219 yrugoro = 0.
220 d_ts = 0.
221 flux_t = 0.
222 flux_q = 0.
223 flux_u = 0.
224 flux_v = 0.
225 fluxlat = 0.
226 d_t = 0.
227 d_q = 0.
228 d_u = 0.
229 d_v = 0.
230 coefh = 0.
231 fqcalving = 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(:knon), &
351 yrugoro(:knon), yu(:knon, 1), yv(:knon, 1), ycoefh(:knon, :), &
352 ycdragh(:knon), yt(:knon, :), yq(:knon, :), yts(:knon), &
353 ypaprs(:knon, :), ypplay(:knon, :), ydelp(:knon, :), &
354 yrads(:knon), yalb(:knon), snow(:knon), yqsurf(:knon), yrain_f, &
355 ysnow_f, yfluxlat(:knon), pctsrf_new_sic, yagesno(:knon), &
356 y_d_t(:knon, :), y_d_q(:knon, :), y_d_ts(:knon), &
357 yz0_new(:knon), y_flux_t(:knon), y_flux_q(:knon), &
358 y_dflux_t(:knon), y_dflux_q(:knon), y_fqcalving(:knon), &
359 y_ffonte, y_run_off_lic_0)
360
361 ! calculer la longueur de rugosite sur ocean
362
363 yrugm = 0.
364
365 IF (nsrf == is_oce) THEN
366 DO j = 1, knon
367 yrugm(j) = 0.018 * ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2) &
368 / rg + 0.11 * 14E-6 &
369 / sqrt(ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2))
370 yrugm(j) = max(1.5E-05, yrugm(j))
371 END DO
372 END IF
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) * ypct(j)
413 dflux_q(i) = dflux_q(i) + y_dflux_q(j) * ypct(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(:knon, :), yq, ypblh(:knon), &
478 ycapcl, 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