/[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 286 - (show annotations)
Tue Jul 24 15:22:48 2018 UTC (5 years, 9 months ago) by guez
File size: 17889 byte(s)
Move files containing pbl_surface and procedures called by pbl_surface to directory Interface_surf.
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 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 fqcalving = 0.
233
234 ! Initialisation des "pourcentages potentiels". On consid\`ere ici qu'on
235 ! peut avoir potentiellement de la glace sur tout le domaine oc\'eanique
236 ! (\`a affiner)
237
238 pctsrf_pot(:, is_ter) = pctsrf(:, is_ter)
239 pctsrf_pot(:, is_lic) = pctsrf(:, is_lic)
240 pctsrf_pot(:, is_oce) = 1. - zmasq
241 pctsrf_pot(:, is_sic) = 1. - zmasq
242
243 ! Tester si c'est le moment de lire le fichier:
244 if (mod(itap - 1, lmt_pas) == 0) then
245 CALL interfoce_lim(julien, pctsrf_new_oce, pctsrf_new_sic)
246 endif
247
248 ! Boucler sur toutes les sous-fractions du sol:
249
250 loop_surface: DO nsrf = 1, nbsrf
251 ! Chercher les indices :
252 ni = 0
253 knon = 0
254 DO i = 1, klon
255 ! Pour d\'eterminer le domaine \`a traiter, on utilise les surfaces
256 ! "potentielles"
257 IF (pctsrf_pot(i, nsrf) > epsfra) THEN
258 knon = knon + 1
259 ni(knon) = i
260 END IF
261 END DO
262
263 if_knon: IF (knon /= 0) then
264 DO j = 1, knon
265 i = ni(j)
266 ypct(j) = pctsrf(i, nsrf)
267 yts(j) = ftsol(i, nsrf)
268 snow(j) = fsnow(i, nsrf)
269 yqsurf(j) = qsurf(i, nsrf)
270 yalb(j) = falbe(i, nsrf)
271 yrain_f(j) = rain_fall(i)
272 ysnow_f(j) = snow_f(i)
273 yagesno(j) = agesno(i, nsrf)
274 yrugos(j) = frugs(i, nsrf)
275 yrugoro(j) = rugoro(i)
276 yrads(j) = fsolsw(i, nsrf) + fsollw(i, nsrf)
277 ypaprs(j, klev + 1) = paprs(i, klev + 1)
278 y_run_off_lic_0(j) = run_off_lic_0(i)
279 END DO
280
281 ! For continent, copy soil water content
282 IF (nsrf == is_ter) yqsol(:knon) = qsol(ni(:knon))
283
284 ytsoil(:knon, :) = ftsoil(ni(:knon), :, nsrf)
285
286 DO k = 1, klev
287 DO j = 1, knon
288 i = ni(j)
289 ypaprs(j, k) = paprs(i, k)
290 ypplay(j, k) = pplay(i, k)
291 ydelp(j, k) = delp(i, k)
292 yu(j, k) = u(i, k)
293 yv(j, k) = v(i, k)
294 yt(j, k) = t(i, k)
295 yq(j, k) = q(i, k)
296 END DO
297 END DO
298
299 ! Calculer les géopotentiels de chaque couche:
300
301 zgeop(:knon, 1) = RD * yt(:knon, 1) / (0.5 * (ypaprs(:knon, 1) &
302 + ypplay(:knon, 1))) * (ypaprs(:knon, 1) - ypplay(:knon, 1))
303
304 DO k = 2, klev
305 zgeop(:knon, k) = zgeop(:knon, k - 1) + RD * 0.5 &
306 * (yt(:knon, k - 1) + yt(:knon, k)) / ypaprs(:knon, k) &
307 * (ypplay(:knon, k - 1) - ypplay(:knon, k))
308 ENDDO
309
310 CALL cdrag(nsrf, sqrt(yu(:knon, 1)**2 + yv(:knon, 1)**2), &
311 yt(:knon, 1), yq(:knon, 1), zgeop(:knon, 1), ypaprs(:knon, 1), &
312 yts(:knon), yqsurf(:knon), yrugos(:knon), ycdragm(:knon), &
313 ycdragh(:knon))
314
315 IF (iflag_pbl == 1) THEN
316 ycdragm(:knon) = max(ycdragm(:knon), 0.)
317 ycdragh(:knon) = max(ycdragh(:knon), 0.)
318 end IF
319
320 ! on met un seuil pour ycdragm et ycdragh
321 IF (nsrf == is_oce) THEN
322 ycdragm(:knon) = min(ycdragm(:knon), cdmmax)
323 ycdragh(:knon) = min(ycdragh(:knon), cdhmax)
324 END IF
325
326 IF (iflag_pbl >= 6) then
327 DO k = 1, klev + 1
328 DO j = 1, knon
329 i = ni(j)
330 yq2(j, k) = q2(i, k, nsrf)
331 END DO
332 END DO
333 end IF
334
335 call coef_diff_turb(dtime, nsrf, ni(:knon), ypaprs(:knon, :), &
336 ypplay(:knon, :), yu(:knon, :), yv(:knon, :), yq(:knon, :), &
337 yt(:knon, :), yts(:knon), ycdragm(:knon), zgeop(:knon, :), &
338 ycoefm(:knon, :), ycoefh(:knon, :), yq2(:knon, :))
339
340 CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
341 ycdragm(:knon), yt(:knon, :), yu(:knon, :), ypaprs(:knon, :), &
342 ypplay(:knon, :), ydelp(:knon, :), y_d_u(:knon, :), &
343 y_flux_u(:knon))
344 CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
345 ycdragm(:knon), yt(:knon, :), yv(:knon, :), ypaprs(:knon, :), &
346 ypplay(:knon, :), ydelp(:knon, :), y_d_v(:knon, :), &
347 y_flux_v(:knon))
348
349 ! calculer la diffusion de "q" et de "h"
350 CALL clqh(dtime, julien, firstcal, nsrf, ni(:knon), &
351 ytsoil(:knon, :), yqsol(:knon), mu0, yrugos(:knon), &
352 yrugoro(:knon), yu(:knon, 1), yv(:knon, 1), ycoefh(:knon, :), &
353 ycdragh(:knon), yt(:knon, :), yq(:knon, :), yts(:knon), &
354 ypaprs(:knon, :), ypplay(:knon, :), ydelp(:knon, :), &
355 yrads(:knon), yalb(:knon), snow(:knon), yqsurf(:knon), yrain_f, &
356 ysnow_f, yfluxlat(:knon), pctsrf_new_sic, yagesno(:knon), &
357 y_d_t(:knon, :), y_d_q(:knon, :), y_d_ts(:knon), &
358 yz0_new(:knon), y_flux_t(:knon), y_flux_q(:knon), &
359 y_dflux_t(:knon), y_dflux_q(:knon), y_fqcalving(:knon), &
360 y_ffonte, y_run_off_lic_0)
361
362 ! calculer la longueur de rugosite sur ocean
363
364 yrugm = 0.
365
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
375 DO k = 1, klev
376 DO j = 1, knon
377 i = ni(j)
378 y_d_t(j, k) = y_d_t(j, k) * ypct(j)
379 y_d_q(j, k) = y_d_q(j, k) * ypct(j)
380 y_d_u(j, k) = y_d_u(j, k) * ypct(j)
381 y_d_v(j, k) = y_d_v(j, k) * ypct(j)
382 END DO
383 END DO
384
385 flux_t(ni(:knon), nsrf) = y_flux_t(:knon)
386 flux_q(ni(:knon), nsrf) = y_flux_q(:knon)
387 flux_u(ni(:knon), nsrf) = y_flux_u(:knon)
388 flux_v(ni(:knon), nsrf) = y_flux_v(:knon)
389
390 evap(:, nsrf) = -flux_q(:, nsrf)
391
392 falbe(:, nsrf) = 0.
393 fsnow(:, nsrf) = 0.
394 qsurf(:, nsrf) = 0.
395 frugs(:, nsrf) = 0.
396 DO j = 1, knon
397 i = ni(j)
398 d_ts(i, nsrf) = y_d_ts(j)
399 falbe(i, nsrf) = yalb(j)
400 fsnow(i, nsrf) = snow(j)
401 qsurf(i, nsrf) = yqsurf(j)
402 frugs(i, nsrf) = yz0_new(j)
403 fluxlat(i, nsrf) = yfluxlat(j)
404 IF (nsrf == is_oce) THEN
405 rugmer(i) = yrugm(j)
406 frugs(i, nsrf) = yrugm(j)
407 END IF
408 agesno(i, nsrf) = yagesno(j)
409 fqcalving(i, nsrf) = y_fqcalving(j)
410 ffonte(i, nsrf) = y_ffonte(j)
411 cdragh(i) = cdragh(i) + ycdragh(j) * ypct(j)
412 cdragm(i) = cdragm(i) + ycdragm(j) * ypct(j)
413 dflux_t(i) = dflux_t(i) + y_dflux_t(j) * ypct(j)
414 dflux_q(i) = dflux_q(i) + y_dflux_q(j) * ypct(j)
415 END DO
416 IF (nsrf == is_ter) THEN
417 qsol(ni(:knon)) = yqsol(:knon)
418 else IF (nsrf == is_lic) THEN
419 DO j = 1, knon
420 i = ni(j)
421 run_off_lic_0(i) = y_run_off_lic_0(j)
422 END DO
423 END IF
424
425 ftsoil(:, :, nsrf) = 0.
426 ftsoil(ni(:knon), :, nsrf) = ytsoil(:knon, :)
427
428 DO j = 1, knon
429 i = ni(j)
430 DO k = 1, klev
431 d_t(i, k) = d_t(i, k) + y_d_t(j, k)
432 d_q(i, k) = d_q(i, k) + y_d_q(j, k)
433 d_u(i, k) = d_u(i, k) + y_d_u(j, k)
434 d_v(i, k) = d_v(i, k) + y_d_v(j, k)
435 END DO
436 END DO
437
438 forall (k = 2:klev) coefh(ni(:knon), k) &
439 = coefh(ni(:knon), k) + ycoefh(:knon, k) * ypct(:knon)
440
441 ! diagnostic t, q a 2m et u, v a 10m
442
443 DO j = 1, knon
444 i = ni(j)
445 u1(j) = yu(j, 1) + y_d_u(j, 1)
446 v1(j) = yv(j, 1) + y_d_v(j, 1)
447 tair1(j) = yt(j, 1) + y_d_t(j, 1)
448 qair1(j) = yq(j, 1) + y_d_q(j, 1)
449 zgeo1(j) = rd * tair1(j) / (0.5 * (ypaprs(j, 1) + ypplay(j, &
450 1))) * (ypaprs(j, 1)-ypplay(j, 1))
451 tairsol(j) = yts(j) + y_d_ts(j)
452 rugo1(j) = yrugos(j)
453 IF (nsrf == is_oce) THEN
454 rugo1(j) = frugs(i, nsrf)
455 END IF
456 psfce(j) = ypaprs(j, 1)
457 patm(j) = ypplay(j, 1)
458
459 qairsol(j) = yqsurf(j)
460 END DO
461
462 CALL stdlevvar(nsrf, u1(:knon), v1(:knon), tair1(:knon), qair1, &
463 zgeo1, tairsol, qairsol, rugo1, psfce, patm, yt2m, yq2m, yt10m, &
464 yq10m, wind10m(:knon), ustar(:knon))
465
466 DO j = 1, knon
467 i = ni(j)
468 t2m(i, nsrf) = yt2m(j)
469 q2m(i, nsrf) = yq2m(j)
470
471 u10m_srf(i, nsrf) = (wind10m(j) * u1(j)) &
472 / sqrt(u1(j)**2 + v1(j)**2)
473 v10m_srf(i, nsrf) = (wind10m(j) * v1(j)) &
474 / sqrt(u1(j)**2 + v1(j)**2)
475 END DO
476
477 CALL hbtm(ypaprs, ypplay, yt2m, yq2m, ustar(:knon), y_flux_t(:knon), &
478 y_flux_q(:knon), yu, yv, yt, yq, ypblh(:knon), ycapcl, &
479 yoliqcl, ycteicl, ypblt, ytherm, ylcl)
480
481 DO j = 1, knon
482 i = ni(j)
483 pblh(i, nsrf) = ypblh(j)
484 plcl(i, nsrf) = ylcl(j)
485 capcl(i, nsrf) = ycapcl(j)
486 oliqcl(i, nsrf) = yoliqcl(j)
487 cteicl(i, nsrf) = ycteicl(j)
488 pblt(i, nsrf) = ypblt(j)
489 therm(i, nsrf) = ytherm(j)
490 END DO
491
492 DO j = 1, knon
493 DO k = 1, klev + 1
494 i = ni(j)
495 q2(i, k, nsrf) = yq2(j, k)
496 END DO
497 END DO
498 else
499 fsnow(:, nsrf) = 0.
500 end IF if_knon
501 END DO loop_surface
502
503 ! On utilise les nouvelles surfaces
504 frugs(:, is_oce) = rugmer
505 pctsrf(:, is_oce) = pctsrf_new_oce
506 pctsrf(:, is_sic) = pctsrf_new_sic
507
508 firstcal = .false.
509
510 END SUBROUTINE pbl_surface
511
512 end module pbl_surface_m

  ViewVC Help
Powered by ViewVC 1.1.21