GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/screenc_mod.F90 Lines: 12 27 44.4 %
Date: 2023-06-30 12:51:15 Branches: 4 12 33.3 %

Line Branch Exec Source
1
!
2
MODULE screenc_mod
3
!
4
! This module contains some procedures for calculation of the correction
5
! of temperature, specific humidity and wind at a reference level
6
!
7
  USE cdrag_mod
8
  IMPLICIT NONE
9
10
CONTAINS
11
!
12
!****************************************************************************************
13
!
14
!r original routine svn3623
15
!
16
3728460
      SUBROUTINE screenc(klon, knon, nsrf, zxli, &
17
                         speed, temp, q_zref, zref, &
18
                         ts, qsurf, z0m, z0h, psol, &
19
                         ustar, testar, qstar, okri, ri1, &
20
                         pref, delu, delte, delq)
21
      IMPLICIT NONE
22
!-----------------------------------------------------------------------
23
!
24
! Objet : calcul "correcteur" des anomalies du vent, de la temperature
25
!         potentielle et de l'humidite relative au niveau de reference zref et
26
!         par rapport au 1er niveau (pour u) ou a la surface (pour theta et q)
27
!         a partir des equations de Louis.
28
!
29
! Reference : Hess, Colman et McAvaney (1995)
30
!
31
! I. Musat, 01.07.2002
32
!-----------------------------------------------------------------------
33
!
34
! klon----input-I- dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
35
! knon----input-I- nombre de points pour un type de surface
36
! nsrf----input-I- indice pour le type de surface; voir indice_sol_mod.F90
37
! zxli----input-L- TRUE si calcul des cdrags selon Laurent Li
38
! speed---input-R- module du vent au 1er niveau du modele
39
! temp----input-R- temperature de l'air au 1er niveau du modele
40
! q_zref--input-R- humidite relative au 1er niveau du modele
41
! zref----input-R- altitude de reference
42
! ts------input-R- temperature de l'air a la surface
43
! qsurf---input-R- humidite relative a la surface
44
! z0m, z0h---input-R- rugosite
45
! psol----input-R- pression au sol
46
! ustar---input-R- facteur d'echelle pour le vent
47
! testar--input-R- facteur d'echelle pour la temperature potentielle
48
! qstar---input-R- facteur d'echelle pour l'humidite relative
49
! okri----input-L- TRUE si on veut tester le nb. Richardson entre la sfce
50
!                  et zref par rapport au Ri entre la sfce et la 1ere couche
51
! ri1-----input-R- nb. Richardson entre la surface et la 1ere couche
52
!
53
! pref----input-R- pression au niveau de reference
54
! delu----input-R- anomalie du vent par rapport au 1er niveau
55
! delte---input-R- anomalie de la temperature potentielle par rapport a la surface
56
! delq----input-R- anomalie de l'humidite relative par rapport a la surface
57
!
58
      INTEGER, intent(in) :: klon, knon, nsrf
59
      LOGICAL, intent(in) :: zxli, okri
60
      REAL, dimension(klon), intent(in) :: speed, temp, q_zref
61
      REAL, intent(in) :: zref
62
      REAL, dimension(klon), intent(in) :: ts, qsurf, z0m, z0h, psol
63
      REAL, dimension(klon), intent(in) :: ustar, testar, qstar, ri1
64
!
65
      REAL, dimension(klon), intent(out) :: pref, delu, delte, delq
66
!-----------------------------------------------------------------------
67
      include "YOMCST.h"
68
      include "flux_arp.h"
69
!
70
! Variables locales
71
      INTEGER :: i
72
      REAL, dimension(klon) :: cdram, cdrah, cdran, zri1, gref,ycdragm,zri_zero
73
!
74
!-------------------------------------------------------------------------
75
      DO i=1, knon
76
        gref(i) = zref*RG
77
      ENDDO
78
!
79
! Richardson at reference level
80
!
81
!      CALL coefcdrag (klon, knon, nsrf, zxli, &
82
!                    speed, temp, q_zref, gref, &
83
!                    psol, ts, qsurf, rugos, &
84
!                    okri, ri1, &
85
!                    cdram, cdrah, cdran, zri1, &
86
!                    pref)
87
! Fuxing WANG, 04/03/2015, replace the coefcdrag by the merged version: cdrag
88
      CALL cdrag (knon, nsrf, &
89
                    speed, temp, q_zref, gref, &
90
                    psol, ts, qsurf, z0m, z0h, &
91
                    zri_zero,0,                &
92
                    cdram, cdrah, zri1, pref)
93
      DO i = 1, knon
94
        IF(ok_prescr_ust) THEN
95
! La aussi il faut forcer avec ust (FC + MPL 20160210)
96
        ycdragm(i) = ust*ust/(1.+speed(i))/speed(i)
97
        cdram=ycdragm
98
        delu(i) = ust/sqrt(cdram(i))
99
        ELSE
100
        delu(i) = ustar(i)/sqrt(cdram(i))
101
        ENDIF
102
        delte(i)= (testar(i)* sqrt(cdram(i)))/ &
103
                   cdrah(i)
104
        delq(i)= (qstar(i)* sqrt(cdram(i)))/ &
105
                  cdrah(i)
106
      ENDDO
107
!
108
      RETURN
109
      END SUBROUTINE screenc
110
!
111
8640
      SUBROUTINE screencn(klon, knon, nsrf, zxli, &
112
8640
                         speed, temp, q_zref, zref, &
113
                         ts, qsurf, z0m, z0h, psol, &
114
                         cdrm, cdrh,  okri, &
115
                         ri1, iri1, &
116
                         pref, delm, delh, zri1)
117
      IMPLICIT NONE
118
!-----------------------------------------------------------------------
119
!
120
! Objet : calcul "correcteur" des anomalies du vent, de la temperature
121
!         potentielle et de l'humidite relative au niveau de reference zref et
122
!         par rapport au 1er niveau (pour u) ou a la surface (pour theta et q)
123
!         a partir des equations de Louis.
124
!
125
! Reference : Hess, Colman et McAvaney (1995)
126
!
127
! I. Musat, 01.07.2002
128
!-----------------------------------------------------------------------
129
!
130
! klon----input-I- dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
131
! knon----input-I- nombre de points pour un type de surface
132
! nsrf----input-I- indice pour le type de surface; voir indice_sol_mod.F90
133
! zxli----input-L- TRUE si calcul des cdrags selon Laurent Li
134
! speed---input-R- module du vent au 1er niveau du modele
135
! temp----input-R- temperature de l'air au 1er niveau du modele
136
! q_zref--input-R- humidite relative au 1er niveau du modele
137
! zref----input-R- altitude de reference
138
! ts------input-R- temperature de l'air a la surface
139
! qsurf---input-R- humidite relative a la surface
140
! z0m, z0h---input-R- rugosite
141
! psol----input-R- pression au sol
142
! ustar---input-R- facteur d'echelle pour le vent
143
! testar--input-R- facteur d'echelle pour la temperature potentielle
144
! qstar---input-R- facteur d'echelle pour l'humidite relative
145
! okri----input-L- TRUE si on veut tester le nb. Richardson entre la sfce
146
!                  et zref par rapport au Ri entre la sfce et la 1ere couche
147
! ri1-----input-R- nb. Richardson entre la surface et la 1ere couche
148
!
149
! pref----input-R- pression au niveau de reference
150
! delu----input-R- anomalie du vent par rapport au 1er niveau
151
! delte---input-R- anomalie de la temperature potentielle par rapport a la surface
152
! delq----input-R- anomalie de l'humidite relative par rapport a la surface
153
!
154
      INTEGER, intent(in) :: klon, knon, nsrf
155
      LOGICAL, intent(in) :: zxli, okri
156
      REAL, dimension(klon), intent(in) :: speed, temp, q_zref
157
      REAL, intent(in) :: zref
158
      REAL, dimension(klon), intent(in) :: ts, qsurf, z0m, z0h, psol
159
      REAL, dimension(klon), intent(in) :: cdrm, cdrh, ri1
160
      INTEGER, INTENT(IN)  :: iri1 ! Richardson de la 1ere couche
161
!
162
      REAL, dimension(klon), intent(out) :: pref, delm, delh, zri1
163
!171220     REAL, dimension(klon) :: cdram, cdrah, zri1
164
17280
      REAL, dimension(klon) :: cdram, cdrah
165
!-----------------------------------------------------------------------
166
      include "YOMCST.h"
167
      include "flux_arp.h"
168
!
169
! Variables locales
170
      INTEGER :: i
171
17280
      REAL, dimension(klon) :: cdran, gref,ycdragm
172
!
173
!-------------------------------------------------------------------------
174
3737100
      DO i=1, knon
175
3737100
        gref(i) = zref*RG
176
      ENDDO
177
!
178
! Richardson at reference level
179
!
180
      CALL cdrag(knon, nsrf, &
181
                    speed, temp, q_zref, gref, &
182
                    psol, ts, qsurf, z0m, z0h, &
183
                    ri1, iri1, &
184
8640
                    cdram, cdrah, zri1, pref)
185
3737100
      DO i = 1, knon
186
3728460
        delm(i) = sqrt(cdrm(i))/sqrt(cdram(i))
187
!verifier que temp est un temperat potentielle.
188
        delh(i)= (cdrh(i)* sqrt(cdram(i)))/ &
189
3737100
                   (cdrah(i)*sqrt(cdrm(i)))
190
      ENDDO
191
!
192
8640
      RETURN
193
      END SUBROUTINE screencn
194
END MODULE screenc_mod