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

Contents of /trunk/phylmd/vdif_kcay.f

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21