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

Last change on this file since 1920 was 1779, checked in by aslmd, 7 years ago

LMDZ.MARS (purely comments) marked the absolute firstcalls not supposed to change with runtime (e.g. not domain-related). this is most of them. those firstcall can stay local and do not need to be linked with the caller's general firstcall.

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