cantera/samples/f77/ctlib.f
Ray Speth 2528df0f75 Reorganized source tree structure
These changes make it unnecessary to copy header files around during
the build process, which tends to confuse IDEs and debuggers. The
headers which comprise Cantera's external C++ interface are now in
the 'include' directory.

All of the samples and demos are now in the 'samples' subdirectory.
2012-02-12 02:27:14 +00:00

95 lines
3 KiB
Fortran

c
c This example shows how to implement subroutines that emulate those
c of the Chemkin CKLIB library. This may be useful to port an
c existing Chemkin-based application to Cantera. As shown here, the
c subroutine names begin with 'ct' instead of 'ck', so that Cantera
c and CKLIB subroutines can be both used in an application, if
c desired. It is also possible to rename these subroutines with the
c 'ck' prefix if the application is not linked to the Chemkin CKLIB
c library. In this case, application programs do not need to be
c modified or recompiled - they only need to be relinked.
c
c Only a few subroutines are implemented here, but the same idea can
c be applied to create Cantera-based versions of any other
c subroutines in the CKLIB library.
c
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('gri30.cti','gri30','')
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
stop
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)
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