LMDZ
screenp.F90
Go to the documentation of this file.
1 !
2 ! $Id$
3 !
4  SUBROUTINE screenp(klon, knon, nsrf, &
5  & speed, tair, qair, &
6  & ts, qsurf, rugos, lmon, &
7  & ustar, testar, qstar, zref, &
8  & delu, delte, delq)
9  IMPLICIT none
10 !-------------------------------------------------------------------------
11 !
12 ! Objet : calcul "predicteur" des anomalies du vent, de la temperature
13 ! potentielle et de l'humidite relative au niveau de reference zref et
14 ! par rapport au 1er niveau (pour u) ou a la surface (pour theta et q)
15 ! a partir des relations de Dyer-Businger.
16 !
17 ! Reference : Hess, Colman et McAvaney (1995)
18 !
19 ! I. Musat, 01.07.2002
20 !-------------------------------------------------------------------------
21 !
22 ! klon----input-I- dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
23 ! knon----input-I- nombre de points pour un type de surface
24 ! nsrf----input-I- indice pour le type de surface; voir indice_sol_mod.F90
25 ! speed---input-R- module du vent au 1er niveau du modele
26 ! tair----input-R- temperature de l'air au 1er niveau du modele
27 ! qair----input-R- humidite relative au 1er niveau du modele
28 ! ts------input-R- temperature de l'air a la surface
29 ! qsurf---input-R- humidite relative a la surface
30 ! rugos---input-R- rugosite
31 ! lmon----input-R- longueur de Monin-Obukov
32 ! ustar---input-R- facteur d'echelle pour le vent
33 ! testar--input-R- facteur d'echelle pour la temperature potentielle
34 ! qstar---input-R- facteur d'echelle pour l'humidite relative
35 ! zref----input-R- altitude de reference
36 !
37 ! delu----input-R- anomalie du vent par rapport au 1er niveau
38 ! delte---input-R- anomalie de la temperature potentielle par rapport a la surface
39 ! delq----input-R- anomalie de l'humidite relative par rapport a la surface
40 !
41  INTEGER, intent(in) :: klon, knon, nsrf
42  REAL, dimension(klon), intent(in) :: speed, tair, qair
43  REAL, dimension(klon), intent(in) :: ts, qsurf, rugos
44  DOUBLE PRECISION, dimension(klon), intent(in) :: lmon
45  REAL, dimension(klon), intent(in) :: ustar, testar, qstar
46  REAL, intent(in) :: zref
47 !
48  REAL, dimension(klon), intent(out) :: delu, delte, delq
49 !
50 !-------------------------------------------------------------------------
51 ! Variables locales et constantes :
52  REAL, PARAMETER :: RKAR=0.40
53  INTEGER :: i
54  REAL :: xtmp, xtmp0
55 !-------------------------------------------------------------------------
56  DO i = 1, knon
57 !
58  IF (lmon(i).GE.0.) THEN
59 !
60 ! STABLE CASE
61 !
62  IF (speed(i).GT.1.5.AND.lmon(i).LE.1.0 &
63  & .AND. rugos(i).LE.1.0) THEN
64  delu(i) = (ustar(i)/rkar)* &
65  (log(zref/(rugos(i))+1.) + &
66  min(5.d0, 5.0 *(zref - rugos(i))/lmon(i)))
67  delte(i) = (testar(i)/rkar)* &
68  (log(zref/(rugos(i))+1.) + &
69  min(5.d0, 5.0 * (zref - rugos(i))/lmon(i)))
70  delq(i) = (qstar(i)/rkar)* &
71  (log(zref/(rugos(i))+1.) + &
72  min(5.d0, 5.0 * (zref - rugos(i))/lmon(i)))
73  ELSE
74  delu(i) = 0.1 * speed(i)
75  delte(i) = 0.1 * (tair(i) - ts(i) )
76  delq(i) = 0.1 * (max(qair(i),0.0) - max(qsurf(i),0.0))
77  ENDIF
78  ELSE
79 !
80 ! UNSTABLE CASE
81 !
82  IF (speed(i).GT.5.0.AND.abs(lmon(i)).LE.50.0) THEN
83  xtmp = (1. - 16. * (zref/lmon(i)))**(1./4.)
84  xtmp0 = (1. - 16. * (rugos(i)/lmon(i)))**(1./4.)
85  delu(i) = (ustar(i)/rkar)* &
86  (log(zref/(rugos(i))+1.) &
87  - 2.*log(0.5*(1. + xtmp)) &
88  + 2.*log(0.5*(1. + xtmp0)) &
89  - log(0.5*(1. + xtmp*xtmp)) &
90  + log(0.5*(1. + xtmp0*xtmp0)) &
91  + 2.*atan(xtmp) - 2.*atan(xtmp0))
92  delte(i) = (testar(i)/rkar)* &
93  (log(zref/(rugos(i))+1.) &
94  - 2.0 * log(0.5*(1. + xtmp*xtmp)) &
95  + 2.0 * log(0.5*(1. + xtmp0*xtmp0)))
96  delq(i) = (qstar(i)/rkar)* &
97  (log(zref/(rugos(i))+1.) &
98  - 2.0 * log(0.5*(1. + xtmp*xtmp)) &
99  + 2.0 * log(0.5*(1. + xtmp0*xtmp0)))
100  ELSE
101  delu(i) = 0.5 * speed(i)
102  delte(i) = 0.5 * (tair(i) - ts(i) )
103  delq(i) = 0.5 * (max(qair(i),0.0) - max(qsurf(i),0.0))
104  ENDIF
105  ENDIF
106 !
107  ENDDO
108  RETURN
109  END SUBROUTINE screenp
subroutine screenp(klon, knon, nsrf, speed, tair, qair, ts, qsurf, rugos, lmon, ustar, testar, qstar, zref, delu, delte, delq)
Definition: screenp.F90:9