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

Last change on this file since 1009 was 740, checked in by tnavarro, 12 years ago

module for ice and radius radius computation

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