Line data Source code
1 : module mo_lin_matrix
2 : use chem_mods, only: veclen
3 : private
4 : public :: linmat
5 : contains
6 2332686 : subroutine linmat01( avec_len, mat, y, rxt, het_rates )
7 : !----------------------------------------------
8 : ! ... linear matrix entries for implicit species
9 : !----------------------------------------------
10 : use chem_mods, only : gas_pcnst, rxntot, nzcnt
11 : use shr_kind_mod, only : r8 => shr_kind_r8
12 : implicit none
13 : !----------------------------------------------
14 : ! ... dummy arguments
15 : !----------------------------------------------
16 : integer, intent(in) :: avec_len
17 : real(r8), intent(in) :: y(veclen,gas_pcnst)
18 : real(r8), intent(in) :: rxt(veclen,rxntot)
19 : real(r8), intent(in) :: het_rates(veclen,gas_pcnst)
20 : real(r8), intent(inout) :: mat(veclen,nzcnt)
21 : !----------------------------------------------
22 : ! ... local variables
23 : !----------------------------------------------
24 : integer :: k
25 76277862 : do k = 1,avec_len
26 73945176 : mat(k,642) = -( rxt(k,20) + het_rates(k,1) )
27 73945176 : mat(k,687) = -( rxt(k,21) + het_rates(k,2) )
28 73945176 : mat(k,1) = -( het_rates(k,3) )
29 73945176 : mat(k,2) = -( het_rates(k,4) )
30 73945176 : mat(k,3) = -( het_rates(k,5) )
31 73945176 : mat(k,974) = -( het_rates(k,6) )
32 73945176 : mat(k,160) = -( het_rates(k,7) )
33 73945176 : mat(k,415) = -( rxt(k,22) + het_rates(k,8) )
34 73945176 : mat(k,166) = -( rxt(k,23) + het_rates(k,9) )
35 73945176 : mat(k,379) = -( rxt(k,24) + het_rates(k,10) )
36 73945176 : mat(k,465) = -( rxt(k,25) + het_rates(k,11) )
37 73945176 : mat(k,416) = .500_r8*rxt(k,22)
38 73945176 : mat(k,167) = rxt(k,23)
39 73945176 : mat(k,663) = .200_r8*rxt(k,71)
40 73945176 : mat(k,727) = .060_r8*rxt(k,73)
41 73945176 : mat(k,279) = -( rxt(k,26) + het_rates(k,12) )
42 73945176 : mat(k,662) = .200_r8*rxt(k,71)
43 73945176 : mat(k,725) = .200_r8*rxt(k,73)
44 73945176 : mat(k,598) = -( rxt(k,27) + het_rates(k,13) )
45 73945176 : mat(k,222) = rxt(k,47)
46 73945176 : mat(k,1086) = rxt(k,57)
47 73945176 : mat(k,664) = .200_r8*rxt(k,71)
48 73945176 : mat(k,728) = .150_r8*rxt(k,73)
49 73945176 : mat(k,329) = -( rxt(k,28) + het_rates(k,14) )
50 73945176 : mat(k,726) = .210_r8*rxt(k,73)
51 73945176 : mat(k,226) = -( het_rates(k,15) )
52 73945176 : mat(k,355) = -( het_rates(k,16) )
53 73945176 : mat(k,1511) = -( het_rates(k,17) )
54 73945176 : mat(k,230) = rxt(k,75)
55 73945176 : mat(k,1563) = rxt(k,76)
56 73945176 : mat(k,568) = rxt(k,78)
57 73945176 : mat(k,141) = rxt(k,80)
58 73945176 : mat(k,147) = rxt(k,81)
59 73945176 : mat(k,481) = 2.000_r8*rxt(k,87)
60 73945176 : mat(k,604) = rxt(k,88)
61 73945176 : mat(k,387) = 3.000_r8*rxt(k,91)
62 73945176 : mat(k,109) = 2.000_r8*rxt(k,99)
63 73945176 : mat(k,829) = rxt(k,100)
64 73945176 : mat(k,789) = rxt(k,106)
65 73945176 : mat(k,229) = -( rxt(k,75) + het_rates(k,18) )
66 73945176 : mat(k,1565) = -( rxt(k,76) + het_rates(k,19) )
67 73945176 : mat(k,569) = rxt(k,77)
68 : mat(k,566) = -( rxt(k,77) + rxt(k,78) + rxt(k,564) + rxt(k,567) + rxt(k,572) &
69 73945176 : + het_rates(k,20) )
70 73945176 : mat(k,4) = -( het_rates(k,21) )
71 73945176 : mat(k,235) = -( het_rates(k,22) )
72 73945176 : mat(k,344) = rxt(k,29)
73 73945176 : mat(k,345) = -( rxt(k,29) + het_rates(k,23) )
74 73945176 : mat(k,285) = -( het_rates(k,24) )
75 73945176 : mat(k,550) = -( het_rates(k,25) )
76 73945176 : mat(k,265) = -( het_rates(k,26) )
77 73945176 : mat(k,350) = -( rxt(k,30) + het_rates(k,27) )
78 73945176 : mat(k,298) = -( het_rates(k,28) )
79 73945176 : mat(k,1133) = -( het_rates(k,29) )
80 73945176 : mat(k,1370) = .700_r8*rxt(k,56)
81 73945176 : mat(k,409) = -( rxt(k,31) + het_rates(k,30) )
82 73945176 : mat(k,304) = -( het_rates(k,31) )
83 73945176 : mat(k,269) = -( rxt(k,32) + het_rates(k,32) )
84 73945176 : mat(k,101) = -( rxt(k,79) + het_rates(k,33) )
85 73945176 : mat(k,139) = -( rxt(k,80) + het_rates(k,34) )
86 73945176 : mat(k,144) = -( rxt(k,81) + het_rates(k,35) )
87 73945176 : mat(k,111) = -( rxt(k,82) + het_rates(k,36) )
88 73945176 : mat(k,149) = -( rxt(k,83) + het_rates(k,37) )
89 73945176 : mat(k,115) = -( rxt(k,84) + het_rates(k,38) )
90 73945176 : mat(k,154) = -( rxt(k,85) + het_rates(k,39) )
91 73945176 : mat(k,119) = -( rxt(k,86) + het_rates(k,40) )
92 73945176 : mat(k,479) = -( rxt(k,87) + het_rates(k,41) )
93 73945176 : mat(k,1987) = -( rxt(k,33) + rxt(k,34) + het_rates(k,42) )
94 73945176 : mat(k,650) = .100_r8*rxt(k,20)
95 73945176 : mat(k,695) = .100_r8*rxt(k,21)
96 73945176 : mat(k,456) = rxt(k,39)
97 73945176 : mat(k,2252) = .180_r8*rxt(k,40)
98 73945176 : mat(k,1169) = rxt(k,44)
99 73945176 : mat(k,1203) = .330_r8*rxt(k,46)
100 73945176 : mat(k,1212) = rxt(k,48)
101 73945176 : mat(k,716) = rxt(k,50)
102 73945176 : mat(k,1276) = 1.340_r8*rxt(k,51)
103 73945176 : mat(k,897) = rxt(k,58)
104 73945176 : mat(k,547) = rxt(k,63)
105 73945176 : mat(k,401) = rxt(k,64)
106 73945176 : mat(k,660) = .375_r8*rxt(k,66)
107 73945176 : mat(k,491) = .400_r8*rxt(k,68)
108 73945176 : mat(k,1125) = .680_r8*rxt(k,70)
109 73945176 : mat(k,445) = rxt(k,308)
110 73945176 : mat(k,463) = 2.000_r8*rxt(k,338)
111 73945176 : mat(k,602) = -( rxt(k,88) + het_rates(k,43) )
112 73945176 : mat(k,123) = -( rxt(k,89) + het_rates(k,44) )
113 73945176 : mat(k,1151) = -( rxt(k,35) + het_rates(k,45) )
114 73945176 : mat(k,646) = .400_r8*rxt(k,20)
115 73945176 : mat(k,692) = .400_r8*rxt(k,21)
116 73945176 : mat(k,352) = rxt(k,30)
117 73945176 : mat(k,1192) = .330_r8*rxt(k,46)
118 73945176 : mat(k,323) = rxt(k,54)
119 73945176 : mat(k,544) = rxt(k,63)
120 73945176 : mat(k,371) = -( rxt(k,90) + het_rates(k,46) )
121 73945176 : mat(k,104) = -( het_rates(k,47) )
122 73945176 : mat(k,1080) = -( rxt(k,36) + het_rates(k,48) )
123 73945176 : mat(k,645) = .250_r8*rxt(k,20)
124 73945176 : mat(k,691) = .250_r8*rxt(k,21)
125 73945176 : mat(k,411) = .820_r8*rxt(k,31)
126 73945176 : mat(k,1191) = .170_r8*rxt(k,46)
127 73945176 : mat(k,653) = .300_r8*rxt(k,66)
128 73945176 : mat(k,489) = .050_r8*rxt(k,68)
129 73945176 : mat(k,1118) = .500_r8*rxt(k,70)
130 73945176 : mat(k,1281) = -( rxt(k,37) + het_rates(k,49) )
131 73945176 : mat(k,382) = .180_r8*rxt(k,24)
132 73945176 : mat(k,331) = rxt(k,28)
133 73945176 : mat(k,672) = .400_r8*rxt(k,71)
134 73945176 : mat(k,736) = .540_r8*rxt(k,73)
135 73945176 : mat(k,424) = .510_r8*rxt(k,74)
136 73945176 : mat(k,705) = -( het_rates(k,50) )
137 73945176 : mat(k,620) = -( rxt(k,38) + het_rates(k,51) )
138 73945176 : mat(k,824) = -( het_rates(k,52) )
139 73945176 : mat(k,454) = -( rxt(k,39) + het_rates(k,53) )
140 73945176 : mat(k,2259) = -( rxt(k,40) + rxt(k,41) + het_rates(k,54) )
141 73945176 : mat(k,385) = -( rxt(k,91) + het_rates(k,55) )
142 73945176 : mat(k,2168) = -( het_rates(k,56) )
143 73945176 : mat(k,231) = rxt(k,75)
144 73945176 : mat(k,103) = 4.000_r8*rxt(k,79)
145 73945176 : mat(k,143) = rxt(k,80)
146 73945176 : mat(k,114) = 2.000_r8*rxt(k,82)
147 73945176 : mat(k,153) = 2.000_r8*rxt(k,83)
148 73945176 : mat(k,118) = 2.000_r8*rxt(k,84)
149 73945176 : mat(k,158) = rxt(k,85)
150 73945176 : mat(k,122) = 2.000_r8*rxt(k,86)
151 73945176 : mat(k,125) = 3.000_r8*rxt(k,89)
152 73945176 : mat(k,375) = rxt(k,90)
153 73945176 : mat(k,176) = 2.000_r8*rxt(k,92)
154 73945176 : mat(k,97) = 2.000_r8*rxt(k,93)
155 73945176 : mat(k,1602) = rxt(k,94)
156 73945176 : mat(k,963) = rxt(k,95)
157 73945176 : mat(k,249) = rxt(k,98)
158 73945176 : mat(k,245) = rxt(k,101)
159 73945176 : mat(k,255) = rxt(k,102)
160 73945176 : mat(k,296) = rxt(k,103)
161 73945176 : mat(k,1506) = rxt(k,104)
162 73945176 : mat(k,842) = rxt(k,107)
163 73945176 : mat(k,175) = -( rxt(k,92) + het_rates(k,57) )
164 73945176 : mat(k,95) = -( rxt(k,93) + rxt(k,249) + het_rates(k,58) )
165 73945176 : mat(k,1592) = -( rxt(k,94) + het_rates(k,59) )
166 73945176 : mat(k,957) = rxt(k,96)
167 73945176 : mat(k,337) = rxt(k,108)
168 73945176 : mat(k,96) = 2.000_r8*rxt(k,249)
169 : mat(k,955) = -( rxt(k,95) + rxt(k,96) + rxt(k,566) + rxt(k,571) + rxt(k,577) &
170 73945176 : + het_rates(k,60) )
171 73945176 : mat(k,5) = -( het_rates(k,61) )
172 73945176 : mat(k,1160) = -( het_rates(k,62) )
173 73945176 : mat(k,168) = 1.500_r8*rxt(k,23)
174 73945176 : mat(k,381) = .450_r8*rxt(k,24)
175 73945176 : mat(k,600) = .600_r8*rxt(k,27)
176 73945176 : mat(k,330) = rxt(k,28)
177 73945176 : mat(k,1975) = rxt(k,33) + rxt(k,34)
178 73945176 : mat(k,1152) = rxt(k,35)
179 73945176 : mat(k,1280) = rxt(k,37)
180 73945176 : mat(k,2240) = .380_r8*rxt(k,40)
181 73945176 : mat(k,1449) = rxt(k,42) + rxt(k,110)
182 73945176 : mat(k,1165) = rxt(k,44)
183 73945176 : mat(k,1055) = 2.000_r8*rxt(k,45)
184 73945176 : mat(k,1193) = .330_r8*rxt(k,46)
185 73945176 : mat(k,1268) = 1.340_r8*rxt(k,52)
186 73945176 : mat(k,1372) = .700_r8*rxt(k,56)
187 73945176 : mat(k,200) = 1.500_r8*rxt(k,65)
188 73945176 : mat(k,655) = .250_r8*rxt(k,66)
189 73945176 : mat(k,1075) = rxt(k,69)
190 73945176 : mat(k,1120) = 1.700_r8*rxt(k,70)
191 73945176 : mat(k,366) = rxt(k,137)
192 73945176 : mat(k,1450) = -( rxt(k,42) + rxt(k,110) + het_rates(k,63) )
193 73945176 : mat(k,622) = rxt(k,38)
194 73945176 : mat(k,2241) = .440_r8*rxt(k,40)
195 73945176 : mat(k,536) = .400_r8*rxt(k,61)
196 73945176 : mat(k,658) = rxt(k,66)
197 73945176 : mat(k,1123) = .800_r8*rxt(k,70)
198 73945176 : mat(k,238) = -( rxt(k,97) + het_rates(k,64) )
199 73945176 : mat(k,140) = rxt(k,80)
200 73945176 : mat(k,145) = rxt(k,81)
201 73945176 : mat(k,150) = rxt(k,83)
202 73945176 : mat(k,116) = 2.000_r8*rxt(k,84)
203 73945176 : mat(k,155) = 2.000_r8*rxt(k,85)
204 73945176 : mat(k,120) = rxt(k,86)
205 73945176 : mat(k,108) = 2.000_r8*rxt(k,99)
206 73945176 : mat(k,250) = rxt(k,102)
207 73945176 : mat(k,291) = rxt(k,103)
208 73945176 : mat(k,246) = -( rxt(k,98) + het_rates(k,65) )
209 73945176 : mat(k,112) = rxt(k,82)
210 73945176 : mat(k,151) = rxt(k,83)
211 73945176 : mat(k,242) = rxt(k,101)
212 73945176 : mat(k,194) = -( het_rates(k,66) )
213 73945176 : mat(k,310) = -( het_rates(k,67) )
214 73945176 : mat(k,6) = -( het_rates(k,68) )
215 73945176 : mat(k,7) = -( het_rates(k,69) )
216 73945176 : mat(k,8) = -( het_rates(k,70) )
217 73945176 : mat(k,9) = -( rxt(k,594) + het_rates(k,71) )
218 73945176 : mat(k,127) = -( rxt(k,43) + het_rates(k,72) )
219 73945176 : mat(k,925) = -( het_rates(k,73) )
220 73945176 : mat(k,146) = rxt(k,81)
221 73945176 : mat(k,156) = rxt(k,85)
222 73945176 : mat(k,239) = 2.000_r8*rxt(k,97)
223 73945176 : mat(k,247) = rxt(k,98)
224 73945176 : mat(k,283) = rxt(k,105)
225 73945176 : mat(k,1166) = -( rxt(k,44) + het_rates(k,74) )
226 73945176 : mat(k,1194) = .330_r8*rxt(k,46)
227 76277862 : mat(k,656) = .250_r8*rxt(k,66)
228 : end do
229 2332686 : end subroutine linmat01
230 2332686 : subroutine linmat02( avec_len, mat, y, rxt, het_rates )
231 : !----------------------------------------------
232 : ! ... linear matrix entries for implicit species
233 : !----------------------------------------------
234 : use chem_mods, only : gas_pcnst, rxntot, nzcnt
235 : use shr_kind_mod, only : r8 => shr_kind_r8
236 : implicit none
237 : !----------------------------------------------
238 : ! ... dummy arguments
239 : !----------------------------------------------
240 : integer, intent(in) :: avec_len
241 : real(r8), intent(in) :: y(veclen,gas_pcnst)
242 : real(r8), intent(in) :: rxt(veclen,rxntot)
243 : real(r8), intent(in) :: het_rates(veclen,gas_pcnst)
244 : real(r8), intent(inout) :: mat(veclen,nzcnt)
245 : !----------------------------------------------
246 : ! ... local variables
247 : !----------------------------------------------
248 : integer :: k
249 76277862 : do k = 1,avec_len
250 73945176 : mat(k,1054) = -( rxt(k,45) + rxt(k,520) + het_rates(k,75) )
251 73945176 : mat(k,418) = rxt(k,22)
252 73945176 : mat(k,380) = .130_r8*rxt(k,24)
253 73945176 : mat(k,341) = .700_r8*rxt(k,62)
254 73945176 : mat(k,670) = .600_r8*rxt(k,71)
255 73945176 : mat(k,734) = .340_r8*rxt(k,73)
256 73945176 : mat(k,423) = .170_r8*rxt(k,74)
257 73945176 : mat(k,2121) = -( het_rates(k,76) )
258 73945176 : mat(k,2443) = 2.000_r8*rxt(k,2) + rxt(k,3)
259 73945176 : mat(k,1991) = 2.000_r8*rxt(k,34)
260 73945176 : mat(k,457) = rxt(k,39)
261 73945176 : mat(k,2256) = .330_r8*rxt(k,40) + rxt(k,41)
262 73945176 : mat(k,834) = rxt(k,100)
263 73945176 : mat(k,1505) = rxt(k,104)
264 73945176 : mat(k,284) = rxt(k,105)
265 73945176 : mat(k,1461) = -( het_rates(k,77) )
266 73945176 : mat(k,2428) = rxt(k,1)
267 73945176 : mat(k,1977) = rxt(k,33)
268 73945176 : mat(k,2242) = 1.440_r8*rxt(k,40)
269 73945176 : mat(k,107) = -( rxt(k,99) + het_rates(k,78) )
270 73945176 : mat(k,582) = -( rxt(k,4) + het_rates(k,79) )
271 73945176 : mat(k,130) = -( rxt(k,136) + het_rates(k,80) )
272 73945176 : mat(k,828) = -( rxt(k,100) + het_rates(k,81) )
273 73945176 : mat(k,241) = -( rxt(k,101) + het_rates(k,82) )
274 73945176 : mat(k,251) = -( rxt(k,102) + het_rates(k,83) )
275 73945176 : mat(k,292) = -( rxt(k,103) + het_rates(k,84) )
276 73945176 : mat(k,1495) = -( rxt(k,104) + het_rates(k,85) )
277 73945176 : mat(k,182) = -( het_rates(k,86) )
278 73945176 : mat(k,919) = -( het_rates(k,87) )
279 73945176 : mat(k,282) = -( rxt(k,105) + het_rates(k,88) )
280 73945176 : mat(k,2055) = -( rxt(k,9) + het_rates(k,89) )
281 73945176 : mat(k,1204) = rxt(k,522)
282 73945176 : mat(k,596) = rxt(k,523)
283 73945176 : mat(k,564) = rxt(k,524)
284 : mat(k,277) = 2.000_r8*rxt(k,525) + 2.000_r8*rxt(k,562) + 2.000_r8*rxt(k,565) &
285 73945176 : + 2.000_r8*rxt(k,576)
286 73945176 : mat(k,431) = rxt(k,526)
287 73945176 : mat(k,1099) = rxt(k,527)
288 73945176 : mat(k,1963) = .500_r8*rxt(k,529)
289 73945176 : mat(k,1658) = rxt(k,530)
290 73945176 : mat(k,396) = rxt(k,531)
291 73945176 : mat(k,234) = rxt(k,532)
292 73945176 : mat(k,631) = rxt(k,533)
293 73945176 : mat(k,572) = rxt(k,564) + rxt(k,567) + rxt(k,572)
294 73945176 : mat(k,961) = rxt(k,566) + rxt(k,571) + rxt(k,577)
295 73945176 : mat(k,2368) = -( rxt(k,521) + het_rates(k,90) )
296 73945176 : mat(k,477) = rxt(k,11) + rxt(k,212)
297 73945176 : mat(k,651) = rxt(k,20)
298 73945176 : mat(k,696) = .900_r8*rxt(k,21)
299 73945176 : mat(k,420) = rxt(k,22)
300 73945176 : mat(k,169) = 1.500_r8*rxt(k,23)
301 73945176 : mat(k,384) = .560_r8*rxt(k,24)
302 73945176 : mat(k,467) = rxt(k,25)
303 73945176 : mat(k,281) = .600_r8*rxt(k,26)
304 73945176 : mat(k,601) = .600_r8*rxt(k,27)
305 73945176 : mat(k,333) = rxt(k,28)
306 73945176 : mat(k,349) = rxt(k,29)
307 73945176 : mat(k,354) = rxt(k,30)
308 73945176 : mat(k,413) = rxt(k,31)
309 73945176 : mat(k,1157) = rxt(k,35)
310 73945176 : mat(k,1287) = rxt(k,37)
311 73945176 : mat(k,1170) = 2.000_r8*rxt(k,44)
312 73945176 : mat(k,1058) = 2.000_r8*rxt(k,45)
313 73945176 : mat(k,1205) = .670_r8*rxt(k,46)
314 73945176 : mat(k,225) = rxt(k,47)
315 73945176 : mat(k,1213) = rxt(k,48)
316 73945176 : mat(k,408) = rxt(k,49)
317 73945176 : mat(k,717) = rxt(k,50)
318 73945176 : mat(k,1278) = 1.340_r8*rxt(k,51) + .660_r8*rxt(k,52)
319 73945176 : mat(k,1100) = rxt(k,57)
320 73945176 : mat(k,343) = rxt(k,62)
321 73945176 : mat(k,548) = rxt(k,63)
322 73945176 : mat(k,202) = rxt(k,65)
323 73945176 : mat(k,661) = rxt(k,66)
324 73945176 : mat(k,632) = rxt(k,67)
325 73945176 : mat(k,492) = rxt(k,68)
326 73945176 : mat(k,1079) = rxt(k,69)
327 73945176 : mat(k,1126) = 1.200_r8*rxt(k,70)
328 73945176 : mat(k,674) = rxt(k,71)
329 73945176 : mat(k,739) = rxt(k,73)
330 73945176 : mat(k,426) = rxt(k,74)
331 73945176 : mat(k,446) = rxt(k,308)
332 73945176 : mat(k,464) = rxt(k,338)
333 73945176 : mat(k,1345) = rxt(k,413)
334 73945176 : mat(k,472) = -( rxt(k,10) + rxt(k,11) + rxt(k,212) + het_rates(k,91) )
335 73945176 : mat(k,787) = -( rxt(k,106) + het_rates(k,92) )
336 73945176 : mat(k,567) = rxt(k,564) + rxt(k,567) + rxt(k,572)
337 73945176 : mat(k,837) = -( rxt(k,107) + het_rates(k,93) )
338 73945176 : mat(k,954) = rxt(k,566) + rxt(k,571) + rxt(k,577)
339 73945176 : mat(k,1195) = -( rxt(k,46) + rxt(k,522) + het_rates(k,94) )
340 73945176 : mat(k,221) = -( rxt(k,47) + het_rates(k,95) )
341 73945176 : mat(k,1315) = rxt(k,413)
342 73945176 : mat(k,1208) = -( rxt(k,48) + het_rates(k,96) )
343 73945176 : mat(k,1196) = .170_r8*rxt(k,46)
344 73945176 : mat(k,326) = -( het_rates(k,97) )
345 73945176 : mat(k,133) = -( het_rates(k,98) )
346 73945176 : mat(k,876) = -( het_rates(k,99) )
347 73945176 : mat(k,589) = -( rxt(k,523) + het_rates(k,100) )
348 73945176 : mat(k,558) = -( rxt(k,524) + het_rates(k,101) )
349 73945176 : mat(k,403) = -( rxt(k,49) + het_rates(k,102) )
350 73945176 : mat(k,711) = -( rxt(k,50) + het_rates(k,103) )
351 73945176 : mat(k,404) = rxt(k,49)
352 73945176 : mat(k,76) = -( het_rates(k,104) )
353 73945176 : mat(k,1269) = -( rxt(k,51) + rxt(k,52) + het_rates(k,105) )
354 73945176 : mat(k,713) = .300_r8*rxt(k,50)
355 73945176 : mat(k,316) = -( het_rates(k,106) )
356 73945176 : mat(k,517) = -( rxt(k,53) + het_rates(k,107) )
357 73945176 : mat(k,641) = .800_r8*rxt(k,20)
358 73945176 : mat(k,686) = .800_r8*rxt(k,21)
359 73945176 : mat(k,321) = -( rxt(k,54) + het_rates(k,108) )
360 73945176 : mat(k,611) = -( rxt(k,55) + rxt(k,395) + het_rates(k,109) )
361 73945176 : mat(k,1018) = -( het_rates(k,110) )
362 73945176 : mat(k,1376) = -( rxt(k,56) + het_rates(k,111) )
363 73945176 : mat(k,714) = .700_r8*rxt(k,50)
364 73945176 : mat(k,999) = -( rxt(k,111) + het_rates(k,112) )
365 73945176 : mat(k,1881) = rxt(k,15)
366 73945176 : mat(k,808) = rxt(k,592)
367 73945176 : mat(k,256) = -( rxt(k,12) + het_rates(k,113) )
368 : mat(k,273) = -( rxt(k,13) + rxt(k,14) + rxt(k,213) + rxt(k,525) + rxt(k,562) &
369 73945176 : + rxt(k,565) + rxt(k,576) + het_rates(k,114) )
370 73945176 : mat(k,427) = -( rxt(k,526) + het_rates(k,115) )
371 73945176 : mat(k,1090) = -( rxt(k,57) + rxt(k,527) + het_rates(k,116) )
372 73945176 : mat(k,10) = -( het_rates(k,117) )
373 73945176 : mat(k,11) = -( het_rates(k,118) )
374 73945176 : mat(k,12) = -( het_rates(k,119) )
375 73945176 : mat(k,98) = -( het_rates(k,120) )
376 73945176 : mat(k,13) = -( rxt(k,528) + het_rates(k,121) )
377 73945176 : mat(k,14) = -( rxt(k,596) + het_rates(k,122) )
378 73945176 : mat(k,15) = -( rxt(k,595) + het_rates(k,123) )
379 73945176 : mat(k,1914) = -( rxt(k,15) + rxt(k,16) + het_rates(k,124) )
380 73945176 : mat(k,275) = rxt(k,14)
381 73945176 : mat(k,1959) = rxt(k,17) + .500_r8*rxt(k,529)
382 73945176 : mat(k,1654) = rxt(k,19)
383 73945176 : mat(k,857) = rxt(k,589)
384 73945176 : mat(k,1960) = -( rxt(k,17) + rxt(k,529) + het_rates(k,125) )
385 73945176 : mat(k,2052) = rxt(k,9)
386 73945176 : mat(k,476) = rxt(k,11) + rxt(k,212)
387 73945176 : mat(k,276) = rxt(k,13) + rxt(k,213)
388 73945176 : mat(k,1655) = rxt(k,18)
389 73945176 : mat(k,649) = rxt(k,20)
390 73945176 : mat(k,1202) = rxt(k,46)
391 73945176 : mat(k,407) = rxt(k,49)
392 73945176 : mat(k,617) = rxt(k,55) + rxt(k,395)
393 73945176 : mat(k,1097) = rxt(k,57)
394 73945176 : mat(k,896) = rxt(k,58)
395 73945176 : mat(k,395) = rxt(k,59)
396 73945176 : mat(k,233) = rxt(k,60)
397 73945176 : mat(k,539) = .600_r8*rxt(k,61) + rxt(k,345)
398 73945176 : mat(k,630) = rxt(k,67)
399 73945176 : mat(k,571) = rxt(k,77)
400 73945176 : mat(k,960) = rxt(k,96)
401 73945176 : mat(k,138) = rxt(k,470)
402 73945176 : mat(k,1652) = -( rxt(k,18) + rxt(k,19) + rxt(k,530) + het_rates(k,126) )
403 73945176 : mat(k,474) = rxt(k,10)
404 73945176 : mat(k,274) = rxt(k,13) + rxt(k,14) + rxt(k,213)
405 73945176 : mat(k,537) = .400_r8*rxt(k,61)
406 73945176 : mat(k,570) = rxt(k,78)
407 73945176 : mat(k,958) = rxt(k,95)
408 73945176 : mat(k,892) = -( rxt(k,58) + het_rates(k,127) )
409 73945176 : mat(k,391) = -( rxt(k,59) + rxt(k,531) + het_rates(k,128) )
410 73945176 : mat(k,16) = -( het_rates(k,129) )
411 73945176 : mat(k,17) = -( het_rates(k,130) )
412 73945176 : mat(k,18) = -( het_rates(k,131) )
413 73945176 : mat(k,19) = -( het_rates(k,132) )
414 73945176 : mat(k,20) = -( het_rates(k,133) )
415 : mat(k,2099) = -( rxt(k,120) + rxt(k,121) + rxt(k,122) + rxt(k,123) + rxt(k,124) &
416 73945176 : + rxt(k,125) + het_rates(k,134) )
417 73945176 : mat(k,2442) = rxt(k,2)
418 : mat(k,1550) = 2.000_r8*rxt(k,5) + rxt(k,6) + rxt(k,127) + rxt(k,128) + rxt(k,129) &
419 : + rxt(k,131) + rxt(k,132) + rxt(k,133) + 2.000_r8*rxt(k,134) &
420 73945176 : + 2.000_r8*rxt(k,135)
421 73945176 : mat(k,2230) = rxt(k,8)
422 73945176 : mat(k,278) = rxt(k,14)
423 73945176 : mat(k,1919) = rxt(k,15)
424 73945176 : mat(k,1964) = rxt(k,17)
425 73945176 : mat(k,1659) = rxt(k,18)
426 73945176 : mat(k,2255) = .180_r8*rxt(k,40)
427 73945176 : mat(k,1456) = rxt(k,42) + rxt(k,110)
428 73945176 : mat(k,1574) = rxt(k,76)
429 73945176 : mat(k,1600) = rxt(k,94)
430 73945176 : mat(k,338) = rxt(k,108)
431 73945176 : mat(k,1484) = rxt(k,138)
432 73945176 : mat(k,950) = rxt(k,139)
433 73945176 : mat(k,263) = rxt(k,140)
434 73945176 : mat(k,2033) = rxt(k,155)
435 : mat(k,1542) = -( rxt(k,5) + rxt(k,6) + rxt(k,126) + rxt(k,127) + rxt(k,128) &
436 : + rxt(k,129) + rxt(k,130) + rxt(k,131) + rxt(k,132) + rxt(k,133) &
437 73945176 : + rxt(k,134) + rxt(k,135) + het_rates(k,135) )
438 73945176 : mat(k,2220) = rxt(k,8)
439 73945176 : mat(k,1649) = rxt(k,19)
440 73945176 : mat(k,178) = rxt(k,151) + rxt(k,159)
441 73945176 : mat(k,181) = rxt(k,152)
442 73945176 : mat(k,2233) = -( rxt(k,7) + rxt(k,8) + het_rates(k,136) )
443 73945176 : mat(k,21) = -( het_rates(k,137) )
444 73945176 : mat(k,334) = -( rxt(k,108) + het_rates(k,138) )
445 73945176 : mat(k,363) = -( rxt(k,137) + het_rates(k,139) )
446 73945176 : mat(k,232) = -( rxt(k,60) + rxt(k,532) + het_rates(k,140) )
447 73945176 : mat(k,534) = -( rxt(k,61) + rxt(k,345) + het_rates(k,141) )
448 73945176 : mat(k,136) = -( rxt(k,470) + het_rates(k,142) )
449 73945176 : mat(k,468) = -( het_rates(k,143) )
450 76277862 : mat(k,270) = rxt(k,32)
451 : end do
452 2332686 : end subroutine linmat02
453 2332686 : subroutine linmat03( avec_len, mat, y, rxt, het_rates )
454 : !----------------------------------------------
455 : ! ... linear matrix entries for implicit species
456 : !----------------------------------------------
457 : use chem_mods, only : gas_pcnst, rxntot, nzcnt
458 : use shr_kind_mod, only : r8 => shr_kind_r8
459 : implicit none
460 : !----------------------------------------------
461 : ! ... dummy arguments
462 : !----------------------------------------------
463 : integer, intent(in) :: avec_len
464 : real(r8), intent(in) :: y(veclen,gas_pcnst)
465 : real(r8), intent(in) :: rxt(veclen,rxntot)
466 : real(r8), intent(in) :: het_rates(veclen,gas_pcnst)
467 : real(r8), intent(inout) :: mat(veclen,nzcnt)
468 : !----------------------------------------------
469 : ! ... local variables
470 : !----------------------------------------------
471 : integer :: k
472 76277862 : do k = 1,avec_len
473 73945176 : mat(k,170) = -( het_rates(k,144) )
474 73945176 : mat(k,339) = -( rxt(k,62) + het_rates(k,145) )
475 73945176 : mat(k,22) = -( het_rates(k,146) )
476 73945176 : mat(k,23) = -( het_rates(k,147) )
477 73945176 : mat(k,542) = -( rxt(k,63) + het_rates(k,148) )
478 73945176 : mat(k,397) = -( rxt(k,64) + het_rates(k,149) )
479 73945176 : mat(k,718) = -( het_rates(k,150) )
480 73945176 : mat(k,364) = rxt(k,137)
481 73945176 : mat(k,1474) = rxt(k,138)
482 73945176 : mat(k,24) = -( rxt(k,109) + het_rates(k,151) )
483 73945176 : mat(k,1476) = -( rxt(k,138) + het_rates(k,152) )
484 73945176 : mat(k,948) = rxt(k,139)
485 73945176 : mat(k,947) = -( rxt(k,139) + het_rates(k,153) )
486 73945176 : mat(k,262) = rxt(k,140)
487 73945176 : mat(k,261) = -( rxt(k,140) + het_rates(k,154) )
488 73945176 : mat(k,131) = rxt(k,136)
489 73945176 : mat(k,25) = -( het_rates(k,155) )
490 73945176 : mat(k,26) = -( het_rates(k,156) )
491 73945176 : mat(k,27) = -( het_rates(k,157) )
492 73945176 : mat(k,28) = -( het_rates(k,158) )
493 73945176 : mat(k,29) = -( rxt(k,141) + het_rates(k,159) )
494 73945176 : mat(k,30) = -( rxt(k,142) + het_rates(k,160) )
495 73945176 : mat(k,31) = -( rxt(k,143) + het_rates(k,161) )
496 73945176 : mat(k,32) = -( rxt(k,144) + het_rates(k,162) )
497 73945176 : mat(k,33) = -( rxt(k,145) + het_rates(k,163) )
498 73945176 : mat(k,34) = -( rxt(k,146) + het_rates(k,164) )
499 73945176 : mat(k,35) = -( rxt(k,147) + het_rates(k,165) )
500 73945176 : mat(k,36) = -( rxt(k,148) + het_rates(k,166) )
501 73945176 : mat(k,37) = -( rxt(k,149) + het_rates(k,167) )
502 73945176 : mat(k,38) = -( rxt(k,150) + het_rates(k,168) )
503 73945176 : mat(k,39) = -( het_rates(k,169) )
504 73945176 : mat(k,1053) = rxt(k,520)
505 73945176 : mat(k,40) = -( het_rates(k,170) )
506 73945176 : mat(k,41) = -( het_rates(k,171) )
507 73945176 : mat(k,42) = -( het_rates(k,172) )
508 73945176 : mat(k,43) = -( het_rates(k,173) )
509 73945176 : mat(k,44) = -( rxt(k,597) + het_rates(k,174) )
510 73945176 : mat(k,50) = -( het_rates(k,175) )
511 73945176 : mat(k,199) = -( rxt(k,65) + het_rates(k,176) )
512 73945176 : mat(k,652) = -( rxt(k,66) + het_rates(k,177) )
513 73945176 : mat(k,627) = -( rxt(k,67) + rxt(k,533) + het_rates(k,178) )
514 73945176 : mat(k,486) = -( rxt(k,68) + het_rates(k,179) )
515 73945176 : mat(k,1072) = -( rxt(k,69) + het_rates(k,180) )
516 73945176 : mat(k,392) = rxt(k,59)
517 73945176 : mat(k,628) = rxt(k,67)
518 73945176 : mat(k,488) = rxt(k,68)
519 73945176 : mat(k,1119) = -( rxt(k,70) + het_rates(k,181) )
520 73945176 : mat(k,654) = rxt(k,66)
521 73945176 : mat(k,1074) = rxt(k,69)
522 73945176 : mat(k,665) = -( rxt(k,71) + het_rates(k,182) )
523 73945176 : mat(k,187) = -( het_rates(k,183) )
524 73945176 : mat(k,203) = -( rxt(k,72) + het_rates(k,184) )
525 73945176 : mat(k,208) = -( het_rates(k,185) )
526 73945176 : mat(k,729) = -( rxt(k,73) + het_rates(k,186) )
527 73945176 : mat(k,216) = -( het_rates(k,187) )
528 73945176 : mat(k,421) = -( rxt(k,74) + het_rates(k,188) )
529 73945176 : mat(k,523) = -( het_rates(k,191) )
530 73945176 : mat(k,137) = rxt(k,470)
531 73945176 : mat(k,1042) = -( het_rates(k,192) )
532 73945176 : mat(k,56) = -( het_rates(k,193) )
533 73945176 : mat(k,495) = -( het_rates(k,194) )
534 73945176 : mat(k,62) = -( het_rates(k,195) )
535 73945176 : mat(k,435) = -( het_rates(k,196) )
536 73945176 : mat(k,901) = -( het_rates(k,197) )
537 73945176 : mat(k,519) = rxt(k,53)
538 73945176 : mat(k,935) = -( het_rates(k,198) )
539 73945176 : mat(k,635) = -( het_rates(k,199) )
540 73945176 : mat(k,1428) = -( het_rates(k,200) )
541 73945176 : mat(k,383) = .130_r8*rxt(k,24)
542 73945176 : mat(k,332) = rxt(k,28)
543 73945176 : mat(k,1082) = rxt(k,36)
544 73945176 : mat(k,1282) = rxt(k,37)
545 73945176 : mat(k,1198) = .330_r8*rxt(k,46)
546 73945176 : mat(k,1210) = rxt(k,48)
547 73945176 : mat(k,1273) = 1.340_r8*rxt(k,51)
548 73945176 : mat(k,520) = rxt(k,53)
549 73945176 : mat(k,324) = rxt(k,54)
550 73945176 : mat(k,1378) = .300_r8*rxt(k,56)
551 73945176 : mat(k,894) = rxt(k,58)
552 73945176 : mat(k,535) = .600_r8*rxt(k,61) + rxt(k,345)
553 73945176 : mat(k,399) = rxt(k,64)
554 73945176 : mat(k,201) = .500_r8*rxt(k,65)
555 73945176 : mat(k,1122) = .650_r8*rxt(k,70)
556 73945176 : mat(k,2421) = -( het_rates(k,201) )
557 73945176 : mat(k,1158) = rxt(k,35)
558 73945176 : mat(k,1084) = rxt(k,36)
559 73945176 : mat(k,625) = rxt(k,38)
560 73945176 : mat(k,2261) = rxt(k,41)
561 73945176 : mat(k,1390) = .300_r8*rxt(k,56)
562 73945176 : mat(k,541) = .400_r8*rxt(k,61)
563 73945176 : mat(k,609) = rxt(k,88)
564 73945176 : mat(k,377) = rxt(k,90)
565 73945176 : mat(k,778) = -( het_rates(k,202) )
566 73945176 : mat(k,280) = .600_r8*rxt(k,26)
567 73945176 : mat(k,865) = -( het_rates(k,203) )
568 73945176 : mat(k,1875) = rxt(k,16)
569 73945176 : mat(k,998) = rxt(k,111)
570 : mat(k,2079) = rxt(k,120) + rxt(k,121) + rxt(k,122) + rxt(k,123) + rxt(k,124) &
571 73945176 : + rxt(k,125)
572 : mat(k,1534) = rxt(k,126) + rxt(k,127) + rxt(k,128) + rxt(k,129) + rxt(k,130) &
573 73945176 : + rxt(k,131) + rxt(k,132) + rxt(k,133)
574 73945176 : mat(k,574) = -( het_rates(k,204) )
575 73945176 : mat(k,460) = -( rxt(k,338) + het_rates(k,205) )
576 73945176 : mat(k,128) = rxt(k,43)
577 73945176 : mat(k,797) = -( het_rates(k,206) )
578 73945176 : mat(k,441) = -( rxt(k,308) + het_rates(k,207) )
579 73945176 : mat(k,1299) = -( het_rates(k,208) )
580 73945176 : mat(k,1332) = -( rxt(k,413) + het_rates(k,209) )
581 73945176 : mat(k,1253) = -( het_rates(k,210) )
582 73945176 : mat(k,68) = -( het_rates(k,211) )
583 73945176 : mat(k,74) = -( het_rates(k,212) )
584 73945176 : mat(k,1356) = -( het_rates(k,213) )
585 73945176 : mat(k,740) = -( het_rates(k,214) )
586 73945176 : mat(k,466) = .600_r8*rxt(k,25)
587 73945176 : mat(k,1397) = -( het_rates(k,215) )
588 73945176 : mat(k,1272) = .660_r8*rxt(k,51)
589 73945176 : mat(k,613) = rxt(k,55) + rxt(k,395)
590 73945176 : mat(k,910) = -( het_rates(k,216) )
591 73945176 : mat(k,599) = .600_r8*rxt(k,27)
592 73945176 : mat(k,698) = -( het_rates(k,217) )
593 73945176 : mat(k,82) = -( het_rates(k,218) )
594 73945176 : mat(k,529) = -( het_rates(k,219) )
595 73945176 : mat(k,676) = -( het_rates(k,220) )
596 73945176 : mat(k,845) = -( het_rates(k,221) )
597 73945176 : mat(k,1873) = rxt(k,16)
598 73945176 : mat(k,852) = rxt(k,589)
599 73945176 : mat(k,806) = rxt(k,592)
600 73945176 : mat(k,502) = -( het_rates(k,222) )
601 73945176 : mat(k,994) = rxt(k,111)
602 73945176 : mat(k,1106) = -( het_rates(k,223) )
603 73945176 : mat(k,2031) = -( rxt(k,155) + het_rates(k,224) )
604 73945176 : mat(k,2440) = rxt(k,1)
605 73945176 : mat(k,1549) = rxt(k,6)
606 73945176 : mat(k,2228) = rxt(k,7)
607 73945176 : mat(k,259) = rxt(k,12)
608 73945176 : mat(k,177) = -( rxt(k,151) + rxt(k,159) + het_rates(k,225) )
609 73945176 : mat(k,2179) = rxt(k,7)
610 73945176 : mat(k,179) = rxt(k,163)
611 73945176 : mat(k,180) = -( rxt(k,152) + rxt(k,163) + het_rates(k,226) )
612 73945176 : mat(k,853) = -( rxt(k,589) + het_rates(k,227) )
613 73945176 : mat(k,1533) = rxt(k,126) + rxt(k,130)
614 73945176 : mat(k,1818) = -( het_rates(k,228) )
615 73945176 : mat(k,2436) = rxt(k,3)
616 73945176 : mat(k,584) = 2.000_r8*rxt(k,4)
617 73945176 : mat(k,2050) = rxt(k,9)
618 73945176 : mat(k,475) = rxt(k,10)
619 73945176 : mat(k,694) = rxt(k,21)
620 73945176 : mat(k,419) = rxt(k,22)
621 73945176 : mat(k,348) = rxt(k,29)
622 73945176 : mat(k,353) = rxt(k,30)
623 73945176 : mat(k,412) = rxt(k,31)
624 73945176 : mat(k,272) = rxt(k,32)
625 73945176 : mat(k,623) = rxt(k,38)
626 73945176 : mat(k,455) = rxt(k,39)
627 73945176 : mat(k,2249) = .330_r8*rxt(k,40)
628 73945176 : mat(k,129) = rxt(k,43)
629 73945176 : mat(k,224) = rxt(k,47)
630 73945176 : mat(k,715) = rxt(k,50)
631 73945176 : mat(k,325) = rxt(k,54)
632 73945176 : mat(k,394) = rxt(k,59)
633 73945176 : mat(k,342) = rxt(k,62)
634 73945176 : mat(k,546) = rxt(k,63)
635 73945176 : mat(k,400) = rxt(k,64)
636 73945176 : mat(k,659) = rxt(k,66)
637 73945176 : mat(k,490) = rxt(k,68)
638 73945176 : mat(k,673) = rxt(k,71)
639 73945176 : mat(k,205) = rxt(k,72)
640 73945176 : mat(k,738) = rxt(k,73)
641 73945176 : mat(k,425) = rxt(k,74)
642 73945176 : mat(k,791) = rxt(k,106)
643 73945176 : mat(k,840) = rxt(k,107)
644 73945176 : mat(k,1958) = .500_r8*rxt(k,529)
645 73945176 : mat(k,805) = -( rxt(k,592) + het_rates(k,229) )
646 : mat(k,2074) = rxt(k,120) + rxt(k,121) + rxt(k,122) + rxt(k,123) + rxt(k,124) &
647 73945176 : + rxt(k,125)
648 : mat(k,1531) = rxt(k,127) + rxt(k,128) + rxt(k,129) + rxt(k,131) + rxt(k,132) &
649 73945176 : + rxt(k,133)
650 73945176 : mat(k,448) = -( het_rates(k,230) )
651 73945176 : mat(k,814) = -( het_rates(k,231) )
652 73945176 : mat(k,1217) = -( het_rates(k,232) )
653 73945176 : mat(k,1121) = .150_r8*rxt(k,70)
654 73945176 : mat(k,1178) = -( het_rates(k,233) )
655 73945176 : mat(k,1062) = -( het_rates(k,234) )
656 73945176 : mat(k,751) = -( het_rates(k,235) )
657 73945176 : mat(k,88) = -( het_rates(k,236) )
658 73945176 : mat(k,1233) = -( het_rates(k,237) )
659 73945176 : mat(k,767) = -( het_rates(k,238) )
660 73945176 : mat(k,94) = -( het_rates(k,239) )
661 73945176 : mat(k,510) = -( het_rates(k,240) )
662 73945176 : mat(k,2449) = -( rxt(k,1) + rxt(k,2) + rxt(k,3) + het_rates(k,241) )
663 73945176 : mat(k,2262) = .050_r8*rxt(k,40)
664 73945176 : mat(k,132) = rxt(k,136)
665 76277862 : mat(k,2370) = rxt(k,521)
666 : end do
667 2332686 : end subroutine linmat03
668 2332686 : subroutine linmat( avec_len, mat, y, rxt, het_rates )
669 : !----------------------------------------------
670 : ! ... linear matrix entries for implicit species
671 : !----------------------------------------------
672 : use chem_mods, only : gas_pcnst, rxntot, nzcnt
673 : use shr_kind_mod, only : r8 => shr_kind_r8
674 : implicit none
675 : !----------------------------------------------
676 : ! ... dummy arguments
677 : !----------------------------------------------
678 : integer, intent(in) :: avec_len
679 : real(r8), intent(in) :: y(veclen,gas_pcnst)
680 : real(r8), intent(in) :: rxt(veclen,rxntot)
681 : real(r8), intent(in) :: het_rates(veclen,gas_pcnst)
682 : real(r8), intent(inout) :: mat(veclen,nzcnt)
683 2332686 : call linmat01( avec_len, mat, y, rxt, het_rates )
684 2332686 : call linmat02( avec_len, mat, y, rxt, het_rates )
685 2332686 : call linmat03( avec_len, mat, y, rxt, het_rates )
686 2332686 : end subroutine linmat
687 : end module mo_lin_matrix
|