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

Contents of /trunk/phylmd/pbl_surface.f

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21