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