/[lmdze]/trunk/Sources/phylmd/clmain.f
ViewVC logotype

Contents of /trunk/Sources/phylmd/clmain.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 250 - (show annotations)
Fri Jan 5 18:18:53 2018 UTC (6 years, 4 months ago) by guez
File size: 18169 byte(s)
Extract part of clmain into a new procedure coef_diff_turb (following LMDZ).

1 module clmain_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE clmain(dtime, pctsrf, t, q, u, v, julien, mu0, ftsol, cdmmax, &
8 cdhmax, ftsoil, qsol, paprs, pplay, fsnow, qsurf, evap, falbe, fluxlat, &
9 rain_fall, snow_f, 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, trmb1, trmb2, trmb3, plcl, fqcalving, &
13 ffonte, run_off_lic_0)
14
15 ! From phylmd/clmain.F, version 1.6, 2005/11/16 14:47:19
16 ! Author: Z. X. Li (LMD/CNRS), date: 1993/08/18
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 clcdrag_m, only: clcdrag
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, zmasq
31 USE dimsoil, ONLY: nsoilmx
32 use hbtm_m, only: hbtm
33 USE indicesol, ONLY: epsfra, is_lic, is_oce, is_sic, is_ter, nbsrf
34 USE interfoce_lim_m, ONLY: interfoce_lim
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 d_t(klon, klev), d_q(klon, klev)
78 ! d_t------output-R- le changement pour "t"
79 ! d_q------output-R- le changement pour "q"
80
81 REAL, intent(out):: d_u(klon, klev), d_v(klon, klev)
82 ! changement pour "u" et "v"
83
84 REAL, intent(out):: d_ts(:, :) ! (klon, nbsrf) variation of ftsol
85
86 REAL, intent(out):: flux_t(klon, nbsrf)
87 ! flux de chaleur sensible (Cp T) (W / m2) (orientation positive vers
88 ! le bas) à la surface
89
90 REAL, intent(out):: flux_q(klon, nbsrf)
91 ! flux de vapeur d'eau (kg / m2 / s) à la surface
92
93 REAL, intent(out):: flux_u(klon, nbsrf), flux_v(klon, nbsrf)
94 ! tension du vent (flux turbulent de vent) à la surface, en Pa
95
96 REAL, INTENT(out):: cdragh(klon), cdragm(klon)
97 real q2(klon, klev + 1, nbsrf)
98
99 REAL, INTENT(out):: dflux_t(klon), dflux_q(klon)
100 ! dflux_t derive du flux sensible
101 ! dflux_q derive du flux latent
102 ! IM "slab" ocean
103
104 REAL, intent(out):: coefh(:, 2:) ! (klon, 2:klev)
105 ! Pour pouvoir extraire les coefficients d'\'echange, le champ
106 ! "coefh" a \'et\'e cr\'e\'e. Nous avons moyenn\'e les valeurs de
107 ! ce champ sur les quatre sous-surfaces du mod\`ele.
108
109 REAL, INTENT(inout):: t2m(klon, nbsrf), q2m(klon, nbsrf)
110
111 REAL, INTENT(inout):: u10m_srf(:, :), v10m_srf(:, :) ! (klon, nbsrf)
112 ! composantes du vent \`a 10m sans spirale d'Ekman
113
114 ! Ionela Musat. Cf. Anne Mathieu : planetary boundary layer, hbtm.
115 ! Comme les autres diagnostics on cumule dans physiq ce qui permet
116 ! de sortir les grandeurs par sous-surface.
117 REAL pblh(klon, nbsrf) ! height of planetary boundary layer
118 REAL capcl(klon, nbsrf)
119 REAL oliqcl(klon, nbsrf)
120 REAL cteicl(klon, nbsrf)
121 REAL, INTENT(inout):: pblt(klon, nbsrf) ! T au nveau HCL
122 REAL therm(klon, nbsrf)
123 REAL trmb1(klon, nbsrf)
124 ! trmb1-------deep_cape
125 REAL trmb2(klon, nbsrf)
126 ! trmb2--------inhibition
127 REAL trmb3(klon, nbsrf)
128 ! trmb3-------Point Omega
129 REAL plcl(klon, nbsrf)
130 REAL fqcalving(klon, nbsrf), ffonte(klon, nbsrf)
131 ! ffonte----Flux thermique utilise pour fondre la neige
132 ! fqcalving-Flux d'eau "perdue" par la surface et necessaire pour limiter la
133 ! hauteur de neige, en kg / m2 / s
134 REAL run_off_lic_0(klon)
135
136 ! Local:
137
138 LOGICAL:: firstcal = .true.
139
140 ! la nouvelle repartition des surfaces sortie de l'interface
141 REAL, save:: pctsrf_new_oce(klon)
142 REAL, save:: pctsrf_new_sic(klon)
143
144 REAL y_fqcalving(klon), y_ffonte(klon)
145 real y_run_off_lic_0(klon)
146 REAL rugmer(klon)
147 REAL ytsoil(klon, nsoilmx)
148 REAL yts(klon), ypct(klon), yz0_new(klon)
149 real yrugos(klon) ! longeur de rugosite (en m)
150 REAL yalb(klon)
151 REAL snow(klon), yqsurf(klon), yagesno(klon)
152 real yqsol(klon) ! column-density of water in soil, in kg m-2
153 REAL yrain_f(klon) ! liquid water mass flux (kg / m2 / s), positive down
154 REAL ysnow_f(klon) ! solid water mass flux (kg / m2 / s), positive down
155 REAL yrugm(klon), yrads(klon), yrugoro(klon)
156 REAL yfluxlat(klon)
157 REAL y_d_ts(klon)
158 REAL y_d_t(klon, klev), y_d_q(klon, klev)
159 REAL y_d_u(klon, klev), y_d_v(klon, klev)
160 REAL y_flux_t(klon), y_flux_q(klon)
161 REAL y_flux_u(klon), y_flux_v(klon)
162 REAL y_dflux_t(klon), y_dflux_q(klon)
163 REAL ycoefh(klon, 2:klev), ycoefm(klon, 2:klev)
164 real ycdragh(klon), ycdragm(klon)
165 REAL yu(klon, klev), yv(klon, klev)
166 REAL yt(klon, klev), yq(klon, klev)
167 REAL ypaprs(klon, klev + 1), ypplay(klon, klev), ydelp(klon, klev)
168 REAL yq2(klon, klev + 1)
169 REAL delp(klon, klev)
170 INTEGER i, k, nsrf
171 INTEGER ni(klon), knon, j
172
173 REAL pctsrf_pot(klon, nbsrf)
174 ! "pourcentage potentiel" pour tenir compte des \'eventuelles
175 ! apparitions ou disparitions de la glace de mer
176
177 REAL yt2m(klon), yq2m(klon), wind10m(klon)
178 REAL ustar(klon)
179
180 REAL yt10m(klon), yq10m(klon)
181 REAL ypblh(klon)
182 REAL ylcl(klon)
183 REAL ycapcl(klon)
184 REAL yoliqcl(klon)
185 REAL ycteicl(klon)
186 REAL ypblt(klon)
187 REAL ytherm(klon)
188 REAL ytrmb1(klon)
189 REAL ytrmb2(klon)
190 REAL ytrmb3(klon)
191 REAL u1(klon), v1(klon)
192 REAL tair1(klon), qair1(klon), tairsol(klon)
193 REAL psfce(klon), patm(klon)
194
195 REAL qairsol(klon), zgeo1(klon)
196 REAL rugo1(klon)
197 REAL zgeop(klon, klev)
198
199 !------------------------------------------------------------
200
201 ytherm = 0.
202
203 DO k = 1, klev ! epaisseur de couche
204 DO i = 1, klon
205 delp(i, k) = paprs(i, k) - paprs(i, k + 1)
206 END DO
207 END DO
208
209 ! Initialization:
210 rugmer = 0.
211 cdragh = 0.
212 cdragm = 0.
213 dflux_t = 0.
214 dflux_q = 0.
215 ypct = 0.
216 yqsurf = 0.
217 yrain_f = 0.
218 ysnow_f = 0.
219 yrugos = 0.
220 ypaprs = 0.
221 ypplay = 0.
222 ydelp = 0.
223 yu = 0.
224 yv = 0.
225 yt = 0.
226 yq = 0.
227 y_dflux_t = 0.
228 y_dflux_q = 0.
229 yrugoro = 0.
230 d_ts = 0.
231 flux_t = 0.
232 flux_q = 0.
233 flux_u = 0.
234 flux_v = 0.
235 fluxlat = 0.
236 d_t = 0.
237 d_q = 0.
238 d_u = 0.
239 d_v = 0.
240 coefh = 0.
241
242 ! Initialisation des "pourcentages potentiels". On consid\`ere ici qu'on
243 ! peut avoir potentiellement de la glace sur tout le domaine oc\'eanique
244 ! (\`a affiner)
245
246 pctsrf_pot(:, is_ter) = pctsrf(:, is_ter)
247 pctsrf_pot(:, is_lic) = pctsrf(:, is_lic)
248 pctsrf_pot(:, is_oce) = 1. - zmasq
249 pctsrf_pot(:, is_sic) = 1. - zmasq
250
251 ! Tester si c'est le moment de lire le fichier:
252 if (mod(itap - 1, lmt_pas) == 0) then
253 CALL interfoce_lim(julien, pctsrf_new_oce, pctsrf_new_sic)
254 endif
255
256 ! Boucler sur toutes les sous-fractions du sol:
257
258 loop_surface: DO nsrf = 1, nbsrf
259 ! Chercher les indices :
260 ni = 0
261 knon = 0
262 DO i = 1, klon
263 ! Pour d\'eterminer le domaine \`a traiter, on utilise les surfaces
264 ! "potentielles"
265 IF (pctsrf_pot(i, nsrf) > epsfra) THEN
266 knon = knon + 1
267 ni(knon) = i
268 END IF
269 END DO
270
271 if_knon: IF (knon /= 0) then
272 DO j = 1, knon
273 i = ni(j)
274 ypct(j) = pctsrf(i, nsrf)
275 yts(j) = ftsol(i, nsrf)
276 snow(j) = fsnow(i, nsrf)
277 yqsurf(j) = qsurf(i, nsrf)
278 yalb(j) = falbe(i, nsrf)
279 yrain_f(j) = rain_fall(i)
280 ysnow_f(j) = snow_f(i)
281 yagesno(j) = agesno(i, nsrf)
282 yrugos(j) = frugs(i, nsrf)
283 yrugoro(j) = rugoro(i)
284 yrads(j) = fsolsw(i, nsrf) + fsollw(i, nsrf)
285 ypaprs(j, klev + 1) = paprs(i, klev + 1)
286 y_run_off_lic_0(j) = run_off_lic_0(i)
287 END DO
288
289 ! For continent, copy soil water content
290 IF (nsrf == is_ter) yqsol(:knon) = qsol(ni(:knon))
291
292 ytsoil(:knon, :) = ftsoil(ni(:knon), :, nsrf)
293
294 DO k = 1, klev
295 DO j = 1, knon
296 i = ni(j)
297 ypaprs(j, k) = paprs(i, k)
298 ypplay(j, k) = pplay(i, k)
299 ydelp(j, k) = delp(i, k)
300 yu(j, k) = u(i, k)
301 yv(j, k) = v(i, k)
302 yt(j, k) = t(i, k)
303 yq(j, k) = q(i, k)
304 END DO
305 END DO
306
307 ! Calculer les géopotentiels de chaque couche:
308
309 zgeop(:knon, 1) = RD * yt(:knon, 1) / (0.5 * (ypaprs(:knon, 1) &
310 + ypplay(:knon, 1))) * (ypaprs(:knon, 1) - ypplay(:knon, 1))
311
312 DO k = 2, klev
313 zgeop(:knon, k) = zgeop(:knon, k - 1) + RD * 0.5 &
314 * (yt(:knon, k - 1) + yt(:knon, k)) / ypaprs(:knon, k) &
315 * (ypplay(:knon, k - 1) - ypplay(:knon, k))
316 ENDDO
317
318 CALL clcdrag(nsrf, yu(:knon, 1), yv(:knon, 1), yt(:knon, 1), &
319 yq(:knon, 1), zgeop(:knon, 1), yts(:knon), yqsurf(:knon), &
320 yrugos(:knon), ycdragm(:knon), ycdragh(:knon))
321
322 IF (iflag_pbl == 1) THEN
323 ycdragm(:knon) = max(ycdragm(:knon), 0.)
324 ycdragh(:knon) = max(ycdragh(:knon), 0.)
325 end IF
326
327 ! on met un seuil pour ycdragm et ycdragh
328 IF (nsrf == is_oce) THEN
329 ycdragm(:knon) = min(ycdragm(:knon), cdmmax)
330 ycdragh(:knon) = min(ycdragh(:knon), cdhmax)
331 END IF
332
333 IF (iflag_pbl >= 6) then
334 DO k = 1, klev + 1
335 DO j = 1, knon
336 i = ni(j)
337 yq2(j, k) = q2(i, k, nsrf)
338 END DO
339 END DO
340 end IF
341
342 call coef_diff_turb(dtime, nsrf, ni(:knon), ypaprs, ypplay, yu, yv, &
343 yq, yt, yts, ycdragm, zgeop(:knon, :), ycoefm(:knon, :), &
344 ycoefh(:knon, :), yq2)
345
346 CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
347 ycdragm(:knon), yt(:knon, :), yu(:knon, :), ypaprs(:knon, :), &
348 ypplay(:knon, :), ydelp(:knon, :), y_d_u(:knon, :), &
349 y_flux_u(:knon))
350 CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
351 ycdragm(:knon), yt(:knon, :), yv(:knon, :), ypaprs(:knon, :), &
352 ypplay(:knon, :), ydelp(:knon, :), y_d_v(:knon, :), &
353 y_flux_v(:knon))
354
355 ! calculer la diffusion de "q" et de "h"
356 CALL clqh(dtime, julien, firstcal, nsrf, ni(:knon), &
357 ytsoil(:knon, :), yqsol(:knon), mu0, yrugos, yrugoro, &
358 yu(:knon, 1), yv(:knon, 1), ycoefh(:knon, :), ycdragh(:knon), &
359 yt, yq, yts(:knon), ypaprs, ypplay, ydelp, yrads(:knon), &
360 yalb(:knon), snow(:knon), yqsurf, yrain_f, ysnow_f, &
361 yfluxlat(:knon), pctsrf_new_sic, yagesno(:knon), y_d_t, y_d_q, &
362 y_d_ts(:knon), yz0_new, y_flux_t(:knon), y_flux_q(:knon), &
363 y_dflux_t(:knon), y_dflux_q(:knon), y_fqcalving, y_ffonte, &
364 y_run_off_lic_0)
365
366 ! calculer la longueur de rugosite sur ocean
367 yrugm = 0.
368 IF (nsrf == is_oce) THEN
369 DO j = 1, knon
370 yrugm(j) = 0.018 * ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2) &
371 / rg + 0.11 * 14E-6 &
372 / sqrt(ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2))
373 yrugm(j) = max(1.5E-05, yrugm(j))
374 END DO
375 END IF
376 DO j = 1, knon
377 y_dflux_t(j) = y_dflux_t(j) * ypct(j)
378 y_dflux_q(j) = y_dflux_q(j) * ypct(j)
379 END DO
380
381 DO k = 1, klev
382 DO j = 1, knon
383 i = ni(j)
384 y_d_t(j, k) = y_d_t(j, k) * ypct(j)
385 y_d_q(j, k) = y_d_q(j, k) * ypct(j)
386 y_d_u(j, k) = y_d_u(j, k) * ypct(j)
387 y_d_v(j, k) = y_d_v(j, k) * ypct(j)
388 END DO
389 END DO
390
391 flux_t(ni(:knon), nsrf) = y_flux_t(:knon)
392 flux_q(ni(:knon), nsrf) = y_flux_q(:knon)
393 flux_u(ni(:knon), nsrf) = y_flux_u(:knon)
394 flux_v(ni(:knon), nsrf) = y_flux_v(:knon)
395
396 evap(:, nsrf) = -flux_q(:, nsrf)
397
398 falbe(:, nsrf) = 0.
399 fsnow(:, nsrf) = 0.
400 qsurf(:, nsrf) = 0.
401 frugs(:, nsrf) = 0.
402 DO j = 1, knon
403 i = ni(j)
404 d_ts(i, nsrf) = y_d_ts(j)
405 falbe(i, nsrf) = yalb(j)
406 fsnow(i, nsrf) = snow(j)
407 qsurf(i, nsrf) = yqsurf(j)
408 frugs(i, nsrf) = yz0_new(j)
409 fluxlat(i, nsrf) = yfluxlat(j)
410 IF (nsrf == is_oce) THEN
411 rugmer(i) = yrugm(j)
412 frugs(i, nsrf) = yrugm(j)
413 END IF
414 agesno(i, nsrf) = yagesno(j)
415 fqcalving(i, nsrf) = y_fqcalving(j)
416 ffonte(i, nsrf) = y_ffonte(j)
417 cdragh(i) = cdragh(i) + ycdragh(j) * ypct(j)
418 cdragm(i) = cdragm(i) + ycdragm(j) * ypct(j)
419 dflux_t(i) = dflux_t(i) + y_dflux_t(j)
420 dflux_q(i) = dflux_q(i) + y_dflux_q(j)
421 END DO
422 IF (nsrf == is_ter) THEN
423 qsol(ni(:knon)) = yqsol(:knon)
424 else IF (nsrf == is_lic) THEN
425 DO j = 1, knon
426 i = ni(j)
427 run_off_lic_0(i) = y_run_off_lic_0(j)
428 END DO
429 END IF
430
431 ftsoil(:, :, nsrf) = 0.
432 ftsoil(ni(:knon), :, nsrf) = ytsoil(:knon, :)
433
434 DO j = 1, knon
435 i = ni(j)
436 DO k = 1, klev
437 d_t(i, k) = d_t(i, k) + y_d_t(j, k)
438 d_q(i, k) = d_q(i, k) + y_d_q(j, k)
439 d_u(i, k) = d_u(i, k) + y_d_u(j, k)
440 d_v(i, k) = d_v(i, k) + y_d_v(j, k)
441 END DO
442 END DO
443
444 forall (k = 2:klev) coefh(ni(:knon), k) &
445 = coefh(ni(:knon), k) + ycoefh(:knon, k) * ypct(:knon)
446
447 ! diagnostic t, q a 2m et u, v a 10m
448
449 DO j = 1, knon
450 i = ni(j)
451 u1(j) = yu(j, 1) + y_d_u(j, 1)
452 v1(j) = yv(j, 1) + y_d_v(j, 1)
453 tair1(j) = yt(j, 1) + y_d_t(j, 1)
454 qair1(j) = yq(j, 1) + y_d_q(j, 1)
455 zgeo1(j) = rd * tair1(j) / (0.5 * (ypaprs(j, 1) + ypplay(j, &
456 1))) * (ypaprs(j, 1)-ypplay(j, 1))
457 tairsol(j) = yts(j) + y_d_ts(j)
458 rugo1(j) = yrugos(j)
459 IF (nsrf == is_oce) THEN
460 rugo1(j) = frugs(i, nsrf)
461 END IF
462 psfce(j) = ypaprs(j, 1)
463 patm(j) = ypplay(j, 1)
464
465 qairsol(j) = yqsurf(j)
466 END DO
467
468 CALL stdlevvar(klon, knon, nsrf, u1(:knon), v1(:knon), tair1(:knon), &
469 qair1, zgeo1, tairsol, qairsol, rugo1, psfce, patm, yt2m, &
470 yq2m, yt10m, yq10m, wind10m(:knon), ustar(:knon))
471
472 DO j = 1, knon
473 i = ni(j)
474 t2m(i, nsrf) = yt2m(j)
475 q2m(i, nsrf) = yq2m(j)
476
477 u10m_srf(i, nsrf) = (wind10m(j) * u1(j)) &
478 / sqrt(u1(j)**2 + v1(j)**2)
479 v10m_srf(i, nsrf) = (wind10m(j) * v1(j)) &
480 / sqrt(u1(j)**2 + v1(j)**2)
481 END DO
482
483 CALL hbtm(ypaprs, ypplay, yt2m, yq2m, ustar(:knon), y_flux_t(:knon), &
484 y_flux_q(:knon), yu, yv, yt, yq, ypblh(:knon), ycapcl, &
485 yoliqcl, ycteicl, ypblt, ytherm, ytrmb1, ytrmb2, ytrmb3, ylcl)
486
487 DO j = 1, knon
488 i = ni(j)
489 pblh(i, nsrf) = ypblh(j)
490 plcl(i, nsrf) = ylcl(j)
491 capcl(i, nsrf) = ycapcl(j)
492 oliqcl(i, nsrf) = yoliqcl(j)
493 cteicl(i, nsrf) = ycteicl(j)
494 pblt(i, nsrf) = ypblt(j)
495 therm(i, nsrf) = ytherm(j)
496 trmb1(i, nsrf) = ytrmb1(j)
497 trmb2(i, nsrf) = ytrmb2(j)
498 trmb3(i, nsrf) = ytrmb3(j)
499 END DO
500
501 DO j = 1, knon
502 DO k = 1, klev + 1
503 i = ni(j)
504 q2(i, k, nsrf) = yq2(j, k)
505 END DO
506 END DO
507 else
508 fsnow(:, nsrf) = 0.
509 end IF if_knon
510 END DO loop_surface
511
512 ! On utilise les nouvelles surfaces
513 frugs(:, is_oce) = rugmer
514 pctsrf(:, is_oce) = pctsrf_new_oce
515 pctsrf(:, is_sic) = pctsrf_new_sic
516
517 firstcal = .false.
518
519 END SUBROUTINE clmain
520
521 end module clmain_m

  ViewVC Help
Powered by ViewVC 1.1.21