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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 188 - (show annotations)
Tue Mar 22 16:31:39 2016 UTC (8 years, 1 month ago) by guez
File size: 18625 byte(s)
Removed argument ncum of cv30_unsat, arguments nloc, ncum, nd, na of cv30_yield.

1 module vdif_kcay_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE vdif_kcay(ngrid, dt, g, plev, zlev, zlay, u, v, teta, cd, q2, &
8 q2diag, km, kn, ustar, l_mix)
9
10 ! From LMDZ4/libf/phylmd/vdif_kcay.F, version 1.1 2004/06/22 11:45:36
11
12 USE dimphy, ONLY: klev, klon
13 use yamada_m, only: yamada
14
15 INTEGER ngrid
16 ! dt : pas de temps
17 ! g : g
18 ! zlev : altitude a chaque niveau (interface inferieure de la couche
19 ! de meme indice)
20 ! zlay : altitude au centre de chaque couche
21 ! u, v : vitesse au centre de chaque couche
22 ! (en entree : la valeur au debut du pas de temps)
23 ! teta : temperature potentielle au centre de chaque couche
24 ! (en entree : la valeur au debut du pas de temps)
25 ! q2 : $q^2$ au bas de chaque couche
26 ! (en entree : la valeur au debut du pas de temps)
27 ! (en sortie : la valeur a la fin du pas de temps)
28 ! km : diffusivite turbulente de quantite de mouvement (au bas de chaque
29 ! couche)
30 ! (en sortie : la valeur a la fin du pas de temps)
31 ! kn : diffusivite turbulente des scalaires (au bas de chaque couche)
32 ! (en sortie : la valeur a la fin du pas de temps)
33
34 REAL, intent(in):: dt
35 real, intent(in):: g
36 real plev(klon, klev+1)
37 real ustar(klon), snstable
38 REAL zlev(klon, klev+1)
39 REAL zlay(klon, klev)
40 REAL u(klon, klev)
41 REAL v(klon, klev)
42 REAL teta(klon, klev)
43 REAL, intent(in):: cd (:) ! (ngrid) cdrag, valeur au debut du pas de temps
44 REAL q2(klon, klev+1)
45 REAL q2diag(klon, klev+1)
46 REAL km(klon, klev+1)
47 REAL kn(klon, klev+1)
48 real sq(klon), sqz(klon), zq, long0(klon)
49
50 integer l_mix
51
52 ! nlay : nombre de couches
53 ! nlev : nombre de niveaux
54 ! ngrid : nombre de points de grille
55 ! unsdz : 1 sur l'epaisseur de couche
56 ! unsdzdec : 1 sur la distance entre le centre de la couche et le
57 ! centre de la couche inferieure
58 ! q : echelle de vitesse au bas de chaque couche
59 ! (valeur a la fin du pas de temps)
60
61 INTEGER nlay, nlev
62 REAL unsdz(klon, klev)
63 REAL unsdzdec(klon, klev+1)
64 REAL q(klon, klev+1)
65
66 ! kmpre : km au debut du pas de temps
67 ! qcstat : q : solution stationnaire du probleme couple
68 ! (valeur a la fin du pas de temps)
69 ! q2cstat : q2 : solution stationnaire du probleme couple
70 ! (valeur a la fin du pas de temps)
71
72 REAL kmpre(klon, klev+1)
73 REAL qcstat
74 REAL q2cstat
75 real sss, sssq
76
77 ! long : longueur de melange calculee selon Blackadar
78
79 REAL long(klon, klev+1)
80
81 ! kmq3 : terme en q^3 dans le developpement de km
82 ! (valeur au debut du pas de temps)
83 ! kmcstat : valeur de km solution stationnaire du systeme {q2 ; du/dz}
84 ! (valeur a la fin du pas de temps)
85 ! knq3 : terme en q^3 dans le developpement de kn
86 ! mcstat : valeur de m solution stationnaire du systeme {q2 ; du/dz}
87 ! (valeur a la fin du pas de temps)
88 ! m2cstat : valeur de m2 solution stationnaire du systeme {q2 ; du/dz}
89 ! (valeur a la fin du pas de temps)
90 ! m : valeur a la fin du pas de temps
91 ! mpre : valeur au debut du pas de temps
92 ! m2 : valeur a la fin du pas de temps
93 ! n2 : valeur a la fin du pas de temps
94
95 REAL kmq3
96 REAL kmcstat
97 REAL knq3
98 REAL mcstat
99 REAL m2cstat
100 REAL m(klon, klev+1)
101 REAL mpre(klon, klev+1)
102 REAL m2(klon, klev+1)
103 REAL n2(klon, klev+1)
104
105 ! gn : intermediaire pour les coefficients de stabilite
106 ! gnmin : borne inferieure de gn (-0.23 ou -0.28)
107 ! gnmax : borne superieure de gn (0.0233)
108 ! gninf : vrai si gn est en dessous de sa borne inferieure
109 ! gnsup : vrai si gn est en dessus de sa borne superieure
110 ! ri : nombre de Richardson
111 ! sn : coefficient de stabilite pour n
112 ! snq2 : premier terme du developement limite de sn en q2
113 ! sm : coefficient de stabilite pour m
114 ! smq2 : premier terme du developement limite de sm en q2
115
116 REAL gn
117 REAL gnmin
118 REAL gnmax
119 LOGICAL gninf
120 LOGICAL gnsup
121 REAL sn(klon, klev+1)
122 REAL snq2(klon, klev+1)
123 REAL sm(klon, klev+1)
124 REAL smq2(klon, klev+1)
125
126 ! kappa : consatnte de Von Karman (0.4)
127 ! long00 : longueur de reference pour le calcul de long (160)
128 ! a1, a2, b1, b2, c1 : constantes d'origine pour les coefficients
129 ! de stabilite (0.92/0.74/16.6/10.1/0.08)
130 ! cn1, cn2 : constantes pour sn
131 ! cm1, cm2, cm3, cm4 : constantes pour sm
132
133 REAL kappa
134 REAL long00
135 REAL a1, a2, b1, b2, c1
136 REAL cn1, cn2
137 REAL cm1, cm2, cm3, cm4
138
139 ! termq : termes en $q$ dans l'equation de q2
140 ! termq3 : termes en $q^3$ dans l'equation de q2
141 ! termqm2 : termes en $q*m^2$ dans l'equation de q2
142 ! termq3m2 : termes en $q^3*m^2$ dans l'equation de q2
143
144 REAL termq
145 REAL termq3
146 REAL termqm2
147 REAL termq3m2
148
149 ! q2min : borne inferieure de q2
150 REAL q2min
151
152 ! knmin : borne inferieure de kn
153 ! kmmin : borne inferieure de km
154
155 REAL knmin
156 REAL kmmin
157
158 INTEGER ilay, ilev, igrid
159 REAL tmp1, tmp2
160
161 PARAMETER (kappa=0.4E+0)
162 PARAMETER (long00=160.E+0)
163 ! PARAMETER (gnmin=-10.E+0)
164 PARAMETER (gnmin=-0.28)
165 PARAMETER (gnmax=0.0233E+0)
166 PARAMETER (a1=0.92E+0)
167 PARAMETER (a2=0.74E+0)
168 PARAMETER (b1=16.6E+0)
169 PARAMETER (b2=10.1E+0)
170 PARAMETER (c1=0.08E+0)
171 PARAMETER (knmin=1.E-5)
172 PARAMETER (kmmin=1.E-5)
173 PARAMETER (q2min=1.e-5)
174 PARAMETER (nlay=klev)
175 PARAMETER (nlev=klev+1)
176
177 PARAMETER (cn1=a2*(1.E+0 -6.E+0 *a1/b1))
178 PARAMETER (cn2=-3.E+0 *a2*(6.E+0 *a1+b2))
179 PARAMETER (cm1=a1*(1.E+0 -3.E+0 *c1-6.E+0 *a1/b1))
180 PARAMETER (cm2=a1*(-3.E+0 *a2*((b2-3.E+0 *a2)*(1.E+0 -6.E+0 *a1/b1) &
181 -3.E+0 *c1*(b2+6.E+0 *a1))))
182 PARAMETER (cm3=-3.E+0 *a2*(6.E+0 *a1+b2))
183 PARAMETER (cm4=-9.E+0 *a1*a2)
184
185 logical:: first = .true.
186
187 !------------------------------------------------------------
188
189 ! traitment des valeur de q2 en entree
190
191 ! Initialisation de q2
192
193 call yamada(ngrid, g, zlev, zlay, u, v, teta, q2diag, km, kn)
194 if (first.and.1.eq.1) then
195 first=.false.
196 q2=q2diag
197 endif
198
199 DO ilev=1, nlev
200 DO igrid=1, ngrid
201 q2(igrid, ilev)=amax1(q2(igrid, ilev), q2min)
202 q(igrid, ilev)=sqrt(q2(igrid, ilev))
203 ENDDO
204 ENDDO
205
206 DO igrid=1, ngrid
207 tmp1=cd(igrid)*(u(igrid, 1)**2+v(igrid, 1)**2)
208 q2(igrid, 1)=b1**(2.E+0/3.E+0)*tmp1
209 q2(igrid, 1)=amax1(q2(igrid, 1), q2min)
210 q(igrid, 1)=sqrt(q2(igrid, 1))
211 ENDDO
212
213 ! les increments verticaux
214
215 ! allerte !c
216 ! zlev n'est pas declare a nlev !c
217 DO igrid=1, ngrid
218 zlev(igrid, nlev)=zlay(igrid, nlay) &
219 +( zlay(igrid, nlay) - zlev(igrid, nlev-1) )
220 ENDDO
221 ! allerte !c
222
223 DO ilay=1, nlay
224 DO igrid=1, ngrid
225 unsdz(igrid, ilay)=1.E+0/(zlev(igrid, ilay+1)-zlev(igrid, ilay))
226 ENDDO
227 ENDDO
228 DO igrid=1, ngrid
229 unsdzdec(igrid, 1)=1.E+0/(zlay(igrid, 1)-zlev(igrid, 1))
230 ENDDO
231 DO ilay=2, nlay
232 DO igrid=1, ngrid
233 unsdzdec(igrid, ilay)=1.E+0/(zlay(igrid, ilay)-zlay(igrid, ilay-1))
234 ENDDO
235 ENDDO
236 DO igrid=1, ngrid
237 unsdzdec(igrid, nlay+1)=1.E+0/(zlev(igrid, nlay+1)-zlay(igrid, nlay))
238 ENDDO
239
240 ! le cisaillement et le gradient de temperature
241
242 DO igrid=1, ngrid
243 m2(igrid, 1)=(unsdzdec(igrid, 1) &
244 *u(igrid, 1))**2 &
245 +(unsdzdec(igrid, 1) &
246 *v(igrid, 1))**2
247 m(igrid, 1)=sqrt(m2(igrid, 1))
248 mpre(igrid, 1)=m(igrid, 1)
249 ENDDO
250
251 DO ilev=2, nlev-1
252 DO igrid=1, ngrid
253
254 n2(igrid, ilev)=g*unsdzdec(igrid, ilev) &
255 *(teta(igrid, ilev)-teta(igrid, ilev-1)) &
256 /(teta(igrid, ilev)+teta(igrid, ilev-1)) *2.E+0
257
258 ! on ne sais traiter que les cas stratifies. et l'ajustement
259 ! convectif est cense faire en sorte que seul des
260 ! configurations stratifiees soient rencontrees en entree de
261 ! cette routine. mais, bon ... on sait jamais (meme on sait
262 ! que n2 prends quelques valeurs negatives ... parfois)
263 ! alors :
264
265 IF (n2(igrid, ilev).lt.0.E+0) THEN
266 n2(igrid, ilev)=0.E+0
267 ENDIF
268
269 m2(igrid, ilev)=(unsdzdec(igrid, ilev) &
270 *(u(igrid, ilev)-u(igrid, ilev-1)))**2 &
271 +(unsdzdec(igrid, ilev) &
272 *(v(igrid, ilev)-v(igrid, ilev-1)))**2
273 m(igrid, ilev)=sqrt(m2(igrid, ilev))
274 mpre(igrid, ilev)=m(igrid, ilev)
275
276 ENDDO
277 ENDDO
278
279 DO igrid=1, ngrid
280 m2(igrid, nlev)=m2(igrid, nlev-1)
281 m(igrid, nlev)=m(igrid, nlev-1)
282 mpre(igrid, nlev)=m(igrid, nlev)
283 ENDDO
284
285 ! calcul des fonctions de stabilite
286
287 if (l_mix.eq.4) then
288 DO igrid=1, ngrid
289 sqz(igrid)=1.e-10
290 sq(igrid)=1.e-10
291 ENDDO
292 do ilev=2, nlev-1
293 DO igrid=1, ngrid
294 zq=sqrt(q2(igrid, ilev))
295 sqz(igrid) &
296 =sqz(igrid)+zq*zlev(igrid, ilev) &
297 *(zlay(igrid, ilev)-zlay(igrid, ilev-1))
298 sq(igrid)=sq(igrid)+zq*(zlay(igrid, ilev)-zlay(igrid, ilev-1))
299 ENDDO
300 enddo
301 DO igrid=1, ngrid
302 long0(igrid)=0.2*sqz(igrid)/sq(igrid)
303 ENDDO
304 else if (l_mix.eq.3) then
305 long0(igrid)=long00
306 endif
307
308 DO ilev=2, nlev-1
309 DO igrid=1, ngrid
310 tmp1=kappa*(zlev(igrid, ilev)-zlev(igrid, 1))
311 if (l_mix.ge.10) then
312 long(igrid, ilev)=l_mix
313 else
314 long(igrid, ilev)=tmp1/(1.E+0 + tmp1/long0(igrid))
315 endif
316 long(igrid, ilev)=max(min(long(igrid, ilev) &
317 , 0.5*sqrt(q2(igrid, ilev))/sqrt(max(n2(igrid, ilev), 1.e-10))) &
318 , 5.)
319
320 gn=-long(igrid, ilev)**2 / q2(igrid, ilev) &
321 * n2(igrid, ilev)
322 gninf=.false.
323 gnsup=.false.
324 long(igrid, ilev)=long(igrid, ilev)
325 long(igrid, ilev)=long(igrid, ilev)
326
327 IF (gn.lt.gnmin) THEN
328 gninf=.true.
329 gn=gnmin
330 ENDIF
331
332 IF (gn.gt.gnmax) THEN
333 gnsup=.true.
334 gn=gnmax
335 ENDIF
336
337 sn(igrid, ilev)=cn1/(1.E+0 +cn2*gn)
338 sm(igrid, ilev)= &
339 (cm1+cm2*gn) &
340 /( (1.E+0 +cm3*gn) &
341 *(1.E+0 +cm4*gn) )
342
343 IF ((gninf).or.(gnsup)) THEN
344 snq2(igrid, ilev)=0.E+0
345 smq2(igrid, ilev)=0.E+0
346 ELSE
347 snq2(igrid, ilev)= &
348 -gn &
349 *(-cn1*cn2/(1.E+0 +cn2*gn)**2 )
350 smq2(igrid, ilev)= &
351 -gn &
352 *( cm2*(1.E+0 +cm3*gn) &
353 *(1.E+0 +cm4*gn) &
354 -( cm3*(1.E+0 +cm4*gn) &
355 +cm4*(1.E+0 +cm3*gn) ) &
356 *(cm1+cm2*gn) ) &
357 /( (1.E+0 +cm3*gn) &
358 *(1.E+0 +cm4*gn) )**2
359 ENDIF
360 ! la decomposition de Taylor en q2 n'a de sens que dans les
361 ! cas stratifies ou sn et sm sont quasi proportionnels a
362 ! q2. ailleurs on laisse le meme algorithme car l'ajustement
363 ! convectif fait le travail. mais c'est delirant quand sn
364 ! et snq2 n'ont pas le meme signe : dans ces cas, on ne fait
365 ! pas la decomposition.
366
367 IF (snq2(igrid, ilev)*sn(igrid, ilev).le.0.E+0) &
368 snq2(igrid, ilev)=0.E+0
369 IF (smq2(igrid, ilev)*sm(igrid, ilev).le.0.E+0) &
370 smq2(igrid, ilev)=0.E+0
371
372 ! Correction pour les couches stables.
373 ! Schema repris de JHoltzlag Boville, lui meme venant de...
374
375 if (1.eq.1) then
376 snstable=1.-zlev(igrid, ilev) &
377 /(700.*max(ustar(igrid), 0.0001))
378 snstable=1.-zlev(igrid, ilev)/400.
379 snstable=max(snstable, 0.)
380 snstable=snstable*snstable
381
382 if (sn(igrid, ilev).lt.snstable) then
383 sn(igrid, ilev)=snstable
384 snq2(igrid, ilev)=0.
385 endif
386
387 if (sm(igrid, ilev).lt.snstable) then
388 sm(igrid, ilev)=snstable
389 smq2(igrid, ilev)=0.
390 endif
391 endif
392
393 ! sn : coefficient de stabilite pour n
394 ! snq2 : premier terme du developement limite de sn en q2
395 ENDDO
396 ENDDO
397
398 ! calcul de km et kn au debut du pas de temps
399
400 DO igrid=1, ngrid
401 kn(igrid, 1)=knmin
402 km(igrid, 1)=kmmin
403 kmpre(igrid, 1)=km(igrid, 1)
404 ENDDO
405
406 DO ilev=2, nlev-1
407 DO igrid=1, ngrid
408 kn(igrid, ilev)=long(igrid, ilev)*q(igrid, ilev) &
409 *sn(igrid, ilev)
410 km(igrid, ilev)=long(igrid, ilev)*q(igrid, ilev) &
411 *sm(igrid, ilev)
412 kmpre(igrid, ilev)=km(igrid, ilev)
413 ENDDO
414 ENDDO
415
416 DO igrid=1, ngrid
417 kn(igrid, nlev)=kn(igrid, nlev-1)
418 km(igrid, nlev)=km(igrid, nlev-1)
419 kmpre(igrid, nlev)=km(igrid, nlev)
420 ENDDO
421
422 ! boucle sur les niveaux 2 a nlev-1
423
424 DO ilev=2, nlev-1
425 DO igrid=1, ngrid
426 ! calcul des termes sources et puits de l'equation de q2
427
428 knq3=kn(igrid, ilev)*snq2(igrid, ilev) &
429 /sn(igrid, ilev)
430 kmq3=km(igrid, ilev)*smq2(igrid, ilev) &
431 /sm(igrid, ilev)
432
433 termq=0.E+0
434 termq3=0.E+0
435 termqm2=0.E+0
436 termq3m2=0.E+0
437
438 tmp1=dt*2.E+0 *km(igrid, ilev)*m2(igrid, ilev)
439 tmp2=dt*2.E+0 *kmq3*m2(igrid, ilev)
440 termqm2=termqm2 &
441 +dt*2.E+0 *km(igrid, ilev)*m2(igrid, ilev) &
442 -dt*2.E+0 *kmq3*m2(igrid, ilev)
443 termq3m2=termq3m2 &
444 +dt*2.E+0 *kmq3*m2(igrid, ilev)
445
446 termq=termq &
447 -dt*2.E+0 *kn(igrid, ilev)*n2(igrid, ilev) &
448 +dt*2.E+0 *knq3*n2(igrid, ilev)
449 termq3=termq3 &
450 -dt*2.E+0 *knq3*n2(igrid, ilev)
451
452 termq3=termq3 &
453 -dt*2.E+0 *q(igrid, ilev)**3 / (b1*long(igrid, ilev))
454
455 ! resolution stationnaire couplee avec le gradient de vitesse local
456
457 ! on cherche le cisaillement qui annule l'equation de q^2
458 ! supposee en q3
459
460 tmp1=termq+termq3
461 tmp2=termqm2+termq3m2
462 m2cstat=m2(igrid, ilev) &
463 -(tmp1+tmp2)/(dt*2.E+0*km(igrid, ilev))
464 mcstat=sqrt(m2cstat)
465
466 ! puis on ecrit la valeur de q qui annule l'equation de m
467 ! supposee en q3
468
469 IF (ilev.eq.2) THEN
470 kmcstat=1.E+0 / mcstat &
471 *( unsdz(igrid, ilev)*kmpre(igrid, ilev+1) &
472 *mpre(igrid, ilev+1) &
473 +unsdz(igrid, ilev-1) &
474 *cd(igrid) &
475 *( sqrt(u(igrid, 3)**2+v(igrid, 3)**2) &
476 -mcstat/unsdzdec(igrid, ilev) &
477 -mpre(igrid, ilev+1)/unsdzdec(igrid, ilev+1) )**2) &
478 /( unsdz(igrid, ilev)+unsdz(igrid, ilev-1) )
479 ELSE
480 kmcstat=1.E+0 / mcstat &
481 *( unsdz(igrid, ilev)*kmpre(igrid, ilev+1) &
482 *mpre(igrid, ilev+1) &
483 +unsdz(igrid, ilev-1)*kmpre(igrid, ilev-1) &
484 *mpre(igrid, ilev-1) ) &
485 /( unsdz(igrid, ilev)+unsdz(igrid, ilev-1) )
486 ENDIF
487 tmp2=kmcstat &
488 /( sm(igrid, ilev)/q2(igrid, ilev) ) &
489 /long(igrid, ilev)
490 qcstat=tmp2**(1.E+0/3.E+0)
491 q2cstat=qcstat**2
492
493 ! choix de la solution finale
494
495 q(igrid, ilev)=qcstat
496 q2(igrid, ilev)=q2cstat
497 m(igrid, ilev)=mcstat
498 m2(igrid, ilev)=m2cstat
499
500 ! pour des raisons simples q2 est minore
501
502 IF (q2(igrid, ilev).lt.q2min) THEN
503 q2(igrid, ilev)=q2min
504 q(igrid, ilev)=sqrt(q2min)
505 ENDIF
506
507 ! calcul final de kn et km
508
509 gn=-long(igrid, ilev)**2 / q2(igrid, ilev) &
510 * n2(igrid, ilev)
511 IF (gn.lt.gnmin) gn=gnmin
512 IF (gn.gt.gnmax) gn=gnmax
513 sn(igrid, ilev)=cn1/(1.E+0 +cn2*gn)
514 sm(igrid, ilev)= &
515 (cm1+cm2*gn) &
516 /( (1.E+0 +cm3*gn)*(1.E+0 +cm4*gn) )
517 kn(igrid, ilev)=long(igrid, ilev)*q(igrid, ilev) &
518 *sn(igrid, ilev)
519 km(igrid, ilev)=long(igrid, ilev)*q(igrid, ilev) &
520 *sm(igrid, ilev)
521 end DO
522 end DO
523
524 DO igrid=1, ngrid
525 kn(igrid, 1)=knmin
526 km(igrid, 1)=kmmin
527 q2(igrid, nlev)=q2(igrid, nlev-1)
528 q(igrid, nlev)=q(igrid, nlev-1)
529 kn(igrid, nlev)=kn(igrid, nlev-1)
530 km(igrid, nlev)=km(igrid, nlev-1)
531 ENDDO
532
533 ! CALCUL DE LA DIFFUSION VERTICALE DE Q2
534 if (1.eq.1) then
535 do ilev=2, klev-1
536 sss=sss+plev(1, ilev-1)-plev(1, ilev+1)
537 sssq=sssq+(plev(1, ilev-1)-plev(1, ilev+1))*q2(1, ilev)
538 enddo
539 do ilev=2, klev-1
540 sss=sss+plev(1, ilev-1)-plev(1, ilev+1)
541 sssq=sssq+(plev(1, ilev-1)-plev(1, ilev+1))*q2(1, ilev)
542 enddo
543 print*, 'Q2moy apres', sssq/sss
544
545 do ilev=1, nlev
546 do igrid=1, ngrid
547 q2(igrid, ilev)=max(q2(igrid, ilev), q2min)
548 q(igrid, ilev)=sqrt(q2(igrid, ilev))
549
550 ! calcul final de kn et km
551
552 gn=-long(igrid, ilev)**2 / q2(igrid, ilev) &
553 * n2(igrid, ilev)
554 IF (gn.lt.gnmin) gn=gnmin
555 IF (gn.gt.gnmax) gn=gnmax
556 sn(igrid, ilev)=cn1/(1.E+0 +cn2*gn)
557 sm(igrid, ilev)= &
558 (cm1+cm2*gn) &
559 /( (1.E+0 +cm3*gn)*(1.E+0 +cm4*gn) )
560 ! Correction pour les couches stables.
561 ! Schema repris de JHoltzlag Boville, lui meme venant de...
562
563 if (1.eq.1) then
564 snstable=1.-zlev(igrid, ilev) &
565 /(700.*max(ustar(igrid), 0.0001))
566 snstable=1.-zlev(igrid, ilev)/400.
567 snstable=max(snstable, 0.)
568 snstable=snstable*snstable
569
570 if (sn(igrid, ilev).lt.snstable) then
571 sn(igrid, ilev)=snstable
572 snq2(igrid, ilev)=0.
573 endif
574
575 if (sm(igrid, ilev).lt.snstable) then
576 sm(igrid, ilev)=snstable
577 smq2(igrid, ilev)=0.
578 endif
579 endif
580
581 ! sn : coefficient de stabilite pour n
582 kn(igrid, ilev)=long(igrid, ilev)*q(igrid, ilev) &
583 *sn(igrid, ilev)
584 km(igrid, ilev)=long(igrid, ilev)*q(igrid, ilev)
585 enddo
586 enddo
587 endif
588
589 END SUBROUTINE vdif_kcay
590
591 end module vdif_kcay_m

  ViewVC Help
Powered by ViewVC 1.1.21