source: trunk/LMDZ.TITAN/libf/phytitan/n_ethane.F @ 881

Last change on this file since 881 was 175, checked in by slebonnois, 14 years ago

S.LEBONNOIS:

  • Revision majeure de la physique Titan => ajout des nuages version 10 bins (Jeremie Burgalat) Cette version reste a tester mais avec clouds=0, on reste sur l'ancienne.
  • Quelques ajouts dans la doc.
File size: 17.3 KB
Line 
1      subroutine n_ethane(ngrid,nq,nbin,
2     *                     dt,pl,tl,aerad,
3     *                     q,qprime)
4
5      implicit none
6#include "dimensions.h"
7#include "microtab.h"
8#include "varmuphy.h"
9
10c  Arguments
11c  ---------
12
13      integer ngrid,nq,nbin
14
15      REAL dt              ! physical time step (s)
16      REAL pl(ngrid,nz)    ! pressure at each level (mbar)
17      REAL tl(ngrid,nz)    ! temperature at each level (K)
18      REAL aerad(nbin)     ! Radius array
19
20c    Tracers :
21      REAL q(ngrid,nz,nq)         ! tracer (kg/kg)
22      REAL qprime(ngrid,nz,nbin)  ! tracer (kg/kg)
23
24
25c     Local variables
26c     ---------------
27
28      integer ntyp
29      parameter (ntyp=3)
30
31      real n_aer(nz,nbin,ntyp)
32      real c2h6vap(nz)
33
34      integer itrac
35      integer ig,i,j,k,l,n   ! Loop integers
36      integer ilay,iq
37
38c  Treatment
39c  ---------
40
41      DO ig = 1 , NGRID
42
43c     Set up the aerosol array
44        do j = 1, ntyp
45          do k = 1, nbin
46            itrac = (j-1) * nbin + k
47            do l = 1, nz
48              n_aer(l,k,j) = max(q(ig,l,itrac),0.)
49            enddo
50          enddo
51        enddo
52
53c     Set up the methane vapor array
54        do l = 1, nz
55          c2h6vap(l) = q(ig,l,nq)
56        enddo
57
58        call nucleacond2(ngrid,nbin,dt,ig,pl,tl,aerad,
59     &                             n_aer,qprime,c2h6vap)
60
61c       Update q arrays
62        do j = 1, ntyp
63          do k = 1, nbin
64            itrac = (j-1) * nbin + k
65            do l = 1, nz
66              q(ig,l,itrac) = n_aer(l,k,j)
67            enddo
68          enddo
69        enddo
70
71c     Update methane vapor array
72      do l = 1, nz
73      q(ig,l,nq) = c2h6vap(l)
74
75c     if(q(ig,l,nq).le.0.) print*,'in nuc2h6',ig,l, q(ig,l,nq)
76
77      enddo
78
79      ENDDO
80
81      return
82      END
83
84****************************************************************
85      subroutine nucleacond2(ngrid,nbin,dt,ig,
86     *                      pl,tl,aerad,n_aer,qprime,c2h6vap)
87*                                                              *
88*     This routine updates species concentrations due          *
89*     to both nucleation and condensation-induced variations.  *
90*     Gain and loss rates associated to each one of these      *
91*     processes are computed separately in other routines.     *
92*                                                              *
93****************************************************************
94
95      implicit none
96#include "dimensions.h"
97#include "microtab.h"
98#include "varmuphy.h"
99
100
101      integer ng,nalt
102      parameter(ng=1,nalt=llm)
103
104      real lv
105
106* dejà évalué dans n_methane !
107      REAL x1(nalt)
108      REAL x2(nalt)
109      REAL x3(nalt)
110      REAL icefrac(nalt)
111      REAL pmixch4(nalt)
112      REAL pmixc2h6(nalt)
113      REAL pmixn2(nalt)
114
115      common/lheat/lv
116      common/mixing/x1,x2,x3,icefrac,
117     &         pmixch4,pmixc2h6,pmixn2
118
119
120
121c  Arguments
122c  ---------
123
124      integer ngrid,nbin
125      integer ig
126      integer ntyp
127      parameter (ntyp=3)
128
129      real dt                    ! Global time step
130      real pl(ngrid,nz),tl(ngrid,nz)
131      real aerad(nbin)
132      real c2h6vap(nz)            ! Methane vapor mass mixing ratio (kg/m3)
133      real c2h6vap_old
134      real n_aer(nz,nbin,ntyp)  ! number concentrations of particle/each size bin
135      real qprime(ngrid,nz,nbin)  ! tracer (kg/kg)
136      REAL total1(nz),total11(nz),total2(nz),total22(nz)
137      REAL dmsm,mtot
138
139
140
141
142
143c  Local
144c  -----
145
146      integer i,j,k,l,n,iindice,iselec
147
148      real dQc           ! Amount of condensed methane (kg/m3) during timestep
149      real*8 sat_ratio     ! Methane saturation ratio over liquid
150      real*8 sat_ratmix  ! Methane saturation ratio over liquid
151      real*8 pc2h6         ! Methane partial pressure (Pa)
152      real qsat          ! Methane mass mixing ratio at saturation (kg/kg of air)
153      real qsatmix          ! Methane mass mixing ratio at saturation (kg/kg of air)
154      real*8 rate(nbin)    ! Heterogeneous Nucleation rate (s-1)
155      real*8 elim         
156
157      real nsav(nbin,ntyp)
158      real dn(nbin,ntyp)
159      real rad(nbin)     ! Radius of droplets in each size bin
160      real*8 gr(nbin)      ! Growth rate in each bin
161      real radius        ! Radius of droplets after growth
162      real Qs            ! Mass of condensate required to reach saturation
163      real newsat
164      real vol(nbin)
165
166      real press
167      real sig2,temp,seq(nbin)
168      real Ctot,up,dwn,newvap,gltot
169
170      real temp0,temp1,temp2,last_temp
171      real qsat1,sat_ratio1,tempf(0:10),sat_ratiof(0:10)
172      real rho_a,cap
173      real tempref
174      real xtime,xtime_prime
175
176
177
178c     Variables for latent heat release
179      real lw,cpp
180      data lw / 581.e+3/
181c     data cpp/1044./
182      data cpp/1050./ ! pour etre cohérent avec le reste...
183      save lw,cpp
184
185
186c  Treatment
187c  ---------
188      do i = 1, nbin
189        vol(i) = 4./3. * pi * aerad(i)**3.
190      enddo
191
192      do l = 1, nz
193      total1(l)=0. !solide
194      do k = 1, nbin
195      total1(l)=total1(l)+n_aer(l,k,2)*rhoi_c2h6
196      enddo
197      total2(l)=c2h6vap(l)
198      enddo
199
200
201c     Start loop over heights
202      DO 100 l = 1, nz
203
204        iindice=0                ! mettre l'indice à 0
205
206        temp   = tl(ig,l)
207        press  = pl(ig,l)
208        tempref=temp
209
210c       Save the values of the particle arrays before condensation
211        do j = 1, ntyp
212          do i = 1, nbin
213             nsav(i,j) = n_aer(l,i,j)
214          enddo
215        enddo
216
217
218 99     continue
219
220
221        call c2h6sat(temp,press,qsat)
222        qsatmix=qsat
223 
224c  quantité  pmixc2h6(l) déjà calculé dans cnuages.F et passé dans un common
225c       qsat=pmixc2h6(l)*30.0 / (28.0*p)
226c       qsatmix=pmixc2h6(l)*30.0 / (28.0*p)
227 
228c       Get the partial presure of methane vapor and its saturation ratio
229        pc2h6      = c2h6vap(l) * (Mn2/Mc2h6) * press
230        sat_ratio  = c2h6vap(l) / qsat
231        sat_ratmix = c2h6vap(l) / qsatmix
232
233c       Get the rates of nucleation
234        call nuclea2(nbin,aerad,pc2h6,temp,sat_ratio,rate)
235
236c       Get the growth rates of condensation/sublimation
237        up   = c2h6vap(l)
238        dwn  = 1.
239        Ctot = c2h6vap(l)
240        DO i = 1, nbin
241
242        if (n_aer(l,i,3).eq.0) then
243         rad(i) = aerad(i)
244        else
245         rad(i) = ((n_aer(l,i,2)/n_aer(l,i,3) +
246     &   qprime(ig,l,i)/n_aer(l,i,3)
247     &   +vol(i))*0.75/pi)**(1./3.)
248        endif
249
250
251*       Equilibrium saturation ratio (due to curvature effect)
252        seq(i) = exp( 2.*sig2(temp)*Mc2h6 /(rhoi_c2h6*rgp*temp*rad(i)))
253
254        call growthrate2(dt,temp,press,pc2h6,
255     &                   sat_ratmix,seq(i),rad(i),gr(i))
256        up = up + dt * gr(i) * 4. * pi * rhoi_c2h6 * rad(i) * seq(i)
257     *                 * nsav(i,3)
258        dwn= dwn+ dt * gr(i) * 4. * pi * rhoi_c2h6 * rad(i) / qsat
259     *                 * nsav(i,3)
260        Ctot= Ctot + rhoi_c2h6 * nsav(i,2)
261
262        ENDDO
263
264        newvap = min(up/dwn,Ctot)
265        newvap = max(newvap,0.)
266
267        gltot = 0.
268        DO i = 1, nbin
269          gr(i)  = gr(i) * ( newvap/qsat - seq(i) )
270          if(nsav(i,2).le.0. .and. gr(i).le.0.) then
271              n_aer(l,i,2) = 0.
272          else
273          n_aer(l,i,2) = nsav(i,2) + dt * gr(i) * 4. * pi * rad(i)
274     *                               * n_aer(l,i,3)
275          if (n_aer(l,i,2).le.0.) then
276            n_aer(l,i,1) = n_aer(l,i,1) + n_aer(l,i,3)
277            n_aer(l,i,2) = 0.
278            n_aer(l,i,3) = 0.
279          endif
280          gltot=n_aer(l,i,2)*rhoi_c2h6+gltot
281          endif
282
283        ENDDO
284   
285c       Determine the mass of exchanged methane
286
287        dQc = 0.
288        DO i = 1, nbin
289          dQc = dQc - rhoi_c2h6 * ( n_aer(l,i,2) - nsav(i,2) )
290        ENDDO
291
292c       Update the methane vapor mixing ratio implied by
293c       the cond/eva processes.
294
295
296c       Arrays resetted to their initial value before condensation
297        do j = 1, ntyp
298          do i = 1, nbin
299            dn(i,j)      = n_aer(l,i,j) - nsav(i,j)
300            n_aer(l,i,j) = nsav(i,j)
301          enddo
302        enddo
303
304c       Update the c arrays.
305c       nucleation & cond/eva tendencies added together.
306
307        do i=1,nbin
308          elim         = dt * rate(i)
309          n_aer(l,i,1) = n_aer(l,i,1) / (1.+elim)
310          n_aer(l,i,3) = n_aer(l,i,3) + elim * n_aer(l,i,1) + dn(i,3)
311          n_aer(l,i,1) = n_aer(l,i,1) + dn(i,1)
312          n_aer(l,i,2) = n_aer(l,i,2) + dn(i,2)
313          if(n_aer(l,i,2).lt.0.) n_aer(l,i,2)=0.
314        enddo
315
316        dQc = 0.
317        DO i = 1, nbin
318          dQc = dQc - rhoi_c2h6 * ( n_aer(l,i,2) - nsav(i,2) )
319        ENDDO
320
321
322        c2h6vap(l)  = c2h6vap(l) + dQc
323
324100   CONTINUE
325
326      do l = 1, nz
327      total11(l)=0.
328      do k = 1, nbin
329      total11(l)=total11(l)+n_aer(l,k,2)*rhoi_c2h6
330      enddo
331      total22(l)=c2h6vap(l)
332      enddo
333
334      return
335      end
336
337
338*******************************************************
339*                                                     *
340      subroutine nuclea2(nbin,aerad,pc2h6,temp,sat,nucrate)
341*   This subroutine computes the nucleation rate      *
342*   as given in Pruppacher & Klett (1978) in the      *
343*   case of water ice forming on a solid substrate.   *
344*     Definition refined by Keese (jgr,1989)          *
345*                                                     *
346*******************************************************
347
348      implicit none
349#include "dimensions.h"
350#include "microtab.h"
351#include "varmuphy.h"
352
353      integer nbin
354      real aerad(nbin)
355
356      real*8 nucrate(nbin)
357      real*8 pc2h6
358      real   temp
359      real*8 sat
360
361      integer l,i
362      real*8 nc2h6
363      real sig2            ! Water-ice/air surface tension  (N.m)
364      real*8 rstar        ! Radius of the critical germ (m)
365      real*8 gstar        ! # of molecules forming a critical embryo
366      real*8 x            ! Ratio rstar/radius of the nucleating dust particle
367      real fistar         ! Activation energy required to form a critical embryo (J)
368      real*8 zeldov       ! Zeldovitch factor (no dim)
369      real*8 fshape2       ! function defined at the end of the file
370      real*8 deltaf
371
372      real nus
373      data nus/1.e+13/       ! Jump frequency of a molecule (s-1)
374      real m0
375      data m0/4.983e-26/     ! Weight of a methane molecule (kg)
376      real vo1
377c     data vo1/9.094e-29/
378      data vo1/5.4746e-5/    ! Volume of 1 mole
379      real desorp
380      data desorp/0.288e-19/ ! Activation energy for desorption of water on a dust-like substrate (J/molecule)
381      real surfdif
382      data surfdif/0.288e-20/! Estimated activation energy for surface diffusion of water molecules (J/molecule)
383
384      IF (sat .GT. 1.) then    ! minimum condition to activate nucleation
385
386        nc2h6    = pc2h6 / kbz / temp
387        rstar  = 2. * sig2(temp) * vo1 / (rgp*temp*log(sat))
388        gstar  = 4. * nav * pi * (rstar**3) / (3.*vo1)
389c       Loop over size bins
390        do i=1,nbin
391          x      = aerad(i) / rstar
392          x      = aerad(imono) / rstar  ! r(5)=monomere
393          fistar = (4./3.*pi) * sig2(temp) * (rstar**2.)
394     &     *fshape2(mtetac2h6,x)
395          deltaf = min( max((2.*desorp-surfdif-fistar)/(kbz*temp)
396     &           , -100.), 100.)
397          if (deltaf.eq.-100.) then
398            nucrate(i) = 0.
399          else
400            zeldov = sqrt ( fistar / (3.*pi*kbz*temp*(gstar**2.)) )
401            nucrate(i)  = zeldov * kbz* temp * rstar**2.
402     &                  * 4. * pi * ( nc2h6*aerad(i) )**2.
403     &                  / ( fshape2(mtetac2h6,x) * nus * m0 )
404     &                  * dexp(deltaf)
405            if(i.gt.imono)  nucrate(i)= zeldov * kbz* temp * rstar**2.
406     &          * 4. * pi * vrat_e**(i-imono)*(nc2h6*aerad(imono) )**2.
407     &          / (fshape2(mtetac2h6,x) * nus * m0 )
408     &          * dexp(deltaf)
409
410          endif
411        enddo
412      ELSE
413        do i=1,nbin
414          nucrate(i) = 0.
415        enddo
416
417      ENDIF
418
419      return
420      end
421
422******************************************************************
423        subroutine c2h6sat(t,p,qsat)
424*                                                                 *
425* cette fonction calcule la pression de vapeur saturante de l'    *
426* ethane a une altitude donnee z par Reid et al., p657            *
427*                                                                 *
428* Compatible avec Barth et al., dans l'intervalle 30-90K          *
429*                                                                 *
430*                                                                 *
431******************************************************************
432
433        real rgp
434        data rgp/8.3143/
435
436* declaration des variables internes
437* ----------------------------------
438
439        real qsat,t,p
440         
441c       qsat=10.01-1085.0/(t-0.561)
442c       qsat=10.**qsat/760.*1.e5
443
444
445        a=-6.34307
446        b=1.011630
447        c=-1.19116
448        d=-2.03539
449        pc=48.8*1.e5
450        tc=305.4
451
452        x=(1.-t/tc)
453        if(x.gt. 0.) qsat=(1-x)**(-1)*(a*x+b*x**1.5+c*x**3.+d*x**6.)
454        if(x.le. 0.) qsat=a*x/abs(1.-x)     ! approx pour  t > tc
455        qsat=pc*exp(qsat)
456
457        qsat=qsat* 30.0 / (28.0*p)  ! kg/kg
458
459        return
460        end
461
462c=======================================================================
463      subroutine growthrate2(timestep,temp,press,pc2h6,sat,seq,r,Cste)
464c
465c     Determination of the droplet growth rate
466c
467c=======================================================================
468
469      IMPLICIT NONE
470#include "dimensions.h"
471#include "microtab.h"
472#include "varmuphy.h"
473
474c-----------------------------------------------------------------------
475C   DECLARATIONS:
476c   -------------
477
478      common/lheat/Lv
479
480
481c
482c   arguments:
483c   ----------
484
485      REAL timestep
486      REAL temp    ! temperature in the middle of the layer (K)
487      REAL press   ! pressure in the middle of the layer (K)
488      REAL*8 pc2h6 ! Methane vapor partial pressure (Pa)
489      REAL*8 sat  ! saturation ratio
490      REAL r    ! crystal radius before condensation (m)
491      REAL seq  ! Equilibrium saturation ratio
492
493c   local:
494c   ------
495
496      REAL psat
497      REAL moln2,molc2h6
498      REAL To,tc2h6,wc2h6       ! Reid et al., (eq 7-9.4 + Appendix compound  [168])
499      REAL fte
500
501c     Effective gas molecular radius (m)
502      data moln2/1.75e-10/   ! N2
503c     Effective gas molecular radius (m)
504      data molc2h6/2.22e-10/   ! C2H6
505c     Temperature critique  + omega
506      data tc2h6/305.4/
507      data wc2h6/9.9e-2/
508
509      REAL k,Lv                 
510      REAL knudsen           ! Knudsen number (gas mean free path/particle radius)
511      REAL a,Dv,lambda,Rk,Rd ! Intermediate computations for growth rate
512      REAL*8 Cste
513
514c-----------------------------------------------------------------------
515c      Ice particle growth rate by diffusion/impegement of molecules
516c                r.dr/dt = (S-Seq) / (Seq*Rk+Rd)
517c        with r the crystal radius, Rk and Rd the resistances due to
518c        latent heat release and to vapor diffusion respectively
519c-----------------------------------------------------------------------
520
521      psat = pc2h6 / sat
522
523c     - Thermal conductibility of N2
524     
525      k = ( 2.857e-2 * temp - 0.5428  ) * 4.184e-3
526     
527     
528c     - Latent heat of c2h6 (J.kg-1)
529      Lv =581.e3                      ! eq (7-9.4) Reid et al.
530      fte=(1.-temp/tc2h6)
531      if (fte.le.1.e-3)  fte=1.e-3
532      Lv=8.314*tc2h6*(7.08*fte**0.354+10.95*wc2h6*fte**0.456)/30.e-3
533
534     
535
536c     - Constant to compute gas mean free path
537c     l= (T/P)*a, with a = (  0.707*8.31/(4*pi*molrad**2 * avogadro))
538
539      a = 0.707*rgp/(4 * pi* (moln2*1.e10)**2  * (nav*1.e-20))
540
541c     - Compute Dv, methane vapor diffusion coefficient
542c       accounting for both kinetic and continuum regime of diffusion,
543c       the nature of which depending on the Knudsen number.
544
545      Dv = 1./3. * sqrt( 8*rgp*temp/(pi*Mc2h6) )* (kbz*1.e20) * temp /
546     & (pi*press*(moln2*1.e10+molc2h6*1.e10)**2 * sqrt(1.+Mc2h6/Mn2) )
547
548      knudsen = temp / press * a / r
549      lambda  = (1.333+0.71/knudsen) / (1.+1./knudsen)
550      Dv      = Dv / (1. + lambda * knudsen)
551
552c     - Compute Rk
553      Rk = Lv**2 * rhoi_c2h6 * Mc2h6 / (k*rgp*temp**2.)
554c     - Compute Rd
555      Rd = rgp * temp *rhoi_c2h6 / (Dv*psat*Mc2h6)
556
557c     - Compute:      rdr/dt = Cste * (S-Seq)
558      Cste = 1. / (seq*Rk+Rd)
559
560      RETURN
561      END
562
563
564*********************************************************
565      real function sig2(t)
566*    this function computes the surface tension (N.m)   *
567*   between methane and air as a function of temp.    *
568*   Eq (12-3-6 et 12-3-7 Reid et al.)
569*
570*********************************************************
571
572      real t
573
574      pc=48.8*1.01325e5
575      tc=305.4
576      tb=184.6
577      tr=t/tc
578      tbr=tb/tc
579      if(t.gt.305.0) then
580         tr=305./tc
581      endif
582
583      sig2=0.1196*(1.+(tbr*alog(pc/1.01325))/(1.-tbr))-0.279
584      sig2=pc**(2./3.)*tc**(1./3.)*sig2*(1.-tr)**(11./9.)
585      sig2=sig2*1.e-8
586
587
588
589
590c     sig2 = 21.157*((305.4-t)/(305.4-153.2))**(11./9.)
591c     sig2=sig2*1.e-4
592c
593c       if(t.gt.305.0) then
594c         sig2 = 21.157*((305.4-305.)/(305.4-153.2))**(11./9.)
595c         sig2=sig2*1.e-4
596c       endif
597c
598c     print*,t,sig2,sig3
599
600      return
601      end
602
603*********************************************************
604      real*8 function fshape2(cost,rap)
605*        function computing the f(m,x) factor           *
606* related to energy required to form a critical embryo  *
607*********************************************************
608
609      implicit none
610
611      real cost
612      real*8 rap
613      real*8 phi
614      real*8 a,b,c
615
616
617      phi = sqrt( 1. - 2.*cost*rap + rap**2 )
618      a = 1. + ( (1.-cost*rap)/phi )**3
619      b = (rap**3) * (2.-3.*(rap-cost)/phi+((rap-cost)/phi)**3)
620      c = 3. * cost * (rap**2) * ((rap-cost)/phi-1.)
621
622      fshape2 = 0.5*(a+b+c)
623
624      if (rap.gt.3000.) fshape2 = ((2.+cost)*(1.-cost)**2)/4.
625
626      return
627      end
628
Note: See TracBrowser for help on using the repository browser.