/[lmdze]/trunk/Sources/phylmd/screenp.f
ViewVC logotype

Contents of /trunk/Sources/phylmd/screenp.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 178 - (show annotations)
Fri Mar 11 18:47:26 2016 UTC (8 years ago) by guez
File size: 4581 byte(s)
Moved variables date0, deltat, datasz_max, ncvar_ids, point, buff_pos,
buffer, regular from module histcom_var to modules where they are
defined.

Removed procedure ioipslmpp, useless for a sequential program.

Added argument datasz_max to histwrite_real (to avoid circular
dependency with histwrite).

Removed useless variables and computations everywhere.

Changed real litteral constants from default kind to double precision
in lwb, lwu, lwvn, sw1s, swtt, swtt1, swu.

Removed unused arguments: paer of sw, sw1s, sw2s, swclr; pcldsw of
sw1s, sw2s; pdsig, prayl of swr; co2_ppm of clmain, clqh; tsol of
transp_lay; nsrf of screenp; kcrit and kknu of gwstress; pstd of
orosetup.

Added output of relative humidity.

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

  ViewVC Help
Powered by ViewVC 1.1.21