1 |
guez |
225 |
module screenc_m |
2 |
|
|
|
3 |
|
|
IMPLICIT NONE |
4 |
|
|
|
5 |
|
|
contains |
6 |
|
|
|
7 |
guez |
227 |
SUBROUTINE screenc(klon, knon, nsrf, speed, temp, q_zref, zref, ts, & |
8 |
|
|
qsurf, rugos, psol, ustar, testar, qstar, pref, delu, delte, delq) |
9 |
guez |
225 |
|
10 |
guez |
227 |
! From LMDZ4/libf/phylmd/screenc.F90, version 1.1.1.1, 2004/05/19 12:53:09 |
11 |
guez |
225 |
|
12 |
|
|
! Objet : calcul "correcteur" des anomalies du vent, de la |
13 |
|
|
! temp\'erature potentielle et de l'humidit\'e relative au niveau |
14 |
|
|
! de r\'ef\'erence zref et par rapport au 1er niveau (pour u) ou |
15 |
|
|
! \`a la surface (pour theta et q) \`a partir des equations de |
16 |
|
|
! Louis. |
17 |
|
|
|
18 |
|
|
! Reference: Hess, Colman et McAvaney (1995) |
19 |
|
|
|
20 |
|
|
! I. Musat, 01.07.2002 |
21 |
|
|
|
22 |
guez |
275 |
use cdrag_m, only: cdrag |
23 |
guez |
227 |
use SUPHEC_M, only: RG |
24 |
|
|
|
25 |
guez |
225 |
INTEGER, intent(in):: klon |
26 |
|
|
! klon----input-I- dimension de la grille physique (= |
27 |
|
|
! nb_pts_latitude X nb_pts_longitude) |
28 |
|
|
INTEGER, intent(in):: knon |
29 |
|
|
! knon----input-I- nombre de points pour un type de surface |
30 |
|
|
INTEGER, intent(in):: nsrf |
31 |
|
|
! nsrf----input-I- indice pour le type de surface; voir indicesol.inc |
32 |
|
|
REAL, dimension(klon), intent(in):: speed, temp, q_zref |
33 |
|
|
! speed---input-R- module du vent au 1er niveau du modele |
34 |
|
|
! temp----input-R- temperature de l'air au 1er niveau du modele |
35 |
|
|
! q_zref--input-R- humidite relative au 1er niveau du modele |
36 |
|
|
REAL, intent(in):: zref |
37 |
|
|
! zref----input-R- altitude de reference |
38 |
|
|
REAL, dimension(klon), intent(in):: ts, qsurf, rugos, psol |
39 |
|
|
! ts------input-R- temperature de l'air a la surface |
40 |
|
|
! qsurf---input-R- humidite relative a la surface |
41 |
|
|
! rugos---input-R- rugosite |
42 |
|
|
! psol----input-R- pression au sol |
43 |
guez |
246 |
REAL, intent(in):: ustar(:) ! (knon) facteur d'\'echelle pour le vent |
44 |
|
|
REAL, dimension(klon), intent(in):: testar |
45 |
guez |
225 |
! testar--input-R- facteur d'echelle pour la temperature potentielle |
46 |
guez |
246 |
REAL, dimension(klon), intent(in):: qstar |
47 |
guez |
225 |
! qstar---input-R- facteur d'echelle pour l'humidite relative |
48 |
|
|
|
49 |
guez |
272 |
REAL, intent(out):: pref(:) ! (knon) pression au niveau de reference |
50 |
guez |
225 |
REAL, dimension(klon), intent(out):: delu |
51 |
|
|
! delu----input-R- anomalie du vent par rapport au 1er niveau |
52 |
|
|
REAL, dimension(klon), intent(out):: delte |
53 |
|
|
! delte---input-R- anomalie de la temperature potentielle par |
54 |
|
|
! rapport a la surface |
55 |
|
|
REAL, dimension(klon), intent(out):: delq |
56 |
|
|
! delq----input-R- anomalie de l'humidite relative par rapport a la surface |
57 |
|
|
|
58 |
|
|
! Local: |
59 |
|
|
INTEGER i |
60 |
guez |
274 |
REAL, dimension(knon):: cdram, cdrah, gref |
61 |
guez |
225 |
|
62 |
|
|
!------------------------------------------------------------------------- |
63 |
|
|
|
64 |
|
|
DO i=1, knon |
65 |
|
|
gref(i) = zref*RG |
66 |
|
|
ENDDO |
67 |
|
|
|
68 |
|
|
! Richardson at reference level |
69 |
|
|
|
70 |
guez |
275 |
CALL cdrag(nsrf, speed(:knon), temp(:knon), q_zref(:knon), gref(:knon), & |
71 |
|
|
psol(:knon), ts(:knon), qsurf(:knon), rugos(:knon), cdram, cdrah, pref) |
72 |
guez |
225 |
|
73 |
|
|
DO i = 1, knon |
74 |
guez |
227 |
delu(i) = ustar(i) / sqrt(cdram(i)) |
75 |
|
|
delte(i) = testar(i) * sqrt(cdram(i)) / cdrah(i) |
76 |
|
|
delq(i) = qstar(i) * sqrt(cdram(i)) / cdrah(i) |
77 |
guez |
225 |
ENDDO |
78 |
|
|
|
79 |
|
|
END SUBROUTINE screenc |
80 |
|
|
|
81 |
|
|
end module screenc_m |