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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 178 - (hide annotations)
Fri Mar 11 18:47:26 2016 UTC (8 years, 1 month 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 guez 178 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 guez 3 IF (speed(i).GT.1.5.AND.lmon(i).LE.1.0) THEN
65 guez 178 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 guez 3 ELSE
75 guez 178 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 guez 3 ENDIF
79 guez 178 ELSE
80     !
81     ! UNSTABLE CASE
82     !
83 guez 3 IF (speed(i).GT.5.0.AND.abs(lmon(i)).LE.50.0) THEN
84 guez 178 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 guez 3 ELSE
102 guez 178 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 guez 3 ENDIF
106 guez 178 ENDIF
107     !
108     ENDDO
109     END SUBROUTINE screenp
110    
111     end module screenp_m

  ViewVC Help
Powered by ViewVC 1.1.21