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.
95 lines
3 KiB
Fortran
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
|
|
|