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

Last change on this file since 2266 was 1996, checked in by emillour, 6 years ago

Mars physics:

  • Turn watersat into a module.

CO2 cloud updates:

  • compute co2 condensation tendencies in the co2 cloud scheme and pass them on to vdifc (for tests; they might not be needed) and adapt newcondens.

DB+EM

File size: 6.4 KB
Line 
1      subroutine simpleclouds(ngrid,nlay,ptimestep,
2     &             pplay,pzlay,pt,pdt,
3     &             pq,pdq,pdqcloud,pdtcloud,
4     &             nq,tau,rice)
5      USE updaterad
6      USE watersat_mod, ONLY: watersat
7      use tracer_mod, only: igcm_h2o_vap, igcm_h2o_ice
8      USE comcstfi_h
9      use dimradmars_mod, only: naerkind
10      implicit none
11c------------------------------------------------------------------
12c  This routine is used to form clouds when a parcel of the GCM is
13c    saturated. It is a simplified scheme, and there is almost no
14c    microphysics involved. When the air is saturated, water-ice
15c    clouds form on a fraction of the dust particles, specified by
16c    the constant called "ccn_factor". There is no supersaturation,
17c    and no nucleation rates computed. A more accurate scheme can
18c    be found in the routine called "improvedclouds.F".
19
20c  Modif de zq si saturation dans l'atmosphere
21c  si zq(ig,l)> zqsat(ig,l) ->    zq(ig,l)=zqsat(ig,l)
22c  Le test est effectue de bas en haut. L'eau condensee
23c    (si saturation) est remise dans la couche en dessous.
24c  L'eau condensee dans la couche du bas est deposee a la surface
25
26c  Authors: Franck Montmessin (water ice scheme)
27c           Francois Forget (changed nuclei density & outputs)
28c           Ehouarn Millour (sept.2008, tracers are now handled
29c                                   by name and not fixed index)
30c           J.-B. Madeleine (developed a single routine called
31c                            simpleclouds.F, and corrected calculations
32c                            of the typical CCN profile, Oct. 2011)
33c------------------------------------------------------------------
34#include "callkeys.h"
35
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 pplay(ngrid,nlay)     ! pression au milieu des couches (Pa)
44      REAL pzlay(ngrid,nlay)     ! altitude at the middle of the layers
45      REAL pt(ngrid,nlay)        ! temperature at the middle of the
46                                 !   layers (K)
47      REAL pdt(ngrid,nlay)       ! tendance temperature des autres
48                                 !   param.
49      real pq(ngrid,nlay,nq)     ! traceur (kg/kg)
50      real pdq(ngrid,nlay,nq)    ! tendance avant condensation
51                                 !   (kg/kg.s-1)
52      REAL tau(ngrid,naerkind)   ! Column dust optical depth at each point
53
54c     Output:
55      REAL rice(ngrid,nlay)      ! Ice mass mean radius (m)
56                                 ! (r_c in montmessin_2004)
57      real pdqcloud(ngrid,nlay,nq) ! tendance de la condensation
58                                   !   H2O(kg/kg.s-1)
59      REAL pdtcloud(ngrid,nlay)    ! tendance temperature due
60                                   !   a la chaleur latente
61
62c------------------------------------------------------------------
63c     Local variables:
64
65      REAL rhocloud(ngrid,nlay)  ! Cloud density (kg.m-3)
66
67      INTEGER ig,l
68
69      REAL zq(ngrid,nlay,nq)    ! local value of tracers
70      REAL zq0(ngrid,nlay,nq)   ! local initial value of tracers
71      REAL zt(ngrid,nlay)       ! local value of temperature
72      REAL zqsat(ngrid,nlay)    ! saturation
73      REAL*8 dzq                      ! masse de glace echangee (kg/kg)
74      REAL lw                         !Latent heat of sublimation (J.kg-1)
75      REAL,PARAMETER :: To=273.15     ! reference temperature, T=273.15 K
76      real rdusttyp(ngrid,nlay) ! Typical dust geom. mean radius (m)
77      REAL ccntyp(ngrid,nlay)
78                                      ! Typical dust number density (#/kg)
79c     CCN reduction factor
80c      REAL, PARAMETER :: ccn_factor = 4.5  !! comme TESTS_JB // 1. avant
81     
82
83c-----------------------------------------------------------------------
84c    1. initialisation
85c    -----------------
86
87c    On "update" la valeur de q(nq) (water vapor) et temperature.
88c    On effectue qqes calculs preliminaires sur les couches :
89
90      do l=1,nlay
91        do ig=1,ngrid
92          zq(ig,l,igcm_h2o_vap)=
93     &      pq(ig,l,igcm_h2o_vap)+pdq(ig,l,igcm_h2o_vap)*ptimestep
94          zq(ig,l,igcm_h2o_vap)=max(zq(ig,l,igcm_h2o_vap),1.E-30) ! FF 12/2004
95          zq0(ig,l,igcm_h2o_vap)=zq(ig,l,igcm_h2o_vap)
96          zt(ig,l)=pt(ig,l)+ pdt(ig,l)*ptimestep
97
98          zq(ig,l,igcm_h2o_ice)=
99     &      pq(ig,l,igcm_h2o_ice)+pdq(ig,l,igcm_h2o_ice)*ptimestep
100          zq(ig,l,igcm_h2o_ice)=max(zq(ig,l,igcm_h2o_ice),0.) ! FF 12/2004
101          zq0(ig,l,igcm_h2o_ice)=zq(ig,l,igcm_h2o_ice)
102        enddo
103      enddo
104
105
106      pdqcloud(1:ngrid,1:nlay,1:nq)=0
107      pdtcloud(1:ngrid,1:nlay)=0
108
109c     ----------------------------------------------
110c
111c
112c     Rapport de melange a saturation dans la couche l : -------
113c     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
114
115      call watersat(ngrid*nlay,zt,pplay,zqsat)
116
117c     taux de condensation (kg/kg/s-1) dans les differentes couches
118c     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
119
120      do l=1,nlay
121        do ig=1,ngrid
122
123          if (zq(ig,l,igcm_h2o_vap).ge.zqsat(ig,l))then  !  Condensation
124            dzq=zq(ig,l,igcm_h2o_vap)-zqsat(ig,l)               
125          elseif(zq(ig,l,igcm_h2o_vap).lt.zqsat(ig,l))then  ! Sublimation
126            dzq=-min(zqsat(ig,l)-zq(ig,l,igcm_h2o_vap),
127     &               zq(ig,l,igcm_h2o_ice))
128          endif
129
130c         Water Mass change
131c         ~~~~~~~~~~~~~~~~~
132          zq(ig,l,igcm_h2o_ice)=zq(ig,l,igcm_h2o_ice)+dzq
133          zq(ig,l,igcm_h2o_vap)=zq(ig,l,igcm_h2o_vap)-dzq
134         
135
136        enddo ! of do ig=1,ngrid
137      enddo ! of do l=1,nlay
138
139c     Tendance finale
140c     ~~~~~~~~~~~~~~~
141      do l=1, nlay
142        do ig=1,ngrid
143          pdqcloud(ig,l,igcm_h2o_vap)=(zq(ig,l,igcm_h2o_vap)
144     &                            -zq0(ig,l,igcm_h2o_vap))/ptimestep
145          pdqcloud(ig,l,igcm_h2o_ice) =
146     &      (zq(ig,l,igcm_h2o_ice) - zq0(ig,l,igcm_h2o_ice))/ptimestep
147          lw=(2834.3-0.28*(zt(ig,l)-To)-0.004*(zt(ig,l)-To)**2)*1.e+3
148          pdtcloud(ig,l)=-pdqcloud(ig,l,igcm_h2o_vap)*lw/cpp
149        end do
150      end do
151
152c     ice crystal radius
153      do l=1, nlay
154        do ig=1,ngrid
155          call updaterice_typ(zq(ig,l,igcm_h2o_ice),
156     &       tau(ig,1),pzlay(ig,l),rice(ig,l))
157        end do
158      end do
159
160c------------------------------------------------------------------
161      return
162      end
Note: See TracBrowser for help on using the repository browser.