/[lmdze]/trunk/phylmd/Conflx/conflx.f
ViewVC logotype

Diff of /trunk/phylmd/Conflx/conflx.f

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

revision 76 by guez, Fri Nov 15 18:45:49 2013 UTC revision 78 by guez, Wed Feb 5 17:51:07 2014 UTC
# Line 27  contains Line 27  contains
27      USE fcttre, ONLY: foeew      USE fcttre, ONLY: foeew
28    
29      REAL, intent(in):: dtime ! pas d'integration (s)      REAL, intent(in):: dtime ! pas d'integration (s)
30      REAL, intent(in):: pres_h(:, :) ! (klon, klev+1) pression half-level (Pa)      REAL, intent(in):: pres_h(:, :) ! (klon, klev + 1) pression half-level (Pa)
31      REAL, intent(in):: pres_f(:, :) ! (klon, klev) pression full-level (Pa)      REAL, intent(in):: pres_f(:, :) ! (klon, klev) pression full-level (Pa)
32      REAL, intent(in):: t(:, :) ! (klon, klev) temperature (K)      REAL, intent(in):: t(:, :) ! (klon, klev) temperature (K)
33      REAL, intent(in):: q(:, :) ! (klon, klev) humidité spécifique (no dimension)      REAL, intent(in):: q(:, :) ! (klon, klev) humidité spécifique (no dimension)
# Line 59  contains Line 59  contains
59      INTEGER, intent(out):: kcbot(:) ! (klon) niveau du bas de la convection      INTEGER, intent(out):: kcbot(:) ! (klon) niveau du bas de la convection
60      INTEGER, intent(out):: kctop(:) ! (klon) niveau du haut de la convection      INTEGER, intent(out):: kctop(:) ! (klon) niveau du haut de la convection
61      INTEGER, intent(out):: kdtop(:) ! (klon) niveau du haut des downdrafts      INTEGER, intent(out):: kdtop(:) ! (klon) niveau du haut des downdrafts
62      REAL, intent(out):: pmflxr(:, :) ! (klon, klev+1)      REAL, intent(out):: pmflxr(:, :) ! (klon, klev + 1)
63      REAL, intent(out):: pmflxs(:, :) ! (klon, klev+1)      REAL, intent(out):: pmflxs(:, :) ! (klon, klev + 1)
64    
65      ! Local:      ! Local:
66    
# Line 70  contains Line 70  contains
70    
71      REAL d_t_bis(klon, klev)      REAL d_t_bis(klon, klev)
72      REAL d_q_bis(klon, klev)      REAL d_q_bis(klon, klev)
73      REAL paprs(klon, klev+1)      REAL paprs(klon, klev + 1)
74      REAL paprsf(klon, klev)      REAL paprsf(klon, klev)
75      REAL zgeom(klon, klev)      REAL zgeom(klon, klev)
76      REAL zcvgq(klon, klev)      REAL zcvgq(klon, klev)
# Line 80  contains Line 80  contains
80      REAL zen_d(klon, klev)      REAL zen_d(klon, klev)
81      REAL zde_u(klon, klev)      REAL zde_u(klon, klev)
82      REAL zde_d(klon, klev)      REAL zde_d(klon, klev)
83      REAL zmflxr(klon, klev+1)      REAL zmflxr(klon, klev + 1)
84      REAL zmflxs(klon, klev+1)      REAL zmflxs(klon, klev + 1)
85    
86      INTEGER i, k      INTEGER i, k
87      REAL zqsat      REAL zqsat
88    
89      !--------------------------------------------------------------------      !--------------------------------------------------------------------
90    
91      ! initialiser les variables de sortie (pour securite)      ! Initialiser les variables de sortie (pour securité):
92      DO i = 1, klon      rain = 0.
93         rain(i) = 0.0      snow = 0.
94         snow(i) = 0.0      kcbot = 0
95         kcbot(i) = 0      kctop = 0
96         kctop(i) = 0      kdtop = 0
97         kdtop(i) = 0      d_t = 0.
98      ENDDO      d_q = 0.
99      DO k = 1, klev  
100         DO i = 1, klon      zen_u = 0.
101            d_t(i, k) = 0.0      zde_u = 0.
102            d_q(i, k) = 0.0      zen_d = 0.
103            pen_u(i, k) = 0.0      zde_d = 0.
104            pde_u(i, k) = 0.0      zmflxr = 0.
105            pen_d(i, k) = 0.0      zmflxs = 0.
           pde_d(i, k) = 0.0  
           zen_u(i, k) = 0.0  
           zde_u(i, k) = 0.0  
           zen_d(i, k) = 0.0  
           zde_d(i, k) = 0.0  
        ENDDO  
     ENDDO  
     DO k = 1, klev+1  
        DO i = 1, klon  
           zmflxr(i, k) = 0.0  
           zmflxs(i, k) = 0.0  
        ENDDO  
     ENDDO  
106    
107      ! calculer la nature du sol (pour l'instant, ocean partout)      ! Calculer la nature du sol (pour l'instant, océan partout):
108      DO i = 1, klon      land = .FALSE.
        land(i) = .FALSE.  
     ENDDO  
109    
110      ! preparer les variables d'entree (attention: l'ordre des niveaux      ! Préparer les variables d'entrée (attention: l'indice des niveaux
111      ! verticaux augmente du haut vers le bas)      ! verticaux augmente du haut vers le bas) :
112      DO k = 1, klev      DO k = 1, klev
113         DO i = 1, klon         DO i = 1, klon
114            paprsf(i, k) = pres_f(i, klev-k+1)            paprsf(i, k) = pres_f(i, klev-k + 1)
115            paprs(i, k) = pres_h(i, klev+1-k+1)            paprs(i, k) = pres_h(i, klev + 1-k + 1)
116            pvervel(i, k) = w(i, klev+1-k)            pvervel(i, k) = w(i, klev + 1-k)
117            zcvgt(i, k) = con_t(i, klev-k+1)            zcvgt(i, k) = con_t(i, klev-k + 1)
118            zcvgq(i, k) = con_q(i, klev-k+1)            zcvgq(i, k) = con_q(i, klev-k + 1)
119    
120            zqsat = MIN(0.5, R2ES * FOEEW(t(i, k), &            zqsat = MIN(0.5, R2ES * FOEEW(t(i, k), &
121                 merge(0., 1., rtt < t(i, k))) / paprsf(i, k))                 merge(0., 1., rtt < t(i, k))) / paprsf(i, k))
# Line 138  contains Line 123  contains
123         ENDDO         ENDDO
124      ENDDO      ENDDO
125      DO i = 1, klon      DO i = 1, klon
126         paprs(i, klev+1) = pres_h(i, 1)         paprs(i, klev + 1) = pres_h(i, 1)
127         zgeom(i, klev) = RD * t(i, klev) &         zgeom(i, klev) = RD * t(i, klev) &
128              / (0.5*(paprs(i, klev+1)+paprsf(i, klev))) &              / (0.5*(paprs(i, klev + 1) + paprsf(i, klev))) &
129              * (paprs(i, klev+1)-paprsf(i, klev))              * (paprs(i, klev + 1)-paprsf(i, klev))
130      ENDDO      ENDDO
131      DO k = klev-1, 1, -1      DO k = klev-1, 1, -1
132         DO i = 1, klon         DO i = 1, klon
133            zgeom(i, k) = zgeom(i, k+1) &            zgeom(i, k) = zgeom(i, k + 1) &
134                 + RD * 0.5*(t(i, k+1)+t(i, k)) / paprs(i, k+1) &                 + RD * 0.5*(t(i, k + 1) + t(i, k)) / paprs(i, k + 1) &
135                 * (paprsf(i, k+1)-paprsf(i, k))                 * (paprsf(i, k + 1)-paprsf(i, k))
136         ENDDO         ENDDO
137      ENDDO      ENDDO
138    
# Line 161  contains Line 146  contains
146      ! la convection des traceurs.      ! la convection des traceurs.
147      DO k = 1, klev      DO k = 1, klev
148         DO i = 1, klon         DO i = 1, klon
149            d_q(i, klev+1-k) = dtime*d_q_bis(i, k)            d_q(i, klev + 1-k) = dtime*d_q_bis(i, k)
150            d_t(i, klev+1-k) = dtime*d_t_bis(i, k)            d_t(i, klev + 1-k) = dtime*d_t_bis(i, k)
151         ENDDO         ENDDO
152      ENDDO      ENDDO
153    
# Line 173  contains Line 158  contains
158    
159      DO k = 1, klev      DO k = 1, klev
160         DO i = 1, klon         DO i = 1, klon
161            pen_u(i, klev+1-k)= zen_u(i, k)            pen_u(i, klev + 1-k)= zen_u(i, k)
162            pde_u(i, klev+1-k)= zde_u(i, k)            pde_u(i, klev + 1-k)= zde_u(i, k)
163         ENDDO         ENDDO
164      ENDDO      ENDDO
165    
166      DO k = 1, klev-1      DO k = 1, klev-1
167         DO i = 1, klon         DO i = 1, klon
168            pen_d(i, klev+1-k)= -zen_d(i, k+1)            pen_d(i, klev + 1-k)= -zen_d(i, k + 1)
169            pde_d(i, klev+1-k)= -zde_d(i, k+1)            pde_d(i, klev + 1-k)= -zde_d(i, k + 1)
170         ENDDO         ENDDO
171      ENDDO      ENDDO
172    
173      DO k = 1, klev+1      DO k = 1, klev + 1
174         DO i = 1, klon         DO i = 1, klon
175            pmflxr(i, klev+2-k)= zmflxr(i, k)            pmflxr(i, klev + 2-k)= zmflxr(i, k)
176            pmflxs(i, klev+2-k)= zmflxs(i, k)            pmflxs(i, klev + 2-k)= zmflxs(i, k)
177         ENDDO         ENDDO
178      ENDDO      ENDDO
179    

Legend:
Removed from v.76  
changed lines
  Added in v.78

  ViewVC Help
Powered by ViewVC 1.1.21