source: trunk/LMDZ.MARS/libf/aeronomars/concentrations.F @ 461

Last change on this file since 461 was 370, checked in by aslmd, 13 years ago

LMDZ.MARS: corrected an incorrect line in callradite.F introduced in previous commits for scanvenging. included a more up-to-date version of concentrations.F by FL.

File size: 5.6 KB
Line 
1      SUBROUTINE concentrations(pplay,pt,pdt,pq,pdq,ptimestep)
2                                             
3      implicit none
4
5c=======================================================================
6c CALCULATION OF MEAN MOLECULAR MASS, Cp, Akk and R
7c
8c mmean(ngridmx,nlayermx)       amu
9c cpnew(ngridmx,nlayermx)       J/kg/K
10c rnew(ngridmx,nlayermx)        J/kg/K
11c akknew(ngridmx,nlayermx)      coefficient of thermal concduction
12c
13c version: March 2011 - Franck Lefevre
14c=======================================================================
15
16c    Declarations
17c    ------------
18 
19#include "dimensions.h"
20#include "dimphys.h"
21#include "comcstfi.h"
22#include "callkeys.h"
23#include "comdiurn.h"
24#include "chimiedata.h"
25#include "tracer.h"
26#include "conc.h"
27
28c    Input/Output
29c    ------------
30
31      real pplay(ngridmx,nlayermx)
32      real pt(ngridmx,nlayermx)
33      real pdt(ngridmx,nlayermx)
34      real pq(ngridmx,nlayermx,nqmx)
35      real pdq(ngridmx,nlayermx,nqmx)
36      real ptimestep
37
38c    Local variables
39c    ---------------
40
41      integer       :: l, ig, n, k
42      integer, save :: gind(ncomp)
43      real          :: ni(nqmx), ntot
44      real          :: zq(ngridmx,nlayermx,ncomp)
45      real          :: zt(ngridmx,nlayermx)
46      real, save    :: aki(ncomp)
47      real, save    :: cpi(ncomp)
48
49      logical, save :: firstcall = .true.
50
51cccccccccccccccccccccccccccccccccccccccccccccccccccccccc
52c     tracer numbering for the thermal conduction and
53c     specific heat coefficients
54cccccccccccccccccccccccccccccccccccccccccccccccccccccccc
55
56      integer,parameter :: i_co2  = 1
57      integer,parameter :: i_co   = 2
58      integer,parameter :: i_o    = 3
59      integer,parameter :: i_o1d  = 4
60      integer,parameter :: i_o2   = 5
61      integer,parameter :: i_o3   = 6
62      integer,parameter :: i_h    = 7
63      integer,parameter :: i_h2   = 8
64      integer,parameter :: i_oh   = 9
65      integer,parameter :: i_ho2  = 10
66      integer,parameter :: i_h2o2 = 11
67      integer,parameter :: i_ch4  = 12
68      integer,parameter :: i_n2   = 13
69      integer,parameter :: i_ar   = 14
70      integer,parameter :: i_h2o  = 15
71
72      if (firstcall) then
73
74cccccccccccccccccccccccccccccccccccccccccccccccccccccccc
75c        initializations at first call:
76c        fill local array of tracer indexes
77cccccccccccccccccccccccccccccccccccccccccccccccccccccccc
78
79         gind(i_co2)   =  igcm_co2     ! co2
80         gind(i_co)    =  igcm_co      ! co
81         gind(i_o)     =  igcm_o       ! o
82         gind(i_o1d)   =  igcm_o1d     ! o1d
83         gind(i_o2)    =  igcm_o2      ! o2
84         gind(i_o3)    =  igcm_o3      ! o3
85         gind(i_h)     =  igcm_h       ! h
86         gind(i_h2)    =  igcm_h2      ! h2
87         gind(i_oh)    =  igcm_oh      ! oh
88         gind(i_ho2)   =  igcm_ho2     ! ho2
89         gind(i_h2o2)  =  igcm_h2o2    ! h2o2
90         gind(i_ch4)   =  igcm_ch4     ! ch4
91         gind(i_n2)    =  igcm_n2      ! n2
92         gind(i_ar)    =  igcm_ar      ! ar
93         gind(i_h2o)   =  igcm_h2o_vap ! h2o
94
95cccccccccccccccccccccccccccccccccccccccccccccccccccccccc
96c    Thermal conductivity and specific heat coefficients
97cccccccccccccccccccccccccccccccccccccccccccccccccccccccc
98
99         aki(i_co2)   = 3.072e-4
100         aki(i_co)    = 4.87e-4
101         aki(i_o)     = 7.59e-4
102         aki(i_o1d)   = 7.59e-4    !?
103         aki(i_o2)    = 5.68e-4
104         aki(i_o3)    = 3.00e-4    !?
105         aki(i_h)     = 0.0
106         aki(i_h2)    = 36.314e-4
107         aki(i_oh)    = 7.00e-4    !?
108         aki(i_ho2)   = 0.0
109         aki(i_h2o2)  = 0.0
110         aki(i_ch4)   = 0.0        !?
111         aki(i_n2)    = 5.6e-4
112         aki(i_ar)    = 0.0        !?
113         aki(i_h2o)   = 0.0
114
115         cpi(i_co2)   = 0.834e3
116         cpi(i_co)    = 1.034e3
117         cpi(i_o)     = 1.3e3
118         cpi(i_o1d)   = 1.3e3    !?
119         cpi(i_o2)    = 0.9194e3
120         cpi(i_o3)    = 0.800e3  !?
121         cpi(i_h)     = 20.780e3
122         cpi(i_h2)    = 14.266e3
123         cpi(i_oh)    = 1.045e3
124         cpi(i_ho2)   = 1.065e3  !?
125         cpi(i_h2o2)  = 1.000e3  !?
126         cpi(i_ch4)   = 1.000e3  !?
127         cpi(i_n2)    = 1.034e3
128         cpi(i_ar)    = 1.000e3  !?
129         cpi(i_h2o)   = 1.870e3
130
131         firstcall=.false.
132
133      end if ! of if (firstcall)
134c
135c     initializations
136c
137      mmean(:,:)  = 0.
138      cpnew(:,:)  = 0.
139      akknew(:,:) = 0.
140c
141c     update temperature
142c
143      do l = 1,nlayermx
144         do ig = 1,ngridmx
145            zt(ig,l) = pt(ig,l) + pdt(ig,l)*ptimestep
146         end do
147      end do
148c
149c     update tracers
150c
151      do l = 1,nlayermx
152         do ig = 1,ngridmx
153            do n = 1,ncomp
154               zq(ig,l,n) = max(1.e-30, pq(ig,l,gind(n))
155     $                                + pdq(ig,l,gind(n))*ptimestep)
156            end do
157         end do
158      end do
159c
160c     mmean : mean molecular mass
161c     rnew  : specific gas constant
162c
163      do l = 1,nlayermx
164         do ig = 1,ngridmx
165            do n = 1, ncomp
166               mmean(ig,l) = mmean(ig,l) + zq(ig,l,n)/mmol(gind(n))
167            end do
168            mmean(ig,l) = 1./mmean(ig,l)
169            rnew(ig,l) = 8.314/mmean(ig,l)*1.e3     ! J/kg/K           
170         end do
171      end do
172c
173c     cpnew  : specicic heat
174c     akknew : thermal conductivity cofficient
175c     
176      do l = 1,nlayermx
177         do ig = 1,ngridmx
178            ntot = pplay(ig,l)/(1.381e-23*zt(ig,l))*1.e-6  ! in #/cm3
179            do n = 1,ncomp
180               ni(n) = ntot*zq(ig,l,n)*mmean(ig,l)/mmol(gind(n))
181               cpnew(ig,l) = cpnew(ig,l) + ni(n)*cpi(n)
182               akknew(ig,l) = akknew(ig,l) + ni(n)*aki(n)
183            end do
184            cpnew(ig,l) = cpnew(ig,l)/ntot
185            akknew(ig,l) = akknew(ig,l)/ntot
186         end do
187c        print*, l, mmean(1,l), cpnew(1,l), rnew(1,l)
188      end do
189
190      return
191      end
Note: See TracBrowser for help on using the repository browser.