CKLIB emulation#

This example shows how to implement subroutines that emulate those of the Chemkin CKLIB library.

This may be useful to port an existing Chemkin-based application to Cantera. As shown here, the subroutine names begin with ct instead of ck, so that Cantera and CKLIB subroutines can be both used in an application, if desired. It is also possible to rename these subroutines with the ck prefix if the application is not linked to the Chemkin CKLIB library. In this case, application programs do not need to be modified or recompiled - they only need to be relinked.

Relies on the wrapper functions defined in demo_ftnlib.cpp to call the Cantera C++ interface.

Only a few subroutines are implemented here, but the same idea can be applied to create Cantera-based versions of any other subroutines in the CKLIB library.

Tags: Fortran 77 tutorial kinetics

c     This file is part of Cantera. See License.txt in the top-level
c     directory or at https://cantera.org/license.txt for license and
c     copyright information.

c-----------------------------------------------------------------------
c     example driver program

      program ctck
      implicit double precision (a-h,o-z)
      double precision rckwrk(1)
      integer ickwrk(1)
      parameter (MAXSP = 100)
      double precision y(MAXSP), wdot(MAXSP)

c     Read in the reaction mechanism. Since this is done differently
c     than in Chemkin, this function does not correspond to any CKLIB
c     subroutine.
      call newIdealGasMix('h2o2.yaml','ohmech','none')

c     get the number of elements, species, and reactions
      call ctindx(ickwrk, rckwrk, mm, kk, ii)

      do k = 1, kk
         y(k) = 1.0/kk
      end do

c     compute the net production rates in cgs units
      p = 1.0d6
      t = 2500.0d0

      call ctwyp(p, t, y, ickwrk, rckwrk, wdot)
      do k = 1, kk
         write(*,*) k, y(k), wdot(k)
      end do

      end

c----------------------------------------------------------------------
c
c     The subroutines below emulate ones in the Chemkin CKLIB
c     library. They are implemented in terms of the procedures in
c     demo_ftnlib. It would also be possible to rewrite demo_ftnlib to
c     implement a Chemkin-like interface directly. Note that the arrays
c     ickwrk and rckwrk are passed in for consistency with the Chemkin
c     interface specification, but the are not used. These may simply be
c     dummy arrays, as in the main program above.
c

c     CTINDX: get the number of elements, species, and reactions

      subroutine ctindx(ickwrk, rckwrk, mm, kk, ii)
      implicit double precision (a-h,o-z)
      integer ickwrk(*)
      double precision rckwrk(*)
      mm = nElements()
      kk = nSpecies()
      ii = nReactions()
      return
      end


c     CTWYP: get the net molar production rates, given the pressure,
c     temperature, and array of mass fractions.

      subroutine ctwyp(p,t,y,ickwrk,rckwrk,wdot)
      implicit double precision (a-h,o-z)
      double precision y(*), rckwrk(*), wdot(*)
      integer ickwrk(*)

c     set the state
      psi = 0.1*p
      call setState_TPY(t, psi, y)

c     get the net production rates
      call getNetProductionRates(wdot)

c     convert SI -> cgs
      nsp = nSpecies()
      do k = 1, nsp
         wdot(k) = 1.0d3*wdot(k)
      end do
      return
      end

Gallery generated by Sphinx-Gallery