source: trunk/LMDZ.GENERIC/libf/phystd/largescale.F @ 738

Last change on this file since 738 was 738, checked in by aslmd, 13 years ago

GENERIC : bug fix. Nmix_h2o was used in largescale.F but not declared.

File size: 4.2 KB
Line 
1      subroutine largescale(dtime, paprs, pplay, t, pq,
2     &                   pdt, d_t, d_q, d_ql, rneb, reffH2O)
3
4      use watercommon_h, only : RLVTT, RCPD, RVTMP2
5      use radii_mod
6
7      IMPLICIT none
8
9!==================================================================
10!     
11!     Purpose
12!     -------
13!     Calculates large-scale (stratiform) H2O condensation.
14!     
15!     Authors
16!     -------
17!     Adapted from the LMDTERRE code by R. Wordsworth (2009)
18!     Original author Z. X. Li (1993)
19!     
20!==================================================================
21
22#include "dimensions.h"
23#include "dimphys.h"
24#include "comcstfi.h"
25
26#include "fisice.h"
27#include "callkeys.h"
28#include "tracer.h"
29
30
31!     Pre-arguments (for universal model)
32      real pq(ngridmx,nlayermx,nqmx)       ! tracer (kg/kg)
33
34!     Arguments
35      REAL dtime                     ! intervalle du temps (s)
36      REAL paprs(ngridmx,nlayermx+1) ! pression a inter-couche
37      REAL pplay(ngridmx,nlayermx)   ! pression au milieu de couche
38      REAL t(ngridmx,nlayermx)       ! temperature (K)
39      REAL q(ngridmx,nlayermx)       ! humidite specifique (kg/kg)
40      REAL d_t(ngridmx,nlayermx)     ! incrementation de la temperature (K)
41      REAL d_q(ngridmx,nlayermx)     ! incrementation de la vapeur d'eau
42      REAL d_ql(ngridmx,nlayermx)    ! incrementation de l'eau liquide
43      REAL rneb(ngridmx,nlayermx)    ! fraction nuageuse
44      REAL reffH2O(ngridmx,nlayermx) ! cloud particle mean radius (m)
45
46      REAL pdt(ngridmx,nlayermx) ! added by Benjamin!
47
48!     Options du programme
49      REAL ratqs   ! determine largeur de la distribution de vapeur
50      PARAMETER (ratqs=0.2)
51
52!     Variables locales
53      REAL CBRT
54      EXTERNAL CBRT
55      INTEGER i, k
56      REAL zt(ngridmx), zq(ngridmx)
57      REAL zcond(ngridmx)
58      REAL zdelq(ngridmx)
59      REAL zqs(ngridmx), zdqs(ngridmx)
60
61      REAL zcor(ngridmx), zdelta(ngridmx), zcvm5(ngridmx)
62      REAL zx_q(ngridmx)
63
64!     GCM -----> subroutine variables, initialisation of outputs
65      DO k = 1, nlayermx
66      DO i = 1, ngridmx
67         q(i,k)    = pq(i,k,igcm_h2o_vap)
68         d_t(i,k)  = 0.0
69         d_q(i,k)  = 0.0
70         d_ql(i,k) = 0.0
71         rneb(i,k) = 0.0
72      ENDDO
73      ENDDO
74
75!     Boucle verticale (du haut vers le bas)
76      DO 9999 k = nlayermx, 1, -1
77
78      DO i = 1, ngridmx
79         zt(i)=t(i,k)+pdt(i,k)*dtime
80         zq(i)=q(i,k) ! no need to add tendency as we're already dealing with qevap
81      ENDDO
82
83!     Calculer la vapeur d'eau saturante et
84!     determiner la condensation partielle
85      DO i = 1, ngridmx
86
87         call watersat(zt(i),pplay(i,k),zqs(i))
88         call watersat_grad(zt(i),zqs(i),zdqs(i))
89
90         !IF (zt(i).LT.t_coup) THEN
91         !   zqs(i) = qsats(zt(i))/pplay(i,k)
92         !   zdqs(i) = dqsats(zt(i),zqs(i))
93         !ELSE
94         !   zqs(i) = qsatl(zt(i))/pplay(i,k)
95         !   zdqs(i) = dqsatl(zt(i),zqs(i))
96         !ENDIF
97
98         zdelq(i) = ratqs * zq(i)
99         rneb(i,k) = (zq(i)+zdelq(i)-zqs(i)) / (2.0*zdelq(i))
100         zcond(i) = 0.0
101         zx_q(i) = (zq(i)+zdelq(i)+zqs(i))/2.0
102         if (rneb(i,k) .LE. 0.0) zx_q(i) = 0.0
103         if (rneb(i,k) .GE. 1.0) zx_q(i) = zq(i)
104         rneb(i,k) = MAX(0.0,MIN(1.0,rneb(i,k)))
105         !zcond(i) = MAX(0.0,(zx_q(i)-zqs(i)*rneb(i,k)/(1.+zdqs(i))))
106         zcond(i) = MAX(0.0,(zx_q(i)-zqs(i))*rneb(i,k)/(1.+zdqs(i)))
107!     zcond always postive! cannot evaporate clouds!
108!     this is why we must reevaporate before largescale
109
110
111         zcond(i) = zcond(i)/dtime ! added by RDW
112
113!     for varying particle size in rad tran and (possibly) sedimentation
114         if(aeroh2o.and.(.not.aerofixh2o)) then
115
116            reffH2O(i,k) = CBRT( 3*zcond(i)/( 4*Nmix_h2o*pi*rho_ice))
117            reffH2O(i,k) = max(reffH2O(i,k),1.e-8)
118         endif
119
120      ENDDO
121
122!     Tendances de t et q
123      DO i = 1, ngridmx
124         d_q(i,k)  = - zcond(i)
125         d_ql(i,k) = zcond(i)
126         !d_t(i,k) = zcond(i)*RLVTT/cpp
127         d_t(i,k)  = zcond(i)*RLVTT/RCPD!/(1.0+RVTMP2*q(i,k))
128         ! this one is FAR TOO BIG
129      ENDDO
130
131 9999 CONTINUE
132
133      !print*,'qsat=',zqs
134      !print*,'q=',q
135      !print*,'dq=',d_q*dtime
136      !print*,'dT in LS=',d_t*dtime
137
138      !print*,'rice=',rice
139      !print*,'rneb=',rneb
140
141      return
142      end
Note: See TracBrowser for help on using the repository browser.