/[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 304 - (show annotations)
Thu Sep 6 15:51:09 2018 UTC (5 years, 8 months ago) by guez
File size: 17652 byte(s)
Variable fevap of physiq is not used. Remove it from physiq and from
the restart file. Remove the corresponding argument evap of
pbl_surface.

Use directly yqsurf instead of qairsol in pbl_surface.

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, falbe, fluxlat, &
9 rain_fall, snow_fall, 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)
16 ! Date: Aug. 18th, 1993
17 ! Objet : interface de couche limite (diffusion verticale)
18
19 ! Tout ce qui a trait aux traceurs est dans "phytrac". Le calcul
20 ! de la couche limite pour les traceurs se fait avec "cltrac" et
21 ! ne tient pas compte de la diff\'erentiation des sous-fractions
22 ! de sol.
23
24 use cdrag_m, only: cdrag
25 use clqh_m, only: clqh
26 use clvent_m, only: clvent
27 use coef_diff_turb_m, only: coef_diff_turb
28 USE conf_gcm_m, ONLY: lmt_pas
29 USE conf_phys_m, ONLY: iflag_pbl
30 USE dimphy, ONLY: klev, klon
31 USE dimsoil, ONLY: nsoilmx
32 use hbtm_m, only: hbtm
33 USE histwrite_phy_m, ONLY: histwrite_phy
34 USE indicesol, ONLY: epsfra, is_lic, is_oce, is_sic, is_ter, nbsrf
35 USE interfoce_lim_m, ONLY: interfoce_lim
36 use phyetat0_m, only: zmasq
37 use stdlevvar_m, only: stdlevvar
38 USE suphec_m, ONLY: rd, rg
39 use time_phylmdz, only: itap
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, INTENT(inout):: qsurf(klon, nbsrf)
62 REAL, intent(inout):: falbe(klon, nbsrf)
63 REAL, intent(out):: fluxlat(:, :) ! (klon, nbsrf)
64
65 REAL, intent(in):: rain_fall(klon)
66 ! liquid water mass flux (kg / m2 / s), positive down
67
68 REAL, intent(in):: snow_fall(klon)
69 ! solid water mass flux (kg / m2 / s), positive down
70
71 REAL, INTENT(IN):: fsolsw(klon, nbsrf), fsollw(klon, nbsrf)
72 REAL, intent(inout):: frugs(klon, nbsrf) ! longueur de rugosit\'e (en m)
73 real agesno(klon, nbsrf)
74 REAL, INTENT(IN):: rugoro(klon)
75
76 REAL, intent(out):: d_t(:, :), d_q(:, :) ! (klon, klev)
77 ! changement pour t et q
78
79 REAL, intent(out):: d_u(klon, klev), d_v(klon, klev)
80 ! changement pour "u" et "v"
81
82 REAL, intent(out):: d_ts(:, :) ! (klon, nbsrf) variation of ftsol
83
84 REAL, intent(out):: flux_t(klon, nbsrf)
85 ! flux de chaleur sensible (c_p T) (W / m2) (orientation positive
86 ! vers le bas) à la surface
87
88 REAL, intent(out):: flux_q(klon, nbsrf)
89 ! flux de vapeur d'eau (kg / m2 / s) à la surface
90
91 REAL, intent(out):: flux_u(klon, nbsrf), flux_v(klon, nbsrf)
92 ! tension du vent (flux turbulent de vent) à la surface, en Pa
93
94 REAL, INTENT(out):: cdragh(klon), cdragm(klon)
95 real q2(klon, klev + 1, nbsrf)
96
97 ! Ocean slab:
98 REAL, INTENT(out):: dflux_t(klon) ! derive du flux sensible
99 REAL, INTENT(out):: dflux_q(klon) ! derive du flux latent
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) ! flux thermique utilise pour fondre la neige
127 REAL, intent(inout):: run_off_lic_0(:) ! (klon)
128
129 ! Local:
130
131 ! la nouvelle repartition des surfaces sortie de l'interface
132 REAL, save:: pctsrf_new_oce(klon)
133 REAL, save:: pctsrf_new_sic(klon)
134
135 REAL y_fqcalving(klon), y_ffonte(klon)
136 real y_run_off_lic_0(klon), y_run_off_lic(klon)
137 REAL run_off_lic(klon) ! ruissellement total
138 REAL rugmer(klon)
139 REAL ytsoil(klon, nsoilmx)
140 REAL yts(klon), ypct(klon), yz0_new(klon)
141 real yrugos(klon) ! longueur de rugosite (en m)
142 REAL yalb(klon)
143 REAL snow(klon), yqsurf(klon), yagesno(klon)
144 real yqsol(klon) ! column-density of water in soil, in kg m-2
145 REAL yrain_f(klon) ! liquid water mass flux (kg / m2 / s), positive down
146 REAL ysnow_f(klon) ! solid water mass flux (kg / m2 / s), positive down
147 REAL yrugm(klon), yrads(klon), yrugoro(klon)
148 REAL yfluxlat(klon)
149 REAL y_d_ts(klon)
150 REAL y_d_t(klon, klev), y_d_q(klon, klev)
151 REAL y_d_u(klon, klev), y_d_v(klon, klev)
152 REAL y_flux_t(klon), y_flux_q(klon)
153 REAL y_flux_u(klon), y_flux_v(klon)
154 REAL y_dflux_t(klon), y_dflux_q(klon)
155 REAL ycoefh(klon, 2:klev), ycoefm(klon, 2:klev)
156 real ycdragh(klon), ycdragm(klon)
157 REAL yu(klon, klev), yv(klon, klev)
158 REAL yt(klon, klev), yq(klon, klev)
159 REAL ypaprs(klon, klev + 1), ypplay(klon, klev), ydelp(klon, klev)
160 REAL yq2(klon, klev + 1)
161 REAL delp(klon, klev)
162 INTEGER i, k, nsrf
163 INTEGER ni(klon), knon, j
164
165 REAL pctsrf_pot(klon, nbsrf)
166 ! "pourcentage potentiel" pour tenir compte des \'eventuelles
167 ! apparitions ou disparitions de la glace de mer
168
169 REAL yt2m(klon), yq2m(klon), wind10m(klon)
170 REAL ustar(klon)
171
172 REAL yt10m(klon), yq10m(klon)
173 REAL ypblh(klon)
174 REAL ylcl(klon)
175 REAL ycapcl(klon)
176 REAL yoliqcl(klon)
177 REAL ycteicl(klon)
178 REAL ypblt(klon)
179 REAL ytherm(klon)
180 REAL u1(klon), v1(klon)
181 REAL tair1(klon), qair1(klon), tairsol(klon)
182 REAL psfce(klon), patm(klon)
183 REAL zgeo1(klon)
184 REAL rugo1(klon)
185 REAL zgeop(klon, klev)
186
187 !------------------------------------------------------------
188
189 ytherm = 0.
190
191 DO k = 1, klev ! epaisseur de couche
192 DO i = 1, klon
193 delp(i, k) = paprs(i, k) - paprs(i, k + 1)
194 END DO
195 END DO
196
197 ! Initialization:
198 rugmer = 0.
199 cdragh = 0.
200 cdragm = 0.
201 dflux_t = 0.
202 dflux_q = 0.
203 ypct = 0.
204 yrain_f = 0.
205 ysnow_f = 0.
206 yrugos = 0.
207 ypaprs = 0.
208 ypplay = 0.
209 ydelp = 0.
210 yrugoro = 0.
211 d_ts = 0.
212 flux_t = 0.
213 flux_q = 0.
214 flux_u = 0.
215 flux_v = 0.
216 fluxlat = 0.
217 d_t = 0.
218 d_q = 0.
219 d_u = 0.
220 d_v = 0.
221 coefh = 0.
222 fqcalving = 0.
223 run_off_lic = 0.
224
225 ! Initialisation des "pourcentages potentiels". On consid\`ere ici qu'on
226 ! peut avoir potentiellement de la glace sur tout le domaine oc\'eanique
227 ! (\`a affiner).
228
229 pctsrf_pot(:, is_ter) = pctsrf(:, is_ter)
230 pctsrf_pot(:, is_lic) = pctsrf(:, is_lic)
231 pctsrf_pot(:, is_oce) = 1. - zmasq
232 pctsrf_pot(:, is_sic) = 1. - zmasq
233
234 ! Tester si c'est le moment de lire le fichier:
235 if (mod(itap - 1, lmt_pas) == 0) then
236 CALL interfoce_lim(julien, pctsrf_new_oce, pctsrf_new_sic)
237 endif
238
239 ! Boucler sur toutes les sous-fractions du sol:
240
241 loop_surface: DO nsrf = 1, nbsrf
242 ! Define ni and knon:
243
244 ni = 0
245 knon = 0
246
247 DO i = 1, klon
248 ! Pour d\'eterminer le domaine \`a traiter, on utilise les surfaces
249 ! "potentielles"
250 IF (pctsrf_pot(i, nsrf) > epsfra) THEN
251 knon = knon + 1
252 ni(knon) = i
253 END IF
254 END DO
255
256 if_knon: IF (knon /= 0) then
257 DO j = 1, knon
258 i = ni(j)
259 ypct(j) = pctsrf(i, nsrf)
260 yts(j) = ftsol(i, nsrf)
261 snow(j) = fsnow(i, nsrf)
262 yqsurf(j) = qsurf(i, nsrf)
263 yalb(j) = falbe(i, nsrf)
264 yrain_f(j) = rain_fall(i)
265 ysnow_f(j) = snow_fall(i)
266 yagesno(j) = agesno(i, nsrf)
267 yrugos(j) = frugs(i, nsrf)
268 yrugoro(j) = rugoro(i)
269 yrads(j) = fsolsw(i, nsrf) + fsollw(i, nsrf)
270 ypaprs(j, klev + 1) = paprs(i, klev + 1)
271 y_run_off_lic_0(j) = run_off_lic_0(i)
272 END DO
273
274 ! For continent, copy soil water content
275 IF (nsrf == is_ter) yqsol(:knon) = qsol(ni(:knon))
276
277 ytsoil(:knon, :) = ftsoil(ni(:knon), :, nsrf)
278
279 DO k = 1, klev
280 DO j = 1, knon
281 i = ni(j)
282 ypaprs(j, k) = paprs(i, k)
283 ypplay(j, k) = pplay(i, k)
284 ydelp(j, k) = delp(i, k)
285 yu(j, k) = u(i, k)
286 yv(j, k) = v(i, k)
287 yt(j, k) = t(i, k)
288 yq(j, k) = q(i, k)
289 END DO
290 END DO
291
292 ! Calculer les géopotentiels de chaque couche:
293
294 zgeop(:knon, 1) = RD * yt(:knon, 1) / (0.5 * (ypaprs(:knon, 1) &
295 + ypplay(:knon, 1))) * (ypaprs(:knon, 1) - ypplay(:knon, 1))
296
297 DO k = 2, klev
298 zgeop(:knon, k) = zgeop(:knon, k - 1) + RD * 0.5 &
299 * (yt(:knon, k - 1) + yt(:knon, k)) / ypaprs(:knon, k) &
300 * (ypplay(:knon, k - 1) - ypplay(:knon, k))
301 ENDDO
302
303 CALL cdrag(nsrf, sqrt(yu(:knon, 1)**2 + yv(:knon, 1)**2), &
304 yt(:knon, 1), yq(:knon, 1), zgeop(:knon, 1), ypaprs(:knon, 1), &
305 yts(:knon), yqsurf(:knon), yrugos(:knon), ycdragm(:knon), &
306 ycdragh(:knon))
307
308 IF (iflag_pbl == 1) THEN
309 ycdragm(:knon) = max(ycdragm(:knon), 0.)
310 ycdragh(:knon) = max(ycdragh(:knon), 0.)
311 end IF
312
313 ! on met un seuil pour ycdragm et ycdragh
314 IF (nsrf == is_oce) THEN
315 ycdragm(:knon) = min(ycdragm(:knon), cdmmax)
316 ycdragh(:knon) = min(ycdragh(:knon), cdhmax)
317 END IF
318
319 IF (iflag_pbl >= 6) yq2(:knon, :) = q2(ni(:knon), :, nsrf)
320 call coef_diff_turb(nsrf, ni(:knon), ypaprs(:knon, :), &
321 ypplay(:knon, :), yu(:knon, :), yv(:knon, :), yq(:knon, :), &
322 yt(:knon, :), yts(:knon), ycdragm(:knon), zgeop(:knon, :), &
323 ycoefm(:knon, :), ycoefh(:knon, :), yq2(:knon, :))
324
325 CALL clvent(yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
326 ycdragm(:knon), yt(:knon, :), yu(:knon, :), ypaprs(:knon, :), &
327 ypplay(:knon, :), ydelp(:knon, :), y_d_u(:knon, :), &
328 y_flux_u(:knon))
329 CALL clvent(yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
330 ycdragm(:knon), yt(:knon, :), yv(:knon, :), ypaprs(:knon, :), &
331 ypplay(:knon, :), ydelp(:knon, :), y_d_v(:knon, :), &
332 y_flux_v(:knon))
333
334 CALL clqh(julien, nsrf, ni(:knon), ytsoil(:knon, :), yqsol(:knon), &
335 mu0(ni(:knon)), yrugos(:knon), yrugoro(:knon), yu(:knon, 1), &
336 yv(:knon, 1), ycoefh(:knon, :), ycdragh(:knon), yt(:knon, :), &
337 yq(:knon, :), yts(:knon), ypaprs(:knon, :), ypplay(:knon, :), &
338 ydelp(:knon, :), yrads(:knon), yalb(:knon), snow(:knon), &
339 yqsurf(:knon), yrain_f(:knon), ysnow_f(:knon), yfluxlat(:knon), &
340 pctsrf_new_sic(ni(:knon)), yagesno(:knon), y_d_t(:knon, :), &
341 y_d_q(:knon, :), y_d_ts(:knon), yz0_new(:knon), &
342 y_flux_t(:knon), y_flux_q(:knon), y_dflux_t(:knon), &
343 y_dflux_q(:knon), y_fqcalving(:knon), y_ffonte(:knon), &
344 y_run_off_lic_0(:knon), y_run_off_lic(:knon))
345
346 ! calculer la longueur de rugosite sur ocean
347
348 yrugm = 0.
349
350 IF (nsrf == is_oce) THEN
351 DO j = 1, knon
352 yrugm(j) = 0.018 * ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2) &
353 / rg + 0.11 * 14E-6 &
354 / sqrt(ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2))
355 yrugm(j) = max(1.5E-05, yrugm(j))
356 END DO
357 END IF
358
359 DO k = 1, klev
360 DO j = 1, knon
361 i = ni(j)
362 y_d_t(j, k) = y_d_t(j, k) * ypct(j)
363 y_d_q(j, k) = y_d_q(j, k) * ypct(j)
364 y_d_u(j, k) = y_d_u(j, k) * ypct(j)
365 y_d_v(j, k) = y_d_v(j, k) * ypct(j)
366 END DO
367 END DO
368
369 flux_t(ni(:knon), nsrf) = y_flux_t(:knon)
370 flux_q(ni(:knon), nsrf) = y_flux_q(:knon)
371 flux_u(ni(:knon), nsrf) = y_flux_u(:knon)
372 flux_v(ni(:knon), nsrf) = y_flux_v(:knon)
373
374 falbe(:, nsrf) = 0.
375 fsnow(:, nsrf) = 0.
376 qsurf(:, nsrf) = 0.
377 frugs(:, nsrf) = 0.
378 DO j = 1, knon
379 i = ni(j)
380 d_ts(i, nsrf) = y_d_ts(j)
381 falbe(i, nsrf) = yalb(j)
382 fsnow(i, nsrf) = snow(j)
383 qsurf(i, nsrf) = yqsurf(j)
384 frugs(i, nsrf) = yz0_new(j)
385 fluxlat(i, nsrf) = yfluxlat(j)
386 IF (nsrf == is_oce) THEN
387 rugmer(i) = yrugm(j)
388 frugs(i, nsrf) = yrugm(j)
389 END IF
390 agesno(i, nsrf) = yagesno(j)
391 fqcalving(i, nsrf) = y_fqcalving(j)
392 ffonte(i, nsrf) = y_ffonte(j)
393 cdragh(i) = cdragh(i) + ycdragh(j) * ypct(j)
394 cdragm(i) = cdragm(i) + ycdragm(j) * ypct(j)
395 dflux_t(i) = dflux_t(i) + y_dflux_t(j) * ypct(j)
396 dflux_q(i) = dflux_q(i) + y_dflux_q(j) * ypct(j)
397 END DO
398 IF (nsrf == is_ter) THEN
399 qsol(ni(:knon)) = yqsol(:knon)
400 else IF (nsrf == is_lic) THEN
401 DO j = 1, knon
402 i = ni(j)
403 run_off_lic_0(i) = y_run_off_lic_0(j)
404 run_off_lic(i) = y_run_off_lic(j)
405 END DO
406 END IF
407
408 ftsoil(:, :, nsrf) = 0.
409 ftsoil(ni(:knon), :, nsrf) = ytsoil(:knon, :)
410
411 DO j = 1, knon
412 i = ni(j)
413 DO k = 1, klev
414 d_t(i, k) = d_t(i, k) + y_d_t(j, k)
415 d_q(i, k) = d_q(i, k) + y_d_q(j, k)
416 d_u(i, k) = d_u(i, k) + y_d_u(j, k)
417 d_v(i, k) = d_v(i, k) + y_d_v(j, k)
418 END DO
419 END DO
420
421 forall (k = 2:klev) coefh(ni(:knon), k) &
422 = coefh(ni(:knon), k) + ycoefh(:knon, k) * ypct(:knon)
423
424 ! diagnostic t, q a 2m et u, v a 10m
425
426 DO j = 1, knon
427 i = ni(j)
428 u1(j) = yu(j, 1) + y_d_u(j, 1)
429 v1(j) = yv(j, 1) + y_d_v(j, 1)
430 tair1(j) = yt(j, 1) + y_d_t(j, 1)
431 qair1(j) = yq(j, 1) + y_d_q(j, 1)
432 zgeo1(j) = rd * tair1(j) / (0.5 * (ypaprs(j, 1) + ypplay(j, &
433 1))) * (ypaprs(j, 1)-ypplay(j, 1))
434 tairsol(j) = yts(j) + y_d_ts(j)
435 rugo1(j) = yrugos(j)
436 IF (nsrf == is_oce) THEN
437 rugo1(j) = frugs(i, nsrf)
438 END IF
439 psfce(j) = ypaprs(j, 1)
440 patm(j) = ypplay(j, 1)
441 END DO
442
443 CALL stdlevvar(nsrf, u1(:knon), v1(:knon), tair1(:knon), qair1, &
444 zgeo1, tairsol, yqsurf(:knon), rugo1, psfce, patm, yt2m, yq2m, &
445 yt10m, yq10m, wind10m(:knon), ustar(:knon))
446
447 DO j = 1, knon
448 i = ni(j)
449 t2m(i, nsrf) = yt2m(j)
450 q2m(i, nsrf) = yq2m(j)
451
452 u10m_srf(i, nsrf) = (wind10m(j) * u1(j)) &
453 / sqrt(u1(j)**2 + v1(j)**2)
454 v10m_srf(i, nsrf) = (wind10m(j) * v1(j)) &
455 / sqrt(u1(j)**2 + v1(j)**2)
456 END DO
457
458 CALL hbtm(ypaprs, ypplay, yt2m, yq2m, ustar(:knon), y_flux_t(:knon), &
459 y_flux_q(:knon), yu(:knon, :), yv(:knon, :), yt(:knon, :), &
460 yq(:knon, :), ypblh(:knon), ycapcl, yoliqcl, ycteicl, ypblt, &
461 ytherm, ylcl)
462
463 DO j = 1, knon
464 i = ni(j)
465 pblh(i, nsrf) = ypblh(j)
466 plcl(i, nsrf) = ylcl(j)
467 capcl(i, nsrf) = ycapcl(j)
468 oliqcl(i, nsrf) = yoliqcl(j)
469 cteicl(i, nsrf) = ycteicl(j)
470 pblt(i, nsrf) = ypblt(j)
471 therm(i, nsrf) = ytherm(j)
472 END DO
473
474 IF (iflag_pbl >= 6) q2(ni(:knon), :, nsrf) = yq2(:knon, :)
475 else
476 fsnow(:, nsrf) = 0.
477 end IF if_knon
478 END DO loop_surface
479
480 ! On utilise les nouvelles surfaces
481 frugs(:, is_oce) = rugmer
482 pctsrf(:, is_oce) = pctsrf_new_oce
483 pctsrf(:, is_sic) = pctsrf_new_sic
484
485 CALL histwrite_phy("run_off_lic", run_off_lic)
486
487 END SUBROUTINE pbl_surface
488
489 end module pbl_surface_m

  ViewVC Help
Powered by ViewVC 1.1.21