source: CONFIG/publications/ICOLMDZORINCA_CO2_Transport_GMD_2023/INCA/src/INCA_MOD/hetchem_mod.F90 @ 6610

Last change on this file since 6610 was 6610, checked in by acosce, 10 months ago

INCA used for ICOLMDZORINCA_CO2_Transport_GMD_2023

File size: 59.2 KB
Line 
1#include <inca_define.h>
2#ifdef STRAT
3MODULE HETCHEM
4
5  ! This module contains the heterogeneous chemistry routines for
6  ! the stratosphere from the REPROBUS CTM provided by F. Lefevre.
7  ! They were adapted to LMDz-INCA by L. Jourdain and reworked by
8  ! by D. Hauglustaine and F. Jegou. DH, LSCE, 06/2005
9  !
10  ! Updated version 2018, DH.
11
12  USE INCA_DIM
13  IMPLICIT NONE
14 
15  INTEGER, PARAMETER :: nlat   = 1 
16  INTEGER, PARAMETER :: nivtop = 32
17  INTEGER, PARAMETER :: nivbot = 15 
18  INTEGER, PARAMETER :: nbcon  = PCNST
19
20  REAL, SAVE, ALLOCATABLE :: parthno3(:,:) 
21  REAL, SAVE, ALLOCATABLE :: parthno3s(:,:)
22  REAL, SAVE, ALLOCATABLE :: parthno3l(:,:)
23  REAL, SAVE, ALLOCATABLE :: parthno3sl(:,:)
24
25  REAL, SAVE, ALLOCATABLE :: parth2o(:,:) 
26  REAL, SAVE, ALLOCATABLE :: parth2os(:,:) 
27  REAL, SAVE, ALLOCATABLE :: parth2ol(:,:) 
28
29  REAL, SAVE, ALLOCATABLE :: parthcl(:,:) 
30  REAL, SAVE, ALLOCATABLE :: parthcll(:,:) 
31  REAL, SAVE, ALLOCATABLE :: parthcls(:,:) 
32
33  REAL, SAVE, ALLOCATABLE :: parthbr(:,:) 
34  REAL, SAVE, ALLOCATABLE :: parthbrl(:,:) 
35  REAL, SAVE, ALLOCATABLE :: parthbrs(:,:) 
36
37  REAL, SAVE, ALLOCATABLE :: vsed(:,:)       
38  REAL, SAVE, ALLOCATABLE :: surfarealiq(:,:) 
39  REAL, SAVE, ALLOCATABLE :: surfareanat(:,:) 
40  REAL, SAVE, ALLOCATABLE :: surfareaice(:,:) 
41  REAL, SAVE, ALLOCATABLE :: qh2so4(:,:)
42
43!$OMP THREADPRIVATE(parthno3,parthno3s,parthno3l,parthno3sl,parth2o, parth2os,parth2ol)
44!$OMP THREADPRIVATE(parthcl, parthcll,parthcls, parthbr,parthbrl,parthbrs,vsed,qh2so4)   
45!$OMP THREADPRIVATE(surfarealiq,surfareanat,surfareaice)   
46
47CONTAINS
48
49  SUBROUTINE INIT_HETCHEM
50    USE INCA_DIM
51    IMPLICIT NONE
52
53    ALLOCATE ( vsed         (PLON,PLEV))
54    ALLOCATE ( parthno3     (PLON,PLEV))
55    ALLOCATE ( parthno3s    (PLON,PLEV))
56    ALLOCATE ( parthno3l    (PLON,PLEV))
57    ALLOCATE ( parthno3sl   (PLON,PLEV))
58    ALLOCATE ( parth2o      (PLON,PLEV))
59    ALLOCATE ( parth2os     (PLON,PLEV))
60    ALLOCATE ( parth2ol     (PLON,PLEV))
61    ALLOCATE ( parthcl      (PLON,PLEV))
62    ALLOCATE ( parthcll     (PLON,PLEV))
63    ALLOCATE ( parthcls     (PLON,PLEV))
64    ALLOCATE ( parthbr      (PLON,PLEV))
65    ALLOCATE ( parthbrl     (PLON,PLEV))
66    ALLOCATE ( parthbrs     (PLON,PLEV))
67    ALLOCATE ( qh2so4       (PLON,PLEV))
68    ALLOCATE ( surfarealiq  (PLON,PLEV))
69    ALLOCATE ( surfareanat  (PLON,PLEV))
70    ALLOCATE ( surfareaice  (PLON,PLEV))
71
72    vsed(:,:)        = 0.     
73    parthno3(:,:)    = 1.
74    parthno3s(:,:)   = 1.
75    parthno3l(:,:)   = 1.
76    parthno3sl(:,:)  = 1.
77    parth2o(:,:)     = 1.
78    parth2os(:,:)    = 1.
79    parth2ol(:,:)    = 1.
80    parthcl(:,:)     = 1.
81    parthcll(:,:)    = 1.
82    parthcls(:,:)    = 1.
83    parthbr (:,:)    = 1.
84    parthbrl(:,:)    = 1.
85    parthbrs(:,:)    = 1.
86    qh2so4(:,:)      = 0.
87    surfarealiq(:,:) = 0.
88    surfareanat(:,:) = 0.
89    surfareaice(:,:) = 0.
90
91  END SUBROUTINE INIT_HETCHEM
92
93  SUBROUTINE ANALYTIC( &
94     temp,   &
95     pmid,   &
96     hnm,    &
97     qj,     &
98     k1,     &
99     k2,     &
100     k3,     &
101     k4,     &
102     k5,     &
103     k6,     &
104     k7,     &
105     k8,     &
106     k9,     &
107     h2o,    &
108     mair )
109
110    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
111    !c    F. LEFEVRE (LATMOS/CNRS) from REPROBUS
112    !c
113    !c    Adapted to INCA:
114    !c
115    !c    D. HAUGLUSTAINE (LSCE)
116    !c    L. JOURDAIN (LATMOS)
117    !c    F. JEGOU (LSCE)
118    !c    R. VALORSO (LIVE)
119    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
120
121    USE SPECIES_NAMES
122    USE SAD_COM, ONLY : MASS,VOL
123    USE INCA_DIM
124    USE AIRPLANE_SRC, ONLY : ptrop
125
126    REAL, PARAMETER :: r=8.205e-5
127    REAL, PARAMETER :: ctoa=7.336e21
128    REAL, PARAMETER :: sigma=1.6
129
130    INTEGER :: i, ilon, iniv, j
131    REAL :: t, ph2o, zh2o, zh2oeq
132    REAL :: pi, amu
133    REAL :: qh2o, qhno3, qhcl
134    REAL :: zmt, zbt, zhno3eq
135    REAL :: pn0t, pn
136    REAL :: hno3s, h2os
137    REAL :: xsb, hsb, xnb, hnb
138    REAL :: tf, tt, tr, pr
139    REAL :: phi
140    REAL :: wsf, wnf, partf
141    REAL :: vliq, rmode
142    REAL :: ph2o0, phcl1
143    REAL :: sclono2, shocl
144    REAL :: rpart, rhopart 
145    REAL :: ynre
146    REAL :: vsedliq, shapek, vsedsol
147    REAL :: wts
148
149    REAL temp(PLON,PLEV), ptot(PLON,PLEV), hnm(PLON,PLEV)
150    REAL ck(PLON,PLEV,nbcon),qj(PLON,PLEV,nbcon)
151    REAL k1(PLON,PLEV), k2(PLON,PLEV), k3(PLON,PLEV)
152    REAL k4(PLON,PLEV), k5(PLON,PLEV), k6(PLON,PLEV)
153    REAL k7(PLON,PLEV), k8(PLON,PLEV), k9(PLON,PLEV)
154    REAL h2o(PLON,PLEV),pmid(PLON,PLEV)
155    REAL a,b,c,det,msb,mnb,mcl,mnf,msf
156    REAL qn(10),qs(10),kn(7),ks(7)
157    SAVE qn,qs,kn,ks
158!$OMP THREADPRIVATE(qn,qs,kn,ks)
159
160    REAL, INTENT(in)  ::  mair(PLON,PLEV)         ! total atm density
161    REAL              ::  VOL_S(PLON,PLEV)
162
163    REAL dens(PLON,PLEV)
164    REAL ns(PLON,PLEV)
165    REAL pn0(PLON,PLEV), phcl0(PLON,PLEV) 
166    REAL pw(PLON,PLEV), ms(PLON,PLEV), mn(PLON,PLEV)
167    REAL ws(PLON,PLEV), wn(PLON,PLEV)
168    REAL hhcl(PLON,PLEV), hhocl(PLON,PLEV)
169    REAL hhobr(PLON,PLEV), hclono2(PLON,PLEV)
170    REAL hhbr(PLON,PLEV)
171    REAL tice(PLON,PLEV), rice(PLON,PLEV)
172    REAL rnat(PLON,PLEV), aliq(PLON,PLEV)
173    REAL rmean(PLON,PLEV)
174    REAL mh2so4c, bh2so4, ph2so4, muh2so4
175 
176    INTEGER condliq(PLON,PLEV)
177    INTEGER lnat(PLON,PLEV), lice(PLON,PLEV)
178    !c
179    !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
180    !c     ajouts jpl 2000
181    !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
182    !c
183    REAL aw(PLON,PLEV)
184    REAL wt(PLON,PLEV), mh2so4(PLON,PLEV)
185    REAL m, y1, y2, bigx
186    REAL a1(3), b1(3), c1(3), d1(3)
187    REAL a2(3), b2(3), c2(3), d2(3)
188
189    DATA a1/12.37208932, 11.820654354, -180.06541028/
190    DATA b1/-0.16125516114, -0.20786404244, -0.38601102592/
191    DATA c1/-30.490657554, -4.807306373, -93.317846778/
192    DATA d1/-2.1133114241, -5.1727540348, 273.88132245/
193    DATA a2/13.455394705, 12.891938068, -176.95814097/
194    DATA b2/-0.1921312255,-0.232338847708,-0.36257048154/
195    DATA c2/-34.285174607, -6.4261237757, -90.469744201/
196    DATA d2/-1.7620073078, -4.9005471319, 267.45509988/
197
198    REAL ndrop(PLON,PLEV)
199    REAL nice(PLON,PLEV), nnat(PLON,PLEV)
200    REAL nucleimin
201
202    REAL nnat_small_max, vnat_small_max
203    REAL nnats(PLON,PLEV)
204    REAL nnatl(PLON,PLEV)
205    REAL rnats, rnatl
206    REAL anat(PLON,PLEV), vnat(PLON,PLEV), vnatl(PLON,PLEV)
207    REAL aice(PLON,PLEV), vice(PLON,PLEV)
208
209    REAL vsed(PLON,PLEV)
210    REAL rverif(PLON*PLEV)
211    REAL rhoair, rhoice, rhonat, rholiq
212    REAL netha, lambda, lambda0, nre, us, cdnre2
213    REAL bnre(0:6), tcel
214    !c
215    !c     pruppacher and klett, 1988
216    !c
217    DATA bnre /-3.18657,0.992696,-0.153193e-2, &
218       -0.987059e-3,-0.578878e-3,0.855176e-4,&
219       -0.327815e-5/
220    !c
221    !c     carslaw et al., 1995
222    !c
223    DATA qn/14.5734,0.0615994,-1.14895,0.691693, -0.098863,&
224       0.0051579,0.123472,-0.115574,0.0110113,0.0097914/
225    DATA qs/14.4700,0.0638795,-3.29597,1.778224,-0.223244, &
226       0.0086486,0.536695,-0.335164,0.0265153,0.0157550/
227    DATA kn/-39.136,6358.4,83.29,-17650.0,198.53,-11948,-28.469/
228    DATA ks/-21.661,2724.2,51.81,-15732.0,47.004,-6969.0,-4.6183/
229
230    LOGICAL pscliq, pscnat, pscice
231!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
232!     choix du schema de psc:
233!
234!     pscnat = true : autoriser les nat
235!     pscnat + pscice = true : autoriser les nat et la glace
236!     pscnat + pscice + pscliq = true : autoriser nat, glace et liquide
237!
238!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
239      pscnat = .true.
240      pscice = .true.
241      pscliq = .true.
242
243    !c
244    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
245    !c     initialisations
246    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
247    !c
248
249    nnat_small_max  = 1.        ! densite maximale de nat (cm-3)
250    rnats           = 0.5e-4    ! rayon du small mode de nat (cm)
251    rnatl           = 6.5e-4    ! rayon du large mode de nat (cm)
252    rice            = 10.e-4    ! rayon de la glace
253    nucleimin       = 1.e-3
254    pi = 2.*ASIN(1.0)
255    amu  = 1.66e-24
256    ptot(:,:)=pmid(:,:)/100.
257
258    vsed = 0.
259    ws(:,:) = 0. 
260
261!   Remove values below tropopause for sulfates
262    DO i=1,PLON
263      DO j=1,PLEV
264        IF (pmid(i,j).GT.ptrop(i)) THEN
265          VOL_S(i,j)=0
266        ELSE
267          VOL_S(i,j)=VOL(i,j)
268        ENDIF
269      ENDDO
270    ENDDO
271
272    DO ilon = 1, PLON
273      DO iniv = nivbot, nivtop
274     
275      qh2o = h2o(ilon,iniv)
276      pw(ilon,iniv) = qh2o*ptot(ilon,iniv)/1013.0
277      pw(ilon,iniv) = MIN(pw(ilon,iniv),2.e-3/1013.)
278
279      qhno3 = qj(ilon,iniv,id_HNO3)
280      pn0(ilon,iniv)= ptot(ilon,iniv)/1013.0*qhno3
281
282      qhcl = qj(ilon,iniv,id_HCl)
283      phcl0(ilon,iniv)=ptot(ilon,iniv)/1013.0*qhcl
284
285      !c
286      !c        all h2so4 is assumed to be in the droplets. you might
287      !c        want to input directly the moles h2so4/m3, which is a more
288      !c        normal unit for h2so4 amounts, but remember that this will
289      !c        vary with pressure and temperature.  pinatubo can be simulated
290      !c        by multiplying qh2so4 by different factors.
291      !c
292      !c        DH. Note: so4 is volume_aerosols/volume_air and is based on aerosol surface
293      !c        density from Considine provided from SAGE and in um2/cm3. Then we transform
294      !c        the volume into nb moles below.
295
296      !qh2so4 = MAX((MASS(ilon,iniv)/mair(ilon,iniv)),1.e-20)
297      !qh2so4 = MAX(VOL_S(ilon,iniv)*1e-12,1.e-20)
298      !qh2so4 = MAX(so4(ilon,iniv),1.e-20)
299      !qh2so4 = 1.e-20
300
301      !c        The line below replaced by the calculation below:
302      !c        ns(ilon,iniv)=ptot(ilon,iniv)*100.0*qh2so4/8.314/t
303
304      ndrop(ilon,iniv) = 10.
305
306      END DO
307    END DO
308
309    DO ilon = 1, PLON
310      DO iniv = nivbot, nivtop
311      lnat(ilon,iniv)       = 0
312      lice(ilon,iniv)       = 0
313      rmean(ilon,iniv)      = 0. 
314      aliq(ilon,iniv)       = 0. 
315      nnats(ilon,iniv)      = 0.
316      nnatl(ilon,iniv)      = 0.
317      nnat(ilon,iniv)       = 0.
318      nice(ilon,iniv)       = 0.
319      rnat(ilon,iniv)       = 0.
320      vnat(ilon,iniv)       = 0.
321      vnatl(ilon,iniv)      = 0.
322      anat(ilon,iniv)       = 0.
323      vice(ilon,iniv)       = 0.
324      aice(ilon,iniv)       = 0.
325      vsed(ilon,iniv)       = 0.
326      parthno3s(ilon,iniv)  = 1.
327      parthno3sl(ilon,iniv) = 1.
328      parthno3l(ilon,iniv)  = 1.
329      parthno3(ilon,iniv)   = 1.
330      parth2o(ilon,iniv)    = 1.
331      parthcl(ilon,iniv)    = 1.
332      END DO
333    END DO
334
335    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
336    !c     traitement des aerosols solides
337    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
338
339    IF (pscnat) THEN
340
341    !c
342    !cc    traitement du nat
343    !c
344
345    DO ilon = 1, PLON
346      DO iniv = nivbot, nivtop
347
348      t = MIN(temp(ilon,iniv),273.)
349
350      pn0t = pn0(ilon,iniv)*1013.*0.75
351      zmt = -2.7836 - 0.00088*t
352      zbt = 38.9855 - 11397.0/t + 0.009179*t
353      zhno3eq = 10.0**(zmt*LOG10(pw(ilon,iniv)*1013.*0.75) + zbt)
354
355      IF (pn0t/zhno3eq .GE. 1.) THEN
356          lnat(ilon,iniv) = 1
357          pn = zhno3eq/(0.75*1013.)
358          hno3s = (pn0(ilon,iniv) - pn)*1013. &
359             *hnm(ilon,iniv)/ptot(ilon,iniv)
360          hno3s = MAX(hno3s,0.)
361          vnat(ilon,iniv) = hno3s*amu*117./1.35
362
363!         volume maximal du small mode
364          vnat_small_max = nnat_small_max*(4./3.*pi*rnats**3.)
365
366!         densite de nat (cm-3) pour les deux modes
367 
368          if (vnat(ilon,iniv) .gt. vnat_small_max) then
369          nnats(ilon,iniv) = nnat_small_max
370          nnatl(ilon,iniv) = (vnat(ilon,iniv) - vnat_small_max)/(4./3.*pi*rnatl**3.)
371          vnatl(ilon,iniv) = vnat(ilon,iniv) - vnat_small_max
372          else
373          nnats(ilon,iniv) = vnat(ilon,iniv)/(4./3.*pi*rnats**3.)
374          nnatl(ilon,iniv) = 0.
375          vnatl(ilon,iniv) = 0.
376          end if
377 
378!         surface du nat
379 
380          anat(ilon,iniv) = nnats(ilon,iniv)*4*pi*rnats**2&
381                          + nnatl(ilon,iniv)*4*pi*rnatl**2
382 
383!         parthno3s: part en phase gazeuse
384 
385          parthno3s(ilon,iniv) = 1.0 - (pn0(ilon,iniv)-pn)&
386                                         /pn0(ilon,iniv)
387          parthno3s(ilon,iniv) = max(parthno3s(ilon,iniv),0.0)
388          parthno3s(ilon,iniv) = min(parthno3s(ilon,iniv),1.0)
389 
390!         parthno3sl: part non sedimentee (gaz + petit mode de nat)
391
392          parthno3sl(ilon,iniv) = 1.0&
393               - (pn0(ilon,iniv)-pn)*vnatl(ilon,iniv)/vnat(ilon,iniv)/pn0(ilon,iniv)
394          parthno3sl(ilon,iniv) = max(parthno3sl(ilon,iniv),0.0)
395          parthno3sl(ilon,iniv) = min(parthno3sl(ilon,iniv),1.0)
396
397      ENDIF
398
399      ENDDO
400      ENDDO
401
402      ENDIF !pscnat
403
404      IF ( pscice ) THEN
405     
406      DO ilon = 1, PLON
407      DO iniv = nivbot, nivtop
408
409      !cc    traitement de la glace
410
411      t = MIN(temp(ilon,iniv),273.)
412      tice(ilon,iniv) = 2668.70/(10.4310-(log(pw(ilon,iniv))+log(760.0))/log(10.0))
413     
414      IF (t .LE. tice(ilon,iniv) ) THEN
415
416          lice(ilon,iniv) = 1
417          lnat(ilon,iniv) = 0
418          anat(ilon,iniv) = 0.
419
420          zh2oeq = 10.0**(-2668.7/t + 10.4310)
421          ph2o = zh2oeq/760.0
422          h2os = MAX(pw(ilon,iniv) - ph2o,0.) &
423             *1013.*hnm(ilon,iniv)/ptot(ilon,iniv)
424
425          vice(ilon,iniv) = h2os*amu*18./0.928
426          nice(ilon,iniv) = vice(ilon,iniv)/(4./3.*pi*rice(ilon,iniv)**3.)
427          aice(ilon,iniv) = nice(ilon,iniv)*4*pi*rice(ilon,iniv)**2
428
429!         parth2o : part en phase gazeuse
430          parth2o(ilon,iniv) = (1.0-MAX(pw(ilon,iniv)-ph2o,0.)/pw(ilon,iniv))
431          parth2o(ilon,iniv) = MAX(parth2o(ilon,iniv),0.)
432          parth2o(ilon,iniv) = MIN(parth2o(ilon,iniv),1.)
433 
434!         On retire hno3 de la phase gazeuse sous forme de nat
435          zmt = -2.7836 - 0.00088*t
436          zbt = 38.9855 - 11397.0/t + 0.009179*t
437          zhno3eq = 10.0**(zmt*log10(pw(ilon,iniv)&
438                            *parth2o(ilon,iniv)*1013.*0.75)+ zbt)
439          pn = zhno3eq/(0.75*1013.)
440
441!         parthno3s : part en phase gazeuse
442          parthno3s(ilon,iniv) = 1.0 - (pn0(ilon,iniv)-pn)&
443                                 /pn0(ilon,iniv)
444          parthno3s(ilon,iniv)  = MAX(parthno3s(ilon,iniv),0.)
445          parthno3s(ilon,iniv)  = MIN(parthno3s(ilon,iniv),1.)
446          parthno3sl(ilon,iniv) = parthno3s(ilon,iniv)
447
448      ENDIF
449
450    END DO
451    END DO
452
453    ENDIF !pscice
454
455!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
456!c     traitement des aerosols liquides
457!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
458
459   IF (pscliq) THEN
460
461    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
462    !c    Calcul du nb de moles par unite de volume
463    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
464
465    DO ilon = 1, PLON
466      DO iniv = nivbot, nivtop
467
468      t = MAX(temp(ilon,iniv),MAX(tice(ilon,iniv)-3.0,185.))
469
470      qh2o = h2o(ilon,iniv)*parth2o(ilon,iniv)
471      pw(ilon,iniv) = qh2o*ptot(ilon,iniv)/1013.0
472      pw(ilon,iniv) = MIN(pw(ilon,iniv),2.e-3/1013.)
473      pw(ilon,iniv) = MAX(pw(ilon,iniv),2.e-5/1013.)
474
475      xsb = 1.0/(2.0*(ks(3)+ks(4)/t))*( -ks(1)-ks(2)/t- &
476         ((ks(1)+ks(2)/t)**2-4.0*(ks(3)+ks(4)/t) & 
477         *(ks(5)+ks(6)/t+ks(7)*LOG(t)-LOG(pw(ilon,iniv))))& 
478         **0.5)
479
480      msb        = 55.51*xsb/(1.0-xsb)
481      ms(ilon,iniv) = msb
482      mn(ilon,iniv) = 0.0
483
484      ws(ilon,iniv) = msb*0.098076/(1.0+msb*0.098076)
485      wn(ilon,iniv) = 0.0
486      ws(ilon,iniv) = MAX(ws(ilon,iniv), 0.005) !dilution minimale 0.005%
487
488      END DO
489    END DO
490
491    CALL density(ws,wn,temp,dens)
492
493    DO ilon = 1, PLON
494      DO iniv = nivbot, nivtop
495      qh2so4(ilon,iniv) = MAX(VOL_S(ilon,iniv)*1e-12,1.e-20)
496      ns(ilon,iniv)=qh2so4(ilon,iniv)*1.e6*ws(ilon,iniv)*dens(ilon,iniv)/98.076
497      END DO
498    END DO
499
500!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
501!ccc      aerosols liquides binaires h2so4/h2o
502!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
503
504    DO ilon = 1, PLON
505      DO iniv = nivbot, nivtop
506
507      condliq(ilon,iniv) = 1
508
509      t = MAX(temp(ilon,iniv),MAX(tice(ilon,iniv)-3.0,185.))
510
511      qh2o = h2o(ilon,iniv)*parth2o(ilon,iniv)
512      pw(ilon,iniv) = qh2o*ptot(ilon,iniv)/1013.0
513      pw(ilon,iniv) = MIN(pw(ilon,iniv),2.e-3/1013.)
514      pw(ilon,iniv) = MAX(pw(ilon,iniv),2.e-5/1013.)
515
516      qhno3 = qj(ilon,iniv,id_HNO3)*parthno3s(ilon,iniv)
517      pn0(ilon,iniv)= ptot(ilon,iniv)/1013.0*qhno3
518
519      a = ks(3) + ks(4)/t
520      b = ks(1) + ks(2)/t
521      c = ks(5) + ks(6)/t + ks(7)*log(t) - log(pw(ilon,iniv))
522      det = b**2 - 4.*a*c
523 
524      if (det .gt. 0.) then
525          xsb = (-b - sqrt(det))/(2.*a)
526          msb = 55.51*xsb/(1.0 - xsb)
527      else
528          msb = 0.
529          condliq(ilon,iniv) = 0
530      end if
531 
532      ms(ilon,iniv) = msb
533      ws(ilon,iniv) = msb*0.098076/(1.0 + msb*0.098076)
534      mn(ilon,iniv) = 0.0
535      wn(ilon,iniv) = 0.0
536
537!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
538!           pression saturante de h2so4
539!           d apres ayers et al., grl, 1980
540!           et giauque et al., j. am. chem. soc., 1960
541!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
542 
543         wts = max(41., ws(ilon,iniv)*100.)
544         muh2so4 = 4.184*(1.514e4 - 286.*(wts - 40.)&
545                 + 1.08*(wts - 40.)**2&
546                 - 3941./(wts - 40.)**0.1)
547 
548!        pression saturante en atmosphere
549 
550         ph2so4 = exp(-10156./t + 16.2590 - muh2so4/(8.314*t))
551 
552         if (qh2so4(ilon,iniv)*ptot(ilon,iniv)/1013. .le. ph2so4) then
553            ms(ilon,iniv) = 0.
554            ws(ilon,iniv) = 0.
555            condliq(ilon,iniv) = 0
556         end if
557
558!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
559!ccc         aerosols liquides ternaires hno3/h2so4/h2o
560!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
561
562      IF ( condliq(ilon,iniv) .eq. 1  .and. t .lt. 215.) THEN
563
564          tf = t
565          tt = r*tf*ns(ilon,iniv)
566          tr = 1.0e4/tf-43.4782608
567          pr = LOG(pw(ilon,iniv))+18.4
568
569          hsb = qs(1)+qs(2)*tr**2+(qs(3)+qs(4)*tr+qs(5)*tr**2 & 
570             +qs(6)*tr**3)*pr + (qs(7)+qs(8)*tr+qs(9)*tr**2) & 
571             *pr**2+qs(10)*tr*pr**3
572          hsb = EXP(hsb)
573          xnb = 1.0/(2.0*(kn(3)+kn(4)/tf))*(-kn(1)-kn(2)/tf- & 
574             ((kn(1)+kn(2)/tf)**2-4.0*(kn(3)+kn(4)/tf) & 
575             *(kn(5)+kn(6)/tf +kn(7)*LOG(tf) & 
576             -LOG(pw(ilon,iniv))))**0.5)
577          mnb = 55.51*xnb/(1.0-xnb)
578          hnb = qn(1)+qn(2)*tr**2+(qn(3)+qn(4)*tr+qn(5)*tr**2 & 
579             +qn(6)*tr**3)*pr + (qn(7)+qn(8)*tr+qn(9)*tr**2) & 
580             *pr**2+qn(10)*tr*pr**3
581          hnb = EXP(hnb)
582         
583          a = (tt*hnb*mnb**2 - tt*hsb*mnb*msb - 2.0*mnb**2*msb &
584             + mnb*msb**2 + hnb*mnb*msb*pn0(ilon,iniv) &
585             - hsb*msb**2*pn0(ilon,iniv))/(mnb**2 - mnb*msb)
586          b = msb*(-2.0*tt*hnb*mnb+tt*hsb*msb+mnb*msb & 
587             -hnb*msb*pn0(ilon,iniv))/(mnb-msb)
588          c = (tt*hnb*mnb*msb**2)/(mnb - msb)
589
590          phi = ATAN(SQRT(MAX(4.0*(a**2-3.0*b)**3-(-2.0*a**3+9.0*a*b & 
591             -27.0*c)**2,0.))/(-2.0*a**3+9.0*a*b-27.0*c) )
592          IF (phi .LT. 0.) THEN
593              phi = phi + pi
594          ENDIF
595
596          msf = -1.0/3.0*(a+2.0*SQRT(a**2-3.0*b)*COS((pi+phi)/3.0))
597          msf = MAX(msf,0.)
598
599          mnf = mnb*(1.0-msf/msb)
600          mnf = MAX(mnf,0.)
601          pn = mnf/(hnb*mnf/(mnf+msf)+hsb*msf/(mnf+msf))
602          wsf = msf*0.098076/(1.0+msf*0.098076+mnf*0.063012)
603          wnf = mnf*0.063012/(1.0+msf*0.098076+mnf*0.063012)
604
605          ms(ilon,iniv) = msf
606          mn(ilon,iniv) = mnf
607          ws(ilon,iniv) = wsf
608          wn(ilon,iniv) = wnf
609
610          parthno3l(ilon,iniv) = (1.0-(pn0(ilon,iniv)-pn)/pn0(ilon,iniv))
611          parthno3l(ilon,iniv) = MIN(parthno3l(ilon,iniv),1.)
612
613      ENDIF
614
615      END DO
616      END DO
617
618      !c      dilution minimale de h2so4: 0.5%
619      WHERE ( ws < .005 ) ws = 0.005
620
621      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
622      !ccc   densite des aerosols ternaires (g/cm3)
623      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
624      CALL density(ws,wn,temp,dens)
625
626      DO ilon = 1, PLON
627      DO iniv = nivbot, nivtop
628      !c
629      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
630      !ccc      total specific liquid aerosol volume (dimensionless)
631      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
632      !c
633      IF ( condliq(ilon,iniv) .EQ. 1) THEN
634      vliq = ns(ilon,iniv)*98.076e-6/ws(ilon,iniv)/dens(ilon,iniv)
635      !c
636      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
637      !ccc      liquid aerosol radius and surface area
638      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
639      !c
640      !c        rmean=mean radius of liquid droplets (units = cm)
641      !c        this varies with the total liquid volume per unit volume of air
642      !c        (called vliq in main program).  rmean can be calculated
643      !c        from vliq using
644      !c
645      !c        rmean=rmode*exp(0.5*(log(sigma))**2), where
646      !c
647      !c        rmode=(3.0*vliq/(4.*pi*ndrop)*
648      !c              exp(-9.0/2.0*(log(sigma)**2)))**(1./3.)
649      !c
650      !c        ndrop=number of droplets per cm3 air
651      !c        sigma=width of lognormal (use sigma=1.8).
652      !c
653      rmode=(3.0*vliq/(4.*pi*ndrop(ilon,iniv))*EXP(-9.0/2.0*(LOG(sigma)**2)))**(1./3.)
654      rmean(ilon,iniv)=rmode*exp(0.5*(log(sigma))**2)
655
656      aliq(ilon,iniv)=4.0*pi*rmode**2*ndrop(ilon,iniv) &
657         *EXP(2.0*(LOG(sigma))**2)
658     
659      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
660      !ccc      the solubility of hcl
661      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
662      !c
663      !c        hhcl est calcule directement a partir de jpl 2000,
664      !c        lui-meme utilisant carslaw et al., j. phys. chem., 1995.
665      !c        l'ensemble des calculs suppose un aerosol binaire:
666      !c        la molalite de h2so4 (wt) est donc recalculee dans
667      !c        ces conditions.
668      !c
669      t = MAX(temp(ilon,iniv),MAX(tice(ilon,iniv)-3.0,185.))
670      !c
671      !c        ph2o0 : saturation water vapor pressure, hpa
672      !c
673      ph2o0 = EXP(18.452406985 - 3505.1578807/t &
674         - 330918.55082/t**2 + 12725068.262/t**3)
675      !c
676      !c        aw : water activity
677      !c
678      aw(ilon,iniv) = pw(ilon,iniv)*1013./ph2o0
679      aw(ilon,iniv) = MIN(aw(ilon,iniv), 1.)
680
681      IF (aw(ilon,iniv) .LE. 0.05) THEN
682          y1 = a1(1)*aw(ilon,iniv)**b1(1) + c1(1)*aw(ilon,iniv) + d1(1)
683          y2 = a2(1)*aw(ilon,iniv)**b2(1) + c2(1)*aw(ilon,iniv) + d2(1)
684      else if (aw(ilon,iniv) .lt. 0.85) then
685          y1 = a1(2)*aw(ilon,iniv)**b1(2) + c1(2)*aw(ilon,iniv) + d1(2)
686          y2 = a2(2)*aw(ilon,iniv)**b2(2) + c2(2)*aw(ilon,iniv) + d2(2)
687      else
688          y1 = a1(3)*aw(ilon,iniv)**b1(3) + c1(3)*aw(ilon,iniv) + d1(3)
689          y2 = a2(3)*aw(ilon,iniv)**b2(3) + c2(3)*aw(ilon,iniv) + d2(3)
690      endif
691      !c
692      !c        m: h2so4 molality, mol/kg
693      !c
694      m = y1 + (t - 190.)*(y2 - y1)/70.
695      !c
696      !c        wt: h2so4 weight percentage, %
697      !c
698      wt(ilon,iniv) = 9800.*m/(98.*m + 1000.)
699      wt(ilon,iniv) = max(wt(ilon,iniv), 0.5)
700
701      !c
702      !c        mh2so4: h2so4 molarity, mol l-1
703      !c
704      mh2so4(ilon,iniv) = dens(ilon,iniv)*wt(ilon,iniv)/9.8
705
706      bigx = wt(ilon,iniv)/(wt(ilon,iniv) &
707         + (100. - wt(ilon,iniv))*98./18.)
708
709      hhcl(ilon,iniv) = (0.094 - 0.61*bigx + 1.2*bigx**2) &
710         *exp(-8.68 + (8515. - 10718.*(bigx**0.7))/t)
711      !c
712      !c        phcl1 : pression de hcl restant en phase gazeuse
713      !c        ns/ms : kilogrammes (litres) d'eau par metre cube
714      !c
715      phcl1 = (phcl0(ilon,iniv)/(r*t)) &
716         /(1./(r*t) + hhcl(ilon,iniv)*ns(ilon,iniv)/ms(ilon,iniv)) 
717
718      parthcl(ilon,iniv) = 1.0-(phcl0(ilon,iniv)-phcl1)/phcl0(ilon,iniv)
719
720      !c
721      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
722      !ccc      the solubility of clono2
723      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
724      !c
725      !c        on peut negliger la diminution de la concentration
726      !c        en phase gazeuse.
727      !c
728      !c        sclono2 : setchenow coefficient m-1
729      !c
730      sclono2 = 0.306 + 24./t
731      !c
732      !c        hclono2 : shi et al., m atm-1
733      !c
734      hclono2(ilon,iniv) = 1.6e-6*exp(4710./t) &
735         *exp(-sclono2*mh2so4(ilon,iniv))
736      !c
737      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
738      !ccc      the solubility of hocl
739      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
740      !c
741      !c        hhocl d'apres jpl 2000 (shi et al.)
742      !c        on peut negliger la diminution de la concentration
743      !c        en phase gazeuse.
744      !c
745      !c        shocl : setchenow coefficient m-1
746      !c
747      shocl = 0.0776 + 59.18/t
748      !c
749      !c        hhocl : shi et al.
750      !c
751      hhocl(ilon,iniv) = 1.91e-6*exp(5862.4/t) &
752         *exp(-shocl*mh2so4(ilon,iniv))
753      !c
754      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
755      !ccc      the solubility of hobr
756      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
757      !c
758      !c        hhobr d'apres waschewsky and abbatt, j. phys. chem. a,
759      !c        5312-5320, 1999.
760      !c        on peut negliger la diminution de la concentration
761      !c        en phase gazeuse.
762      !c
763      hhobr(ilon,iniv) = 4.6e-4*exp(4.5e3/t) 
764      !c
765      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
766      !ccc      the solubility of hbr
767      !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
768      !c
769      !c        hhbr d'apres kleffmann et al., j. phys. chem. a,
770      !c        8489-8495, 2000. attention a l'erreur typographique
771      !c        contenue dans la version imprimee de l'article
772      !c        (m3 = - 4.445 imprime au lieu de m3 = + 4.445)
773      !c
774      mh2so4c = -1.977e-4*wt(ilon,iniv)**2. &
775         -2.096e-2*wt(ilon,iniv) + 4.445
776
777      bh2so4 = -8.979e-5*wt(ilon,iniv)**2. & 
778         +2.141e-2*wt(ilon,iniv) - 6.067
779
780      hhbr(ilon,iniv) = 10.**(mh2so4c*1000./t + bh2so4)
781
782      ENDIF !condliq
783
784      ENDDO
785      ENDDO
786
787      ENDIF !pscliq
788
789!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
790!c     surfaces des PSC
791!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
792
793    do ilon = 1,PLON
794      do iniv = nivbot,nivtop 
795
796        surfarealiq(ilon,iniv) = aliq(ilon,iniv) 
797        surfareanat(ilon,iniv) = anat(ilon,iniv)*lnat(ilon,iniv)
798        surfareaice(ilon,iniv) = aice(ilon,iniv)*lice(ilon,iniv)
799
800      end do
801    end do
802
803!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
804!c     partitions
805!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
806
807    do ilon = 1, PLON
808      do iniv = nivbot,nivtop
809
810      parthno3(ilon,iniv) = parthno3l(ilon,iniv) * parthno3s(ilon,iniv)
811      parthno3(ilon,iniv) = MIN ( parthno3(ilon,iniv) , 1. ) 
812
813      end do
814    end do
815
816!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
817!c     sedimentation
818!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
819   
820    rhoice   = 0.928*1000.0
821    rhonat   = 1.350*1000.0
822
823    do ilon = 1, PLON
824      do iniv = nivbot,nivtop
825
826      IF ( lice(ilon,iniv) .EQ. 1 .OR. lnat(ilon,iniv) .EQ. 1 ) THEN
827
828      t = temp(ilon,iniv)
829
830      rpart=(lice(ilon,iniv)*rice(ilon,iniv) &
831         +lnat(ilon,iniv)*rnat(ilon,iniv)) *1.e-2
832      rpart=min(rpart,535.e-6)
833
834      if (rpart .ge. 5.e-7) then
835
836          rhopart=lice(ilon,iniv)*rhoice +lnat(ilon,iniv)*rhonat 
837          rhoair=(hnm(ilon,iniv)*28.97/6.022e23) *1000.0
838
839          tcel = t - 273.15
840          netha = (1.718 + 0.0049*tcel -1.2e-5*tcel*tcel)*1.e-5
841
842          cdnre2 = 32.0*(rpart)**3*(rhopart-rhoair) &
843             *rhoair*9.80665  /(3.0*(netha)**2)
844           
845          !c           pruppacher and klett 1998
846          ynre = bnre(0)+bnre(1)*log(cdnre2) &
847             +bnre(2)*(log(cdnre2))**2 &
848             +bnre(3)*(log(cdnre2))**3 &
849             +bnre(4)*(log(cdnre2))**4 &
850             +bnre(5)*(log(cdnre2))**5 &
851             +bnre(6)*(log(cdnre2))**6
852          nre = exp(ynre)
853
854          if (nre .ge. 1.e-2) then
855              !c
856              !c              big particles
857              !c             (1.e-2 < reynolds number < 300)
858              !c             (10.0  < radius  < 535 microns)
859              !c
860              vsed(ilon,iniv) = netha*nre &
861                 /(2*rhoair*rpart)
862
863          else
864              !c
865              !c              small particules
866              !c              (1.e-6 < reynolds number < 1.e-2)
867              !c              (0.5   < radius     < 10 microns)
868              !c
869              !c              lambda0 : libre parcours moyen (m) a 1013.25 hpa
870              !c                        et 293.15k. voir pruppacher and klett
871              !c                        page 416.
872              !c     
873              lambda0 = 6.6e-8
874              lambda  = lambda0 &
875                 *(1013.25/ptot(ilon,iniv)) &
876                 *(t/293.15)
877
878              us = 2.0*rpart**2*9.80665 &
879                 *(rhopart-rhoair)/(9.0*netha)
880
881              !c
882              !ccc            solid particles:
883              !c
884              !c              niels larsen - 1991
885              !c              columnar or elipsoid shape
886              !c              with a shape factor of 1.2 (shapek)
887              !c
888              shapek = 1.2
889
890              vsedsol = us/shapek &
891                 *(1.0+1.246*lambda/rpart &
892                 +0.42*lambda/rpart &
893                 *exp(-0.87*rpart/lambda))
894
895              vsed(ilon,iniv) = vsedsol 
896          endif
897      endif
898
899      ENDIF
900
901      end do
902    end do
903
904    !c
905    !c     only the parameters that are needed in 'hetero' are
906    !c     included in the variable list.  output variables should
907    !c     be included in the list as needed!
908    !c
909    call hetero(aw,temp,ptot,hnm,qj,ws, &
910       hhcl,hhocl,hhobr,hclono2,hhbr, &
911       rice,nice,rnat,nnat, &
912       aliq,rmean,lnat,lice,condliq, &
913       k1,k2,k3,k4,k5,k6,k7,k8,k9,wt,h2o)
914
915  END SUBROUTINE analytic
916
917  SUBROUTINE HETERO(aw,temp,ptot,hnm,qj,ws, &
918     hhcl,hhocl,hhobr,hclono2,hhbr, &
919     rice,nice,rnat,nnat, &
920     aliq,rmean,lnat,lice,condliq, &
921     k1,k2,k3,k4,k5,k6,k7,k8,k9,wt,h2o)
922
923    !C ROUTINE TO CALCULATE UPTAKE COEFFICIENTS (GAMMA VALUES).
924    !C GAMMA VALUES ARE INDICATED BY VARIABLES WITH PREFIX 'G', FOR
925    !C EXAMPLE GHOCLHCL IS THE GAMMA VALUE OF HOCL DUE TO REACTION WITH
926    !C HCL IN THE DROPLETS.
927    !C FROM THE GAMMA VALUES, SECOND ORDER RATE CONSTANTS ARE CALCULATED.
928    !C THESE HAVE THE PREFIX 'R' AND HAVE UNITS CM3 MOLECULE-1 S-1. FOR
929    !C EXAMPLE, THE LOSS OF CLNO3 AND HCL DUE TO THE HETEROGENEOUS REACTION
930    !C CLNO3+HCL -> CL2+HNO3 IS D(CLNO3)/DT (UNITS MOLECULE CM-3 S-1) =
931    !C -RCLNO3HCL.[CLNO3].[HCL], WHERE [CLNO3] AND [HCL] ARE THE
932    !C ****TOTAL**** AMOUNTS OF THESE SPECIES IN UNITS MOLECULE CM-3.
933
934    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
935    !c    F. LEFEVRE (SA/CNRS) from REPROBUS
936    !c
937    !c    Adapted to LMDz-INCA:
938    !c
939    !c    L. JOURDAIN (SA)  2004
940    !c    D. HAUGLUSTAINE (LSCE) 06/2005
941    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
942
943    use SPECIES_NAMES
944
945    INTEGER :: i, ilon, iniv
946
947    REAL, PARAMETER :: PI=3.1415
948    REAL, PARAMETER :: ZERO = 1.e-20
949
950    REAL :: t0, t, dt
951    REAL :: zh2o, zhcl, zhocl, zhobr
952    REAL :: biga, eta, ah 
953    REAL :: dclono2, cclono2
954    REAL :: gbh2o, grxn, gbhcl, fhcl, gs, gps, gbhclp, gb
955    REAL :: gclono2, gclono2hcl, gclono2h2o
956    REAL :: rclono2h2o, rclono2hcl
957    REAL :: chocl, dhocl, fhocl, ghoclhcl, rhoclhcl
958    REAL :: ratio
959    REAL :: dhobr, fhobr, chobr
960    REAL :: ghobrhcl, rhobrhcl
961    REAL :: dhcl, chcl
962    REAL :: cbar
963    REAL :: gxrn
964    REAL :: gn2o5h2o, rn2o5h2o
965    REAL :: gbrno3h2o, rbrno3h2o
966    REAL :: gclno3hclnat, gclno3h2onat 
967    REAL :: gn2o5h2onat, gn2o5hclnat, ghoclhclnat, gbrno3h2onat, ghobrhclnat, ghobrhbrnat, ghoclhbrnat
968    REAL :: rclno3h2onat, rclno3hclnat, rn2o5h2onat, rbrno3h2onat, rn2o5hclnat, rhoclhclnat, rhobrhclnat
969    REAL :: gclno3hclice, gclno3h2oice, gn2o5h2oice, gn2o5hclice, ghoclhclice, gbrno3h2oice, ghobrhclice, ghobrhbrice, ghoclhbrice
970    REAL :: rclno3hclice, rclno3h2oice, rn2o5h2oice, rn2o5hclice, rhoclhclice, rbrno3h2oice, rhobrhclice, rhobrhbrice
971
972    REAL TEMP(PLON,PLEV), PTOT(PLON,PLEV), HNM(PLON,PLEV)
973    REAL CK(PLON,PLEV,NBCON), qj(PLON,PLEV,NBCON)
974
975    REAL, DIMENSION(PLON,PLEV) :: k1
976    REAL, DIMENSION(PLON,PLEV) :: k2
977    REAL, DIMENSION(PLON,PLEV) :: k3
978    REAL, DIMENSION(PLON,PLEV) :: k4
979    REAL, DIMENSION(PLON,PLEV) :: k5
980    REAL, DIMENSION(PLON,PLEV) :: k6
981    REAL, DIMENSION(PLON,PLEV) :: k7
982    REAL, DIMENSION(PLON,PLEV) :: k8
983    REAL, DIMENSION(PLON,PLEV) :: k9
984
985    REAL, DIMENSION(PLON,PLEV) :: k1l
986    REAL, DIMENSION(PLON,PLEV) :: k2l
987    REAL, DIMENSION(PLON,PLEV) :: k3l
988    REAL, DIMENSION(PLON,PLEV) :: k4l
989    REAL, DIMENSION(PLON,PLEV) :: k5l
990    REAL, DIMENSION(PLON,PLEV) :: k6l
991    REAL, DIMENSION(PLON,PLEV) :: k7l
992    REAL, DIMENSION(PLON,PLEV) :: k8l
993    REAL, DIMENSION(PLON,PLEV) :: k9l
994
995    REAL, DIMENSION(PLON,PLEV) ::  k1s
996    REAL, DIMENSION(PLON,PLEV) ::  k2s
997    REAL, DIMENSION(PLON,PLEV) ::  k3s
998    REAL, DIMENSION(PLON,PLEV) ::  k4s
999    REAL, DIMENSION(PLON,PLEV) ::  k5s
1000    REAL, DIMENSION(PLON,PLEV) ::  k6s
1001    REAL, DIMENSION(PLON,PLEV) ::  k7s
1002    REAL, DIMENSION(PLON,PLEV) ::  k8s
1003    REAL, DIMENSION(PLON,PLEV) ::  k9s
1004
1005    REAL H2O(PLON,PLEV), H2OCONC(PLON,PLEV)
1006
1007    REAL WS(PLON,PLEV)
1008    REAL HHCL(PLON,PLEV), HHOCL(PLON,PLEV)
1009    REAL  HHOBR(PLON,PLEV), HCLONO2(PLON,PLEV) 
1010    REAL  HHBR(PLON,PLEV)
1011    REAL RICE(PLON,PLEV)
1012    REAL   RNAT(PLON,PLEV), ALIQ(PLON,PLEV)
1013    REAL   RMEAN(PLON,PLEV)
1014    REAL NNAT(PLON,PLEV), NICE(PLON,PLEV)
1015
1016    INTEGER CONDLIQ(PLON,PLEV)
1017    INTEGER LNAT(PLON,PLEV), LICE(PLON,PLEV)
1018    !c
1019    !c     additions pour jpl 2000
1020    !c
1021    real aw(PLON,PLEV)
1022    real wt(PLON,PLEV)
1023    real kh, kh2o, khydr
1024    real phcl, mhcl, khcl
1025    real pclono2, lclono2, fclono2
1026    real phobr, mhobr, k1hobrhcl, k2hobrhcl
1027    real phbr, mhbr, lhbr, k1hoclhbr, k2hoclhbr
1028    real khoclhcl, lhocl, phocl, mhocl
1029    real lhobr, lhcl
1030
1031
1032! Initialisation
1033
1034    k1l(:,:) = 0.
1035    k2l(:,:) = 0.
1036    k3l(:,:) = 0.
1037    k4l(:,:) = 0.
1038    k5l(:,:) = 0.
1039    k6l(:,:) = 0.
1040    k7l(:,:) = 0.
1041    k8l(:,:) = 0.
1042    k9l(:,:) = 0.
1043    k1s(:,:) = 0.
1044    k2s(:,:) = 0.
1045    k3s(:,:) = 0.
1046    k4s(:,:) = 0.
1047    k5s(:,:) = 0.
1048    k6s(:,:) = 0.
1049    k7s(:,:) = 0.
1050    k8s(:,:) = 0.
1051    k9s(:,:) = 0.
1052
1053    h2oconc(:,:) = h2o(:,:)*hnm(:,:)
1054    DO i = 1, nbcon 
1055    ck(:,:,i) = qj(:,:,i)*hnm(:,:)
1056    ENDDO
1057
1058    !C
1059    !C ******************************************************
1060    !C THE FOLLOWING PARAMETERS ARE NEEDED IN THIS ROUTINE!!
1061    !C ******************************************************
1062    !C
1063    !C RNAT=MEAN RADIUS OF NAT PARTICLES (CM)
1064    !C NNAT=NUMBER OF NAT PARTICLES PER CM3 AIR
1065    !C RICE=MEAN RADIUS OF ICE PARTICLES (CM)
1066    !C NICE=NUMBER OF ICE PARTICLES PER CM3 AIR
1067    !C RMEAN=MEAN RADIUS OF LIQUID AEROSOL DISTRIBUTION (CM)
1068    !C ALIQ=TOTAL AREA OF LIQUID AEROSOLS (CM2 CM-3 AIR)
1069
1070    DO ILON = 1, PLON
1071      DO INIV = nivbot, nivtop
1072
1073      IF ( condliq(ilon,iniv) .EQ. 1 ) THEN
1074
1075      T = TEMP(ILON,INIV)
1076      !C
1077      !C Z VARIABLES ARE SET TO AVOID DIVISION BY ZERO
1078      !C
1079      ZH2O  = MAX(h2oconc(ILON,INIV),1.E-08*HNM(ILON,INIV))
1080      ZHCL  = MAX(CK(ILON,INIV,id_HCl),1.E-13*HNM(ILON,INIV))
1081      ZHOCL = MAX(CK(ILON,INIV,id_HOCl),1.E-13*HNM(ILON,INIV))
1082      ZHOBR = MAX(CK(ILON,INIV,id_HOBr),1.E-13*HNM(ILON,INIV))
1083      !c
1084      !c     pressions de hcl, clono2, hobr, et hbr (atm)
1085      !c
1086      phcl    = (ck(ilon,iniv,id_HCl)/hnm(ilon,iniv))*ptot(ilon,iniv)/1013.
1087      pclono2 = (ck(ilon,iniv,id_ClONO2)/hnm(ilon,iniv))*ptot(ilon,iniv)/1013.
1088      phocl   = (ck(ilon,iniv,id_HOCl)/hnm(ilon,iniv))*ptot(ilon,iniv)/1013.
1089      phobr   = (ck(ilon,iniv,id_HOBr)/hnm(ilon,iniv))*ptot(ilon,iniv)/1013.
1090      phbr    = (ck(ilon,iniv,id_HBr)/hnm(ilon,iniv))*ptot(ilon,iniv)/1013.
1091      !c
1092      !C =====================================================================
1093      !C ====================== CLONO2+HCL -> CL2+HNO3 =======================
1094      !C ====================== CLONO2+H2O -> HOCL+HNO3 ======================
1095      !C ========================= ON LIQUID AEROSOL =========================
1096      !C =====================================================================
1097      !c
1098      !c     d'apres jpl 2000. On ne tient pas compte de la deposition
1099      !c     de hno3 (solutions ternaires) sur les probabilites de reaction.
1100      !c
1101      t0   = 144.11 + 0.166*wt(ilon,iniv) - 0.015*wt(ilon,iniv)**2 &
1102         + 2.18e-4*wt(ilon,iniv)**3
1103      biga = 169.5 + 5.18*wt(ilon,iniv) - 0.0825*wt(ilon,iniv)**2 &
1104         + 3.27e-3*wt(ilon,iniv)**3
1105      !c
1106      !c     eta : viscosity of h2so4 solution, cp
1107      !c
1108      !     Temperature check
1109      dt = t - t0
1110      IF ( dt < 1.) THEN
1111          dt = 1.
1112          PRINT *, 'Warning : temperature problem in hetchem (ILON, T, T0) : ',  ilon, t, t0
1113      END IF
1114      eta = biga*t**(-1.43)*exp(448./dt)
1115      !c
1116      !c     ah : acid activity in molarity
1117      !c
1118      ah = exp(60.51 - 0.095*wt(ilon,iniv) + 0.0077*wt(ilon,iniv)**2 &
1119         -1.61e-5*wt(ilon,iniv)**3 - (1.76 + &
1120         2.52e-4*wt(ilon,iniv)**2)*sqrt(t) &
1121         + (-805.89 + 253.05*wt(ilon,iniv)**0.076)/sqrt(t))
1122      !c
1123      !c     dclono2 : clono2 diffusivity, klassen et al., cm2 cm-1
1124      !c
1125      dclono2 = 5.e-8*t/eta
1126      !c
1127      !c     cbar
1128      !c
1129      cclono2 = 1474.*sqrt(t)
1130      !c
1131      !c     kh2o : shi et al., s-1
1132      !c
1133      kh2o = 1.95e10*exp(-2800./t)
1134      !c
1135      !c     kh : shi et al., s-1
1136      !c
1137      kh = 1.22e12*exp(-6200./t)
1138      !c
1139      !c     khydr : shi et al., s-1
1140      !c
1141      khydr = kh2o*aw(ilon,iniv) + kh*ah*aw(ilon,iniv)
1142
1143      gbh2o = 4*hclono2(ilon,iniv)*0.082*t*sqrt(dclono2*khydr)  &
1144         / cclono2
1145
1146      mhcl = hhcl(ilon,iniv)*phcl
1147      !c
1148      !c     khcl : shi et al., s-1
1149      !c
1150      khcl = 7.9e11*ah*dclono2*mhcl
1151      !c
1152      !c     lclono2 : reacto-diffusive length, cm
1153      !c
1154      lclono2 = sqrt(dclono2/(khydr + khcl))
1155      !c
1156      !c     fclono2
1157      !c
1158      fclono2 = 1./tanh(rmean(ilon,iniv)/lclono2)  &
1159         - lclono2/rmean(ilon,iniv)
1160
1161      grxn  = fclono2*gbh2o*sqrt(1. + khcl/khydr)
1162      gbhcl = grxn*khcl/(khcl + khydr)
1163      gs    = 66.12*hclono2(ilon,iniv)*mhcl*exp(-1374./t)
1164
1165      fhcl  = 1. &
1166         /(1 + 0.612*(gs + gbhcl)*pclono2/phcl)
1167
1168      gps    = fhcl*gs
1169      gbhclp = fhcl*gbhcl
1170      gb     = gbhclp + grxn*khydr/(khcl + khydr)
1171
1172      gclono2 = 1./(1. + 1./(gps + gb))
1173
1174      gclono2hcl = gclono2*(gps + gbhclp)/(gps + gb)
1175      gclono2h2o = gclono2 - gclono2hcl
1176
1177      rclono2h2o = 0.25*gclono2h2o*cclono2*aliq(ilon,iniv)/zh2o
1178      k1l(ilon,iniv) = rclono2h2o
1179
1180      rclono2hcl = 0.25*gclono2hcl*cclono2*aliq(ilon,iniv)/zhcl
1181      k2l(ilon,iniv) = rclono2hcl
1182      !c
1183      !C =====================================================================
1184      !C ========================== HOCL + HCL ===============================
1185      !C ======================= ON LIQUID AEROSOL ===========================
1186      !C =====================================================================
1187      !c
1188      !c     d'apres jpl 2000
1189      !c
1190      !c     cbar
1191      !c
1192      chocl = 2009.*SQRT(t)
1193      !c
1194      !c     dhocl : hocl diffusivity, klassen et al., cm2 cm-1
1195      !c
1196      dhocl = 6.4e-8*t/eta
1197      !c
1198      !c     khoclhcl : shi et al., s-1
1199      !c
1200      khoclhcl = 1.25e9*ah*dhocl*mhcl
1201      !c
1202      !c     lhocl : reacto-diffusive length, cm
1203      !c
1204      lhocl = SQRT(dhocl/khoclhcl)
1205      !c
1206      !c     fhocl
1207      !c
1208      fhocl = 1./TANH(rmean(ilon,iniv)/lhocl) &
1209         - lhocl/rmean(ilon,iniv)
1210
1211      grxn = 4.*hhocl(ilon,iniv)*0.082*t*SQRT(dhocl*khoclhcl)/chocl
1212      !c
1213      !c  modif line ghoclhcl commenter
1214      !c     ghoclhcl = 1./(1. + 1./(fhocl*grxn*fhcl))
1215      !cc    a la place
1216
1217      IF ( (fhocl.LE.zero) .OR. (fhcl.LE.zero) .OR. (grxn.LE.zero) ) THEN
1218          ghoclhcl = 0.
1219      ELSE
1220          ghoclhcl = 1./(1. + 1./(fhocl*grxn*fhcl))
1221      ENDIF
1222
1223      rhoclhcl = 0.25*ghoclhcl*chocl*aliq(ilon,iniv)/zhcl
1224      k5l(ilon,iniv) = rhoclhcl
1225      !C
1226      !C ====================================================================
1227      !C =========================== HOBR + HCL =============================
1228      !C ======================= ON LIQUID AEROSOL ==========================
1229      !C ====================================================================
1230      !c
1231      !c     d'apres waschewsky and abbatt, j. phys. chem. a,
1232      !c     5312-5320, 1999.
1233      !c
1234      !c     mhobr : concentration de hobr en phase liquide
1235      !c
1236      mhobr = hhobr(ilon,iniv)*phobr
1237
1238      k2hobrhcl = EXP(0.542*wt(ilon,iniv) - 6.44e3/t + 10.3)
1239
1240      ratio = mhobr/mhcl
1241
1242      IF (ratio .LT. 1.) THEN
1243          !c
1244          !c        hcl est en exces dans l'aerosol.
1245          !c        hobr est le reactif limitant.
1246          !c
1247          k1hobrhcl = k2hobrhcl*mhcl
1248          !c
1249          !c        dhobr : hobr diffusivity, klassen et al., cm2 cm-1
1250          !c
1251          dhobr = 6.2e-8*t/eta
1252          !c
1253          !c        lhobr : reacto-diffusive length, cm
1254          !c
1255          lhobr = SQRT(dhobr/k1hobrhcl)
1256
1257          fhobr = 1./TANH(rmean(ilon,iniv)/lhobr) &
1258             - lhobr/rmean(ilon,iniv)
1259
1260          chobr = 1477.*SQRT(t)
1261
1262          ghobrhcl = 4.*hhobr(ilon,iniv)*0.082*t &
1263             *SQRT(dhobr*k1hobrhcl)*fhobr/chobr
1264
1265          rhobrhcl = 0.25*ghobrhcl*chobr*aliq(ilon,iniv)/zhcl
1266      ELSE
1267          !c
1268          !c        hobr est en exces dans l'aerosol.
1269          !c        hcl est le reactif limitant.
1270          !c
1271          k1hobrhcl = k2hobrhcl*mhobr
1272          !c
1273          !c        dhcl : hcl diffusivity, klassen et al., cm2 cm-1
1274          !c
1275          dhcl = 7.8e-8*t/eta
1276          !c
1277          !c        lhcl : reacto-diffusive length, cm
1278          !c
1279          lhcl = SQRT(dhcl/k1hobrhcl)
1280
1281          fhcl = 1./TANH(rmean(ilon,iniv)/lhcl) &
1282             - lhcl/rmean(ilon,iniv)
1283
1284          chcl  = 2408.*SQRT(t)
1285         
1286          ghobrhcl = 4.*hhcl(ilon,iniv)*0.082*t &
1287             *SQRT(dhcl*k1hobrhcl)*fhcl/chcl
1288
1289          rhobrhcl = 0.25*ghobrhcl*chcl*aliq(ilon,iniv)/zhobr
1290      ENDIF
1291
1292      k7l(ilon,iniv) = rhobrhcl
1293      !C
1294      !C ====================================================================
1295      !C =========================== HOBR + HBR =============================
1296      !C ======================= ON LIQUID AEROSOL ==========================
1297      !C ====================================================================
1298      !c
1299      k8l(ilon,iniv) = 0.
1300      !C
1301      !C ====================================================================
1302      !C =========================== HOCL + HBR =============================
1303      !C ======================= ON LIQUID AEROSOL ==========================
1304      !C ====================================================================
1305      !c
1306      !c     mhbr  : concentration de hbr  en phase liquide
1307      !c     mhocl : concentration de hocl en phase liquide
1308      !c
1309      !c     mhbr  = hhbr(ilon,iniv)*phbr
1310      !c     mhocl = hhocl(ilon,iniv)*phocl
1311      !c
1312      !c     k2hoclhbr: abbatt and nowak, j. phys. chem. a, 2131, 1997.
1313      !c     valeur a 228k et 69.3% h2so4
1314      !c
1315      !c     k2hoclhbr = 2.e6
1316      !c
1317      !c     ratio = mhbr/mhocl
1318      !c
1319      !c     if (ratio .lt. 1.) then
1320      !c
1321      !c        hocl est en exces dans l'aerosol.
1322      !c        hbr est le reactif limitant.
1323      !c
1324      !c        k1hoclhbr = k2hoclhbr*mhocl
1325      !c
1326      !c        dhbr : hbr diffusivity, klassen et al., cm2 cm-1
1327      !c
1328      !c        dhbr = 7.9e-8*t/eta
1329      !c        chbr = 1616.*sqrt(t)
1330      !c
1331      !c        lhbr : reacto-diffusive length, cm
1332      !c
1333      !c        lhbr = sqrt(dhbr/k1hoclhbr)
1334      !c
1335      !c        fhbr = 1./tanh(rmean(ilon,iniv)/lhbr)
1336      !c    $         - lhbr/rmean(ilon,iniv)
1337      !c
1338      !c        ghoclhbr = 4.*hhbr(ilon,iniv)*0.082*t
1339      !c    $              *sqrt(dhbr*k1hoclhbr)*fhbr/chbr
1340      !c
1341      !c     else
1342      !c
1343      !c        hbr est en exces dans l'aerosol.
1344      !c        hocl est le reactif limitant.
1345      !c
1346      !c        k1hoclhbr = k2hoclhbr*mhbr
1347      !c
1348      !c        lhocl : reacto-diffusive length, cm
1349      !c
1350      !c        lhocl = sqrt(dhocl/k1hoclhbr)
1351      !c
1352      !c        fhocl = 1./tanh(rmean(ilon,iniv)/lhocl)
1353      !c    $         - lhocl/rmean(ilon,iniv)
1354      !c
1355      !c        ghoclhbr = 4.*hhocl(ilon,iniv)*0.082*t
1356      !c    $              *sqrt(dhocl*k1hoclhbr)*fhocl/chocl
1357      !c     endif
1358      !c
1359      k9l(ilon,iniv) = 0.
1360      !C
1361      !C =====================================================================
1362      !C ======================== N2O5 + H2O =================================
1363      !C ====================== ON LIQUID AEROSOL ============================
1364      !C =====================================================================
1365      !C
1366      GN2O5H2O=0.1
1367      CBAR=1400.1*SQRT(T)
1368
1369      RN2O5H2O=0.25*GN2O5H2O*CBAR*ALIQ(ILON,INIV)/ZH2O
1370      K3L(ILON,INIV) = RN2O5H2O
1371      !c
1372      !C =====================================================================
1373      !C ======================== N2O5 + HCl =================================
1374      !C ====================== ON LIQUID AEROSOL ============================
1375      !C =====================================================================
1376      !C
1377      K4L(ILON,INIV) = 0.
1378      !C
1379      !C =====================================================================
1380      !C ======================== BrONO2 + H2O ===============================
1381      !C ====================== ON LIQUID AEROSOL ============================
1382      !C =====================================================================
1383      !C
1384      !c     parametrisation jpl 2000 (hanson, private comm.)
1385      !c
1386      gxrn = exp(29.24 - 0.396*100.*ws(ilon,iniv)) + 0.114
1387      gbrno3h2o = 1./(1./0.805 + 1./gxrn)
1388
1389      CBAR=1221.4*SQRT(T)
1390
1391      RBRNO3H2O=0.25*GBRNO3H2O*CBAR*ALIQ(ILON,INIV)/ZH2O
1392      K6L(ILON,INIV) = RBRNO3H2O
1393
1394      ELSE !condliq
1395
1396      K1L(ILON,INIV) = 0.
1397      K2L(ILON,INIV) = 0.
1398      K3L(ILON,INIV) = 0.
1399      K4L(ILON,INIV) = 0.
1400      K5L(ILON,INIV) = 0.
1401      K6L(ILON,INIV) = 0.
1402      K7L(ILON,INIV) = 0.
1403      K8L(ILON,INIV) = 0.
1404      K9L(ILON,INIV) = 0.
1405
1406      ENDIF !condliq
1407
1408      END DO
1409    END DO
1410
1411    DO ILON = 1, PLON
1412      DO iniv = nivbot, nivtop
1413
1414      IF (LNAT(ILON,INIV) .EQ. 1) THEN
1415
1416          T = TEMP(ILON,INIV)
1417          !C
1418          !C Z VARIABLES ARE SET TO AVOID DIVISION BY ZERO
1419          !C
1420          ZH2O  = MAX(h2oconc(ILON,INIV),1.E-08*HNM(ILON,INIV))
1421          ZHCL  = MAX(CK(ILON,INIV,id_HCl),1.E-13*HNM(ILON,INIV))
1422          ZHOCL = MAX(CK(ILON,INIV,id_HOCl),1.E-13*HNM(ILON,INIV))
1423          ZHOBR = MAX(CK(ILON,INIV,id_HOBr),1.E-13*HNM(ILON,INIV))
1424          !C
1425          !C =====================================================================
1426          !C ====================== CLNO3 + HCL ==================================
1427          !C ====================== CLNO3 + H2O ==================================
1428          !C ====================== N2O5  + H2O ==================================
1429          !C ====================== N2O5  + HCL ==================================
1430          !C ====================== HOCL  + HCL ==================================
1431          !C ====================== BRNO3 + H2O  =================================
1432          !C ====================== HOBR  + HCL  =================================
1433          !C ====================== HOBR  + HBR  =================================
1434          !C ====================== HOCL  + HBR  =================================
1435          !C ======================= ON NAT ======================================
1436          !C =====================================================================
1437          !C
1438          !C GAMMA VALUES
1439          !C
1440
1441          !DH 2018
1442          !GCLNO3HCLNAT=0.1
1443          GCLNO3HCLNAT=0.2 
1444
1445          GCLNO3H2ONAT=0.004
1446          GN2O5H2ONAT=4.0E-4
1447          GN2O5HCLNAT=3.0E-3
1448          GHOCLHCLNAT=0.1
1449          GBRNO3H2ONAT=0.
1450          GHOBRHCLNAT=0.
1451          GHOBRHBRNAT=0.
1452          GHOCLHBRNAT=0.
1453          !C
1454          !C BECAUSE NAT PARTICLES CAN BE VERY LARGE, GAS DIFFUSION LIMITATION
1455          !C IS TAKEN INTO ACCOUNT. THE SECOND ORDER RATE CONSTANTS ARE
1456          !C CALCULATED FROM THE EQUATION R=G*PI*R**2*CBAR*N/(1+3G.R/(4.L)), WHERE
1457          !C G=GAMMA, R=PARTICLE RADIUS, CBAR=MEAN MOLECULAR SPEED, L=MEAN FREE
1458          !C PATH (TURCO ET AL, JGR, 94, 16493, 1989).
1459          !C
1460          RCLNO3H2ONAT = &
1461             GCLNO3H2ONAT*4.56E4*SQRT(T/97.45)*RNAT(ILON,INIV)**2 &
1462             *NNAT(ILON,INIV)/ &
1463             (1.0+3.3E4*GCLNO3H2ONAT*RNAT(ILON,INIV)*PTOT(ILON,INIV)/T) &
1464             /ZH2O
1465          K1S(ILON,INIV) = RCLNO3H2ONAT
1466
1467          RCLNO3HCLNAT= &
1468             GCLNO3HCLNAT*4.56E4*SQRT(T/97.45)*RNAT(ILON,INIV)**2 &
1469             *NNAT(ILON,INIV)/ &
1470             (1.0+3.3E4*GCLNO3HCLNAT*RNAT(ILON,INIV)*PTOT(ILON,INIV)/T) &
1471             /ZHCL
1472          K2S(ILON,INIV) = RCLNO3HCLNAT
1473
1474          RN2O5H2ONAT  = &
1475             GN2O5H2ONAT*4.56E4*SQRT(T/108.0)*RNAT(ILON,INIV)**2 &
1476             *NNAT(ILON,INIV)/ &
1477             (1.0+3.3E4*GN2O5H2ONAT*RNAT(ILON,INIV)*PTOT(ILON,INIV)/T) &
1478             /ZH2O
1479          K3S(ILON,INIV) = RN2O5H2ONAT
1480
1481          RBRNO3H2ONAT = &
1482             GBRNO3H2ONAT*4.56E4*SQRT(T/142.0)*RNAT(ILON,INIV)**2 &
1483             *NNAT(ILON,INIV)/ &
1484             (1.0+3.3E4*GBRNO3H2ONAT*RNAT(ILON,INIV)*PTOT(ILON,INIV)/T) &
1485             /ZH2O
1486          K6S(ILON,INIV) = RBRNO3H2ONAT
1487
1488          RN2O5HCLNAT= &
1489             GN2O5HCLNAT*4.56E4*SQRT(T/108.0)*RNAT(ILON,INIV)**2 &
1490             *NNAT(ILON,INIV)/ &
1491             (1.0+3.3E4*GN2O5HCLNAT*RNAT(ILON,INIV)*PTOT(ILON,INIV)/T) &
1492             /ZHCL
1493          K4S(ILON,INIV) = RN2O5HCLNAT
1494
1495          RHOCLHCLNAT= &
1496             GHOCLHCLNAT*4.56E4*SQRT(T/52.5)*RNAT(ILON,INIV)**2 &
1497             *NNAT(ILON,INIV)/ &
1498             (1.0+3.3E4*GHOCLHCLNAT*RNAT(ILON,INIV)*PTOT(ILON,INIV)/T) &
1499             /ZHCL
1500          K5S(ILON,INIV) = RHOCLHCLNAT
1501
1502          RHOBRHCLNAT= &
1503             GHOBRHCLNAT*4.56E4*SQRT(T/96.9)*RNAT(ILON,INIV)**2 &
1504             *NNAT(ILON,INIV)/ &
1505             (1.0+3.3E4*GHOBRHCLNAT*RNAT(ILON,INIV)*PTOT(ILON,INIV)/T) &
1506             /ZHCL
1507          K7S(ILON,INIV) = RHOBRHCLNAT
1508
1509          K8S(ILON,INIV) = 0.
1510          K9S(ILON,INIV) = 0.
1511
1512      ENDIF
1513
1514      END DO
1515    END DO
1516
1517    DO ILON = 1, PLON
1518      DO iniv = nivbot, nivtop
1519
1520      IF (LICE(ILON,INIV) .EQ. 1) THEN
1521
1522          T = TEMP(ILON,INIV)
1523          !C
1524          !C Z VARIABLES ARE SET TO AVOID DIVISION BY ZERO
1525          !C
1526          ZH2O  = MAX(h2oconc(ILON,INIV),1.E-08*HNM(ILON,INIV))
1527          ZHCL  = MAX(CK(ILON,INIV,id_HCl),1.E-13*HNM(ILON,INIV))
1528          ZHOCL = MAX(CK(ILON,INIV,id_HOCl),1.E-13*HNM(ILON,INIV))
1529          ZHOBR = MAX(CK(ILON,INIV,id_HOBr),1.E-13*HNM(ILON,INIV))
1530          !C
1531          !C =====================================================================
1532          !C ====================== CLNO3 + HCL ==================================
1533          !C ====================== CLNO3 + H2O ==================================
1534          !C ====================== N2O5  + H2O ==================================
1535          !C ====================== N2O5  + HCL ==================================
1536          !C ====================== HOCL  + HCL ==================================
1537          !C ====================== BRNO3 + H2O  =================================
1538          !C ====================== HOBR  + HCL  =================================
1539          !C ====================== HOBR  + HBR  =================================
1540          !C ====================== HOCL  + HBR  =================================
1541          !C ======================= ON ICE ======================================
1542          !C =====================================================================
1543          !C GAMMA VALUES
1544          !C
1545          GCLNO3HCLICE=0.3
1546          GCLNO3H2OICE=0.3
1547          GN2O5H2OICE=0.02
1548          GN2O5HCLICE=0.03
1549          GHOCLHCLICE=0.2
1550          GBRNO3H2OICE=0.3
1551          GHOBRHCLICE=0.3
1552          GHOBRHBRICE=0.1
1553          GHOCLHBRICE=0.1 !FJegou 13/10/06 JPL 2006
1554          !C
1555          !C BECAUSE ICE PARTICLES CAN BE VERY LARGE, GAS DIFFUSION LIMITATION
1556          !C IS TAKEN INTO ACCOUNT. THE SECOND ORDER RATE CONSTANTS ARE
1557          !C CALCULATED FROM THE EQUATION R=G*PI*R**2*CBAR*N/(1+3G.R/(4.L)), WHERE
1558          !C G=GAMMA, R=PARTICLE RADIUS, CBAR=MEAN MOLECULAR SPEED, L=MEAN FREE
1559          !C PATH (TURCO ET AL, JGR, 94, 16493, 1989).
1560          !C
1561          RCLNO3HCLICE= &
1562             GCLNO3HCLICE*4.56E4*SQRT(T/97.45)*RICE(ILON,INIV)**2 &
1563             *NICE(ILON,INIV)/ &
1564             (1.0+3.3E4*GCLNO3HCLICE*RICE(ILON,INIV)*PTOT(ILON,INIV)/T) &
1565             /ZHCL
1566          K2S(ILON,INIV) = RCLNO3HCLICE
1567
1568          RCLNO3H2OICE= &
1569             GCLNO3H2OICE*4.56E4*SQRT(T/97.45)*RICE(ILON,INIV)**2 &
1570             *NICE(ILON,INIV)/ &
1571             (1.0+3.3E4*GCLNO3H2OICE*RICE(ILON,INIV)*PTOT(ILON,INIV)/T) &
1572             /ZH2O
1573          K1S(ILON,INIV) = RCLNO3H2OICE
1574
1575          RN2O5H2OICE= &
1576             GN2O5H2OICE*4.56E4*SQRT(T/108.0)*RICE(ILON,INIV)**2 &
1577             *NICE(ILON,INIV)/ &
1578             (1.0+3.3E4*GN2O5H2OICE*RICE(ILON,INIV)*PTOT(ILON,INIV)/T) &
1579             /ZH2O
1580          K3S(ILON,INIV) = RN2O5H2OICE
1581
1582          RN2O5HCLICE= &
1583             GN2O5HCLICE*4.56E4*SQRT(T/108.0)*RICE(ILON,INIV)**2 &
1584             *NICE(ILON,INIV)/ &
1585             (1.0+3.3E4*GN2O5HCLICE*RICE(ILON,INIV)*PTOT(ILON,INIV)/T) &
1586             /ZHCL
1587          K4S(ILON,INIV) = RN2O5HCLICE
1588
1589          RHOCLHCLICE= &
1590             GHOCLHCLICE*4.56E4*SQRT(T/52.5)*RICE(ILON,INIV)**2 &
1591             *NICE(ILON,INIV)/ &
1592             (1.0+3.3E4*GHOCLHCLICE*RICE(ILON,INIV)*PTOT(ILON,INIV)/T) &
1593             /ZHCL
1594          K5S(ILON,INIV) = RHOCLHCLICE
1595
1596          RBRNO3H2OICE= &
1597             GBRNO3H2OICE*4.56E4*SQRT(T/142.0)*RICE(ILON,INIV)**2 &
1598             *NICE(ILON,INIV)/ &
1599             (1.0+3.3E4*GBRNO3H2OICE*RICE(ILON,INIV)*PTOT(ILON,INIV)/T) &
1600             /ZH2O
1601          K6S(ILON,INIV) = RBRNO3H2OICE
1602
1603          RHOBRHCLICE= &
1604             GHOBRHCLICE*4.56E4*SQRT(T/96.9)*RICE(ILON,INIV)**2 &
1605             *NICE(ILON,INIV)/ &
1606             (1.0+3.3E4*GHOBRHCLICE*RICE(ILON,INIV)*PTOT(ILON,INIV)/T) &
1607             /ZHCL
1608          K7S(ILON,INIV) = RHOBRHCLICE
1609
1610          RHOBRHBRICE= &
1611             GHOBRHBRICE*4.56E4*SQRT(T/96.9)*RICE(ILON,INIV)**2 &
1612             *NICE(ILON,INIV)/ &
1613             (1.0+3.3E4*GHOBRHBRICE*RICE(ILON,INIV)*PTOT(ILON,INIV)/T) &
1614             /ZHOBR
1615          K8S(ILON,INIV) = RHOBRHBRICE
1616
1617      END IF
1618
1619      END DO
1620    END DO
1621
1622    DO ILON = 1, PLON
1623      DO iniv = nivbot, nivtop
1624      K1(ILON,INIV) = K1L(ILON,INIV)+ (LNAT(ILON,INIV) + LICE(ILON,INIV))*K1S(ILON,INIV)
1625      K2(ILON,INIV) = K2L(ILON,INIV)+ (LNAT(ILON,INIV) + LICE(ILON,INIV))*K2S(ILON,INIV)
1626      K3(ILON,INIV) = K3L(ILON,INIV)+ (LNAT(ILON,INIV) + LICE(ILON,INIV))*K3S(ILON,INIV)
1627      K4(ILON,INIV) = K4L(ILON,INIV)+ (LNAT(ILON,INIV) + LICE(ILON,INIV))*K4S(ILON,INIV)
1628      K5(ILON,INIV) = K5L(ILON,INIV)+ (LNAT(ILON,INIV) + LICE(ILON,INIV))*K5S(ILON,INIV)
1629      K6(ILON,INIV) = K6L(ILON,INIV)+ (LNAT(ILON,INIV) + LICE(ILON,INIV))*K6S(ILON,INIV)
1630      K7(ILON,INIV) = K7L(ILON,INIV)+ (LNAT(ILON,INIV) + LICE(ILON,INIV))*K7S(ILON,INIV)
1631      K8(ILON,INIV) = K8L(ILON,INIV)+ (LNAT(ILON,INIV) + LICE(ILON,INIV))*K8S(ILON,INIV)
1632      K9(ILON,INIV) = 0.
1633      END DO
1634    END DO
1635
1636    DO ILON = 1, PLON
1637      DO iniv = nivbot, nivtop
1638      K1(ILON,INIV) = MAX(K1(ILON,INIV),0.)
1639      K2(ILON,INIV) = MAX(K2(ILON,INIV),0.)
1640      K3(ILON,INIV) = MAX(K3(ILON,INIV),0.)
1641      K4(ILON,INIV) = MAX(K4(ILON,INIV),0.)
1642      K5(ILON,INIV) = MAX(K5(ILON,INIV),0.)
1643      K6(ILON,INIV) = MAX(K6(ILON,INIV),0.)
1644      K7(ILON,INIV) = MAX(K7(ILON,INIV),0.)
1645      K8(ILON,INIV) = MAX(K8(ILON,INIV),0.)
1646      K9(ILON,INIV) = MAX(K9(ILON,INIV),0.)
1647      END DO
1648    END DO
1649
1650    RETURN
1651  END SUBROUTINE hetero
1652
1653  SUBROUTINE density(WS,WN,TEMP,DENS)
1654    !C
1655    !C     DENSITY OF TERNARY SOLUTION IN G/CM3
1656    !C     WS ,WN ARE WT FRACTION,
1657    !C     FITTED TO 0.05<WS+WN<0.70 WT FRACTION, BUT EXTRAPOLATES WELL
1658    !C     185 < T (K)
1659
1660    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1661    !c    F. LEFEVRE (SA/CNRS) from REPROBUS
1662    !c
1663    !c    Adapted to LMDz-INCA:
1664    !c
1665    !c    L. JOURDAIN (SA)  2004
1666    !c    D. HAUGLUSTAINE (LSCE) 06/2005
1667    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1668
1669    INTEGER :: ilon, iniv
1670
1671    REAL :: t, w, wh, v1, vs, vn, vmcal
1672
1673    REAL WS(PLON,PLEV),WN(PLON,PLEV),TEMP(PLON,PLEV)
1674    REAL     DENS(PLON,PLEV)
1675    REAL X2(22)
1676    SAVE X2
1677!$OMP THREADPRIVATE(X2)
1678    DATA X2/ &
1679       2.393284E-02,-4.359335E-05,7.961181E-08,0.0,-0.198716351, &
1680       1.39564574E-03,-2.020633E-06,0.51684706,-3.0539E-03, &
1681       4.505475E-06,-0.30119511,1.840408E-03,-2.7221253742E-06, &
1682       -0.11331674116,8.47763E-04,-1.22336185E-06,0.3455282, &
1683       -2.2111E-03,3.503768245E-06,-0.2315332,1.60074E-03, &
1684       -2.5827835E-06/ 
1685
1686    DO ILON = 1, PLON
1687      DO iniv = nivbot, nivtop
1688
1689      T = TEMP(ILON,INIV)
1690      W = WS(ILON,INIV) + WN(ILON,INIV)
1691      WH= 1.0 - W
1692      V1=X2(1)+X2(2)*T+X2(3)*T**2+X2(4)*T**3
1693      VS=X2(5)+X2(6)*T+X2(7)*T**2+(X2(8)+X2(9)*T+X2(10)*T**2)*W &
1694         +(X2(11)+X2(12)*T+X2(13)*T**2)*W*W
1695      VN=X2(14)+X2(15)*T+X2(16)*T**2+(X2(17)+X2(18)*T+X2(19)*T**2)*W &
1696         +(X2(20)+X2(21)*T+X2(22)*T**2)*W*W
1697      VMCAL=WH/18.0160*V1 + VS*WS(ILON,INIV)/98.080 &
1698         + VN*WN(ILON,INIV)/63.0160
1699      DENS(ILON,INIV) = 1.0/VMCAL*0.001
1700
1701      END DO
1702    END DO
1703   
1704    RETURN
1705  END SUBROUTINE density
1706
1707  SUBROUTINE STRSEDCALC (hnm, pdel, qj1, dt, h2o, h2oc)
1708    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1709    !c    F. LEFEVRE (SA/CNRS) from REPROBUS
1710    !c
1711    !c    Adapted to LMDz-INCA:
1712    !c
1713    !c    L. JOURDAIN (SA)  2004
1714    !c    D. HAUGLUSTAINE (LSCE) 06/2005
1715    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1716
1717    USE SPECIES_NAMES
1718    USE AIRPLANE_SRC, ONLY : itrop
1719
1720    INTEGER :: ilon, iniv
1721    !c
1722    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1723    !c     calcule les quantites de h2o et hno3 sedimentees
1724    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1725    !c
1726    real pdel(PLON,PLEV)
1727    real qj1(PLON,PLEV,PCNST)
1728    real dt
1729    real hnm(PLON,PLEV)
1730    real h2oc(PLON,PLEV)
1731    real h2o(PLON,PLEV)
1732    real dz, fracup, fracdown
1733    !c
1734    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1735    !c     boucle sur les latitudes
1736    !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1737    !ccc      calcul de la concentration
1738    !c
1739    !ccc      calcul des fractions sedimentees
1740    !c
1741    DO ilon = 1,PLON
1742      DO iniv =itrop(ilon),nivtop-1,1
1743
1744        dz =pdel(ilon,iniv)/(hnm(ilon,iniv)*1.e06*28.9*1.e-03) &
1745           /9.8*6.02e23
1746
1747        fracup   = vsed(ilon,iniv+1)*dt/dz
1748        fracdown = vsed(ilon,iniv  )*dt/dz
1749
1750        fracup   = MIN(fracup,1.0)
1751        fracdown = MIN(fracdown,1.0)
1752        !c
1753        !ccc            sedimentation de h2o
1754
1755        h2oc(ilon,iniv) = &
1756           h2oc(ilon,iniv) &
1757           + h2oc(ilon,iniv+1) &
1758           *hnm(ilon,iniv+1)/hnm(ilon,iniv)*fracup &
1759           - h2oc(ilon,iniv)*fracdown
1760
1761        !ccc            update h2o
1762   
1763        h2o(ilon,iniv) = qj1(ilon,iniv,id_H2O) + h2oc(ilon,iniv)
1764
1765        !ccc            sedimentation de hno3
1766
1767        qj1(ilon,iniv,id_HNO3) = &
1768           qj1(ilon,iniv,id_HNO3) &
1769           + qj1(ilon,iniv+1,id_HNO3) &
1770           *(1. - parthno3sl(ilon,iniv+1)) &
1771           *hnm(ilon,iniv+1)/hnm(ilon,iniv)*fracup &
1772           - qj1(ilon,iniv,id_HNO3) &
1773           *(1. - parthno3sl(ilon,iniv))*fracdown
1774
1775      END DO
1776    END DO
1777
1778    RETURN
1779  END SUBROUTINE STRSEDCALC
1780
1781END MODULE hetchem
1782#endif
Note: See TracBrowser for help on using the repository browser.