aboutsummaryrefslogtreecommitdiff
path: root/src/call_up_derivs.c
diff options
context:
space:
mode:
authordiener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a>2006-04-10 15:10:43 +0000
committerdiener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a>2006-04-10 15:10:43 +0000
commit0c913f2c81ce7f1b10c89e38299badf23747763e (patch)
tree2aefb05f70fa447791d4523b910b750ee53656da /src/call_up_derivs.c
parent3aaf16cfccc2ad7b57344ddc37fd45e69f6b7ee5 (diff)
First attempt at upwinding SBP operators. Don't use yet. They will change
soon to be more flexible. git-svn-id: https://svn.cct.lsu.edu/repos/numrel/LSUThorns/SummationByParts/trunk@62 f69c4107-0314-4c4f-9ad4-17e986b73f4a
Diffstat (limited to 'src/call_up_derivs.c')
-rw-r--r--src/call_up_derivs.c206
1 files changed, 206 insertions, 0 deletions
diff --git a/src/call_up_derivs.c b/src/call_up_derivs.c
new file mode 100644
index 0000000..2189e3f
--- /dev/null
+++ b/src/call_up_derivs.c
@@ -0,0 +1,206 @@
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+
+#include "util_ErrorCodes.h"
+#include "util_Table.h"
+
+void DiffUpGv ( const CCTK_POINTER_TO_CONST cctkGH_, const CCTK_INT dir,
+ const CCTK_INT up, const CCTK_REAL *var, CCTK_REAL *dvar,
+ const CCTK_INT table_handle )
+{
+ cGH const * restrict const cctkGH = cctkGH_;
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_ARGUMENTS
+
+ CCTK_INT ni, nj, nk, gsize, ic, loc_order;
+ 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(up_deriv_gf_2_1)(const CCTK_REAL *var,
+ const CCTK_INT *ni,
+ const CCTK_INT *nj,
+ const CCTK_INT *nk,
+ const CCTK_INT *dir,
+ const CCTK_INT *bb,
+ const CCTK_INT *gsize,
+ const CCTK_REAL *delta,
+ const CCTK_INT *up,
+ CCTK_REAL *dvar);
+ void CCTK_FCALL CCTK_FNAME(up_deriv_gf_4_2)(const CCTK_REAL *var,
+ const CCTK_INT *ni,
+ const CCTK_INT *nj,
+ const CCTK_INT *nk,
+ const CCTK_INT *dir,
+ const CCTK_INT *bb,
+ const CCTK_INT *gsize,
+ const CCTK_REAL *delta,
+ const CCTK_INT *up,
+ CCTK_REAL *dvar);
+ void CCTK_FCALL CCTK_FNAME(up_deriv_gf_6_3_opt)(const CCTK_REAL *var,
+ const CCTK_INT *ni,
+ const CCTK_INT *nj,
+ const CCTK_INT *nk,
+ const CCTK_INT *dir,
+ const CCTK_INT *bb,
+ const CCTK_INT *gsize,
+ const CCTK_REAL *delta,
+ const CCTK_INT *up,
+ CCTK_REAL *dvar);
+ void CCTK_FCALL CCTK_FNAME(up_deriv_gf_8_4_opt)(const CCTK_REAL *var,
+ const CCTK_INT *ni,
+ const CCTK_INT *nj,
+ const CCTK_INT *nk,
+ const CCTK_INT *dir,
+ const CCTK_INT *bb,
+ const CCTK_INT *gsize,
+ const CCTK_REAL *delta,
+ const CCTK_INT *up,
+ CCTK_REAL *dvar);
+
+
+ ni = cctk_lsh[0]; nj = cctk_lsh[1]; nk = cctk_lsh[2];
+
+ 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;
+ }
+
+ 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);
+ 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);
+ 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);
+ 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;
+ }
+ default:
+ CCTK_WARN (0, "Wrong direction specified");
+ }
+
+ if ( CCTK_Equals(norm_type,"Diagonal") ) {
+ if ( CCTK_Equals(operator_type,"Minimal Bandwidth") ) {
+ switch(loc_order) {
+ case 2: {
+ CCTK_FNAME(up_deriv_gf_2_1)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,&up,dvar);
+ break;
+ }
+ case 4: {
+ CCTK_FNAME(up_deriv_gf_4_2)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,&up,dvar);
+ break;
+ }
+ default:
+ CCTK_WARN (0, "Unknown stencil specified");
+ }
+ } else {
+ switch(loc_order) {
+ case 2: {
+ CCTK_FNAME(up_deriv_gf_2_1)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,&up,dvar);
+ break;
+ }
+ case 4: {
+ CCTK_FNAME(up_deriv_gf_4_2)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,&up,dvar);
+ break;
+ }
+ case 6: {
+ CCTK_FNAME(up_deriv_gf_6_3_opt)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,&up,dvar);
+ break;
+ }
+ case 8: {
+ CCTK_FNAME(up_deriv_gf_8_4_opt)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,&up,dvar);
+ break;
+ }
+ default:
+ CCTK_WARN (0, "Unknown stencil specified");
+ }
+ }
+ } else {
+ if ( CCTK_Equals(operator_type,"Minimal Bandwidth") ) {
+ switch(loc_order) {
+/* case 4: {
+ CCTK_FNAME(deriv_gf_4_3)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,dvar);
+ break;
+ }
+ case 6: {
+ CCTK_FNAME(deriv_gf_6_5)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,dvar);
+ break;
+ } */
+ default:
+ CCTK_WARN (0, "Unknown stencil specified");
+ }
+ } else {
+ switch(loc_order) {
+/* case 4: {
+ CCTK_FNAME(deriv_gf_4_3_opt)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,dvar);
+ break;
+ }
+ case 6: {
+ CCTK_FNAME(deriv_gf_6_5_opt)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,dvar);
+ break;
+ } */
+ default:
+ CCTK_WARN (0, "Unknown stencil specified");
+ }
+ }
+ }
+}