File: pick-dir/wr_bimolecular_latex.f90
1 SUBROUTINE WR_BIMOLECULAR_LATEX(Fn,Jchan,Species,Bimolecular, &
2 & NMAXR,NMAXS,Nspec,Nkb, &
3 & Nlinesperpage)
4 USE KINETIC
5 IMPLICIT NONE
6 !
7 ! Dummy arguments
8 !
9 CHARACTER(200) :: Fn
10 INTEGER :: Jchan , Nkb , Nlinesperpage , Nspec
11 INTEGER :: NMAXR , NMAXS
12 TYPE (BIMOLECULAR_RECORD) , DIMENSION(NMAXR) :: Bimolecular
13 TYPE (SPECIES_RECORD) , DIMENSION(NMAXS) :: Species
14 INTENT (IN) Bimolecular , Fn , Jchan , Nkb , Nlinesperpage , &
15 & NMAXR , NMAXS
16 !
17 ! Local variables
18 !
19 CHARACTER(200) :: argst , powst , string , string1 , string2 , &
20 & string3 , string4 , string5
21 INTEGER :: i , i1 , i2 , ii , ilines , ipow , itl , j , &
22 & nproductsperline
23 INTEGER :: INT
24 INTEGER :: ISPEC
25 LOGICAL :: lend , lfirst , lstart , ltable
26 CHARACTER(20) :: st_blank
27 CHARACTER(10) :: st_num
28 REAL :: zarg
29 !
30 !-----------------------------------------------------------------------
31 !
32 ! Written by: David Lary
33 !
34 ! Started: 7/1/1993
35 !
36 ! Last updated: 2/2/2004
37 !
38 !----------------------------------------------------------------------
39 !
40 CALL BLANK(st_blank)
41 !
42 !----------------------------------------------------------------------
43 !
44 ! Bimolecular.
45 WRITE (6,*) TRIM(Fn)
46 OPEN (Jchan,FILE=TRIM(Fn),STATUS="unknown')
47 !
48 !----------------------------------------------------------------------
49 !
50 ! LaTeX document header.
51 WRITE (Jchan,FMT="(a)') "\documentclass[10pt,a4]{article}'
52 WRITE (Jchan,FMT="(a)')
53 WRITE (Jchan,FMT="(73a)') "%' , ("-',i=1,72)
54 WRITE (Jchan,FMT="(a)') "%'
55 WRITE (Jchan,FMT="(a)') &
56 &"% LaTeX document automatically generated by the AutoChem Programm&
57 &e "Pick"."
58 WRITE (Jchan,FMT="(a)') "%'
59 WRITE (Jchan,FMT="(a)') "% by David Lary 1993-2004.'
60 WRITE (Jchan,FMT="(a)') "%'
61 WRITE (Jchan,FMT="(a)') "% Bimolecular reaction list.'
62 WRITE (Jchan,FMT="(a)') "%'
63 WRITE (Jchan,FMT="(73a)') "%' , ("-',i=1,72)
64 WRITE (Jchan,FMT="(a)')
65 WRITE (Jchan,FMT="(a)') "% Margins.'
66 WRITE (Jchan,FMT="(a)') "\textwidth 5.9in '
67 WRITE (Jchan,FMT="(a)') "\oddsidemargin -0.12in '
68 WRITE (Jchan,FMT="(a)') "\evensidemargin .3in'
69 WRITE (Jchan,FMT="(a)') "\marginparwidth 1.3in '
70 WRITE (Jchan,FMT="(a)') "\topmargin -.9in '
71 WRITE (Jchan,FMT="(a)') "\textheight 9.4in'
72 WRITE (Jchan,FMT="(a)')
73 WRITE (Jchan,FMT="(a)') "% Package definitions.'
74 WRITE (Jchan,FMT="(a)') "\usepackage{hyperref}'
75 WRITE (Jchan,FMT="(a)') "\usepackage{times}'
76 WRITE (Jchan,FMT="(a)')
77 WRITE (Jchan,FMT="(a)') &
78 &"% Make sure equations will not be in italic.'
79 WRITE (Jchan,FMT="(a)') "\everymath={\fam0 }'
80 WRITE (Jchan,FMT="(a)')
81 WRITE (Jchan,FMT="(a)') "% Begin Document.'
82 WRITE (Jchan,FMT="(a)') "\begin{document}'
83 WRITE (Jchan,FMT="(a)')
84 !
85 !----------------------------------------------------------------------
86 !
87 ! Bimolecular reaction section.
88 WRITE (Jchan,FMT="(a)') "\section{Bimolecular Reactions}'
89 WRITE (Jchan,FMT="(a)')
90 WRITE (Jchan,FMT="(a)') "A total of '
91 WRITE (Jchan,FMT="(i6)') Nkb
92 WRITE (Jchan,FMT="(a)') &
93 &"bimolecular reactions were selected and they are given in '
94 WRITE (Jchan,FMT="(a)') "Table~\ref{Table:Bimolecular.reactions}.'
95 WRITE (Jchan,FMT="(a)')
96 !
97 !----------------------------------------------------------------------
98 !
99 ! Bimolecular reaction table.
100 !
101 ! Reaction loop.
102 ilines = 0
103 lstart = .TRUE.
104 lfirst = .TRUE.
105 DO i = 1 , Nkb
106 !
107 WRITE (string,FMT="(i6)') i
108 !
109 IF ( lstart ) THEN
110 !
111 ! Start table.
112 lstart = .FALSE.
113 !
114 WRITE (Jchan,FMT="(a)') "\begin{table*}'
115 WRITE (Jchan,FMT="(a)') "\centering'
116 WRITE (Jchan,FMT="(a)') "\small'
117 WRITE (Jchan,FMT="(a)') "\begin{tabular}{|c|rcl|c|}'
118 WRITE (Jchan,FMT="(a)') "\hline'
119 WRITE (Jchan,FMT="(a)') &
120 &"\# & Reactants & & Products & Rate coefficient \\'
121 WRITE (Jchan,FMT="(a)') "\hline'
122 WRITE (Jchan,FMT="(a)')
123 ! WRITE (Jchan,FMT='(a)') '\vspace{-0.12in}&&&&\\'
124 !
125 ENDIF
126 !
127 ! See the size of the reaction product line and determine
128 ! if we need to split it up.
129 itl = 0
130 DO j = 1 , Bimolecular(i)%iwantp
131 itl = itl + LEN_TRIM(Bimolecular(i)%P(j))
132 !
133 WRITE (st_num,FMT="(f6.3)') Bimolecular(i)%Z(j)
134 i1 = SCAN(TRIM(st_num),"1.000')
135 i2 = SCAN(TRIM(st_num),".000')
136 IF ( i1/=2 ) THEN
137 IF ( i2==3 ) WRITE (st_num,FMT="(i6)') &
138 & INT(Bimolecular(i)%Z(j))
139 st_num = TRIM(st_num)
140 ELSEIF ( i1==2 .AND. i2==2 ) THEN
141 st_num = TRIM(st_num)
142 ELSE
143 st_num = st_blank
144 ENDIF
145 itl = itl + LEN_TRIM(st_num)
146 ENDDO
147 !
148 IF ( ANY(INT(Bimolecular(i)%Z(1:Bimolecular(i)%iwantp))/=1) ) &
149 & THEN
150 nproductsperline = 2
151 ELSE
152 nproductsperline = 3
153 ENDIF
154 IF ( itl>11 ) nproductsperline = 1
155 !
156 ltable = .FALSE.
157 IF ( Bimolecular(i)%iwantp>nproductsperline ) ltable = .TRUE.
158 IF ( ltable ) WRITE (Jchan,FMT="(a)') "\vspace{-0.12in}&&&&\\'
159 IF ( Bimolecular(i)%flag=="V' ) WRITE (Jchan,FMT="(a)') &
160 & "\vspace{-0.12in}&&&&\\'
161 !
162 WRITE (Jchan,FMT="(i6,a)') i , " & '
163 !
164 DO j = 1 , Bimolecular(i)%iwantr
165 ii = ISPEC(Bimolecular(i)%RE(j),Species,Nspec)
166 WRITE (Jchan,FMT="(a))') "$'//TRIM(Species(ii)%latex)//"$'
167 IF ( j<Bimolecular(i)%iwantr ) WRITE (Jchan,FMT="(a))') "+'
168 ENDDO
169 !
170 WRITE (Jchan,FMT="(a)') "& $\longrightarrow$ &'
171 !
172 IF ( ltable ) THEN
173 WRITE (Jchan,FMT="(a)') "\vline \ '
174 IF ( nproductsperline==3 ) THEN
175 WRITE (Jchan,FMT="(a)') "\begin{tabular}{lclclc}'
176 ELSEIF ( nproductsperline==2 ) THEN
177 WRITE (Jchan,FMT="(a)') "\begin{tabular}{lclc}'
178 ELSEIF ( nproductsperline==1 ) THEN
179 WRITE (Jchan,FMT="(a)') "\begin{tabular}{lc}'
180 ENDIF
181 ENDIF
182 DO j = 1 , Bimolecular(i)%iwantp
183 !
184 WRITE (st_num,FMT="(f6.3)') Bimolecular(i)%Z(j)
185 i1 = SCAN(TRIM(st_num),"1.000')
186 i2 = SCAN(TRIM(st_num),".000')
187 IF ( i1/=2 ) THEN
188 IF ( i2==3 ) WRITE (st_num,FMT="(i6)') &
189 & INT(Bimolecular(i)%Z(j))
190 WRITE (Jchan,FMT="(a)') TRIM(st_num)
191 ELSEIF ( i1==2 .AND. i2==2 ) THEN
192 WRITE (Jchan,FMT="(a)') TRIM(st_num)
193 ENDIF
194 !
195 !
196 ii = ISPEC(Bimolecular(i)%P(j),Species,Nspec)
197 WRITE (Jchan,FMT="(a))') "$'//TRIM(Species(ii)%latex)//"$'
198 IF ( j<Bimolecular(i)%iwantp ) THEN
199 IF ( ltable ) WRITE (Jchan,FMT="(a)') "&'
200 WRITE (Jchan,FMT="(a))') "+'
201 ENDIF
202 IF ( ltable ) THEN
203 IF ( MOD(j,nproductsperline)==0 ) THEN
204 WRITE (Jchan,FMT="(a)') "\\'
205 ilines = ilines + 1
206 ELSE
207 WRITE (Jchan,FMT="(a)') "&'
208 ENDIF
209 ENDIF
210 ENDDO
211 IF ( ltable ) WRITE (Jchan,FMT="(a)') "\end{tabular}'
212 !
213 !----------------------------------------------------------------------
214 !
215 ! Rate coeffecient expression
216 IF ( Bimolecular(i)%flag=="V' ) THEN
217 WRITE (Jchan,FMT="(a)') "& \vline \ \begin{tabular}{l}'
218 WRITE (Jchan,FMT="(a)') "$k^{bi}_{'//TRIM(string) &
219 &//"}$=$\frac{k_1}{1+k_2}$\\'
220 WRITE (Jchan,FMT="(a)') "$k_1$='
221 ilines = ilines + 2
222 ELSE
223 WRITE (Jchan,FMT="(a)') "& $k^{bi}_{'//TRIM(string)//"}$='
224 ENDIF
225 !
226 IF ( Bimolecular(i)%a1/=0. ) THEN
227 CALL BLANK(string1)
228 CALL POW_ARG(Bimolecular(i)%a1,zarg,ipow)
229 CALL WR_POW_ARG(zarg,ipow,argst,powst,string1)
230 WRITE (Jchan,FMT="(a)') "$'//TRIM(string1)//"$ '
231 ENDIF
232 !
233 IF ( Bimolecular(i)%a2/=0. ) THEN
234 CALL BLANK(string2)
235 IF ( Bimolecular(i)%a2>=0. ) THEN
236 CALL POW_ARG(Bimolecular(i)%a2,zarg,ipow)
237 CALL WR_POW_ARG(zarg,ipow,argst,powst,string2)
238 ELSE
239 CALL POW_ARG(ABS(Bimolecular(i)%a2),zarg,ipow)
240 CALL WR_POW_ARG(zarg,ipow,argst,powst,string2)
241 string2 = "-'//TRIM(string2)
242 ENDIF
243 WRITE (Jchan,FMT="(a)') "$T^{'//TRIM(string2)//"}$ '
244 ENDIF
245 !
246 IF ( Bimolecular(i)%a4/=0. ) THEN
247 CALL BLANK(string3)
248 CALL POW_ARG(Bimolecular(i)%a3,zarg,ipow)
249 CALL WR_POW_ARG(zarg,ipow,argst,powst,string3)
250 !
251 CALL BLANK(string4)
252 IF ( Bimolecular(i)%a4>=0. ) THEN
253 CALL POW_ARG(Bimolecular(i)%a4,zarg,ipow)
254 CALL WR_POW_ARG(zarg,ipow,argst,powst,string4)
255 ELSE
256 CALL POW_ARG(ABS(Bimolecular(i)%a4),zarg,ipow)
257 CALL WR_POW_ARG(zarg,ipow,argst,powst,string4)
258 string4 = "-'//TRIM(string4)
259 ENDIF
260 !
261 WRITE (Jchan,FMT="(a)') "$\frac{T}{'//TRIM(string3) &
262 & //"}^{'//TRIM(string4)//"}$ '
263 ENDIF
264 !
265 IF ( Bimolecular(i)%a5/=0. ) THEN
266 CALL BLANK(string5)
267 IF ( Bimolecular(i)%a5>=0. ) THEN
268 CALL POW_ARG(Bimolecular(i)%a5,zarg,ipow)
269 CALL WR_POW_ARG(zarg,ipow,argst,powst,string5)
270 WRITE (Jchan,FMT="(a)') "$e^{-\frac{'//TRIM(string5) &
271 &//"}{T}}$ '
272 ELSE
273 CALL POW_ARG(ABS(Bimolecular(i)%a5),zarg,ipow)
274 CALL WR_POW_ARG(zarg,ipow,argst,powst,string5)
275 WRITE (Jchan,FMT="(a)') "$e^{\frac{'//TRIM(string5) &
276 &//"}{T}}$ '
277 ENDIF
278 ENDIF
279 !
280 IF ( Bimolecular(i)%flag=="V' ) THEN
281 WRITE (Jchan,FMT="(a)') "\\'
282 WRITE (Jchan,FMT="(a)') "$k_2$='
283 !
284 IF ( Bimolecular(i)%b1/=0. ) THEN
285 CALL BLANK(string1)
286 CALL POW_ARG(Bimolecular(i)%b1,zarg,ipow)
287 CALL WR_POW_ARG(zarg,ipow,argst,powst,string1)
288 WRITE (Jchan,FMT="(a)') "$'//TRIM(string1)//"$ '
289 ENDIF
290 !
291 IF ( Bimolecular(i)%b2/=0. ) THEN
292 CALL BLANK(string2)
293 CALL POW_ARG(Bimolecular(i)%b2,zarg,ipow)
294 CALL WR_POW_ARG(zarg,ipow,argst,powst,string2)
295 WRITE (Jchan,FMT="(a)') "$T^{'//TRIM(string2)//"}$ '
296 ENDIF
297 !
298 IF ( Bimolecular(i)%b4/=0. ) THEN
299 CALL BLANK(string3)
300 CALL POW_ARG(Bimolecular(i)%b3,zarg,ipow)
301 CALL WR_POW_ARG(zarg,ipow,argst,powst,string3)
302 !
303 CALL BLANK(string4)
304 IF ( Bimolecular(i)%b4>=0. ) THEN
305 CALL POW_ARG(Bimolecular(i)%b4,zarg,ipow)
306 CALL WR_POW_ARG(zarg,ipow,argst,powst,string4)
307 ELSE
308 CALL POW_ARG(ABS(Bimolecular(i)%b4),zarg,ipow)
309 CALL WR_POW_ARG(zarg,ipow,argst,powst,string4)
310 string4 = "-'//TRIM(string4)
311 ENDIF
312 !
313 WRITE (Jchan,FMT="(a)') "$\frac{T}{'//TRIM(string3) &
314 &//"}^{'//TRIM(string4)//"}$ '
315 ENDIF
316 !
317 IF ( Bimolecular(i)%b5/=0. ) THEN
318 CALL BLANK(string5)
319 IF ( Bimolecular(i)%b5>=0. ) THEN
320 CALL POW_ARG(Bimolecular(i)%b5,zarg,ipow)
321 CALL WR_POW_ARG(zarg,ipow,argst,powst,string5)
322 WRITE (Jchan,FMT="(a)') "$e^{-\frac{'//TRIM(string5) &
323 &//"}{T}}$ '
324 ELSE
325 CALL POW_ARG(ABS(Bimolecular(i)%b5),zarg,ipow)
326 CALL WR_POW_ARG(zarg,ipow,argst,powst,string5)
327 WRITE (Jchan,FMT="(a)') "$e^{\frac{'//TRIM(string5) &
328 &//"}{T}}$ '
329 ENDIF
330 ENDIF
331 WRITE (Jchan,FMT="(a)') "\end{tabular}'
332 ENDIF
333 !
334 !----------------------------------------------------------------------
335 !
336 WRITE (Jchan,FMT="(a)') "\\'
337 ilines = ilines + 1
338 !
339 lend = (i==Nkb) .OR. (ilines>Nlinesperpage)
340 !
341 IF ( lend ) THEN
342 !
343 ilines = 0
344 lstart = .TRUE.
345 !
346 ! Close table.
347 WRITE (Jchan,FMT="(a)')
348 WRITE (Jchan,FMT="(a)') "\hline'
349 WRITE (Jchan,FMT="(a)') "\end{tabular}'
350 IF ( lfirst ) THEN
351 WRITE (Jchan,FMT="(a)') &
352 &"\caption{Bimolecular reactions.}'
353 WRITE (Jchan,FMT="(a)') &
354 &"\label{Table:Bimolecular.reactions}'
355 lfirst = .FALSE.
356 ELSE
357 WRITE (Jchan,FMT="(a)') &
358 &"\caption{(continued) Bimolecular reactions.}'
359 ENDIF
360 WRITE (Jchan,FMT="(a)') "\end{table*}'
361 WRITE (Jchan,FMT="(a)') "\addtocounter{table}{-1}'
362 !
363 ELSE
364 !
365 IF ( Bimolecular(i)%flag=="V' ) WRITE (Jchan,FMT="(a)') &
366 & "\vspace{-0.12in}&&&&\\'
367 IF ( ltable ) WRITE (Jchan,FMT="(a)') &
368 & "\vspace{-0.12in}&&&&\\'
369 ! WRITE (Jchan,FMT='(a)') '\vspace{-0.01in}&&&&\\'
370 ENDIF
371 !
372 ENDDO
373 ! End of reaction loop.
374 !
375 !----------------------------------------------------------------------
376 !
377 ! Close LaTeX document.
378 WRITE (Jchan,FMT="(a)')
379 WRITE (Jchan,FMT="(a)') "\end{document}'
380 CLOSE (Jchan)
381 !
382 !----------------------------------------------------------------------
383 !
384 END SUBROUTINE WR_BIMOLECULAR_LATEX