/[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 297 - (show annotations)
Thu Jul 26 16:02:11 2018 UTC (5 years, 10 months ago) by guez
File size: 17836 byte(s)
Rename module interface_surf to conf_interface_m.

Move the computation of pkf out of procedure climb_hq_down into clqh.

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 CALL clqh(dtime, julien, firstcal, nsrf, ni(:knon), &
349 ytsoil(:knon, :), yqsol(:knon), mu0, yrugos(:knon), &
350 yrugoro(:knon), yu(:knon, 1), yv(:knon, 1), ycoefh(:knon, :), &
351 ycdragh(:knon), yt(:knon, :), yq(:knon, :), yts(:knon), &
352 ypaprs(:knon, :), ypplay(:knon, :), ydelp(:knon, :), &
353 yrads(:knon), yalb(:knon), snow(:knon), yqsurf(:knon), yrain_f, &
354 ysnow_f, yfluxlat(:knon), pctsrf_new_sic, yagesno(:knon), &
355 y_d_t(:knon, :), y_d_q(:knon, :), y_d_ts(:knon), &
356 yz0_new(:knon), y_flux_t(:knon), y_flux_q(:knon), &
357 y_dflux_t(:knon), y_dflux_q(:knon), y_fqcalving(:knon), &
358 y_ffonte, y_run_off_lic_0)
359
360 ! calculer la longueur de rugosite sur ocean
361
362 yrugm = 0.
363
364 IF (nsrf == is_oce) THEN
365 DO j = 1, knon
366 yrugm(j) = 0.018 * ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2) &
367 / rg + 0.11 * 14E-6 &
368 / sqrt(ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2))
369 yrugm(j) = max(1.5E-05, yrugm(j))
370 END DO
371 END IF
372
373 DO k = 1, klev
374 DO j = 1, knon
375 i = ni(j)
376 y_d_t(j, k) = y_d_t(j, k) * ypct(j)
377 y_d_q(j, k) = y_d_q(j, k) * ypct(j)
378 y_d_u(j, k) = y_d_u(j, k) * ypct(j)
379 y_d_v(j, k) = y_d_v(j, k) * ypct(j)
380 END DO
381 END DO
382
383 flux_t(ni(:knon), nsrf) = y_flux_t(:knon)
384 flux_q(ni(:knon), nsrf) = y_flux_q(:knon)
385 flux_u(ni(:knon), nsrf) = y_flux_u(:knon)
386 flux_v(ni(:knon), nsrf) = y_flux_v(:knon)
387
388 evap(:, nsrf) = -flux_q(:, nsrf)
389
390 falbe(:, nsrf) = 0.
391 fsnow(:, nsrf) = 0.
392 qsurf(:, nsrf) = 0.
393 frugs(:, nsrf) = 0.
394 DO j = 1, knon
395 i = ni(j)
396 d_ts(i, nsrf) = y_d_ts(j)
397 falbe(i, nsrf) = yalb(j)
398 fsnow(i, nsrf) = snow(j)
399 qsurf(i, nsrf) = yqsurf(j)
400 frugs(i, nsrf) = yz0_new(j)
401 fluxlat(i, nsrf) = yfluxlat(j)
402 IF (nsrf == is_oce) THEN
403 rugmer(i) = yrugm(j)
404 frugs(i, nsrf) = yrugm(j)
405 END IF
406 agesno(i, nsrf) = yagesno(j)
407 fqcalving(i, nsrf) = y_fqcalving(j)
408 ffonte(i, nsrf) = y_ffonte(j)
409 cdragh(i) = cdragh(i) + ycdragh(j) * ypct(j)
410 cdragm(i) = cdragm(i) + ycdragm(j) * ypct(j)
411 dflux_t(i) = dflux_t(i) + y_dflux_t(j) * ypct(j)
412 dflux_q(i) = dflux_q(i) + y_dflux_q(j) * ypct(j)
413 END DO
414 IF (nsrf == is_ter) THEN
415 qsol(ni(:knon)) = yqsol(:knon)
416 else IF (nsrf == is_lic) THEN
417 DO j = 1, knon
418 i = ni(j)
419 run_off_lic_0(i) = y_run_off_lic_0(j)
420 END DO
421 END IF
422
423 ftsoil(:, :, nsrf) = 0.
424 ftsoil(ni(:knon), :, nsrf) = ytsoil(:knon, :)
425
426 DO j = 1, knon
427 i = ni(j)
428 DO k = 1, klev
429 d_t(i, k) = d_t(i, k) + y_d_t(j, k)
430 d_q(i, k) = d_q(i, k) + y_d_q(j, k)
431 d_u(i, k) = d_u(i, k) + y_d_u(j, k)
432 d_v(i, k) = d_v(i, k) + y_d_v(j, k)
433 END DO
434 END DO
435
436 forall (k = 2:klev) coefh(ni(:knon), k) &
437 = coefh(ni(:knon), k) + ycoefh(:knon, k) * ypct(:knon)
438
439 ! diagnostic t, q a 2m et u, v a 10m
440
441 DO j = 1, knon
442 i = ni(j)
443 u1(j) = yu(j, 1) + y_d_u(j, 1)
444 v1(j) = yv(j, 1) + y_d_v(j, 1)
445 tair1(j) = yt(j, 1) + y_d_t(j, 1)
446 qair1(j) = yq(j, 1) + y_d_q(j, 1)
447 zgeo1(j) = rd * tair1(j) / (0.5 * (ypaprs(j, 1) + ypplay(j, &
448 1))) * (ypaprs(j, 1)-ypplay(j, 1))
449 tairsol(j) = yts(j) + y_d_ts(j)
450 rugo1(j) = yrugos(j)
451 IF (nsrf == is_oce) THEN
452 rugo1(j) = frugs(i, nsrf)
453 END IF
454 psfce(j) = ypaprs(j, 1)
455 patm(j) = ypplay(j, 1)
456
457 qairsol(j) = yqsurf(j)
458 END DO
459
460 CALL stdlevvar(nsrf, u1(:knon), v1(:knon), tair1(:knon), qair1, &
461 zgeo1, tairsol, qairsol, rugo1, psfce, patm, yt2m, yq2m, yt10m, &
462 yq10m, wind10m(:knon), ustar(:knon))
463
464 DO j = 1, knon
465 i = ni(j)
466 t2m(i, nsrf) = yt2m(j)
467 q2m(i, nsrf) = yq2m(j)
468
469 u10m_srf(i, nsrf) = (wind10m(j) * u1(j)) &
470 / sqrt(u1(j)**2 + v1(j)**2)
471 v10m_srf(i, nsrf) = (wind10m(j) * v1(j)) &
472 / sqrt(u1(j)**2 + v1(j)**2)
473 END DO
474
475 CALL hbtm(ypaprs, ypplay, yt2m, yq2m, ustar(:knon), y_flux_t(:knon), &
476 y_flux_q(:knon), yu, yv, yt(:knon, :), yq, ypblh(:knon), &
477 ycapcl, yoliqcl, ycteicl, ypblt, ytherm, ylcl)
478
479 DO j = 1, knon
480 i = ni(j)
481 pblh(i, nsrf) = ypblh(j)
482 plcl(i, nsrf) = ylcl(j)
483 capcl(i, nsrf) = ycapcl(j)
484 oliqcl(i, nsrf) = yoliqcl(j)
485 cteicl(i, nsrf) = ycteicl(j)
486 pblt(i, nsrf) = ypblt(j)
487 therm(i, nsrf) = ytherm(j)
488 END DO
489
490 DO j = 1, knon
491 DO k = 1, klev + 1
492 i = ni(j)
493 q2(i, k, nsrf) = yq2(j, k)
494 END DO
495 END DO
496 else
497 fsnow(:, nsrf) = 0.
498 end IF if_knon
499 END DO loop_surface
500
501 ! On utilise les nouvelles surfaces
502 frugs(:, is_oce) = rugmer
503 pctsrf(:, is_oce) = pctsrf_new_oce
504 pctsrf(:, is_sic) = pctsrf_new_sic
505
506 firstcal = .false.
507
508 END SUBROUTINE pbl_surface
509
510 end module pbl_surface_m

  ViewVC Help
Powered by ViewVC 1.1.21