• VTF
  • FSI
  • AMROC
  • SFC
  • Motion
  • STLIB
  • Main Page
  • src/2d/equations/euler/rpm/ip2meurfl.f

    c
    c     Boundary conditions for ghost-fluid methods.
    c 
    c     Copyright (C) 2003-2007 California Institute of Technology
    c     Ralf Deiterding, ralf@cacr.caltech.edu
    c
    c     -----------------------------------------------------
    c     Internal reflecting physical boundary conditions
    c     for Euler equations
    c     -----------------------------------------------------
    c
    c     Transformation of vector of conserved quantities
    c     into primitives (rho,u,v,p,gamma,pinf)
    c
    c     =====================================================
          subroutine it2meurfl(mx,my,meqn,q,qt)
    c     =====================================================
          implicit none
    c     
          integer   i, j, mx, my, meqn
          double precision    q(meqn,mx,my), qt(meqn,mx,my)
    c
          do 10 j = 1, my
             do 10 i = 1, mx 
                qt(1,i,j) = q(1,i,j)
                qt(2,i,j) = q(2,i,j)/q(1,i,j)
                qt(3,i,j) = q(3,i,j)/q(1,i,j)
                qt(4,i,j) = (q(4,i,j) - 0.5d0*(q(2,i,j)**2 + 
         &           q(3,i,j)**2)/q(1,i,j) - q(6,i,j)) / q(5,i,j)
                qt(5,i,j) = q(5,i,j)
                qt(6,i,j) = q(6,i,j)
     10   continue
    c         
          return
          end
    c
    c     -----------------------------------------------------
    c
    c     Construction of reflective boundary conditions from
    c     mirrored primitive values and application in
    c     conservative form in local patch
    c
    c     =====================================================
          subroutine ip2meurfl(q,mx,my,lb,ub,meqn,nc,idx,
         &     qex,xc,phi,vn,maux,auex,dx,time)
    c     =====================================================
    
          implicit none
    
          integer   mx, my, meqn, maux, nc, idx(2,nc), lb(2), 
         &     ub(2)
          double precision    q(meqn, mx, my), qex(meqn,nc), xc(2,nc), 
         &     phi(nc), vn(2,nc), auex(maux,nc), dx(2), time
    c
    c     Local variables
    c
          integer   i, j, n, stride, getindx
          double precision    rho, u, v, p, vl, gamma, gamma1, pinf
    c
          stride = (ub(1) - lb(1))/(mx-1)
    c
          do 100 n = 1, nc
    
             i = getindx(idx(1,n), lb(1), stride)
             j = getindx(idx(2,n), lb(2), stride)
    c
             rho =  qex(1,n)
             u   = -qex(2,n)       
             v   = -qex(3,n)
             p   =  qex(4,n)
    c
    c        # Add boundary velocities if available
             if (maux.ge.2) then
                u = u + auex(1,n)
                v = v + auex(2,n)
             endif
    c
    c        # Construct normal velocity vector
    c        # Tangential velocity remains unchanged
             vl = 2.d0*(u*vn(1,n)+v*vn(2,n))
             u = qex(2,n) + vl*vn(1,n) 
             v = qex(3,n) + vl*vn(2,n) 
    c
             q(1,i,j) = rho
             q(2,i,j) = u*rho
             q(3,i,j) = v*rho
             q(4,i,j) = p*qex(5,n)+qex(6,n)+
         &        0.5d0*rho*(u**2 + v**2)
             q(5,i,j) = qex(5,n)
             q(6,i,j) = qex(6,n)
    c
     100  continue
    c
          return
          end
    c
    c     -----------------------------------------------------
    c
    c     Injection of conservative extrapolated values in local patch
    c
    c     =====================================================
          subroutine ip2meuex(q,mx,my,lb,ub,meqn,nc,idx,
         &     qex,xc,phi,vn,maux,auex,dx,time)
    c     =====================================================
    c
          implicit none
    c
          integer   mx, my, meqn, maux, nc, idx(2,nc), lb(2), 
         &     ub(2)
          double precision    q(meqn, mx, my), qex(meqn,nc), xc(2,nc), 
         &     phi(nc), vn(2,nc), auex(maux,nc), dx(2), time
    c
    c     Local variables
    c
          integer   i, j, n, stride, getindx
          double precision    rho, u, v, p, vl, gamma, gamma1, pinf
    c
          stride = (ub(1) - lb(1))/(mx-1)
    c
          do 100 n = 1, nc
    
             i = getindx(idx(1,n), lb(1), stride)
             j = getindx(idx(2,n), lb(2), stride)
    c
             rho = qex(1,n)
             u   = qex(2,n)       
             v   = qex(3,n)
             p   = qex(4,n)
    c
    c        # Prescribe normal velocity vector
             vl = u*vn(1,n)+v*vn(2,n)
             u = vl*vn(1,n) 
             v = vl*vn(2,n) 
    c
             q(1,i,j) = rho
             q(2,i,j) = u*rho
             q(3,i,j) = v*rho
             q(4,i,j) = p*qex(5,n)+qex(6,n)+
         &        0.5d0*rho*(u**2 + v**2)
             q(5,i,j) = qex(5,n)
             q(6,i,j) = qex(6,n)
    c
     100  continue
    c
          return
          end
    c
    

<