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 |