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