source: trunk/LMDZ.MARS/libf/phymars/simpleclouds.F @ 420

Last change on this file since 420 was 420, checked in by tnavarro, 13 years ago

24/11/11 == TN

corrected minor bug in updatereffrad.F : reffdust was not saved

ccn_factor as not correctly used in sedimentation.

It is now initialized in inifis.F, declared in tracer.h and
used in both simpleclouds.F & callsedim.F to update ice radius.

Commented diagfi outputs in aeropacity.F & improvedclouds.F for non scavenging users.

File size: 9.0 KB
Line 
1      subroutine simpleclouds(ngrid,nlay,ptimestep,
2     &             pplev,pplay,pzlev,pzlay,pt,pdt,
3     &             pq,pdq,pdqcloud,pdqscloud,pdtcloud,
4     &             nq,tau,rice,nuice,rsedcloud)
5      implicit none
6c------------------------------------------------------------------
7c  This routine is used to form clouds when a parcel of the GCM is
8c    saturated. It is a simplified scheme, and there is almost no
9c    microphysics involved. When the air is saturated, water-ice
10c    clouds form on a fraction of the dust particles, specified by
11c    the constant called "ccn_factor". There is no supersaturation,
12c    and no nucleation rates computed. A more accurate scheme can
13c    be found in the routine called "improvedclouds.F".
14
15c  Modif de zq si saturation dans l'atmosphere
16c  si zq(ig,l)> zqsat(ig,l) ->    zq(ig,l)=zqsat(ig,l)
17c  Le test est effectue de bas en haut. L'eau condensee
18c    (si saturation) est remise dans la couche en dessous.
19c  L'eau condensee dans la couche du bas est deposee a la surface
20
21c  Authors: Franck Montmessin (water ice scheme)
22c           Francois Forget (changed nuclei density & outputs)
23c           Ehouarn Millour (sept.2008, tracers are now handled
24c                                   by name and not fixed index)
25c           J.-B. Madeleine (developed a single routine called
26c                            simpleclouds.F, and corrected calculations
27c                            of the typical CCN profile, Oct. 2011)
28c------------------------------------------------------------------
29#include "dimensions.h"
30#include "dimphys.h"
31#include "comcstfi.h"
32#include "callkeys.h"
33#include "tracer.h"
34#include "comgeomfi.h"
35#include "dimradmars.h"
36c------------------------------------------------------------------
37c     Arguments:
38c     ---------
39c     Inputs:
40      INTEGER ngrid,nlay
41      integer nq                 ! nombre de traceurs
42      REAL ptimestep             ! pas de temps physique (s)
43      REAL pplev(ngrid,nlay+1)   ! pression aux inter-couches (Pa)
44      REAL pplay(ngrid,nlay)     ! pression au milieu des couches (Pa)
45      REAL pzlev(ngrid,nlay+1)   ! altitude at layer boundaries
46      REAL pzlay(ngrid,nlay)     ! altitude at the middle of the layers
47      REAL pt(ngrid,nlay)        ! temperature at the middle of the
48                                 !   layers (K)
49      REAL pdt(ngrid,nlay)       ! tendance temperature des autres
50                                 !   param.
51      real pq(ngrid,nlay,nq)     ! traceur (kg/kg)
52      real pdq(ngrid,nlay,nq)    ! tendance avant condensation
53                                 !   (kg/kg.s-1)
54      REAL tau(ngridmx,naerkind) ! Column dust optical depth at each point
55
56c     Output:
57      REAL rice(ngrid,nlay)      ! Ice mass mean radius (m)
58                                 ! (r_c in montmessin_2004)
59      REAL nuice(ngrid,nlay)     ! Estimated effective variance
60                                 !   of the size distribution
61      real rsedcloud(ngridmx,nlayermx) ! Cloud sedimentation radius
62      real pdqcloud(ngrid,nlay,nq) ! tendance de la condensation
63                                   !   H2O(kg/kg.s-1)
64      real pdqscloud(ngrid,nq)     ! flux en surface (kg.m-2.s-1)
65      REAL pdtcloud(ngrid,nlay)    ! tendance temperature due
66                                   !   a la chaleur latente
67
68c------------------------------------------------------------------
69c     Local variables:
70
71      LOGICAL firstcall
72      DATA firstcall/.true./
73      SAVE firstcall
74
75      REAL CBRT
76      EXTERNAL CBRT
77
78      INTEGER ig,l
79
80      REAL zq(ngridmx,nlayermx,nqmx)  ! local value of tracers
81      REAL zq0(ngridmx,nlayermx,nqmx) ! local initial value of tracers
82      REAL zt(ngridmx,nlayermx)       ! local value of temperature
83      REAL zqsat(ngridmx,nlayermx)    ! saturation
84      REAL*8 dzq                      ! masse de glace echangee (kg/kg)
85      REAL lw                         !Latent heat of sublimation (J.kg-1)
86      REAL,PARAMETER :: To=273.15     ! reference temperature, T=273.15 K
87      real rdusttyp(ngridmx,nlayermx) ! Typical dust geom. mean radius (m)
88      REAL ccntyp(ngridmx,nlayermx)
89                                      ! Typical dust number density (#/kg)
90c     CCN reduction factor
91c      REAL, PARAMETER :: ccn_factor = 4.5  !! comme TESTS_JB // 1. avant
92     
93      REAL Mcon_out(ngridmx,nlayermx) ! mass to be condensed (not dMice !!)
94
95c-----------------------------------------------------------------------
96c    1. initialisation
97c    -----------------
98
99c    On "update" la valeur de q(nqmx) (water vapor) et temperature.
100c    On effectue qqes calculs preliminaires sur les couches :
101
102      do l=1,nlay
103        do ig=1,ngrid
104          zq(ig,l,igcm_h2o_vap)=
105     &      pq(ig,l,igcm_h2o_vap)+pdq(ig,l,igcm_h2o_vap)*ptimestep
106          zq(ig,l,igcm_h2o_vap)=max(zq(ig,l,igcm_h2o_vap),1.E-30) ! FF 12/2004
107          zq0(ig,l,igcm_h2o_vap)=zq(ig,l,igcm_h2o_vap)
108          zt(ig,l)=pt(ig,l)+ pdt(ig,l)*ptimestep
109
110          zq(ig,l,igcm_h2o_ice)=
111     &      pq(ig,l,igcm_h2o_ice)+pdq(ig,l,igcm_h2o_ice)*ptimestep
112          zq(ig,l,igcm_h2o_ice)=max(zq(ig,l,igcm_h2o_ice),0.) ! FF 12/2004
113          zq0(ig,l,igcm_h2o_ice)=zq(ig,l,igcm_h2o_ice)
114        enddo
115      enddo
116
117      do l=1,nlay
118        do ig=1,ngrid
119
120c         Typical dust radius profile:
121          rdusttyp(ig,l)= max(.8e-6*exp(-pzlay(ig,l)/18000.),1.e-9)
122
123c         Typical CCN profile:
124c         Corrected equation, following Montmessin et al. 2004
125c           (N0=2e6 m-3 has been converted into N0=1.3e8 kg-1, otherwise
126c            the equation for rice is not homogeneous...)
127          ccntyp(ig,l)=
128     &       1.3e+8*max(tau(ig,1),0.001)/0.1*exp(-pzlay(ig,l)/10000.)
129c         The previously used profile was not correct:
130c         ccntyp(ig,l)=( epaisseur(ig,l)/masse(ig,l) ) *
131c    &       2.e+6/0.1*max(tau(ig,1),0.001)*exp(-pzlay(ig,l)/10000.)
132
133c         Reduce number of nuclei
134!         TEMPORAIRE : decrease the number of CCNs FF 04/200
135!         reduction facteur 3
136!         ccntyp(ig,l) = ccntyp(ig,l) / 27.
137!         reduction facteur 2
138!         ccntyp(ig,l) = ccntyp(ig,l) / 8.
139c -----------------------------------------------------------------
140          ccntyp(ig,l) = ccntyp(ig,l) / ccn_factor
141
142        enddo ! of do ig=1,ngrid
143      enddo ! of dol=1,nlay
144
145      pdqscloud(1:ngrid,1:nq)=0
146      pdqcloud(1:ngrid,1:nlay,1:nq)=0
147      pdtcloud(1:ngrid,1:nlay)=0
148
149c     ----------------------------------------------
150c
151c
152c     Rapport de melange a saturation dans la couche l : -------
153c     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
154
155      call watersat(ngridmx*nlayermx,zt,pplay,zqsat)
156
157c     taux de condensation (kg/kg/s-1) dans les differentes couches
158c     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
159
160      do l=1,nlay
161        do ig=1,ngrid
162
163          if (zq(ig,l,igcm_h2o_vap).ge.zqsat(ig,l))then  !  Condensation
164            dzq=zq(ig,l,igcm_h2o_vap)-zqsat(ig,l)               
165          elseif(zq(ig,l,igcm_h2o_vap).lt.zqsat(ig,l))then  ! Sublimation
166            dzq=-min(zqsat(ig,l)-zq(ig,l,igcm_h2o_vap),
167     &               zq(ig,l,igcm_h2o_ice))
168          endif
169
170c         Water Mass change
171c         ~~~~~~~~~~~~~~~~~
172          zq(ig,l,igcm_h2o_ice)=zq(ig,l,igcm_h2o_ice)+dzq
173          zq(ig,l,igcm_h2o_vap)=zq(ig,l,igcm_h2o_vap)-dzq
174         
175          Mcon_out(ig,l) = dzq
176
177c         Calcul du rayon moyen des particules de glace.
178c         Hypothese : Dans une couche, la glace presente se
179c         repartit uniformement autour du nbre de poussieres
180c         dont le rayon moyen est prescrit par rdusttyp.
181c         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
182          rice(ig,l)=max( CBRT ( (zq(ig,l,igcm_h2o_ice)/rho_ice
183     &      +ccntyp(ig,l)*(4./3.)*pi*rdusttyp(ig,l)**3.)
184     &      /(ccntyp(ig,l)*4./3.*pi) ), rdusttyp(ig,l))
185c         Effective variance of the size distribution
186          nuice(ig,l)=nuice_ref
187
188c         Sedimentation radius:
189c         ~~~~~~~~~~~~~~~~~~~~
190
191          rsedcloud(ig,l)=max( rice(ig,l)*(1.+nuice_sed)**3.,
192     &                         rdusttyp(ig,l) )
193          rsedcloud(ig,l)=min(rsedcloud(ig,l),1.e-4)
194
195        enddo ! of do ig=1,ngrid
196      enddo ! of do l=1,nlay
197
198c     Tendance finale
199c     ~~~~~~~~~~~~~~~
200      do l=1, nlay
201        do ig=1,ngridmx
202          pdqcloud(ig,l,igcm_h2o_vap)=(zq(ig,l,igcm_h2o_vap)
203     &                            -zq0(ig,l,igcm_h2o_vap))/ptimestep
204          pdqcloud(ig,l,igcm_h2o_ice) =
205     &      (zq(ig,l,igcm_h2o_ice) - zq0(ig,l,igcm_h2o_ice))/ptimestep
206          lw=(2834.3-0.28*(zt(ig,l)-To)-0.004*(zt(ig,l)-To)**2)*1.e+3
207          pdtcloud(ig,l)=-pdqcloud(ig,l,igcm_h2o_vap)*lw/cpp
208        end do
209      end do
210
211c------------------------------------------------------------------
212c     TEST_JBM
213      IF (ngrid.eq.1) THEN
214         call WRITEDIAGFI(ngrid,"mcond","h2o condensed mass","kg",1,
215     &                    Mcon_out)
216         call WRITEDIAGFI(ngrid,"rdusttyp","rdusttyp","m",1,
217     &                    rdusttyp)
218         call WRITEDIAGFI(ngrid,"ccntyp","ccntyp","kg-1",1,
219     &                    ccntyp)
220      ENDIF
221c------------------------------------------------------------------
222      return
223      end
Note: See TracBrowser for help on using the repository browser.