aboutsummaryrefslogtreecommitdiff
path: root/src/Coefficients_2.F90
diff options
context:
space:
mode:
authordiener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a>2009-03-31 23:00:16 +0000
committerdiener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a>2009-03-31 23:00:16 +0000
commit9fbf1f753b7927be6d888b46049953f36a1fe3f4 (patch)
treec5cccc75e8a9a8a840e7218bb7e41c9e07e1e65e /src/Coefficients_2.F90
parent77d4fe21433a1d33867954de21247c196954ac35 (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.F9056
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