Line data Source code
1 : module mo_lin_matrix
2 : use chem_mods, only: veclen
3 : private
4 : public :: linmat
5 : contains
6 2323678 : 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 75980958 : do k = 1,avec_len
26 73657280 : mat(k,291) = -( het_rates(k,1) )
27 73657280 : mat(k,23) = rxt(k,26)
28 73657280 : mat(k,703) = rxt(k,27)
29 73657280 : mat(k,87) = rxt(k,29)
30 73657280 : mat(k,152) = rxt(k,51)
31 73657280 : mat(k,135) = rxt(k,57)
32 : mat(k,524) = rxt(k,181)*y(k,7) + rxt(k,207)*y(k,8) + 3.000_r8*rxt(k,208)*y(k,22) &
33 : + 2.000_r8*rxt(k,209)*y(k,37) + 2.000_r8*rxt(k,230)*y(k,14) &
34 73657280 : + rxt(k,231)*y(k,16)
35 : mat(k,468) = 2.000_r8*rxt(k,218)*y(k,14) + rxt(k,220)*y(k,16) &
36 73657280 : + 3.000_r8*rxt(k,225)*y(k,22)
37 : mat(k,633) = 2.000_r8*rxt(k,219)*y(k,14) + rxt(k,221)*y(k,16) &
38 73657280 : + 3.000_r8*rxt(k,226)*y(k,22)
39 73657280 : mat(k,22) = -( rxt(k,26) + het_rates(k,2) )
40 73657280 : mat(k,719) = -( rxt(k,27) + het_rates(k,3) )
41 73657280 : mat(k,91) = rxt(k,28)
42 : mat(k,84) = -( rxt(k,28) + rxt(k,29) + rxt(k,270) + rxt(k,273) + rxt(k,278) &
43 73657280 : + het_rates(k,4) )
44 73657280 : mat(k,556) = -( rxt(k,20) + rxt(k,21) + het_rates(k,15) )
45 73657280 : mat(k,61) = rxt(k,22)
46 73657280 : mat(k,534) = rxt(k,244)*y(k,21) + rxt(k,245)*y(k,21)
47 73657280 : mat(k,328) = -( het_rates(k,19) )
48 73657280 : mat(k,470) = rxt(k,156)*y(k,21)
49 73657280 : mat(k,128) = rxt(k,212)*y(k,21)
50 73657280 : mat(k,635) = rxt(k,241)*y(k,21)
51 73657280 : mat(k,526) = rxt(k,243)*y(k,21)
52 73657280 : mat(k,58) = -( rxt(k,22) + het_rates(k,20) )
53 : mat(k,475) = -( rxt(k,156)*y(k,21) + rxt(k,218)*y(k,14) + rxt(k,220)*y(k,16) &
54 73657280 : + rxt(k,223)*y(k,18) + rxt(k,225)*y(k,22) + het_rates(k,23) )
55 73657280 : mat(k,24) = rxt(k,26)
56 73657280 : mat(k,17) = 2.000_r8*rxt(k,43)
57 73657280 : mat(k,4) = 2.000_r8*rxt(k,44)
58 73657280 : mat(k,450) = rxt(k,45)
59 73657280 : mat(k,249) = rxt(k,46)
60 73657280 : mat(k,20) = rxt(k,49)
61 73657280 : mat(k,316) = rxt(k,55)
62 73657280 : mat(k,147) = rxt(k,58)
63 : mat(k,531) = 4.000_r8*rxt(k,180)*y(k,6) + rxt(k,181)*y(k,7) &
64 : + 2.000_r8*rxt(k,182)*y(k,9) + 2.000_r8*rxt(k,183)*y(k,10) &
65 : + 2.000_r8*rxt(k,184)*y(k,11) + rxt(k,185)*y(k,12) &
66 : + 2.000_r8*rxt(k,186)*y(k,13) + rxt(k,232)*y(k,41) &
67 73657280 : + rxt(k,233)*y(k,42) + rxt(k,234)*y(k,43)
68 : mat(k,640) = 3.000_r8*rxt(k,222)*y(k,17) + rxt(k,224)*y(k,18) &
69 73657280 : + rxt(k,227)*y(k,41) + rxt(k,228)*y(k,42) + rxt(k,229)*y(k,43)
70 73657280 : mat(k,16) = -( rxt(k,43) + het_rates(k,24) )
71 73657280 : mat(k,2) = -( rxt(k,44) + rxt(k,190) + het_rates(k,25) )
72 73657280 : mat(k,449) = -( rxt(k,45) + het_rates(k,26) )
73 73657280 : mat(k,248) = rxt(k,47)
74 73657280 : mat(k,49) = rxt(k,59)
75 73657280 : mat(k,3) = 2.000_r8*rxt(k,190)
76 : mat(k,243) = -( rxt(k,46) + rxt(k,47) + rxt(k,272) + rxt(k,277) + rxt(k,283) &
77 73657280 : + het_rates(k,27) )
78 73657280 : mat(k,92) = -( het_rates(k,29) )
79 73657280 : mat(k,542) = rxt(k,20) + rxt(k,21)
80 73657280 : mat(k,51) = rxt(k,88)
81 73657280 : mat(k,462) = rxt(k,223)*y(k,18)
82 73657280 : mat(k,167) = rxt(k,300)*y(k,30)
83 73657280 : mat(k,5) = -( rxt(k,48) + het_rates(k,31) )
84 : mat(k,517) = rxt(k,181)*y(k,7) + rxt(k,183)*y(k,10) + 2.000_r8*rxt(k,184)*y(k,11) &
85 : + 2.000_r8*rxt(k,185)*y(k,12) + rxt(k,186)*y(k,13) &
86 : + rxt(k,207)*y(k,8) + 2.000_r8*rxt(k,209)*y(k,37) &
87 73657280 : + rxt(k,233)*y(k,42) + rxt(k,234)*y(k,43)
88 73657280 : mat(k,614) = rxt(k,228)*y(k,42) + rxt(k,229)*y(k,43)
89 73657280 : mat(k,18) = -( rxt(k,49) + het_rates(k,32) )
90 73657280 : mat(k,519) = rxt(k,182)*y(k,9) + rxt(k,183)*y(k,10) + rxt(k,232)*y(k,41)
91 73657280 : mat(k,615) = rxt(k,227)*y(k,41)
92 73657280 : mat(k,33) = -( het_rates(k,33) )
93 73657280 : mat(k,125) = -( rxt(k,212)*y(k,21) + het_rates(k,34) )
94 73657280 : mat(k,6) = 2.000_r8*rxt(k,48)
95 73657280 : mat(k,19) = rxt(k,49)
96 73657280 : mat(k,26) = rxt(k,56)
97 73657280 : mat(k,520) = rxt(k,185)*y(k,12) + rxt(k,207)*y(k,8)
98 73657280 : mat(k,280) = -( het_rates(k,35) )
99 73657280 : mat(k,728) = 2.000_r8*rxt(k,2) + rxt(k,3)
100 73657280 : mat(k,545) = 2.000_r8*rxt(k,20)
101 73657280 : mat(k,59) = rxt(k,22)
102 73657280 : mat(k,151) = rxt(k,51)
103 73657280 : mat(k,308) = rxt(k,55)
104 73657280 : mat(k,27) = rxt(k,56)
105 73657280 : mat(k,523) = rxt(k,244)*y(k,21)
106 73657280 : mat(k,692) = -( het_rates(k,36) )
107 73657280 : mat(k,743) = rxt(k,1)
108 73657280 : mat(k,561) = rxt(k,21)
109 73657280 : mat(k,539) = rxt(k,245)*y(k,21)
110 73657280 : mat(k,96) = -( rxt(k,4) + het_rates(k,38) )
111 73657280 : mat(k,8) = -( rxt(k,87) + het_rates(k,39) )
112 73657280 : mat(k,150) = -( rxt(k,51) + het_rates(k,40) )
113 73657280 : mat(k,310) = -( rxt(k,55) + het_rates(k,44) )
114 : mat(k,469) = rxt(k,156)*y(k,21) + rxt(k,218)*y(k,14) + rxt(k,220)*y(k,16) &
115 73657280 : + 2.000_r8*rxt(k,223)*y(k,18) + rxt(k,225)*y(k,22)
116 73657280 : mat(k,25) = -( rxt(k,56) + het_rates(k,45) )
117 73657280 : mat(k,124) = rxt(k,212)*y(k,21)
118 73657280 : mat(k,255) = -( rxt(k,9) + het_rates(k,46) )
119 : mat(k,40) = 2.000_r8*rxt(k,265) + 2.000_r8*rxt(k,268) + 2.000_r8*rxt(k,271) &
120 73657280 : + 2.000_r8*rxt(k,282)
121 73657280 : mat(k,593) = .500_r8*rxt(k,266)
122 73657280 : mat(k,345) = rxt(k,267)
123 73657280 : mat(k,86) = rxt(k,270) + rxt(k,273) + rxt(k,278)
124 73657280 : mat(k,244) = rxt(k,272) + rxt(k,277) + rxt(k,283)
125 73657280 : mat(k,64) = -( rxt(k,10) + rxt(k,11) + rxt(k,153) + het_rates(k,47) )
126 73657280 : mat(k,134) = -( rxt(k,57) + het_rates(k,48) )
127 73657280 : mat(k,85) = rxt(k,270) + rxt(k,273) + rxt(k,278)
128 73657280 : mat(k,143) = -( rxt(k,58) + het_rates(k,49) )
129 73657280 : mat(k,242) = rxt(k,272) + rxt(k,277) + rxt(k,283)
130 73657280 : mat(k,225) = -( rxt(k,62) + het_rates(k,50) )
131 73657280 : mat(k,655) = rxt(k,15)
132 73657280 : mat(k,174) = rxt(k,301)
133 : mat(k,39) = -( rxt(k,13) + rxt(k,14) + rxt(k,154) + rxt(k,265) + rxt(k,268) &
134 73657280 : + rxt(k,271) + rxt(k,282) + het_rates(k,52) )
135 73657280 : mat(k,670) = -( rxt(k,15) + rxt(k,16) + het_rates(k,53) )
136 73657280 : mat(k,44) = rxt(k,14)
137 73657280 : mat(k,610) = rxt(k,17) + .500_r8*rxt(k,266)
138 73657280 : mat(k,361) = rxt(k,19)
139 73657280 : mat(k,188) = rxt(k,298)
140 73657280 : mat(k,77) = rxt(k,311)
141 73657280 : mat(k,538) = 2.000_r8*rxt(k,147)*y(k,51)
142 73657280 : mat(k,608) = -( rxt(k,17) + rxt(k,266) + het_rates(k,54) )
143 73657280 : mat(k,259) = rxt(k,9)
144 73657280 : mat(k,68) = rxt(k,11) + rxt(k,153)
145 73657280 : mat(k,43) = rxt(k,13) + rxt(k,154)
146 73657280 : mat(k,359) = rxt(k,18)
147 73657280 : mat(k,90) = rxt(k,28)
148 73657280 : mat(k,250) = rxt(k,47)
149 73657280 : mat(k,350) = -( rxt(k,18) + rxt(k,19) + rxt(k,267) + het_rates(k,55) )
150 73657280 : mat(k,65) = rxt(k,10)
151 73657280 : mat(k,41) = rxt(k,13) + rxt(k,14) + rxt(k,154)
152 73657280 : mat(k,88) = rxt(k,29)
153 73657280 : mat(k,246) = rxt(k,46)
154 : mat(k,420) = -( rxt(k,71) + rxt(k,72) + rxt(k,73) + rxt(k,74) + rxt(k,75) &
155 73657280 : + rxt(k,76) + het_rates(k,56) )
156 73657280 : mat(k,733) = rxt(k,2)
157 : mat(k,504) = 2.000_r8*rxt(k,5) + rxt(k,6) + rxt(k,77) + rxt(k,79) + rxt(k,81) &
158 : + 2.000_r8*rxt(k,82) + 2.000_r8*rxt(k,83) + rxt(k,84) + rxt(k,85) &
159 73657280 : + rxt(k,86)
160 73657280 : mat(k,573) = rxt(k,8)
161 73657280 : mat(k,42) = rxt(k,14)
162 73657280 : mat(k,661) = rxt(k,15)
163 73657280 : mat(k,601) = rxt(k,17)
164 73657280 : mat(k,352) = rxt(k,18)
165 73657280 : mat(k,708) = rxt(k,27)
166 73657280 : mat(k,448) = rxt(k,45)
167 73657280 : mat(k,48) = rxt(k,59)
168 73657280 : mat(k,270) = rxt(k,89)
169 73657280 : mat(k,238) = rxt(k,90)
170 73657280 : mat(k,31) = rxt(k,91)
171 73657280 : mat(k,529) = rxt(k,96)
172 73657280 : mat(k,82) = rxt(k,305)
173 73657280 : mat(k,76) = rxt(k,310)
174 : mat(k,507) = -( rxt(k,5) + rxt(k,6) + rxt(k,77) + rxt(k,78) + rxt(k,79) &
175 : + rxt(k,80) + rxt(k,81) + rxt(k,82) + rxt(k,83) + rxt(k,84) &
176 73657280 : + rxt(k,85) + rxt(k,86) + het_rates(k,57) )
177 73657280 : mat(k,576) = rxt(k,8)
178 73657280 : mat(k,355) = rxt(k,19)
179 73657280 : mat(k,12) = rxt(k,92) + rxt(k,100)
180 73657280 : mat(k,15) = rxt(k,93)
181 73657280 : mat(k,532) = rxt(k,148)*y(k,51)
182 73657280 : mat(k,579) = -( rxt(k,7) + rxt(k,8) + het_rates(k,58) )
183 73657280 : mat(k,45) = -( rxt(k,59) + het_rates(k,59) )
184 73657280 : mat(k,50) = -( rxt(k,88) + het_rates(k,60) )
185 73657280 : mat(k,112) = -( het_rates(k,61) )
186 73657280 : mat(k,52) = rxt(k,88)
187 73657280 : mat(k,264) = rxt(k,89)
188 73657280 : mat(k,266) = -( rxt(k,89) + het_rates(k,63) )
189 73657280 : mat(k,236) = rxt(k,90)
190 73657280 : mat(k,235) = -( rxt(k,90) + het_rates(k,64) )
191 73657280 : mat(k,30) = rxt(k,91)
192 73657280 : mat(k,29) = -( rxt(k,91) + het_rates(k,65) )
193 73657280 : mat(k,9) = rxt(k,87)
194 73657280 : mat(k,1) = -( het_rates(k,66) )
195 73657280 : mat(k,196) = -( het_rates(k,67) )
196 73657280 : mat(k,653) = rxt(k,16)
197 73657280 : mat(k,223) = rxt(k,62)
198 : mat(k,407) = rxt(k,71) + rxt(k,72) + rxt(k,73) + rxt(k,74) + rxt(k,75) &
199 73657280 : + rxt(k,76)
200 : mat(k,496) = rxt(k,77) + rxt(k,78) + rxt(k,79) + rxt(k,80) + rxt(k,81) &
201 73657280 : + rxt(k,84) + rxt(k,85) + rxt(k,86)
202 73657280 : mat(k,376) = -( rxt(k,264) + het_rates(k,68) )
203 73657280 : mat(k,66) = rxt(k,11) + rxt(k,153)
204 73657280 : mat(k,472) = rxt(k,220)*y(k,16) + rxt(k,223)*y(k,18)
205 73657280 : mat(k,637) = rxt(k,221)*y(k,16) + rxt(k,224)*y(k,18)
206 73657280 : mat(k,528) = rxt(k,244)*y(k,21)
207 73657280 : mat(k,210) = -( het_rates(k,69) )
208 73657280 : mat(k,103) = -( het_rates(k,70) )
209 73657280 : mat(k,79) = rxt(k,305)
210 73657280 : mat(k,73) = rxt(k,310)
211 73657280 : mat(k,119) = -( het_rates(k,71) )
212 73657280 : mat(k,651) = rxt(k,16)
213 73657280 : mat(k,180) = rxt(k,298)
214 73657280 : mat(k,168) = rxt(k,301)
215 73657280 : mat(k,159) = -( het_rates(k,72) )
216 73657280 : mat(k,220) = rxt(k,62)
217 73657280 : mat(k,74) = rxt(k,311)
218 : mat(k,533) = -( rxt(k,96) + rxt(k,147)*y(k,51) + rxt(k,148)*y(k,51) &
219 : + rxt(k,180)*y(k,6) + rxt(k,181)*y(k,7) + rxt(k,182)*y(k,9) &
220 : + rxt(k,183)*y(k,10) + rxt(k,184)*y(k,11) + rxt(k,185)*y(k,12) &
221 : + rxt(k,186)*y(k,13) + rxt(k,207)*y(k,8) + rxt(k,208)*y(k,22) &
222 : + rxt(k,209)*y(k,37) + rxt(k,230)*y(k,14) + rxt(k,231)*y(k,16) &
223 : + rxt(k,232)*y(k,41) + rxt(k,233)*y(k,42) + rxt(k,234)*y(k,43) &
224 : + rxt(k,243)*y(k,21) + rxt(k,244)*y(k,21) + rxt(k,245)*y(k,21) &
225 73657280 : + het_rates(k,73) )
226 73657280 : mat(k,737) = rxt(k,1)
227 73657280 : mat(k,508) = rxt(k,6)
228 75980958 : mat(k,577) = rxt(k,7)
229 : end do
230 2323678 : end subroutine linmat01
231 2323678 : subroutine linmat02( avec_len, mat, y, rxt, het_rates )
232 : !----------------------------------------------
233 : ! ... linear matrix entries for implicit species
234 : !----------------------------------------------
235 : use chem_mods, only : gas_pcnst, rxntot, nzcnt
236 : use shr_kind_mod, only : r8 => shr_kind_r8
237 : implicit none
238 : !----------------------------------------------
239 : ! ... dummy arguments
240 : !----------------------------------------------
241 : integer, intent(in) :: avec_len
242 : real(r8), intent(in) :: y(veclen,gas_pcnst)
243 : real(r8), intent(in) :: rxt(veclen,rxntot)
244 : real(r8), intent(in) :: het_rates(veclen,gas_pcnst)
245 : real(r8), intent(inout) :: mat(veclen,nzcnt)
246 : !----------------------------------------------
247 : ! ... local variables
248 : !----------------------------------------------
249 : integer :: k
250 75980958 : do k = 1,avec_len
251 73657280 : mat(k,11) = -( rxt(k,92) + rxt(k,100) + het_rates(k,74) )
252 73657280 : mat(k,564) = rxt(k,7)
253 73657280 : mat(k,13) = rxt(k,104) + rxt(k,103)*y(k,30)
254 73657280 : mat(k,14) = -( rxt(k,93) + rxt(k,104) + rxt(k,103)*y(k,30) + het_rates(k,75) )
255 73657280 : mat(k,181) = -( rxt(k,298) + het_rates(k,76) )
256 73657280 : mat(k,495) = rxt(k,78) + rxt(k,80)
257 73657280 : mat(k,171) = rxt(k,300)*y(k,30)
258 : mat(k,646) = -( rxt(k,219)*y(k,14) + rxt(k,221)*y(k,16) + rxt(k,222)*y(k,17) &
259 : + rxt(k,224)*y(k,18) + rxt(k,226)*y(k,22) + rxt(k,227)*y(k,41) &
260 : + rxt(k,228)*y(k,42) + rxt(k,229)*y(k,43) + rxt(k,241)*y(k,21) &
261 73657280 : + het_rates(k,77) )
262 73657280 : mat(k,741) = rxt(k,3)
263 73657280 : mat(k,101) = 2.000_r8*rxt(k,4)
264 73657280 : mat(k,260) = rxt(k,9)
265 73657280 : mat(k,69) = rxt(k,10)
266 73657280 : mat(k,62) = rxt(k,22)
267 73657280 : mat(k,139) = rxt(k,57)
268 73657280 : mat(k,148) = rxt(k,58)
269 73657280 : mat(k,609) = .500_r8*rxt(k,266)
270 73657280 : mat(k,537) = rxt(k,243)*y(k,21)
271 73657280 : mat(k,170) = -( rxt(k,301) + rxt(k,300)*y(k,30) + het_rates(k,78) )
272 73657280 : mat(k,405) = rxt(k,73) + rxt(k,74)
273 73657280 : mat(k,494) = rxt(k,79) + rxt(k,81)
274 73657280 : mat(k,75) = rxt(k,285)
275 73657280 : mat(k,80) = rxt(k,286)
276 73657280 : mat(k,78) = -( rxt(k,286) + rxt(k,305) + het_rates(k,79) )
277 73657280 : mat(k,394) = rxt(k,75) + rxt(k,76)
278 73657280 : mat(k,489) = rxt(k,85) + rxt(k,86)
279 73657280 : mat(k,72) = rxt(k,287)
280 : mat(k,71) = -( rxt(k,285) + rxt(k,287) + rxt(k,310) + rxt(k,311) &
281 73657280 : + het_rates(k,80) )
282 73657280 : mat(k,393) = rxt(k,71) + rxt(k,72)
283 73657280 : mat(k,488) = rxt(k,77) + rxt(k,84)
284 73657280 : mat(k,745) = -( rxt(k,1) + rxt(k,2) + rxt(k,3) + het_rates(k,81) )
285 73657280 : mat(k,10) = rxt(k,87)
286 73657280 : mat(k,389) = rxt(k,264)
287 : mat(k,650) = rxt(k,219)*y(k,14) + rxt(k,221)*y(k,16) + rxt(k,222)*y(k,17) &
288 75980958 : + rxt(k,224)*y(k,18) + rxt(k,229)*y(k,43) + rxt(k,241)*y(k,21)
289 : end do
290 2323678 : end subroutine linmat02
291 2323678 : subroutine linmat( avec_len, mat, y, rxt, het_rates )
292 : !----------------------------------------------
293 : ! ... linear matrix entries for implicit species
294 : !----------------------------------------------
295 : use chem_mods, only : gas_pcnst, rxntot, nzcnt
296 : use shr_kind_mod, only : r8 => shr_kind_r8
297 : implicit none
298 : !----------------------------------------------
299 : ! ... dummy arguments
300 : !----------------------------------------------
301 : integer, intent(in) :: avec_len
302 : real(r8), intent(in) :: y(veclen,gas_pcnst)
303 : real(r8), intent(in) :: rxt(veclen,rxntot)
304 : real(r8), intent(in) :: het_rates(veclen,gas_pcnst)
305 : real(r8), intent(inout) :: mat(veclen,nzcnt)
306 2323678 : call linmat01( avec_len, mat, y, rxt, het_rates )
307 2323678 : call linmat02( avec_len, mat, y, rxt, het_rates )
308 2323678 : end subroutine linmat
309 : end module mo_lin_matrix
|