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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21