1 | !$Id: pht_tables_mod.F90 104 2008-12-23 10:28:51Z acosce $ |
---|
2 | !! ========================================================================= |
---|
3 | !! INCA - INteraction with Chemistry and Aerosols |
---|
4 | !! |
---|
5 | !! Copyright Laboratoire des Sciences du Climat et de l'Environnement (LSCE) |
---|
6 | !! Unite mixte CEA-CNRS-UVSQ |
---|
7 | !! |
---|
8 | !! Contributors to this INCA subroutine: |
---|
9 | !! |
---|
10 | !! Didier Hauglustaine, LSCE, hauglustaine@cea.fr |
---|
11 | !! Stacy Walters, NCAR, stacy@ucar.edu |
---|
12 | !! |
---|
13 | !! Anne Cozic, LSCE, anne.cozic@cea.fr |
---|
14 | !! Yann Meurdesoif, LSCE, yann.meurdesoif@cea.fr |
---|
15 | !! |
---|
16 | !! This software is a computer program whose purpose is to simulate the |
---|
17 | !! atmospheric gas phase and aerosol composition. The model is designed to be |
---|
18 | !! used within a transport model or a general circulation model. This version |
---|
19 | !! of INCA was designed to be coupled to the LMDz GCM. LMDz-INCA accounts |
---|
20 | !! for emissions, transport (resolved and sub-grid scale), photochemical |
---|
21 | !! transformations, and scavenging (dry deposition and washout) of chemical |
---|
22 | !! species and aerosols interactively in the GCM. Several versions of the INCA |
---|
23 | !! model are currently used depending on the envisaged applications with the |
---|
24 | !! chemistry-climate model. |
---|
25 | !! |
---|
26 | !! This software is governed by the CeCILL license under French law and |
---|
27 | !! abiding by the rules of distribution of free software. You can use, |
---|
28 | !! modify and/ or redistribute the software under the terms of the CeCILL |
---|
29 | !! license as circulated by CEA, CNRS and INRIA at the following URL |
---|
30 | !! "http://www.cecill.info". |
---|
31 | !! |
---|
32 | !! As a counterpart to the access to the source code and rights to copy, |
---|
33 | !! modify and redistribute granted by the license, users are provided only |
---|
34 | !! with a limited warranty and the software's author, the holder of the |
---|
35 | !! economic rights, and the successive licensors have only limited |
---|
36 | !! liability. |
---|
37 | !! |
---|
38 | !! In this respect, the user's attention is drawn to the risks associated |
---|
39 | !! with loading, using, modifying and/or developing or reproducing the |
---|
40 | !! software by the user in light of its specific status of free software, |
---|
41 | !! that may mean that it is complicated to manipulate, and that also |
---|
42 | !! therefore means that it is reserved for developers and experienced |
---|
43 | !! professionals having in-depth computer knowledge. Users are therefore |
---|
44 | !! encouraged to load and test the software's suitability as regards their |
---|
45 | !! requirements in conditions enabling the security of their systems and/or |
---|
46 | !! data to be ensured and, more generally, to use and operate it in the |
---|
47 | !! same conditions as regards security. |
---|
48 | !! |
---|
49 | !! The fact that you are presently reading this means that you have had |
---|
50 | !! knowledge of the CeCILL license and that you accept its terms. |
---|
51 | !! ========================================================================= |
---|
52 | |
---|
53 | #include "inca_define.h" |
---|
54 | |
---|
55 | MODULE PHT_TABLES |
---|
56 | !---------------------------------------------------------------------- |
---|
57 | ! ... Photolysis interp table and related arrays |
---|
58 | ! Stacy Walters, NCAR, 1998. |
---|
59 | ! Modified by Didier Hauglustaine, IPSL, for LMDZ/INCA, 1999. |
---|
60 | !---------------------------------------------------------------------- |
---|
61 | USE CONST_MOD |
---|
62 | |
---|
63 | IMPLICIT NONE |
---|
64 | |
---|
65 | |
---|
66 | INTEGER, PARAMETER :: jdim = 48 |
---|
67 | INTEGER, PARAMETER :: altmxdim = 80 |
---|
68 | INTEGER, PARAMETER :: altdim = 24 |
---|
69 | INTEGER, PARAMETER :: zangdim = 40 |
---|
70 | INTEGER, PARAMETER :: o3ratdim = 7 |
---|
71 | INTEGER, PARAMETER :: albdim = 4 |
---|
72 | INTEGER, PARAMETER :: t500dim = 3 |
---|
73 | INTEGER, PARAMETER :: t200dim = 2 |
---|
74 | INTEGER, PARAMETER :: tabdim = jdim*altdim*zangdim*o3ratdim & |
---|
75 | *albdim*t500dim*t200dim |
---|
76 | |
---|
77 | INTEGER, save :: offset(7) |
---|
78 | !$OMP THREADPRIVATE(offset) |
---|
79 | |
---|
80 | |
---|
81 | ! 1 O2 + hv -> O + O |
---|
82 | ! 2 O3 -> O2 + O(1D) |
---|
83 | ! 3 O3 -> O2 + O(3P) |
---|
84 | ! 4 NO2 -> NO + O(3P) |
---|
85 | ! 5 NO3 -> NO + O2 |
---|
86 | ! 6 NO3 -> NO2 + O(3P) |
---|
87 | ! 7 N2O5 -> NO3 + NO2 |
---|
88 | ! 8 HNO2 -> OH + NO |
---|
89 | ! 9 HNO3 -> OH + NO2 |
---|
90 | ! 10 HNO4 -> HO2 + NO2 |
---|
91 | ! 11 CH3OOH -> CH3O + OH |
---|
92 | ! 12 CH2O -> H + HCO |
---|
93 | ! 13 CH2O -> H2 + CO |
---|
94 | ! 14 H2O2 -> 2 OH |
---|
95 | ! 15 N2O + hv -> N2 + O(1D) |
---|
96 | ! 16 CCl3F (CFC-11) + hv -> Products |
---|
97 | ! 17 CCl2F2 (CFC-12) + hv -> Products |
---|
98 | ! 18 CF2ClCFCl2 (CFC-113) + hv -> Products |
---|
99 | ! 19 CHClF2 (HCFC-22) + hv -> Products |
---|
100 | ! 20 CH3CFCl2 (HCFC-141b) + hv -> Products |
---|
101 | ! 21 CH3CF2Cl (HCFC-142b) + hv -> Products |
---|
102 | ! 22 CF3Br (Halon-1301) + hv -> Products |
---|
103 | ! 23 CF2BrCl (Halon-1211) + hv -> Products |
---|
104 | ! 24 CH3CCl3 + hv -> Products |
---|
105 | ! 25 CCl4 + hv -> Products |
---|
106 | ! 26 CH3Cl + hv -> Products |
---|
107 | ! 27 CH3Br + hv -> Products |
---|
108 | ! 28 H2O -> H + OH |
---|
109 | ! 29 HOCl -> OH + Cl |
---|
110 | ! 30 ClONO2 + hv -> Cl + NO3 |
---|
111 | ! 31 ClONO2 + hv -> ClO + NO2 |
---|
112 | ! 32 Cl2O2 -> Cl + Cl + O2 |
---|
113 | ! 33 HCl -> H + Cl |
---|
114 | ! 34 Cl2 + hv -> Cl + Cl |
---|
115 | ! 35 ClNO2 -> Cl + NO2 |
---|
116 | ! 36 BrO -> Br + O |
---|
117 | ! 37 BrONO2 + hv -> Br + NO3 |
---|
118 | ! 38 HOBr -> Br + OH |
---|
119 | ! 39 OClO -> O + ClO |
---|
120 | ! 40 BrCl -> Br + Cl |
---|
121 | ! 41 CO2 -> CO + O |
---|
122 | ! 42 CH3CHO -> products |
---|
123 | ! 43 CH3COCH3 -> products |
---|
124 | ! 44 CH3COCHO -> products |
---|
125 | ! 45 MVK -> products |
---|
126 | ! 46 PAN + hv -> products |
---|
127 | ! 47 MACR -> products |
---|
128 | ! 48 CH3ONO2 -> CH3O + NO2 |
---|
129 | |
---|
130 | #ifdef NMHC |
---|
131 | #ifdef STRAT |
---|
132 | !NMHC_AER_S |
---|
133 | INTEGER, save :: indexer(jdim) = & !mapping to full photorate matrix |
---|
134 | (/ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,& |
---|
135 | 31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48 /) |
---|
136 | !$OMP THREADPRIVATE(indexer) |
---|
137 | #else |
---|
138 | !NMHC & NMHC_AER Tropo |
---|
139 | INTEGER, save :: indexer(jdim) = & !mapping to full photorate matrix |
---|
140 | (/ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,16,0,17,0,0,& |
---|
141 | 0,0,0,0,0,0,0,0,0,0,0,18,19,20,21,22,23,24 /) |
---|
142 | !$OMP THREADPRIVATE(indexer) |
---|
143 | #endif |
---|
144 | #endif |
---|
145 | #ifdef GES |
---|
146 | !GES |
---|
147 | INTEGER, save :: indexer(jdim) = & !mapping to full photorate matrix |
---|
148 | (/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, & |
---|
149 | 0,0,0,0,0,0,0,0 /) |
---|
150 | !$OMP THREADPRIVATE(indexer) |
---|
151 | #endif |
---|
152 | #ifdef AERONLY |
---|
153 | #ifdef DUSS |
---|
154 | !DUSS |
---|
155 | INTEGER, save :: indexer(jdim) = & !mapping to full photorate matrix |
---|
156 | (/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, & |
---|
157 | 0,0,0,0,0,0,0,0 /) |
---|
158 | !$OMP THREADPRIVATE(indexer) |
---|
159 | #else |
---|
160 | !AER |
---|
161 | INTEGER, save :: indexer(jdim) = & !mapping to full photorate matrix |
---|
162 | (/ 0,0,0,0,2,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, & |
---|
163 | 0,0,0,0,0,0,0,0 /) |
---|
164 | !$OMP THREADPRIVATE(indexer) |
---|
165 | #endif |
---|
166 | #endif |
---|
167 | REAL, save :: ajl(tabdim) = 0. |
---|
168 | REAL, save :: vo3(0:altmxdim) |
---|
169 | REAL, save :: delz(altdim-1) |
---|
170 | REAL, save :: delang(zangdim-1) |
---|
171 | REAL, save :: delv(o3ratdim-1) |
---|
172 | REAL, save :: delalb(albdim-1) |
---|
173 | REAL, save :: delt500(t500dim-1) |
---|
174 | REAL, save :: delt200(t200dim-1) |
---|
175 | !$OMP THREADPRIVATE( ajl, vo3, delz, delang, delv, delalb, delt500, delt200) |
---|
176 | |
---|
177 | REAL, save :: zz(altdim) = & |
---|
178 | (/ 0., 1., 2., 3., 5., 7., 9., 12., 15., 18., 21., 24., & |
---|
179 | 27., 30., 35., 40., 45., 50., 55., 60., 65., 70., 75., 79. /) |
---|
180 | REAL, save :: vsec(zangdim) |
---|
181 | REAL, save :: dsza(zangdim) = & |
---|
182 | (/ 0., 5., 10., 15., 20., 25., & |
---|
183 | 30., 35., 40., 45., 50., 55., & |
---|
184 | 60., 65., 70., 75., 80., 81., & |
---|
185 | 82., 83., 84., 85., 86., 87., & |
---|
186 | 88., 89., 89.1, 89.2, 89.3, 89.4, & |
---|
187 | 89.5, 89.6, 89.7, 89.8, 89.9, 89.92, & |
---|
188 | 89.94, 89.96, 89.98, 89.99 /) |
---|
189 | !$OMP THREADPRIVATE(dsza) |
---|
190 | |
---|
191 | |
---|
192 | |
---|
193 | REAL, save :: xv3(o3ratdim) = (/ .5, .75, 1., 1.25, 1.5, 2., 5. /) |
---|
194 | REAL, save :: albev(albdim) = (/ .05, .2, .5, 1. /) |
---|
195 | REAL, save :: t500(t500dim) = (/ 228., 248., 268. /) |
---|
196 | REAL, save :: t200(t200dim) = (/ 205., 225. /) |
---|
197 | !$OMP THREADPRIVATE(zz,vsec,xv3,albev,t500,t200) |
---|
198 | |
---|
199 | REAL, DIMENSION(jdim) , save :: alpha = &!Chang et al., 1987 |
---|
200 | (/ 1.0, 0.7, 1.0, 1.2, 1.3, 1.0, 1.0, 1.0, 1.0, 1.0, & |
---|
201 | 1.0, 1.1, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & |
---|
202 | 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & |
---|
203 | 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, & |
---|
204 | 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 /) |
---|
205 | !$OMP THREADPRIVATE(alpha) |
---|
206 | |
---|
207 | |
---|
208 | REAL,SAVE,ALLOCATABLE :: jrates(:,:,:) |
---|
209 | !$OMP THREADPRIVATE(jrates) |
---|
210 | |
---|
211 | CONTAINS |
---|
212 | |
---|
213 | SUBROUTINE init_pht_tables |
---|
214 | USE INCA_DIM |
---|
215 | IMPLICIT NONE |
---|
216 | |
---|
217 | ALLOCATE(jrates(PLON,PLEV,PHTCNT)) |
---|
218 | |
---|
219 | END SUBROUTINE init_pht_tables |
---|
220 | |
---|
221 | END MODULE PHT_TABLES |
---|
222 | |
---|