vtf-logo

clawpack/applications/euler_chem/1d/Shocktube/src/combl.f

c     =====================================================
      subroutine combl()
c     =====================================================
c
c     Create and initialize application specific common-blocks.
c
c     Copyright (C) 2002 Ralf Deiterding
c     Brandenburgische Universitaet Cottbus
c     
      implicit double precision (a-h,o-z)
c
      include  "ck.i"
      include  "cuser.i"
      parameter( lin = 5, lout = 6 )
      dimension Xkl(leNsp), Xkr(leNsp)
c
      call cheminit()      
c
      open(unit=lin, status='unknown', form='unformatted', 
     &     file='tran.bin')
      call mcinit (lin, lout, lenimc, lenrmc, imcwork, rmcwork)
      close (lin)
c
      open(unit=lin,status='old',form='formatted',file='init.dat')
      read (lin, *) vl, ul, pl
      read (lin, *) (Xkl(k),k=1,Nsp)
      read (lin, *) vr, ur, pr
      read (lin, *) (Xkr(k),k=1,Nsp)
      read (lin, *) sloc, Nden
      read (lin, *) Temp
      close (lin)
c
      if (Temp.gt.0.d0) call tabreset(Temp)
c
      if (Nden.eq.1) then
         rhol = vl
         rhor = vr
         Tl   = 0.d0
         Tr   = 0.d0
      else
         rhol = 0.d0
         rhor = 0.d0
         Tl   = vl
         Tr   = vr
      end if
c
c     Convert kg/m**3 into g/cm**3
      rhol = rhol * 1.d-3
      rhor = rhor * 1.d-3
c     Convert Pa = J/m**2 into dynes/cm**2
      pl = pl * 1.d1
      pr = pr * 1.d1
c     Convert m/sec into cm/sec
      ul = ul * 1.d2
      ur = ur * 1.d2
c
      sum = 0.d0
      do k = 1, Nsp
         sum = sum + Xkl(k)
      enddo
      do k=1,Nsp
         Xkl(k) = Xkl(k)/sum
      enddo
c 
      call ckxty (Xkl,iwork,rwork,Ykl)
      call ckmmwy (Ykl,iwork,rwork,Wl)
c
      sum = 0.d0
      do k = 1, Nsp
         sum = sum + Xkr(k)
      enddo
      do k=1,Nsp
         Xkr(k) = Xkr(k)/sum
      enddo
c 
      call ckxty (Xkr,iwork,rwork,Ykr)
      call ckmmwy (Ykr,iwork,rwork,Wr)
c
      if (Nden.eq.1) then
         Tl = (pl*Wl)/(rhol*RU)
         Tr = (pr*Wr)/(rhor*RU)
      else
         rhol = (pl*Wl)/(Tl*RU)
         rhor = (pr*Wr)/(Tr*RU)
      endif
c
c     # data in left state:
      rhoul = rhol * ul
      El = rhol * (0.5d0*ul**2 + avgtabip(Tl,Ykl,hms,Nsp)) - pl
c
c     # data in right state:
      rhour = rhor * ur
      Er = rhor * (0.5d0*ur**2 + avgtabip(Tr,Ykr,hms,Nsp)) - pr
c
      return
      end