GCC Code Coverage Report


Directory: ./
File: phys/coefkzmin.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 36 0.0%
Branches: 0 36 0.0%

Line Branch Exec Source
1
2 SUBROUTINE coefkzmin(knon, ypaprs, ypplay, yu, yv, yt, yq, ycdragm, km, kn)
3
4 USE dimphy
5 IMPLICIT NONE
6
7 include "YOMCST.h"
8
9 ! .......................................................................
10 ! Entrees modifies en attendant une version ou les zlev, et zlay soient
11 ! disponibles.
12
13 REAL ycdragm(klon)
14
15 REAL yu(klon, klev), yv(klon, klev)
16 REAL yt(klon, klev), yq(klon, klev)
17 REAL ypaprs(klon, klev+1), ypplay(klon, klev)
18 REAL yustar(klon)
19 REAL yzlay(klon, klev), yzlev(klon, klev+1), yteta(klon, klev)
20
21 INTEGER i
22
23 ! .......................................................................
24
25 ! En entree :
26 ! -----------
27
28 ! zlev : altitude a chaque niveau (interface inferieure de la couche
29 ! de meme indice)
30 ! ustar : u*
31
32 ! teta : temperature potentielle au centre de chaque couche
33 ! (en entree : la valeur au debut du pas de temps)
34
35 ! en sortier :
36 ! ------------
37
38 ! km : diffusivite turbulente de quantite de mouvement (au bas de chaque
39 ! couche)
40 ! (en sortie : la valeur a la fin du pas de temps)
41 ! kn : diffusivite turbulente des scalaires (au bas de chaque couche)
42 ! (en sortie : la valeur a la fin du pas de temps)
43
44 ! .......................................................................
45
46 REAL ustar(klon)
47 REAL kmin, qmin, pblhmin(klon), coriol(klon)
48 REAL zlev(klon, klev+1)
49 REAL teta(klon, klev)
50
51 REAL km(klon, klev)
52 REAL kn(klon, klev)
53 INTEGER knon
54
55
56 INTEGER nlay, nlev
57 INTEGER ig, k
58
59 REAL, PARAMETER :: kap = 0.4
60
61 nlay = klev
62 nlev = klev + 1
63 ! .......................................................................
64 ! en attendant une version ou les zlev, et zlay soient
65 ! disponibles.
66 ! Debut de la partie qui doit etre unclue a terme dans clmain.
67
68 DO i = 1, knon
69 yzlay(i, 1) = rd*yt(i, 1)/(0.5*(ypaprs(i,1)+ypplay(i, &
70 1)))*(ypaprs(i,1)-ypplay(i,1))/rg
71 END DO
72 DO k = 2, klev
73 DO i = 1, knon
74 yzlay(i, k) = yzlay(i, k-1) + rd*0.5*(yt(i,k-1)+yt(i,k))/ypaprs(i, k)*( &
75 ypplay(i,k-1)-ypplay(i,k))/rg
76 END DO
77 END DO
78 DO k = 1, klev
79 DO i = 1, knon
80 ! ATTENTION:on passe la temperature potentielle virt. pour le calcul de
81 ! K
82 yteta(i, k) = yt(i, k)*(ypaprs(i,1)/ypplay(i,k))**rkappa* &
83 (1.+0.61*yq(i,k))
84 END DO
85 END DO
86 DO i = 1, knon
87 yzlev(i, 1) = 0.
88 yzlev(i, klev+1) = 2.*yzlay(i, klev) - yzlay(i, klev-1)
89 END DO
90 DO k = 2, klev
91 DO i = 1, knon
92 yzlev(i, k) = 0.5*(yzlay(i,k)+yzlay(i,k-1))
93 END DO
94 END DO
95
96 yustar(1:knon) = sqrt(ycdragm(1:knon)*(yu(1:knon,1)*yu(1:knon,1)+yv(1:knon, &
97 1)*yv(1:knon,1)))
98
99 ! Fin de la partie qui doit etre unclue a terme dans clmain.
100
101 ! ette routine est ecrite pour avoir en entree ustar, teta et zlev
102 ! Ici, on a inclut le calcul de ces trois variables dans la routine
103 ! coefkzmin en attendant une nouvelle version de la couche limite
104 ! ou ces variables seront disponibles.
105
106 ! Debut de la routine coefkzmin proprement dite.
107
108 ustar = yustar
109 teta = yteta
110 zlev = yzlev
111
112 DO ig = 1, knon
113 coriol(ig) = 1.E-4
114 pblhmin(ig) = 0.07*ustar(ig)/max(abs(coriol(ig)), 2.546E-5)
115 END DO
116
117 DO k = 2, klev
118 DO ig = 1, knon
119 IF (teta(ig,2)>teta(ig,1)) THEN
120 qmin = ustar(ig)*(max(1.-zlev(ig,k)/pblhmin(ig),0.))**2
121 kmin = kap*zlev(ig, k)*qmin
122 ELSE
123 kmin = 0. ! kmin n'est utilise que pour les SL stables.
124 END IF
125 kn(ig, k) = kmin
126 km(ig, k) = kmin
127 END DO
128 END DO
129
130
131 RETURN
132 END SUBROUTINE coefkzmin
133