diff options
author | diener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a> | 2010-03-19 22:24:27 +0000 |
---|---|---|
committer | diener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a> | 2010-03-19 22:24:27 +0000 |
commit | 96a104f0d0703cbe827752189c5d7895f9ca4519 (patch) | |
tree | 7ce5e8835e7263393ac802432bff407dc17ac804 /src | |
parent | b041a5952a08c089d52a4c483fb27bec71b5061b (diff) |
Add a routine to return the size of the boundary region, i.e. the region
where centered finite differences are not performed. This is necessary
in order to mix SBP and hard coded stencils in CTGamma.
git-svn-id: https://svn.cct.lsu.edu/repos/numrel/LSUThorns/SummationByParts/trunk@120 f69c4107-0314-4c4f-9ad4-17e986b73f4a
Diffstat (limited to 'src')
-rw-r--r-- | src/get_boundary_width.c | 104 | ||||
-rw-r--r-- | src/make.code.defn | 3 |
2 files changed, 106 insertions, 1 deletions
diff --git a/src/get_boundary_width.c b/src/get_boundary_width.c new file mode 100644 index 0000000..3c2686f --- /dev/null +++ b/src/get_boundary_width.c @@ -0,0 +1,104 @@ +#include <assert.h> +#include <stdio.h> + +#include "cctk.h" +#include "cctk_Parameters.h" +#include "cctk_Arguments.h" + +#include "util_ErrorCodes.h" +#include "util_Table.h" + +#include "stencil.h" + + +void Get_Bound_Width ( const CCTK_POINTER_TO_CONST cctkGH_, CCTK_INT *bsize, + const CCTK_INT table_handle ) +{ + cGH const * restrict const cctkGH = cctkGH_; + DECLARE_CCTK_PARAMETERS + DECLARE_CCTK_ARGUMENTS + + int onesided[6]; + CCTK_INT loc_order; + CCTK_INT gsize[6]; + int nelements; + + SBP_determine_onesided_stencil (cctkGH, onesided); + + if ( table_handle >=0 ) { + nelements = Util_TableGetInt ( table_handle, &loc_order, "order" ); + if ( nelements == UTIL_ERROR_TABLE_NO_SUCH_KEY ) { + loc_order = order; + } else if ( nelements != 1) { + CCTK_WARN (0, "The options table has an entry \"order\", but it does not have the right properties"); + } + } else { + loc_order = order; + } + + gsize[0] = cctk_nghostzones[0]; + gsize[1] = cctk_nghostzones[0]; + gsize[2] = cctk_nghostzones[1]; + gsize[3] = cctk_nghostzones[1]; + gsize[4] = cctk_nghostzones[2]; + gsize[5] = cctk_nghostzones[2]; + + if ( CCTK_Equals(norm_type,"Diagonal") ) { + if ( sbp_1st_deriv ) { + switch(loc_order) { + case 2: { + for (int d = 0; d<6; d++) bsize[d] = (onesided[d])?1:gsize[d]; + break; + } + case 4: { + for (int d = 0; d<6; d++) bsize[d] = (onesided[d])?4:gsize[d]; + break; + } + case 6: { + for (int d = 0; d<6; d++) bsize[d] = (onesided[d])?6:gsize[d]; + break; + } + case 8: { + for (int d = 0; d<6; d++) bsize[d] = (onesided[d])?8:gsize[d]; + break; + } + default: + CCTK_WARN (0, "Unknown stencil specified"); + } + } else { + switch(loc_order) { + case 2: { + for (int d = 0; d<6; d++) bsize[d] = (onesided[d])?1:gsize[d]; + break; + } + case 4: { + for (int d = 0; d<6; d++) bsize[d] = (onesided[d])?2:gsize[d]; + break; + } + case 6: { + for (int d = 0; d<6; d++) bsize[d] = (onesided[d])?3:gsize[d]; + break; + } + case 8: { + for (int d = 0; d<6; d++) bsize[d] = (onesided[d])?4:gsize[d]; + break; + } + default: + CCTK_WARN (0, "Unknown 1st derivative stencil specified"); + } + } + } else { + switch(loc_order) { + case 4: { + for (int d = 0; d<6; d++) bsize[d] = (onesided[d])?5:gsize[d]; + break; + } + case 6: { + for (int d = 0; d<6; d++) bsize[d] = (onesided[d])?7:gsize[d]; + break; + } + default: + CCTK_WARN (0, "Unknown stencil specified"); + } + } +} diff --git a/src/make.code.defn b/src/make.code.defn index 7fa5829..9536e0f 100644 --- a/src/make.code.defn +++ b/src/make.code.defn @@ -70,7 +70,8 @@ SRCS = call_derivs.c \ Coefficients_6_5_min_err_coeff.F90 \ Poisoning.F90 \ get_offset.c \ - stencil.c + stencil.c \ + get_boundary_width.c # Subdirectories containing source files SUBDIRS = |