/[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 252 - (show annotations)
Mon Jan 22 15:02:56 2018 UTC (6 years, 3 months ago) by guez
Original Path: trunk/Sources/phylmd/clmain.f
File size: 17858 byte(s)
*trmb[1-3] were just filled with 0. Remove these variables and output.

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, 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/08/18
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 clcdrag_m, only: clcdrag
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, zmasq
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 stdlevvar_m, only: stdlevvar
35 USE suphec_m, ONLY: rd, rg
36 use time_phylmdz, only: itap
37
38 REAL, INTENT(IN):: dtime ! interval du temps (secondes)
39
40 REAL, INTENT(inout):: pctsrf(klon, nbsrf)
41 ! tableau des pourcentages de surface de chaque maille
42
43 REAL, INTENT(IN):: t(klon, klev) ! temperature (K)
44 REAL, INTENT(IN):: q(klon, klev) ! vapeur d'eau (kg / kg)
45 REAL, INTENT(IN):: u(klon, klev), v(klon, klev) ! vitesse
46 INTEGER, INTENT(IN):: julien ! jour de l'annee en cours
47 REAL, intent(in):: mu0(klon) ! cosinus de l'angle solaire zenithal
48 REAL, INTENT(IN):: ftsol(:, :) ! (klon, nbsrf) temp\'erature du sol (en K)
49 REAL, INTENT(IN):: cdmmax, cdhmax ! seuils cdrm, cdrh
50
51 REAL, INTENT(inout):: ftsoil(klon, nsoilmx, nbsrf)
52 ! soil temperature of surface fraction
53
54 REAL, INTENT(inout):: qsol(:) ! (klon)
55 ! column-density of water in soil, in kg m-2
56
57 REAL, INTENT(IN):: paprs(klon, klev + 1) ! pression a intercouche (Pa)
58 REAL, INTENT(IN):: pplay(klon, klev) ! pression au milieu de couche (Pa)
59 REAL, INTENT(inout):: fsnow(:, :) ! (klon, nbsrf) \'epaisseur neigeuse
60 REAL qsurf(klon, nbsrf)
61 REAL evap(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_f(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 d_t(klon, klev), d_q(klon, klev)
77 ! d_t------output-R- le changement pour "t"
78 ! d_q------output-R- le changement pour "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 REAL fqcalving(klon, nbsrf), ffonte(klon, nbsrf)
124 ! ffonte----Flux thermique utilise pour fondre la neige
125 ! fqcalving-Flux d'eau "perdue" par la surface et necessaire pour limiter la
126 ! hauteur de neige, en kg / m2 / s
127 REAL run_off_lic_0(klon)
128
129 ! Local:
130
131 LOGICAL:: firstcal = .true.
132
133 ! la nouvelle repartition des surfaces sortie de l'interface
134 REAL, save:: pctsrf_new_oce(klon)
135 REAL, save:: pctsrf_new_sic(klon)
136
137 REAL y_fqcalving(klon), y_ffonte(klon)
138 real y_run_off_lic_0(klon)
139 REAL rugmer(klon)
140 REAL ytsoil(klon, nsoilmx)
141 REAL yts(klon), ypct(klon), yz0_new(klon)
142 real yrugos(klon) ! longeur de rugosite (en m)
143 REAL yalb(klon)
144 REAL snow(klon), yqsurf(klon), yagesno(klon)
145 real yqsol(klon) ! column-density of water in soil, in kg m-2
146 REAL yrain_f(klon) ! liquid water mass flux (kg / m2 / s), positive down
147 REAL ysnow_f(klon) ! solid water mass flux (kg / m2 / s), positive down
148 REAL yrugm(klon), yrads(klon), yrugoro(klon)
149 REAL yfluxlat(klon)
150 REAL y_d_ts(klon)
151 REAL y_d_t(klon, klev), y_d_q(klon, klev)
152 REAL y_d_u(klon, klev), y_d_v(klon, klev)
153 REAL y_flux_t(klon), y_flux_q(klon)
154 REAL y_flux_u(klon), y_flux_v(klon)
155 REAL y_dflux_t(klon), y_dflux_q(klon)
156 REAL ycoefh(klon, 2:klev), ycoefm(klon, 2:klev)
157 real ycdragh(klon), ycdragm(klon)
158 REAL yu(klon, klev), yv(klon, klev)
159 REAL yt(klon, klev), yq(klon, klev)
160 REAL ypaprs(klon, klev + 1), ypplay(klon, klev), ydelp(klon, klev)
161 REAL yq2(klon, klev + 1)
162 REAL delp(klon, klev)
163 INTEGER i, k, nsrf
164 INTEGER ni(klon), knon, j
165
166 REAL pctsrf_pot(klon, nbsrf)
167 ! "pourcentage potentiel" pour tenir compte des \'eventuelles
168 ! apparitions ou disparitions de la glace de mer
169
170 REAL yt2m(klon), yq2m(klon), wind10m(klon)
171 REAL ustar(klon)
172
173 REAL yt10m(klon), yq10m(klon)
174 REAL ypblh(klon)
175 REAL ylcl(klon)
176 REAL ycapcl(klon)
177 REAL yoliqcl(klon)
178 REAL ycteicl(klon)
179 REAL ypblt(klon)
180 REAL ytherm(klon)
181 REAL u1(klon), v1(klon)
182 REAL tair1(klon), qair1(klon), tairsol(klon)
183 REAL psfce(klon), patm(klon)
184
185 REAL qairsol(klon), zgeo1(klon)
186 REAL rugo1(klon)
187 REAL zgeop(klon, klev)
188
189 !------------------------------------------------------------
190
191 ytherm = 0.
192
193 DO k = 1, klev ! epaisseur de couche
194 DO i = 1, klon
195 delp(i, k) = paprs(i, k) - paprs(i, k + 1)
196 END DO
197 END DO
198
199 ! Initialization:
200 rugmer = 0.
201 cdragh = 0.
202 cdragm = 0.
203 dflux_t = 0.
204 dflux_q = 0.
205 ypct = 0.
206 yqsurf = 0.
207 yrain_f = 0.
208 ysnow_f = 0.
209 yrugos = 0.
210 ypaprs = 0.
211 ypplay = 0.
212 ydelp = 0.
213 yu = 0.
214 yv = 0.
215 yt = 0.
216 yq = 0.
217 y_dflux_t = 0.
218 y_dflux_q = 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
232 ! Initialisation des "pourcentages potentiels". On consid\`ere ici qu'on
233 ! peut avoir potentiellement de la glace sur tout le domaine oc\'eanique
234 ! (\`a affiner)
235
236 pctsrf_pot(:, is_ter) = pctsrf(:, is_ter)
237 pctsrf_pot(:, is_lic) = pctsrf(:, is_lic)
238 pctsrf_pot(:, is_oce) = 1. - zmasq
239 pctsrf_pot(:, is_sic) = 1. - zmasq
240
241 ! Tester si c'est le moment de lire le fichier:
242 if (mod(itap - 1, lmt_pas) == 0) then
243 CALL interfoce_lim(julien, pctsrf_new_oce, pctsrf_new_sic)
244 endif
245
246 ! Boucler sur toutes les sous-fractions du sol:
247
248 loop_surface: DO nsrf = 1, nbsrf
249 ! Chercher les indices :
250 ni = 0
251 knon = 0
252 DO i = 1, klon
253 ! Pour d\'eterminer le domaine \`a traiter, on utilise les surfaces
254 ! "potentielles"
255 IF (pctsrf_pot(i, nsrf) > epsfra) THEN
256 knon = knon + 1
257 ni(knon) = i
258 END IF
259 END DO
260
261 if_knon: IF (knon /= 0) then
262 DO j = 1, knon
263 i = ni(j)
264 ypct(j) = pctsrf(i, nsrf)
265 yts(j) = ftsol(i, nsrf)
266 snow(j) = fsnow(i, nsrf)
267 yqsurf(j) = qsurf(i, nsrf)
268 yalb(j) = falbe(i, nsrf)
269 yrain_f(j) = rain_fall(i)
270 ysnow_f(j) = snow_f(i)
271 yagesno(j) = agesno(i, nsrf)
272 yrugos(j) = frugs(i, nsrf)
273 yrugoro(j) = rugoro(i)
274 yrads(j) = fsolsw(i, nsrf) + fsollw(i, nsrf)
275 ypaprs(j, klev + 1) = paprs(i, klev + 1)
276 y_run_off_lic_0(j) = run_off_lic_0(i)
277 END DO
278
279 ! For continent, copy soil water content
280 IF (nsrf == is_ter) yqsol(:knon) = qsol(ni(:knon))
281
282 ytsoil(:knon, :) = ftsoil(ni(:knon), :, nsrf)
283
284 DO k = 1, klev
285 DO j = 1, knon
286 i = ni(j)
287 ypaprs(j, k) = paprs(i, k)
288 ypplay(j, k) = pplay(i, k)
289 ydelp(j, k) = delp(i, k)
290 yu(j, k) = u(i, k)
291 yv(j, k) = v(i, k)
292 yt(j, k) = t(i, k)
293 yq(j, k) = q(i, k)
294 END DO
295 END DO
296
297 ! Calculer les géopotentiels de chaque couche:
298
299 zgeop(:knon, 1) = RD * yt(:knon, 1) / (0.5 * (ypaprs(:knon, 1) &
300 + ypplay(:knon, 1))) * (ypaprs(:knon, 1) - ypplay(:knon, 1))
301
302 DO k = 2, klev
303 zgeop(:knon, k) = zgeop(:knon, k - 1) + RD * 0.5 &
304 * (yt(:knon, k - 1) + yt(:knon, k)) / ypaprs(:knon, k) &
305 * (ypplay(:knon, k - 1) - ypplay(:knon, k))
306 ENDDO
307
308 CALL clcdrag(nsrf, yu(:knon, 1), yv(:knon, 1), yt(:knon, 1), &
309 yq(:knon, 1), zgeop(:knon, 1), yts(:knon), yqsurf(:knon), &
310 yrugos(:knon), ycdragm(:knon), ycdragh(:knon))
311
312 IF (iflag_pbl == 1) THEN
313 ycdragm(:knon) = max(ycdragm(:knon), 0.)
314 ycdragh(:knon) = max(ycdragh(:knon), 0.)
315 end IF
316
317 ! on met un seuil pour ycdragm et ycdragh
318 IF (nsrf == is_oce) THEN
319 ycdragm(:knon) = min(ycdragm(:knon), cdmmax)
320 ycdragh(:knon) = min(ycdragh(:knon), cdhmax)
321 END IF
322
323 IF (iflag_pbl >= 6) then
324 DO k = 1, klev + 1
325 DO j = 1, knon
326 i = ni(j)
327 yq2(j, k) = q2(i, k, nsrf)
328 END DO
329 END DO
330 end IF
331
332 call coef_diff_turb(dtime, nsrf, ni(:knon), ypaprs(:knon, :), &
333 ypplay(:knon, :), yu(:knon, :), yv(:knon, :), yq(:knon, :), &
334 yt(:knon, :), yts(:knon), ycdragm(:knon), zgeop(:knon, :), &
335 ycoefm(:knon, :), ycoefh(:knon, :), yq2(:knon, :))
336
337 CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
338 ycdragm(:knon), yt(:knon, :), yu(:knon, :), ypaprs(:knon, :), &
339 ypplay(:knon, :), ydelp(:knon, :), y_d_u(:knon, :), &
340 y_flux_u(:knon))
341 CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
342 ycdragm(:knon), yt(:knon, :), yv(:knon, :), ypaprs(:knon, :), &
343 ypplay(:knon, :), ydelp(:knon, :), y_d_v(:knon, :), &
344 y_flux_v(:knon))
345
346 ! calculer la diffusion de "q" et de "h"
347 CALL clqh(dtime, julien, firstcal, nsrf, ni(:knon), &
348 ytsoil(:knon, :), yqsol(:knon), mu0, yrugos, yrugoro, &
349 yu(:knon, 1), yv(:knon, 1), ycoefh(:knon, :), ycdragh(:knon), &
350 yt, yq, yts(:knon), ypaprs, ypplay, ydelp, yrads(:knon), &
351 yalb(:knon), snow(:knon), yqsurf, yrain_f, ysnow_f, &
352 yfluxlat(:knon), pctsrf_new_sic, yagesno(:knon), y_d_t, y_d_q, &
353 y_d_ts(:knon), yz0_new, y_flux_t(:knon), y_flux_q(:knon), &
354 y_dflux_t(:knon), y_dflux_q(:knon), y_fqcalving, y_ffonte, &
355 y_run_off_lic_0)
356
357 ! calculer la longueur de rugosite sur ocean
358 yrugm = 0.
359 IF (nsrf == is_oce) THEN
360 DO j = 1, knon
361 yrugm(j) = 0.018 * ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2) &
362 / rg + 0.11 * 14E-6 &
363 / sqrt(ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2))
364 yrugm(j) = max(1.5E-05, yrugm(j))
365 END DO
366 END IF
367 DO j = 1, knon
368 y_dflux_t(j) = y_dflux_t(j) * ypct(j)
369 y_dflux_q(j) = y_dflux_q(j) * ypct(j)
370 END DO
371
372 DO k = 1, klev
373 DO j = 1, knon
374 i = ni(j)
375 y_d_t(j, k) = y_d_t(j, k) * ypct(j)
376 y_d_q(j, k) = y_d_q(j, k) * ypct(j)
377 y_d_u(j, k) = y_d_u(j, k) * ypct(j)
378 y_d_v(j, k) = y_d_v(j, k) * ypct(j)
379 END DO
380 END DO
381
382 flux_t(ni(:knon), nsrf) = y_flux_t(:knon)
383 flux_q(ni(:knon), nsrf) = y_flux_q(:knon)
384 flux_u(ni(:knon), nsrf) = y_flux_u(:knon)
385 flux_v(ni(:knon), nsrf) = y_flux_v(:knon)
386
387 evap(:, nsrf) = -flux_q(:, nsrf)
388
389 falbe(:, nsrf) = 0.
390 fsnow(:, nsrf) = 0.
391 qsurf(:, nsrf) = 0.
392 frugs(:, nsrf) = 0.
393 DO j = 1, knon
394 i = ni(j)
395 d_ts(i, nsrf) = y_d_ts(j)
396 falbe(i, nsrf) = yalb(j)
397 fsnow(i, nsrf) = snow(j)
398 qsurf(i, nsrf) = yqsurf(j)
399 frugs(i, nsrf) = yz0_new(j)
400 fluxlat(i, nsrf) = yfluxlat(j)
401 IF (nsrf == is_oce) THEN
402 rugmer(i) = yrugm(j)
403 frugs(i, nsrf) = yrugm(j)
404 END IF
405 agesno(i, nsrf) = yagesno(j)
406 fqcalving(i, nsrf) = y_fqcalving(j)
407 ffonte(i, nsrf) = y_ffonte(j)
408 cdragh(i) = cdragh(i) + ycdragh(j) * ypct(j)
409 cdragm(i) = cdragm(i) + ycdragm(j) * ypct(j)
410 dflux_t(i) = dflux_t(i) + y_dflux_t(j)
411 dflux_q(i) = dflux_q(i) + y_dflux_q(j)
412 END DO
413 IF (nsrf == is_ter) THEN
414 qsol(ni(:knon)) = yqsol(:knon)
415 else IF (nsrf == is_lic) THEN
416 DO j = 1, knon
417 i = ni(j)
418 run_off_lic_0(i) = y_run_off_lic_0(j)
419 END DO
420 END IF
421
422 ftsoil(:, :, nsrf) = 0.
423 ftsoil(ni(:knon), :, nsrf) = ytsoil(:knon, :)
424
425 DO j = 1, knon
426 i = ni(j)
427 DO k = 1, klev
428 d_t(i, k) = d_t(i, k) + y_d_t(j, k)
429 d_q(i, k) = d_q(i, k) + y_d_q(j, k)
430 d_u(i, k) = d_u(i, k) + y_d_u(j, k)
431 d_v(i, k) = d_v(i, k) + y_d_v(j, k)
432 END DO
433 END DO
434
435 forall (k = 2:klev) coefh(ni(:knon), k) &
436 = coefh(ni(:knon), k) + ycoefh(:knon, k) * ypct(:knon)
437
438 ! diagnostic t, q a 2m et u, v a 10m
439
440 DO j = 1, knon
441 i = ni(j)
442 u1(j) = yu(j, 1) + y_d_u(j, 1)
443 v1(j) = yv(j, 1) + y_d_v(j, 1)
444 tair1(j) = yt(j, 1) + y_d_t(j, 1)
445 qair1(j) = yq(j, 1) + y_d_q(j, 1)
446 zgeo1(j) = rd * tair1(j) / (0.5 * (ypaprs(j, 1) + ypplay(j, &
447 1))) * (ypaprs(j, 1)-ypplay(j, 1))
448 tairsol(j) = yts(j) + y_d_ts(j)
449 rugo1(j) = yrugos(j)
450 IF (nsrf == is_oce) THEN
451 rugo1(j) = frugs(i, nsrf)
452 END IF
453 psfce(j) = ypaprs(j, 1)
454 patm(j) = ypplay(j, 1)
455
456 qairsol(j) = yqsurf(j)
457 END DO
458
459 CALL stdlevvar(klon, knon, nsrf, u1(:knon), v1(:knon), tair1(:knon), &
460 qair1, zgeo1, tairsol, qairsol, rugo1, psfce, patm, yt2m, &
461 yq2m, yt10m, yq10m, wind10m(:knon), ustar(:knon))
462
463 DO j = 1, knon
464 i = ni(j)
465 t2m(i, nsrf) = yt2m(j)
466 q2m(i, nsrf) = yq2m(j)
467
468 u10m_srf(i, nsrf) = (wind10m(j) * u1(j)) &
469 / sqrt(u1(j)**2 + v1(j)**2)
470 v10m_srf(i, nsrf) = (wind10m(j) * v1(j)) &
471 / sqrt(u1(j)**2 + v1(j)**2)
472 END DO
473
474 CALL hbtm(ypaprs, ypplay, yt2m, yq2m, ustar(:knon), y_flux_t(:knon), &
475 y_flux_q(:knon), yu, yv, yt, yq, ypblh(:knon), ycapcl, &
476 yoliqcl, ycteicl, ypblt, ytherm, ylcl)
477
478 DO j = 1, knon
479 i = ni(j)
480 pblh(i, nsrf) = ypblh(j)
481 plcl(i, nsrf) = ylcl(j)
482 capcl(i, nsrf) = ycapcl(j)
483 oliqcl(i, nsrf) = yoliqcl(j)
484 cteicl(i, nsrf) = ycteicl(j)
485 pblt(i, nsrf) = ypblt(j)
486 therm(i, nsrf) = ytherm(j)
487 END DO
488
489 DO j = 1, knon
490 DO k = 1, klev + 1
491 i = ni(j)
492 q2(i, k, nsrf) = yq2(j, k)
493 END DO
494 END DO
495 else
496 fsnow(:, nsrf) = 0.
497 end IF if_knon
498 END DO loop_surface
499
500 ! On utilise les nouvelles surfaces
501 frugs(:, is_oce) = rugmer
502 pctsrf(:, is_oce) = pctsrf_new_oce
503 pctsrf(:, is_sic) = pctsrf_new_sic
504
505 firstcal = .false.
506
507 END SUBROUTINE clmain
508
509 end module clmain_m

  ViewVC Help
Powered by ViewVC 1.1.21