• VTF
  • FSI
  • AMROC
  • SFC
  • Motion
  • STLIB
  • Main Page
  • src/1d/operators/prolong1.f

    c-----------------------------------------------------------------------
    c     One-dimensional prolongation operator for AMROC.
    c     A fine grid value is replaced by the value of a linear function
    c     through the neighbouring coarse grid values at the center
    c     of the particular fine grid cell.
    c
    c     Interface:
    c        mfx := shape of fine grid
    c        mcx := shape of coarse grid
    c
    c        uf() := fine grid
    c        uc() := coarse grid
    c
    c        lbc(1) := lower bound for coarse grid
    c        ubc(1) := upper bound for coarse grid
    c        lbf(1) := lower bound for fine grid
    c        ubf(1) := upper bound for fine grid
    c        lbr(1) := lower bound for region prolongation desired
    c        ufr(1) := upper bound for region prolongation desired
    c        shaper(1) := shape of region prolongation desired
    c
    c     Copyright (C) 2002 Ralf Deiterding
    c     Brandenburgische Universitaet Cottbus
    c
    c     Copyright (C) 2003-2007 California Institute of Technology
    c     Ralf Deiterding, ralf@cacr.caltech.edu
    c-----------------------------------------------------------------------
    
          subroutine prolong1(uc,mcx,lbc,ubc,
         &     uf,mfx,lbf,ubf,
         &     lbr,ubr,shaper,meqn,mbc)
    
          implicit none
          integer meqn, mbc, mcx, mfx, shaper(1)
          double precision uf(meqn,mfx), uc(meqn,mcx)
          
          integer  lbf(1), ubf(1), 
         &     lbc(1), ubc(1), 
         &     lbr(1), ubr(1), 
         &     getindx
    
    c      Local variables
    
          integer   i, m, ic, mic,  
         &     stridec, stridef,
         &     ifine, ics
          
          double precision eta1
    
    c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    c      See definition of member-function extents() in BBox.h 
    c      for calculation of stride
    c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
          stridec = (ubc(1) - lbc(1))/(mcx-1)
          stridef = (ubf(1) - lbf(1))/(mfx-1)
          
    c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    c      Prolongation region is defined on the domain of the fine grid. 
    c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
          do 10 i=lbr(1), ubr(1), stridef
             ifine = getindx(i, lbf(1), stridef)
             ics = getindx(i, lbc(1), stridec)
             
             ic = i - lbc(1)
             mic = ic - (ic/stridec)*stridec
             if(mic .lt. stridec*0.5) then
                ics = ics - 1
             end if
             if(ics+1.gt.mcx .or. ics.lt.1 .or. 
         &        ifine.gt.mfx .or. ifine.lt.1) goto 10
    
             ic = ic + stridec*0.5
             mic = ic - (ic/stridec)*stridec
             eta1 = (mic+0.5d0*stridef) / stridec
    
             do 20 m=1, meqn
                uf(m,ifine) = (1.d0-eta1)*uc(m,ics  ) + 
         &                          eta1 *uc(m,ics+1)
     20      continue        
     10   continue
    
          return
          end
    
    
    
    

<