New module for interpolation.

This new module contains subroutines used to different kind of
interpolation. So far it is implemented only one subroutine used for
reconstruction of the left and right states from center values. This
interpolation has TVD property.
This commit is contained in:
Grzegorz Kowal 2008-12-08 20:53:29 -06:00
parent 9b946cb209
commit 5e611587e1
3 changed files with 102 additions and 10 deletions

93
src/interpolation.F90 Normal file
View File

@ -0,0 +1,93 @@
!!*****************************************************************************
!!
!! module: interpolation - subroutines for different kinds of interpolation
!!
!! Copyright (C) 2008 Grzegorz Kowal <kowal@astro.wisc.edu>
!!
!!*****************************************************************************
!!
!! This file is part of Godunov-AMR.
!!
!! Godunov-AMR is free software; you can redistribute it and/or modify
!! it under the terms of the GNU General Public License as published by
!! the Free Software Foundation; either version 3 of the License, or
!! (at your option) any later version.
!!
!! Godunov-AMR is distributed in the hope that it will be useful,
!! but WITHOUT ANY WARRANTY; without even the implied warranty of
!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
!! GNU General Public License for more details.
!!
!! You should have received a copy of the GNU General Public License
!! along with this program. If not, see <http://www.gnu.org/licenses/>.
!!
!!*****************************************************************************
!!
!
module interpolation
implicit none
contains
!
!===============================================================================
!
! reconstruct: subroutine for the reconstruction of the values at the right and
! left interfaces of cells from their cell centered representation
!
!===============================================================================
!
subroutine reconstruct(n, vx, vl, vr)
implicit none
! input/output arguments
!
integer , intent(in) :: n
real, dimension(n), intent(in) :: vx
real, dimension(n), intent(out) :: vl, vr
! local variables
!
integer :: i
real :: dv
real, dimension(n) :: ds, dvl, dvr
!
!------------------------------------------------------------------------------
!
! second order interpolation
!
dvl(1) = 0.0
dvr(n) = 0.0
do i = 1, n-1
dvr(i ) = vx(i+1) - vx(i)
dvl(i+1) = dvr(i)
enddo
do i = 1, n
ds (i) = dvr(i) * dvl(i)
if (ds(i) .gt. 0.0) then
dv = ds(i) / (dvr(i) + dvl(i))
vl(i) = vx(i) + dv
vr(i) = vx(i) - dv
else
vl(i) = vx(i)
vr(i) = vx(i)
endif
enddo
do i = 1, n-1
vr(i) = vr(i+1)
enddo
vr(n) = vx(n)
!-------------------------------------------------------------------------------
!
end subroutine reconstruct
!===============================================================================
!
end module

View File

@ -78,10 +78,10 @@ name = godunov-amr
default: $(name).x default: $(name).x
sources = blocks.F90 config.F90 driver.F90 error.F90 evolution.F90 io.F90 \ sources = blocks.F90 config.F90 driver.F90 error.F90 evolution.F90 \
mesh.F90 problem.F90 scheme.F90 timer.F90 interpolation.F90 io.F90 mesh.F90 problem.F90 scheme.F90 timer.F90
objects = blocks.o config.o driver.o error.o evolution.o io.o \ objects = blocks.o config.o driver.o error.o evolution.o \
mesh.o problem.o scheme.o timer.o interpolation.o io.o mesh.o problem.o scheme.o timer.o
files = $(sources) makefile make.default config.in license.txt hosts files = $(sources) makefile make.default config.in license.txt hosts
$(name).x: $(objects) $(name).x: $(objects)
@ -103,10 +103,11 @@ config.o : config.F90 error.o
driver.o : driver.F90 config.o evolution.o io.o mesh.o timer.o driver.o : driver.F90 config.o evolution.o io.o mesh.o timer.o
error.o : error.F90 error.o : error.F90
evolution.o : evolution.F90 blocks.o config.o mesh.o scheme.o evolution.o : evolution.F90 blocks.o config.o mesh.o scheme.o
interpolation.o : interpolation.F90
io.o : io.F90 blocks.o error.o io.o : io.F90 blocks.o error.o
mesh.o : mesh.F90 blocks.o config.o error.o problem.o mesh.o : mesh.F90 blocks.o config.o error.o problem.o
problem.o : problem.F90 blocks.o problem.o : problem.F90 blocks.o
scheme.o : scheme.F90 blocks.o config.o scheme.o : scheme.F90 blocks.o config.o interpolation.o
timer.o : timer.F90 timer.o : timer.F90
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------

View File

@ -188,7 +188,7 @@ module scheme
! !
subroutine hll(m, n, uc, f) subroutine hll(m, n, uc, f)
! use interpolation, only : reconstruct, point2avg use interpolation, only : reconstruct
implicit none implicit none
@ -205,8 +205,6 @@ module scheme
real, dimension(m,n) :: fl, fr, fx real, dimension(m,n) :: fl, fr, fx
real, dimension(n) :: cl, cr real, dimension(n) :: cl, cr
real :: al, ar, ap, div real :: al, ar, ap, div
integer, parameter, dimension(6) :: pos = (/ 1, 0, 0, 0, 1, 1 /)
! !
!---------------------------------------------------------------------- !----------------------------------------------------------------------
! !
@ -214,7 +212,7 @@ module scheme
! reconstruct left and right states of conserved variables ! reconstruct left and right states of conserved variables
! !
do p = 1, m do p = 1, m
! call reconstruct(n,uc(p,:),ul(p,:),ur(p,:),pos(p)) call reconstruct(n,uc(p,:),ul(p,:),ur(p,:))
enddo enddo
! calculate primitive variables ! calculate primitive variables
@ -230,7 +228,7 @@ module scheme
! reconstruct left and right states of primitive variables ! reconstruct left and right states of primitive variables
! !
do p = 1, m do p = 1, m
! call reconstruct(n,qc(p,:),ql(p,:),qr(p,:),pos(p)) call reconstruct(n,qc(p,:),ql(p,:),qr(p,:))
enddo enddo
! calculate conservative variables at states ! calculate conservative variables at states