source: trunk/LMDZ.PLUTO/libf/phypluto/callsedim_pluto.F90 @ 3504

Last change on this file since 3504 was 3353, checked in by afalco, 6 months ago

Pluto PCM:
Added zrecast & old sedim ;
Choose haze file ;
AF

File size: 5.3 KB
Line 
1      SUBROUTINE callsedim_pluto(ngrid,nlay, ptimestep, &
2                     pplev,zlev,pt,pdt,rice_ch4,rice_co, &
3                     pq, pdqfi, pdqsed,pdqs_sed,nq,pphi)
4
5      use radinc_h, only : naerkind
6      use tracer_h, only: igcm_ch4_ice,igcm_co_ice,radius,rho_q
7      use comcstfi_mod, only:  g
8      IMPLICIT NONE
9!==================================================================
10!
11!     Purpose
12!     -------
13!     Calculates sedimentation of aerosols depending on their
14!     density and radius.
15!
16!     Authors
17!     -------
18!     F. Forget (1999)
19!     Tracer generalisation by E. Millour (2009)
20!
21!==================================================================
22
23!-----------------------------------------------------------------------
24!   declarations:
25!   -------------
26
27!
28!   arguments:
29!   ----------
30
31      INTEGER ngrid              ! number of horizontal grid points
32      INTEGER nlay               ! number of atmospheric layers
33      REAL ptimestep             ! physics time step (s)
34      REAL pplev(ngrid,nlay+1)   ! pressure at inter-layers (Pa)
35      REAL pt(ngrid,nlay)        ! temperature at mid-layer (K)
36      REAL pdt(ngrid,nlay)       ! tendency on temperature
37      REAL zlev(ngrid,nlay+1)    ! altitude at layer boundaries
38      REAL pphi(ngrid,nlay)      ! geopotential
39
40
41!    Traceurs :
42      integer nq             ! number of tracers
43      real pq(ngrid,nlay,nq)  ! tracers (kg/kg)
44      real pdqfi(ngrid,nlay,nq)  ! tendency before sedimentation (kg/kg.s-1)
45      real pdqsed(ngrid,nlay,nq) ! tendency due to sedimentation (kg/kg.s-1)
46      real pdqs_sed(ngrid,nq)    ! flux at surface (kg.m-2.s-1)
47
48!   local:
49!   ------
50
51      INTEGER l,ig, iq
52
53      real zqi(ngrid,nlay) ! to locally store tracers
54      real zt(ngrid,nlay) ! to locally store temperature (K)
55      real masse (ngrid,nlay) ! Layer mass (kg.m-2)
56      real epaisseur (ngrid,nlay) ! Layer thickness (m)
57      real wq(ngrid,nlay+1) ! displaced tracer mass (kg.m-2)
58      real rfall_ch4(ngrid,nlay)
59      real rfall_co(ngrid,nlay)
60      real rice_ch4(ngrid,nlay)
61      real rice_co(ngrid,nlay)
62
63      LOGICAL firstcall
64      SAVE firstcall
65      DATA firstcall/.true./
66
67!    ** un petit test de coherence
68!       --------------------------
69
70      IF (firstcall) THEN
71         IF(ngrid.NE.ngrid) THEN
72            PRINT*,'STOP dans callsedim'
73            PRINT*,'probleme de dimensions :'
74            PRINT*,'ngrid  =',ngrid
75            PRINT*,'ngrid  =',ngrid
76            STOP
77         ENDIF
78
79        firstcall=.false.
80      ENDIF ! of IF (firstcall)
81
82!=======================================================================
83!     Preliminary calculation of the layer characteristics
84!     (mass (kg.m-2), thickness (m), etc.
85
86      do  l=1,nlay
87        do ig=1, ngrid
88          masse(ig,l)=(pplev(ig,l) - pplev(ig,l+1)) /g
89          epaisseur(ig,l)= zlev(ig,l+1) - zlev(ig,l)
90          zt(ig,l)=pt(ig,l)+pdt(ig,l)*ptimestep
91        end do
92      end do
93
94      do iq=1,nq
95        if(radius(iq).gt.1.e-12) then   ! no sedimentation for gases (defined by radius=0)
96!     Radius values are defined in initracer
97!     The value of q is updated after the other parameterisations
98
99          do l=1,nlay
100            do ig=1,ngrid
101              ! store locally updated tracers
102              zqi(ig,l)=pq(ig,l,iq)+pdqfi(ig,l,iq)*ptimestep
103
104!                cf sur Mars:
105!                On affecte un rayon moyen aux poussieres a chaque altitude du type :
106!                r(z)=r0*exp(-z/H) avec r0=0.8 micron et H=18 km.
107!                rfall(ig,l)=max( rice(ig,l)*1.5,rdust(ig,l) )
108!                Pluton : choix de rfall a la place de radius
109              if (iq.eq.igcm_ch4_ice) then
110                 ! TB: rfall_ch4(ig,l)=max( rice_ch4(ig,l)*1.5,2.e-7)
111                 rfall_ch4(ig,l)=max( rice_ch4(ig,l),2.e-7)
112                 rfall_ch4(ig,l)=min(rfall_ch4(ig,l),1.e-4)
113              endif
114              if (iq.eq.igcm_co_ice) then
115                 rfall_co(ig,l)=max( rice_co(ig,l),2.e-7)
116                 rfall_co(ig,l)=min(rfall_co(ig,l),1.e-4)
117              endif
118            enddo
119          enddo ! of do l=1,nlay
120
121!=======================================================================
122!     Calculate the transport due to sedimentation for each tracer
123
124          if (iq.eq.igcm_ch4_ice) then
125          !if (iceparty.and.(iq.eq.igcm_ch4_ice)) then
126            call newsedim_pluto(ngrid,nlay,ngrid*nlay,ptimestep, &
127           pplev,masse,epaisseur,zt,rfall_ch4,rho_q(iq),zqi,wq,pphi)
128          else if (iq.eq.igcm_co_ice) then
129            call newsedim_pluto(ngrid,nlay,ngrid*nlay,ptimestep, &
130           pplev,masse,epaisseur,zt,rfall_co,rho_q(iq),zqi,wq,pphi)
131          else if ((radius(iq).gt.0.)) then   ! haze tracers
132            call newsedim_pluto(ngrid,nlay,1,ptimestep, &
133           pplev,masse,epaisseur,zt,radius(iq),rho_q(iq),zqi,wq,pphi)
134          endif
135
136!=======================================================================
137!     Calculate the tendencies
138
139          do ig=1,ngrid
140!     Ehouarn: with new way of tracking tracers by name, this is simply
141            pdqs_sed(ig,iq)=wq(ig,1)/ptimestep
142          end do
143
144          DO l = 1, nlay
145            DO ig=1,ngrid
146              pdqsed(ig,l,iq)=(zqi(ig,l)- &
147             (pq(ig,l,iq) + pdqfi(ig,l,iq)*ptimestep))/ptimestep
148            ENDDO
149          ENDDO
150
151        endif ! of if(radius(iq).gt.1.e-12)
152      enddo ! of do iq=1,nq
153
154      RETURN
155      END
156
Note: See TracBrowser for help on using the repository browser.