diff options
author | diener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a> | 2009-03-31 23:00:16 +0000 |
---|---|---|
committer | diener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a> | 2009-03-31 23:00:16 +0000 |
commit | 9fbf1f753b7927be6d888b46049953f36a1fe3f4 (patch) | |
tree | c5cccc75e8a9a8a840e7218bb7e41c9e07e1e65e /src/Coefficients_2.F90 | |
parent | 77d4fe21433a1d33867954de21247c196954ac35 (diff) |
Introduce a boolean parameter to switch of SBP near outer boundary. Instead
switch to progressively lower order centered stencil as the boundery is
approached, similar to what is done with the second order and upwind stencils.
git-svn-id: https://svn.cct.lsu.edu/repos/numrel/LSUThorns/SummationByParts/trunk@118 f69c4107-0314-4c4f-9ad4-17e986b73f4a
Diffstat (limited to 'src/Coefficients_2.F90')
-rw-r--r-- | src/Coefficients_2.F90 | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/Coefficients_2.F90 b/src/Coefficients_2.F90 new file mode 100644 index 0000000..122961b --- /dev/null +++ b/src/Coefficients_2.F90 @@ -0,0 +1,56 @@ +#include "cctk.h" +#include "cctk_Functions.h" +#include "cctk_Parameters.h" + +subroutine set_coeff_2 ( nsize, loc_order, bb, gsize, imin, imax, dd ) + + use All_Coeffs_mod + + implicit none + + DECLARE_CCTK_FUNCTIONS + DECLARE_CCTK_PARAMETERS + + CCTK_INT, intent(IN) :: nsize, loc_order + CCTK_INT, dimension(2), intent(IN) :: bb + CCTK_INT, intent(IN) :: gsize + CCTK_INT, dimension(nsize), intent(OUT) :: imin, imax + CCTK_REAL, dimension(nsize,nsize), intent(OUT) :: dd + + CCTK_REAL, dimension(1), save :: a + CCTK_REAL, dimension(1,1), save :: q + + CCTK_INT :: i, il, ir + + logical, save :: first = .true. + + if ( first ) then + call coeffs_1_2 ( a, q ) + first = .false. + end if + + dd = zero + imin = 0 + imax = -1 + + if ( bb(1) == 0 ) then + il = 1 + gsize + else + dd(1,1) = q(1,1); + imin(1) = 1; imax(1) = 1 + il = 2 + end if + if ( bb(2) == 0 ) then + ir = nsize - gsize + else + dd(nsize,nsize) = q(1,1) + imin(nsize) = nsize; imax(nsize) = nsize + ir = nsize - 1 + end if + do i = il, ir + dd(i-1,i) = -a(1); + dd(i+1,i) = a(1) + imin(i) = i-1; imax(i) = i+1 + end do + +end subroutine set_coeff_2 |