aboutsummaryrefslogtreecommitdiff
path: root/src/call_derivs.c
diff options
context:
space:
mode:
authordiener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a>2006-02-13 19:22:04 +0000
committerdiener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a>2006-02-13 19:22:04 +0000
commitdf7c02eb3b05ab5360a62cf9da3c22df8c9c83a6 (patch)
tree1f0eea57f27a9f881fa69f56965bd93d47fc8028 /src/call_derivs.c
parent6c9e944df63221316b029d28b7cee534819da525 (diff)
Only use one sided finite differences near multipatch boundaries. Should fix
the problems we have with periodic boundary conditions. Also added the missing declarations of fortran routines with Kreiss-Oliger type dissipation for certain cases. git-svn-id: https://svn.cct.lsu.edu/repos/numrel/LSUThorns/SummationByParts/trunk@58 f69c4107-0314-4c4f-9ad4-17e986b73f4a
Diffstat (limited to 'src/call_derivs.c')
-rw-r--r--src/call_derivs.c48
1 files changed, 45 insertions, 3 deletions
diff --git a/src/call_derivs.c b/src/call_derivs.c
index c4a0fb8..a49930c 100644
--- a/src/call_derivs.c
+++ b/src/call_derivs.c
@@ -17,6 +17,9 @@ void DiffGv ( const CCTK_POINTER_TO_CONST cctkGH_, const CCTK_INT dir,
CCTK_REAL delta;
CCTK_INT ierr;
CCTK_INT lsh[3], bbox[6], bb[2], nghostzones[3];
+ CCTK_INT symtable, pen_sym_handle;
+ CCTK_INT symbnd[6];
+
int nelements;
void CCTK_FCALL CCTK_FNAME(deriv_gf_2_1)(const CCTK_REAL *var,
const CCTK_INT *ni,
@@ -123,22 +126,61 @@ void DiffGv ( const CCTK_POINTER_TO_CONST cctkGH_, const CCTK_INT dir,
loc_order = order;
}
+ symtable = SymmetryTableHandleForGrid (cctkGH);
+ if (symtable<0) {
+ CCTK_WARN(0,"symtable is out of bounds");
+ }
+
+ ierr = Util_TableGetIntArray (symtable, 6, symbnd, "symmetry_handle");
+ if (ierr!=6) {
+ CCTK_WARN(0,"Util_TableGetIntArray returned error");
+ }
+
+ pen_sym_handle = SymmetryHandleOfName ( "multipatch" );
+
switch(dir) {
case 0: {
delta = CCTK_DELTA_SPACE(0);
- bb[0] = cctk_bbox[0]; bb[1] = cctk_bbox[1];
+ if ( symbnd[0] == pen_sym_handle && cctk_bbox[0] == 1 ) {
+ bb[0] = 1;
+ } else {
+ bb[0] = 0;
+ }
+ if ( symbnd[1] == pen_sym_handle && cctk_bbox[1] == 1 ) {
+ bb[1] = 1;
+ } else {
+ bb[1] = 0;
+ }
gsize = cctk_nghostzones[0];
break;
}
case 1: {
delta = CCTK_DELTA_SPACE(1);
- bb[0] = cctk_bbox[2]; bb[1] = cctk_bbox[3];
+ if ( symbnd[2] == pen_sym_handle && cctk_bbox[2] == 1) {
+ bb[0] = 1;
+ } else {
+ bb[0] = 0;
+ }
+ if ( symbnd[3] == pen_sym_handle && cctk_bbox[3] == 1) {
+ bb[1] = 1;
+ } else {
+ bb[1] = 0;
+ }
gsize = cctk_nghostzones[1];
break;
}
case 2: {
delta = CCTK_DELTA_SPACE(2);
- bb[0] = cctk_bbox[4]; bb[1] = cctk_bbox[5];
+ if ( symbnd[4] == pen_sym_handle && cctk_bbox[4] == 1) {
+ bb[0] = 1;
+ } else {
+ bb[0] = 0;
+ }
+ if ( symbnd[4] == pen_sym_handle && cctk_bbox[5] == 1) {
+ bb[1] = 1;
+ } else {
+ bb[1] = 0;
+ }
gsize = cctk_nghostzones[2];
break;
}