• VTF
  • FSI
  • AMROC
  • SFC
  • Motion
  • STLIB
  • Main Page
  • src/2d/equations/acoustics/rp/rpt2acv.f

    c
    c
    c     =====================================================
          subroutine rpt2acv(ixy,maxm,meqn,mwaves,mbc,mx,
         &                   ql,qr,maux,aux1,aux2,aux3,
         &                   imp,asdq,bmasdq,bpasdq)
    c     =====================================================
          implicit double precision (a-h,o-z)
    c
    c     # Riemann solver in the transverse direction for the acoustics equations
    c     # with varying material properties rho and kappa
    c
    c     # auxN(i,1) holds rho
    c     # auxN(i,2) holds c
    c     #  N = 1 for row below
    c     #      2 for this row
    c     #      3 for row above
    c
    c     # Split asdq into down-going flux bmasdq and up-going flux bpasdq.
    c
    c     # imp=1  means  asdq=amdq,    imp=2 means asdq=apdq
    c
          dimension    ql(1-mbc:maxm+mbc, meqn)
          dimension    qr(1-mbc:maxm+mbc, meqn)
          dimension    asdq(1-mbc:maxm+mbc, meqn)
          dimension bmasdq(1-mbc:maxm+mbc, meqn)
          dimension bpasdq(1-mbc:maxm+mbc, meqn)
          dimension   aux1(1-mbc:maxm+mbc, maux)
          dimension   aux2(1-mbc:maxm+mbc, maux)
          dimension   aux3(1-mbc:maxm+mbc, maux)
    c
    c
    c
          if (ixy.eq.1) then
              mu = 2
              mv = 3
            else
              mu = 3
              mv = 2
            endif
    c
    c
          do 20 i = 2-mbc, mx+mbc
    c
    c        # imp is used to flag whether wave is going to left or right,
    c        # since material properties are different on the two sides
    c
             if (imp.eq.1) then 
    c            # asdq = amdq, moving to left
                 i1 = i-1
               else
    c            # asdq = apdq, moving to right
                 i1 = i
               endif
    c
    c        # The flux difference asdq is split into downward moving part
    c        # traveling at speed -c relative to the medium below and
    c        # an upward moving part traveling
    c        # at speed +c relative to the medium above.
    c
    c        # Note that the sum of these parts does not give all of asdq
    c        # since there is also reflection at the interfaces which decreases
    c        # the flux.
    c
    c        # sound speed in each row of cells:
             cm = aux1(i1,2)
             c = aux2(i1,2)
             cp = aux3(i1,2)
    c
    c        # impedances:
             zm = aux1(i1,1)*aux1(i1,2)
             zz = aux2(i1,1)*aux2(i1,2)
             zp = aux3(i1,1)*aux3(i1,2)
    
    c        # transmitted part of down-going wave:
             a1 = (-asdq(i,1) + asdq(i,mv)*zz) /
         &         (zm + zz)
    
    c        # transmitted part of up-going wave:
             a2 = (asdq(i,1) + asdq(i,mv)*zz) /
         &         (zz + zp)
    c
    c        # The down-going flux difference bmasdq is the product  -c * wave
    c
             bmasdq(i,1) = cm * a1*zm
             bmasdq(i,mu) = 0.d0
             bmasdq(i,mv) = -cm * a1
    c
    c        # The up-going flux difference bpasdq is the product  c * wave
    c
             bpasdq(i,1) = cp * a2*zp
             bpasdq(i,mu) = 0.d0
             bpasdq(i,mv) = cp * a2
    c
       20    continue
    c
          return
          end
    

<