source: trunk/LMDZ.MARS/libf/phymars/watercloud.F @ 629

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

New scheme for the clouds, no more sub-timestep. Clouds sedimentation is done with the dust one in callsedim.F like it was before. Added latent heat for sublimating ground ice. Bugs corrected. THIS VERSION OF THE WATER CYCLE SHOULD NOT BE USED WITH THERMALS DUE TO NEGATIVE TRACERS ISSUES.

File size: 4.3 KB
Line 
1       SUBROUTINE watercloud(ngrid,nlay, ptimestep,
2     &                pplev,pplay,pdpsrf,pzlev,pzlay,pt,pdt,
3     &                pq,pdq,pdqcloud,pdtcloud,
4     &                nq,tau,tauscaling,rdust,rice,nuice,
5     &                rsedcloud,rhocloud)
6      IMPLICIT NONE
7
8c=======================================================================
9c  Water-ice cloud formation
10
11c  Includes two different schemes:
12c    - A simplified scheme (see simpleclouds.F)
13c    - An improved microphysical scheme (see improvedclouds.F)
14c
15c  Authors: Franck Montmessin, Francois Forget, Ehouarn Millour,
16c           J.-B. Madeleine, Thomas Navarro
17c
18c  2004 - Oct. 2011
19c=======================================================================
20
21c-----------------------------------------------------------------------
22c   declarations:
23c   -------------
24
25#include "dimensions.h"
26#include "dimphys.h"
27#include "comcstfi.h"
28#include "callkeys.h"
29#include "tracer.h"
30#include "comgeomfi.h"
31#include "dimradmars.h"
32
33c   Inputs:
34c   ------
35
36      INTEGER ngrid,nlay
37      integer nq                 ! nombre de traceurs
38      REAL ptimestep             ! pas de temps physique (s)
39      REAL pplev(ngrid,nlay+1)   ! pression aux inter-couches (Pa)
40      REAL pplay(ngrid,nlay)     ! pression au milieu des couches (Pa)
41      REAL pdpsrf(ngrid)         ! tendance surf pressure
42      REAL pzlev(ngrid,nlay+1)   ! altitude at layer boundaries
43      REAL pzlay(ngrid,nlay)     ! altitude at the middle of the layers
44      REAL pt(ngrid,nlay)        ! temperature at the middle of the layers (K)
45      REAL pdt(ngrid,nlay)       ! tendance temperature des autres param.
46
47      real pq(ngrid,nlay,nq)     ! traceur (kg/kg)
48      real pdq(ngrid,nlay,nq)    ! tendance avant condensation  (kg/kg.s-1)
49
50      REAL tau(ngridmx,naerkind)   ! Column dust optical depth at each point
51      REAL tauscaling(ngridmx)     ! Convertion factor for dust amount
52      real rdust(ngridmx,nlayermx) ! Dust geometric mean radius (m)
53
54c   Outputs:
55c   -------
56
57      real pdqcloud(ngrid,nlay,nq) ! tendance de la condensation H2O(kg/kg.s-1)
58      REAL pdtcloud(ngrid,nlay)    ! tendance temperature due
59                                   !   a la chaleur latente
60
61      REAL rice(ngrid,nlay)    ! Ice mass mean radius (m)
62                               ! (r_c in montmessin_2004)
63      REAL nuice(ngrid,nlay)   ! Estimated effective variance
64                               !   of the size distribution
65      real rsedcloud(ngridmx,nlayermx) ! Cloud sedimentation radius
66      real rhocloud(ngridmx,nlayermx)  ! Cloud density (kg.m-3)
67
68c   local:
69c   ------
70
71      INTEGER ig,l
72      LOGICAL,SAVE :: firstcall=.true.
73
74c    ** un petit test de coherence
75c       --------------------------
76
77      IF (firstcall) THEN
78        IF(ngrid.NE.ngridmx) THEN
79            PRINT*,'STOP dans watercloud'
80            PRINT*,'probleme de dimensions :'
81            PRINT*,'ngrid  =',ngrid
82            PRINT*,'ngridmx  =',ngridmx
83            STOP
84        ENDIF
85         
86        if (nq.gt.nqmx) then
87           write(*,*) 'stop in watercloud (nq.gt.nqmx)!'
88           write(*,*) 'nq=',nq,' nqmx=',nqmx
89           stop
90        endif
91         
92        write(*,*) "watercloud: igcm_h2o_vap=",igcm_h2o_vap
93        write(*,*) "            igcm_h2o_ice=",igcm_h2o_ice
94
95        firstcall=.false.
96      ENDIF ! of IF (firstcall)
97     
98
99c     Main call to the different cloud schemes:
100      IF (microphys) THEN
101        CALL improvedclouds(ngrid,nlay,ptimestep,
102     &             pplev,pplay,pt,pdt,
103     &             pq,pdq,pdqcloud,pdtcloud,
104     &             nq,tauscaling,rdust,rice,nuice,
105     &             rsedcloud,rhocloud)
106      ELSE
107        CALL simpleclouds(ngrid,nlay,ptimestep,
108     &             pplev,pplay,pzlev,pzlay,pt,pdt,
109     &             pq,pdq,pdqcloud,pdtcloud,
110     &             nq,tau,rice,nuice,rsedcloud)
111      ENDIF
112     
113
114c     A correction if a lot of subliming CO2 fills the 1st layer FF04/2005
115c     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
116c     Then that should not affect the ice particle radius
117      do ig=1,ngridmx
118        if(pdpsrf(ig)*ptimestep.gt.0.9*(pplev(ig,1)-pplev(ig,2)))then
119          if(pdpsrf(ig)*ptimestep.gt.0.9*(pplev(ig,1)-pplev(ig,3)))
120     &    rice(ig,2)=rice(ig,3)
121          rice(ig,1)=rice(ig,2)
122        end if
123      end do
124
125      RETURN
126      END
127 
Note: See TracBrowser for help on using the repository browser.