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

  ViewVC Help
Powered by ViewVC 1.1.21