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