/[lmdze]/trunk/phylmd/Interface_surf/stdlevvar.f90
ViewVC logotype

Diff of /trunk/phylmd/Interface_surf/stdlevvar.f90

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/phylmd/stdlevvar.f revision 104 by guez, Thu Sep 4 10:05:52 2014 UTC trunk/Sources/phylmd/stdlevvar.f revision 225 by guez, Mon Oct 16 12:35:41 2017 UTC
# Line 9  contains Line 9  contains
9    
10      ! From LMDZ4/libf/phylmd/stdlevvar.F90, version 1.3 2005/05/25 13:10:09      ! From LMDZ4/libf/phylmd/stdlevvar.F90, version 1.3 2005/05/25 13:10:09
11    
     USE suphec_m, ONLY: rg, rkappa  
   
12      ! Objet : calcul de la température et de l'humidité relative à 2 m      ! Objet : calcul de la température et de l'humidité relative à 2 m
13      ! et du module du vent à 10 m à partir des relations de      ! et du module du vent à 10 m à partir des relations de
14      ! Dyer-Businger et des équations de Louis.      ! Dyer-Businger et des équations de Louis.
15    
16      ! Reference: Hess, Colman and McAvaney (1995)      ! Reference: Hess, Colman and McAvaney (1995)
17    
18      ! Author: I. Musat, 01.07.2002      ! Author: I. Musat, July 1st, 2002
19    
20        use coefcdrag_m, only: coefcdrag
21        USE suphec_m, ONLY: rg, rkappa
22        use screenc_m, only: screenc
23        use screenp_m, only: screenp
24    
25      INTEGER, intent(in):: klon      INTEGER, intent(in):: klon
26      ! dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)      ! dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
27    
28      INTEGER, intent(in):: knon, nsrf      INTEGER, intent(in):: knon ! nombre de points pour un type de surface
29      ! knon----input-I- nombre de points pour un type de surface      INTEGER, intent(in):: nsrf ! indice pour le type de surface
30      ! nsrf----input-I- indice pour le type de surface; voir indicesol.inc      LOGICAL, intent(in):: zxli ! calcul des cdrags selon Laurent Li
31      LOGICAL, intent(in):: zxli      REAL, intent(in):: u1(:) ! (knon) vent zonal au 1er niveau du modele
32      ! zxli----input-L- TRUE si calcul des cdrags selon Laurent Li      REAL, intent(in):: v1(:) ! (knon) vent meridien au 1er niveau du modele
33      REAL, dimension(klon), intent(in):: u1, v1, t1, q1, z1, ts1      REAL, intent(in):: t1 (klon) ! temperature de l'air au 1er niveau du modele
34      ! u1------input-R- vent zonal au 1er niveau du modele      REAL, intent(in):: q1(klon) ! humidite relative au 1er niveau du modele
35      ! v1------input-R- vent meridien au 1er niveau du modele      REAL, intent(in):: z1 (klon) ! geopotentiel au 1er niveau du modele
36      ! t1------input-R- temperature de l'air au 1er niveau du modele      REAL, intent(in):: ts1(klon) ! temperature de l'air a la surface
37      ! q1------input-R- humidite relative au 1er niveau du modele      REAL, intent(in):: qsurf(klon) ! humidite relative a la surface
38      ! z1------input-R- geopotentiel au 1er niveau du modele      REAL, intent(in):: rugos(klon) ! rugosite
39      ! ts1-----input-R- temperature de l'air a la surface      REAL, intent(in):: psol(klon) ! pression au sol
40      REAL, dimension(klon), intent(in):: qsurf, rugos      REAL, intent(in):: pat1(klon) ! pression au 1er niveau du modele
41       ! qsurf---input-R- humidite relative a la surface      REAL, intent(out):: t_2m(klon) ! temperature de l'air a 2m
42      ! rugos---input-R- rugosite      REAL, intent(out):: q_2m(klon) ! humidite relative a 2m
43     REAL, dimension(klon), intent(in):: psol, pat1      REAL, intent(out):: t_10m(klon) ! temperature de l'air a 10m
44      ! psol----input-R- pression au sol      REAL, intent(out):: q_10m(klon) ! humidite specifique a 10m
45      ! pat1----input-R- pression au 1er niveau du modele      REAL, intent(out):: u_10m(klon) ! vitesse du vent a 10m
   
     REAL, dimension(klon), intent(out):: t_2m, q_2m, t_10m, q_10m  
     ! t_2m---output-R- temperature de l'air a 2m  
     ! q_2m---output-R- humidite relative a 2m  
     ! t_10m--output-R- temperature de l'air a 10m  
     ! q_10m--output-R- humidite specifique a 10m  
     REAL, dimension(klon), intent(out):: u_10m  
     ! u_10m--output-R- vitesse du vent a 10m  
46      REAL, intent(out):: ustar(klon) ! u*      REAL, intent(out):: ustar(klon) ! u*
47    
48      ! Local:      ! Local:
# Line 55  contains Line 50  contains
50      ! RKAR : constante de von Karman      ! RKAR : constante de von Karman
51      REAL, PARAMETER:: RKAR=0.40      REAL, PARAMETER:: RKAR=0.40
52      ! niter : nombre iterations calcul "corrector"      ! niter : nombre iterations calcul "corrector"
53      INTEGER, parameter:: niter=2, ncon=niter-1      INTEGER, parameter:: niter=2
54    
55      ! Variables locales      ! Variables locales
56      INTEGER i, n      INTEGER i, n
# Line 71  contains Line 66  contains
66      REAL, dimension(klon):: zdte, zdq      REAL, dimension(klon):: zdte, zdq
67      ! lmon : longueur de Monin-Obukhov selon Hess, Colman and McAvaney      ! lmon : longueur de Monin-Obukhov selon Hess, Colman and McAvaney
68      DOUBLE PRECISION, dimension(klon):: lmon      DOUBLE PRECISION, dimension(klon):: lmon
     DOUBLE PRECISION, parameter:: eps=1.0D-20  
69      REAL, dimension(klon):: delu, delte, delq      REAL, dimension(klon):: delu, delte, delq
70      REAL, dimension(klon):: u_zref, te_zref, q_zref      REAL, dimension(klon):: u_zref, te_zref, q_zref
71      REAL, dimension(klon):: temp, pref      REAL, dimension(klon):: temp, pref
72      LOGICAL okri      LOGICAL okri
73      REAL, dimension(klon):: u_zref_p, temp_p, q_zref_p      REAL, dimension(klon):: u_zref_p, temp_p, q_zref_p
74      !convertgence      !convertgence
     REAL, dimension(klon):: te_zref_con, q_zref_con  
75      REAL, dimension(klon):: u_zref_c, temp_c, q_zref_c      REAL, dimension(klon):: u_zref_c, temp_c, q_zref_c
76      REAL, dimension(klon):: ok_pred, ok_corr      REAL, dimension(klon):: ok_pred, ok_corr
77    
# Line 112  contains Line 105  contains
105    
106      ! First aproximation of variables at zref        ! First aproximation of variables at zref  
107      zref = 2.0      zref = 2.0
108      CALL screenp(klon, knon, nsrf, speed, tpot, q1, &      CALL screenp(klon, knon, speed, tpot, q1, &
109           ts1, qsurf, rugos, lmon, &           ts1, qsurf, rugos, lmon, &
110           ustar, testar, qstar, zref, &           ustar, testar, qstar, zref, &
111           delu, delte, delq)           delu, delte, delq)
# Line 145  contains Line 138  contains
138            ! return to normal temperature            ! return to normal temperature
139    
140            temp(i) = te_zref(i) * (psol(i)/pref(i))**(-RKAPPA)            temp(i) = te_zref(i) * (psol(i)/pref(i))**(-RKAPPA)
   
           IF(n == ncon) THEN  
              te_zref_con(i) = te_zref(i)  
              q_zref_con(i) = q_zref(i)  
           ENDIF  
141         ENDDO         ENDDO
142      ENDDO      ENDDO
143    
# Line 169  contains Line 157  contains
157      ! First aproximation of variables at zref        ! First aproximation of variables at zref  
158    
159      zref = 10.0      zref = 10.0
160      CALL screenp(klon, knon, nsrf, speed, tpot, q1, &      CALL screenp(klon, knon, speed, tpot, q1, ts1, qsurf, rugos, lmon, ustar, &
161           ts1, qsurf, rugos, lmon, &           testar, qstar, zref, delu, delte, delq)
          ustar, testar, qstar, zref, &  
          delu, delte, delq)  
162    
163      DO i = 1, knon      DO i = 1, knon
164         u_zref(i) = delu(i)         u_zref(i) = delu(i)
# Line 187  contains Line 173  contains
173    
174      DO n = 1, niter      DO n = 1, niter
175         okri=.TRUE.         okri=.TRUE.
176         CALL screenc(klon, knon, nsrf, zxli, &         CALL screenc(klon, knon, nsrf, zxli, u_zref, temp, q_zref, zref, ts1, &
177              u_zref, temp, q_zref, zref, &              qsurf, rugos, psol, ustar, testar, qstar, okri, ri1, pref, delu, &
178              ts1, qsurf, rugos, psol, &              delte, delq)
             ustar, testar, qstar, okri, ri1, &  
             pref, delu, delte, delq)  
179    
180         DO i = 1, knon         DO i = 1, knon
181            u_zref(i) = delu(i)            u_zref(i) = delu(i)
# Line 203  contains Line 187  contains
187    
188      DO i = 1, knon      DO i = 1, knon
189         u_zref_c(i) = u_zref(i)         u_zref_c(i) = u_zref(i)
   
190         u_10m(i) = u_zref_p(i) * ok_pred(i) + u_zref_c(i) * ok_corr(i)         u_10m(i) = u_zref_p(i) * ok_pred(i) + u_zref_c(i) * ok_corr(i)
   
191         q_zref_c(i) = q_zref(i)         q_zref_c(i) = q_zref(i)
192         temp_c(i) = temp(i)         temp_c(i) = temp(i)
193         t_10m(i) = temp_p(i) * ok_pred(i) + temp_c(i) * ok_corr(i)         t_10m(i) = temp_p(i) * ok_pred(i) + temp_c(i) * ok_corr(i)

Legend:
Removed from v.104  
changed lines
  Added in v.225

  ViewVC Help
Powered by ViewVC 1.1.21