diff options
author | diener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a> | 2006-02-13 19:22:04 +0000 |
---|---|---|
committer | diener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a> | 2006-02-13 19:22:04 +0000 |
commit | df7c02eb3b05ab5360a62cf9da3c22df8c9c83a6 (patch) | |
tree | 1f0eea57f27a9f881fa69f56965bd93d47fc8028 /src/call_derivs.c | |
parent | 6c9e944df63221316b029d28b7cee534819da525 (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.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; } |