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

Annotation of /trunk/phylmd/coefkzmin.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 239 - (hide annotations)
Fri Nov 10 15:16:48 2017 UTC (6 years, 6 months ago) by guez
Original Path: trunk/Sources/phylmd/coefkzmin.f
File size: 3064 byte(s)
In procedure coefkzmin, dummy argument km is equal to dummy argument
kn. Remove it.

Bug fix in clmain. If iflag_pbl /= 1 and ok_kzmin then
ycoef[mh]0(:knon, 1) are not defined and used for computation of
ycdrag[mh](:knon). Remove the lines (following LMDZ).

1 guez 47 module coefkzmin_m
2 guez 3
3 guez 47 IMPLICIT NONE
4 guez 3
5 guez 47 contains
6 guez 3
7 guez 239 SUBROUTINE coefkzmin(knon, ypaprs, ypplay, yu, yv, yt, yq, ycoefm, kn)
8 guez 3
9 guez 47 ! From LMDZ4/libf/phylmd/coefkzmin.F, version 1.1.1.1 2004/05/19 12:53:08
10 guez 3
11 guez 47 ! Entrées modifiées en attendant une version où les zlev et zlay
12     ! soient disponibles.
13 guez 3
14 guez 47 USE dimphy, ONLY: klev, klon
15     USE suphec_m, ONLY: rd, rg, rkappa
16 guez 3
17 guez 239 integer, intent(in):: knon
18 guez 47 REAL, intent(in):: ypaprs(klon, klev+1), ypplay(klon, klev)
19     REAL, intent(in):: yu(klon, klev), yv(klon, klev) ! wind, in m s-1
20     REAL, intent(in):: yt(klon, klev) ! temperature, in K
21     REAL, intent(in):: yq(klon, klev)
22 guez 239 REAL, intent(in):: ycoefm(:) ! (knon) drag coefficient
23 guez 3
24 guez 239 REAL, intent(out):: kn(:, 2:) ! (knon, 2:klev) coefficient de
25     ! diffusion turbulente de la quantité de mouvement et des
26     ! scalaires (au bas de chaque couche) (en sortie : la valeur à la
27     ! fin du pas de temps), m2 s-1
28 guez 3
29 guez 47 ! Local:
30 guez 3
31 guez 239 real ustar(knon) ! u*
32     real zlay(knon, klev) ! in m
33 guez 47 integer i, k
34 guez 239 real pblhmin(knon)
35 guez 47 real, parameter:: coriol = 1e-4
36 guez 3
37 guez 239 REAL zlev(knon, 2: klev)
38 guez 47 ! altitude at level (interface between layer with same index), in m
39 guez 3
40 guez 239 REAL teta(knon, klev)
41 guez 47 ! température potentielle au centre de chaque couche (la valeur au
42     ! debut du pas de temps)
43 guez 3
44 guez 47 real, PARAMETER:: kap = 0.4
45 guez 3
46 guez 47 !---------------------------------------------------------------------
47 guez 3
48 guez 47 ! Debut de la partie qui doit etre incluse a terme dans clmain.
49 guez 3
50 guez 239 do i = 1, knon
51 guez 47 zlay(i, 1) = RD * yt(i, 1) * 2 / (ypaprs(i, 1) + ypplay(i, 1)) &
52     * (ypaprs(i, 1) - ypplay(i, 1)) / RG
53     enddo
54 guez 3
55 guez 47 do k = 2, klev
56 guez 239 do i = 1, knon
57 guez 47 zlay(i, k) = zlay(i, k-1) + RD * 0.5 * (yt(i, k - 1) + yt(i, k)) &
58     / ypaprs(i, k) * (ypplay(i, k - 1) - ypplay(i, k)) / RG
59     enddo
60     enddo
61 guez 3
62 guez 47 do k=1, klev
63 guez 239 do i = 1, knon
64 guez 47 ! Attention : on passe la temperature potentielle virtuelle
65     ! pour le calcul de K.
66     teta(i, k) = yt(i, k) * (ypaprs(i, 1) / ypplay(i, k))**rkappa &
67     * (1. + 0.61 * yq(i, k))
68     enddo
69     enddo
70 guez 3
71 guez 47 forall (k = 2: klev) zlev(:, k) = 0.5 * (zlay(:, k) + zlay(:, k-1))
72 guez 239 ustar = SQRT(ycoefm * (yu(:knon, 1)**2 + yv(:knon, 1)**2))
73 guez 3
74 guez 47 ! Fin de la partie qui doit être incluse à terme dans clmain
75 guez 3
76 guez 47 ! Cette routine est ecrite pour avoir en entree ustar, teta et zlev
77     ! Ici, on a inclus le calcul de ces trois variables dans la routine
78     ! coefkzmin en attendant une nouvelle version de la couche limite
79     ! ou ces variables seront disponibles.
80 guez 3
81 guez 47 ! Debut de la routine coefkzmin proprement dite
82    
83     pblhmin = 0.07 * ustar / coriol
84    
85     do k = 2, klev
86 guez 239 do i = 1, knon
87 guez 47 if (teta(i, 2) > teta(i, 1)) then
88     kn(i, k) = kap * zlev(i, k) * ustar(i) &
89     * (max(1. - zlev(i, k) / pblhmin(i), 0.))**2
90     else
91     kn(i, k) = 0. ! min n'est utilisé que pour les SL stables
92     endif
93     enddo
94     enddo
95    
96     end SUBROUTINE coefkzmin
97    
98     end module coefkzmin_m

  ViewVC Help
Powered by ViewVC 1.1.21