diff options
author | diener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a> | 2004-10-06 20:07:54 +0000 |
---|---|---|
committer | diener <diener@f69c4107-0314-4c4f-9ad4-17e986b73f4a> | 2004-10-06 20:07:54 +0000 |
commit | 9928cd0a8e8683d47e385b38b7723ed7ede34b9e (patch) | |
tree | 148c7e428624d676bd41aecabc9eda03a3efbc5d | |
parent | 9d639bc123f2c23f5db7c436ec63e21c07e8746b (diff) |
Moved call_derivs.c to call_derivs_name.c. Created a new differncing routine
(after Erik explained to me that CCTK_ARGUMENTS can be accessed even though
they are not passed into the routine) that is called with the variables
themselves and not their names. These are provided by the aliased function
Diff_gf, so now the x-derivatives of rho can be found with the call:
Diff_gv ( cctkGH, 0, rho, drhox );
Also made the determination of the gridspacing use CCTK_DELTA_SPACE (now that I know how to do it) so the routines should now also work with mesh-refinement.
git-svn-id: https://svn.cct.lsu.edu/repos/numrel/LSUThorns/SummationByParts/trunk@4 f69c4107-0314-4c4f-9ad4-17e986b73f4a
-rw-r--r-- | interface.ccl | 6 | ||||
-rw-r--r-- | src/call_derivs.c | 75 | ||||
-rw-r--r-- | src/call_derivs_name.c | 105 |
3 files changed, 140 insertions, 46 deletions
diff --git a/interface.ccl b/interface.ccl index c306db4..9eef8aa 100644 --- a/interface.ccl +++ b/interface.ccl @@ -19,6 +19,12 @@ SUBROUTINE Diff_gf ( CCTK_POINTER IN cctkGH, \ CCTK_STRING IN dvar_name ) PROVIDES FUNCTION Diff_gf WITH DiffGf LANGUAGE C +SUBROUTINE Diff_gv ( CCTK_POINTER IN cctkGH, \ + CCTK_INT IN dir, \ + CCTK_REAL IN ARRAY var, \ + CCTK_REAL OUT ARRAY dvar ) +PROVIDES FUNCTION Diff_gv WITH DiffGv LANGUAGE C + CCTK_INT FUNCTION GetDomainSpecification \ (CCTK_INT IN size, \ CCTK_REAL OUT ARRAY physical_min, \ diff --git a/src/call_derivs.c b/src/call_derivs.c index c696e4e..30c280a 100644 --- a/src/call_derivs.c +++ b/src/call_derivs.c @@ -1,91 +1,74 @@ #include "cctk.h" #include "cctk_Parameters.h" +#include "cctk_Arguments.h" #include <assert.h> -void DiffGf ( const CCTK_POINTER cctkGH, const CCTK_INT dir, - const char *var_name, const char *dvar_name ) +void DiffGv ( const CCTK_POINTER cctkGH_, const CCTK_INT dir, + const CCTK_REAL *var, CCTK_REAL *dvar ) { - CCTK_REAL *var, *dvar; + cGH const * restrict const cctkGH = cctkGH_; + DECLARE_CCTK_PARAMETERS + DECLARE_CCTK_ARGUMENTS + CCTK_INT ni, nj, nk, gsize, ic; CCTK_REAL delta; - CCTK_REAL phys_min[3], phys_max[3]; - CCTK_REAL int_min[3], int_max[3]; - CCTK_REAL ext_min[3], ext_max[3]; - CCTK_REAL spacing[3]; CCTK_INT ierr; CCTK_INT lsh[3], bbox[6], bb[2], nghostzones[3]; - void CCTK_FCALL CCTK_FNAME(deriv_gf_2_1)(CCTK_REAL *var, const CCTK_INT *ni, - const CCTK_INT *nj, const CCTK_INT *nk, + void CCTK_FCALL CCTK_FNAME(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, CCTK_REAL *dvar); - void CCTK_FCALL CCTK_FNAME(deriv_gf_4_2)(CCTK_REAL *var, const CCTK_INT *ni, - const CCTK_INT *nj, const CCTK_INT *nk, + void CCTK_FCALL CCTK_FNAME(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, CCTK_REAL *dvar); - void CCTK_FCALL CCTK_FNAME(deriv_gf_6_3)(CCTK_REAL *var, const CCTK_INT *ni, - const CCTK_INT *nj, const CCTK_INT *nk, + void CCTK_FCALL CCTK_FNAME(deriv_gf_6_3)(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, CCTK_REAL *dvar); - DECLARE_CCTK_PARAMETERS - if (CCTK_GrouplshVN(cctkGH, 3, lsh, var_name) < 0) - { - CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING, - "Error getting local size of grid for variable '%s'",var_name); - } - if (CCTK_GroupbboxVN(cctkGH, 6, bbox, var_name) < 0) - { - CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING, - "Error getting bounding box for variable '%s'",var_name); - } - if (CCTK_GroupnghostzonesVN(cctkGH, 3, nghostzones, var_name) < 0) - { - CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING, - "Error getting number of ghostzones for variable '%s'",var_name); - } - - ni = lsh[0]; nj = lsh[1]; nk = lsh[2]; + ni = cctk_lsh[0]; nj = cctk_lsh[1]; nk = cctk_lsh[2]; - ierr = GetDomainSpecification ( 3, phys_min, phys_max, int_min, int_max, - ext_min, ext_max, spacing ); - switch(dir) { case 0: { - delta = spacing[0]; - bb[0] = bbox[0]; bb[1] = bbox[1]; - gsize = nghostzones[0]; + delta = CCTK_DELTA_SPACE(0); + bb[0] = cctk_bbox[0]; bb[1] = cctk_bbox[1]; + gsize = cctk_nghostzones[0]; break; } case 1: { - delta = spacing[1]; - bb[0] = bbox[2]; bb[1] = bbox[3]; - gsize = nghostzones[1]; + delta = CCTK_DELTA_SPACE(1); + bb[0] = cctk_bbox[2]; bb[1] = cctk_bbox[3]; + gsize = cctk_nghostzones[1]; break; } case 2: { - delta = spacing[2]; - bb[0] = bbox[4]; bb[1] = bbox[5]; - gsize = nghostzones[2]; + delta = CCTK_DELTA_SPACE(2); + bb[0] = cctk_bbox[4]; bb[1] = cctk_bbox[5]; + gsize = cctk_nghostzones[2]; break; } default: assert(0); } - var = (CCTK_REAL *)(CCTK_VarDataPtr(cctkGH,0,var_name)); - dvar = (CCTK_REAL *)(CCTK_VarDataPtr(cctkGH,0,dvar_name)); - switch(order) { case 2: { CCTK_FNAME(deriv_gf_2_1)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,dvar); diff --git a/src/call_derivs_name.c b/src/call_derivs_name.c new file mode 100644 index 0000000..c696e4e --- /dev/null +++ b/src/call_derivs_name.c @@ -0,0 +1,105 @@ +#include "cctk.h" +#include "cctk_Parameters.h" + +#include <assert.h> + +void DiffGf ( const CCTK_POINTER cctkGH, const CCTK_INT dir, + const char *var_name, const char *dvar_name ) +{ + CCTK_REAL *var, *dvar; + CCTK_INT ni, nj, nk, gsize, ic; + CCTK_REAL delta; + CCTK_REAL phys_min[3], phys_max[3]; + CCTK_REAL int_min[3], int_max[3]; + CCTK_REAL ext_min[3], ext_max[3]; + CCTK_REAL spacing[3]; + CCTK_INT ierr; + CCTK_INT lsh[3], bbox[6], bb[2], nghostzones[3]; + void CCTK_FCALL CCTK_FNAME(deriv_gf_2_1)(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, + CCTK_REAL *dvar); + void CCTK_FCALL CCTK_FNAME(deriv_gf_4_2)(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, + CCTK_REAL *dvar); + void CCTK_FCALL CCTK_FNAME(deriv_gf_6_3)(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, + CCTK_REAL *dvar); + DECLARE_CCTK_PARAMETERS + + + if (CCTK_GrouplshVN(cctkGH, 3, lsh, var_name) < 0) + { + CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Error getting local size of grid for variable '%s'",var_name); + } + if (CCTK_GroupbboxVN(cctkGH, 6, bbox, var_name) < 0) + { + CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Error getting bounding box for variable '%s'",var_name); + } + if (CCTK_GroupnghostzonesVN(cctkGH, 3, nghostzones, var_name) < 0) + { + CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Error getting number of ghostzones for variable '%s'",var_name); + } + + ni = lsh[0]; nj = lsh[1]; nk = lsh[2]; + + ierr = GetDomainSpecification ( 3, phys_min, phys_max, int_min, int_max, + ext_min, ext_max, spacing ); + + switch(dir) { + case 0: { + delta = spacing[0]; + bb[0] = bbox[0]; bb[1] = bbox[1]; + gsize = nghostzones[0]; + break; + } + case 1: { + delta = spacing[1]; + bb[0] = bbox[2]; bb[1] = bbox[3]; + gsize = nghostzones[1]; + break; + } + case 2: { + delta = spacing[2]; + bb[0] = bbox[4]; bb[1] = bbox[5]; + gsize = nghostzones[2]; + break; + } + default: + assert(0); + } + + var = (CCTK_REAL *)(CCTK_VarDataPtr(cctkGH,0,var_name)); + dvar = (CCTK_REAL *)(CCTK_VarDataPtr(cctkGH,0,dvar_name)); + + switch(order) { + case 2: { + CCTK_FNAME(deriv_gf_2_1)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,dvar); + break; + } + case 4: { + CCTK_FNAME(deriv_gf_4_2)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,dvar); + break; + } + case 6: { + CCTK_FNAME(deriv_gf_6_3)(var,&ni,&nj,&nk,&dir,bb,&gsize,&delta,dvar); + break; + } + default: + assert(0); + } +} |