aboutsummaryrefslogtreecommitdiff
path: root/src/get_coeffs.c
diff options
context:
space:
mode:
authordiener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a>2005-02-23 17:51:10 +0000
committerdiener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a>2005-02-23 17:51:10 +0000
commitf3222ee3543e8a837647d830f19d3ecd7639f149 (patch)
tree73903f4c267ca33598693f33f7d070ded0d68044 /src/get_coeffs.c
parent0615acc9c9fb001ac6413ef09b437cba68f8dca4 (diff)
Routines for getting the coefficients for the various derivatives. By request from Bela.
git-svn-id: https://svn.cct.lsu.edu/repos/numrel/LSUThorns/SummationByParts/trunk@23 f69c4107-0314-4c4f-9ad4-17e986b73f4a
Diffstat (limited to 'src/get_coeffs.c')
-rw-r--r--src/get_coeffs.c135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/get_coeffs.c b/src/get_coeffs.c
new file mode 100644
index 0000000..0d8e365
--- /dev/null
+++ b/src/get_coeffs.c
@@ -0,0 +1,135 @@
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+#include "util_Table.h"
+#include <stdio.h>
+
+#include <assert.h>
+
+void DiffCoeff ( const CCTK_POINTER_TO_CONST cctkGH_, const CCTK_INT dir,
+ const CCTK_INT nsize, CCTK_INT *imin, CCTK_INT *imax,
+ CCTK_REAL *q, const CCTK_INT table_handle )
+{
+ cGH const * restrict const cctkGH = cctkGH_;
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_ARGUMENTS
+
+ CCTK_INT ni, nj, nk, gsize, loc_order;
+ CCTK_INT ierr;
+ int nelements;
+ CCTK_INT lsh[3], bbox[6], bb[2], nghostzones[3];
+ void CCTK_FCALL CCTK_FNAME(set_coeff_2_1)(const CCTK_INT *nsize,
+ const CCTK_INT *loc_order,
+ const CCTK_INT *bb,
+ const CCTK_INT *gsize,
+ CCTK_INT *imin,
+ CCTK_INT *imax,
+ CCTK_REAL *q);
+ void CCTK_FCALL CCTK_FNAME(set_coeff_4_2)(const CCTK_INT *nsize,
+ const CCTK_INT *loc_order,
+ const CCTK_INT *bb,
+ const CCTK_INT *gsize,
+ CCTK_INT *imin,
+ CCTK_INT *imax,
+ CCTK_REAL *q);
+ void CCTK_FCALL CCTK_FNAME(set_coeff_6_3)(const CCTK_INT *nsize,
+ const CCTK_INT *loc_order,
+ const CCTK_INT *bb,
+ const CCTK_INT *gsize,
+ CCTK_INT *imin,
+ CCTK_INT *imax,
+ CCTK_REAL *q);
+ void CCTK_FCALL CCTK_FNAME(set_coeff_8_4)(const CCTK_INT *nsize,
+ const CCTK_INT *loc_order,
+ const CCTK_INT *bb,
+ const CCTK_INT *gsize,
+ CCTK_INT *imin,
+ CCTK_INT *imax,
+ CCTK_REAL *q);
+ void CCTK_FCALL CCTK_FNAME(set_coeff_4_3)(const CCTK_INT *nsize,
+ const CCTK_INT *loc_order,
+ const CCTK_INT *bb,
+ const CCTK_INT *gsize,
+ CCTK_INT *imin,
+ CCTK_INT *imax,
+ CCTK_REAL *q);
+ void CCTK_FCALL CCTK_FNAME(set_coeff_6_5)(const CCTK_INT *nsize,
+ const CCTK_INT *loc_order,
+ const CCTK_INT *bb,
+ const CCTK_INT *gsize,
+ CCTK_INT *imin,
+ CCTK_INT *imax,
+ CCTK_REAL *q);
+
+ ni = cctk_lsh[0]; nj = cctk_lsh[1]; nk = cctk_lsh[2];
+
+ if ( table_handle >=0 ) {
+ nelements = Util_TableGetInt ( table_handle, &loc_order, "order" );
+ assert(nelements>0);
+ } else {
+ loc_order = order;
+ }
+// printf("loc_order = %d\n",loc_order);
+// printf("dir = %d, nsize = %d\n",dir,nsize);
+
+
+ switch(dir) {
+ case 0: {
+ assert(nsize==ni);
+ bb[0] = cctk_bbox[0]; bb[1] = cctk_bbox[1];
+ gsize = cctk_nghostzones[0];
+ break;
+ }
+ case 1: {
+ assert(nsize==nj);
+ bb[0] = cctk_bbox[2]; bb[1] = cctk_bbox[3];
+ gsize = cctk_nghostzones[1];
+ break;
+ }
+ case 2: {
+ assert(nsize==nk);
+ bb[0] = cctk_bbox[4]; bb[1] = cctk_bbox[5];
+ gsize = cctk_nghostzones[2];
+ break;
+ }
+ default:
+ assert(0);
+ }
+// printf("bbox = [%d,%d], gsize = %d\n",bb[0],bb[1],gsize);
+
+ if ( CCTK_Equals(norm_type,"Diagonal") ) {
+ switch(loc_order) {
+ case 2: {
+ CCTK_FNAME(set_coeff_2_1)(&nsize,&loc_order,bb,&gsize,imin,imax,q);
+ break;
+ }
+ case 4: {
+ CCTK_FNAME(set_coeff_4_2)(&nsize,&loc_order,bb,&gsize,imin,imax,q);
+ break;
+ }
+ case 6: {
+ CCTK_FNAME(set_coeff_6_3)(&nsize,&loc_order,bb,&gsize,imin,imax,q);
+ break;
+ }
+ case 8: {
+ CCTK_FNAME(set_coeff_8_4)(&nsize,&loc_order,bb,&gsize,imin,imax,q);
+ break;
+ }
+ default:
+ assert(0);
+ }
+ } else {
+ switch(loc_order) {
+ case 4: {
+ CCTK_FNAME(set_coeff_4_3)(&nsize,&loc_order,bb,&gsize,imin,imax,q);
+ break;
+ }
+ case 6: {
+ CCTK_FNAME(set_coeff_6_5)(&nsize,&loc_order,bb,&gsize,imin,imax,q);
+ break;
+ }
+ default:
+ assert(0);
+ }
+ }
+}