diff options
Diffstat (limited to 'src/call_derivs.c')
-rw-r--r-- | src/call_derivs.c | 48 |
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; } |